develop
asamoukin 16 years ago
parent 442b937e99
commit 24d929c6a2

@ -38,7 +38,7 @@ import tty
import termios
Version = "calculate-server 0.0.1"
Version = "calculate-server 0.0.1_beta"
tr = cl_base.lang()
tr.setLanguage(sys.modules[__name__])
@ -171,6 +171,20 @@ class shareLdap(imp_cl_err, imp_cl_xml, imp_cl_help, imp_cl_smcon):
# DN сервисов относительно базового
self.ServicesDN = "ou=Services"
def stringIsJpeg(self, string):
"""Определяет является ли строка jpeg изображением"""
if len(string)<8:
return False
FD = cStringIO.StringIO(string)
isJpeg = False
FD.seek(0, 0)
(firstByte, secondByte) = FD.read(2)
if (ord(firstByte) == 0xff and ord(secondByte) == 0xd8):
(firstByte, secondByte) = FD.read(2)
if (ord(firstByte) == 0xff and ord(secondByte) == 0xe0):
isJpeg = True
return isJpeg
def setDaemonAutostart(self, daemon):
"""Прописывает демона в автозагрузку"""
execStr = "rc-update add %s default" %daemon
@ -293,6 +307,18 @@ class shareLdap(imp_cl_err, imp_cl_xml, imp_cl_help, imp_cl_smcon):
_("service is not stopped"))
flagError = True
break
listProcess = self.execProg("ps ax",False,False)
killPid = []
for process in listProcess:
if "erlang" in process:
killPid.append(process.split(" ")[0])
if killPid:
textLine = self.execProg("kill %s" %" ".join(killPid))
if not (textLine == None):
self.printERROR(_("Can not 'kill %s'")\
%" ".join(killPid))
flagError = True
break
elif self.getRunService(service):
stopService = service
textLine = self.execProg("/etc/init.d/%s stop" %(stopService))
@ -410,6 +436,34 @@ class shareLdap(imp_cl_err, imp_cl_xml, imp_cl_help, imp_cl_smcon):
"""Список уникальных элементов из списка не уникальных"""
return list(set(lst))
def setJpegPhotoUser(self, userName, photoPath, attr="uid"):
"""Добавляем jpeg фотографию пользователя в LDAP"""
try:
FD = open(photoPath)
photoData = FD.read()
FD.close()
except:
self.printERROR(_("Not open file") + ": " + str(photoPath))
return False
searchUser = self.searchLdapDN(userName, self.relUsersDN, attr)
if not searchUser:
self.printERROR(_("User") + " " + str(userName) + " "+\
_("not found"))
return False
modAttrs = []
if not self.stringIsJpeg(photoData):
self.printERROR(_("File") + " " + str(photoPath) + " " +\
_("is not jpeg"))
return False
if searchUser[0][0][1].has_key('jpegPhoto'):
modAttrs.append((ldap.MOD_REPLACE, 'jpegPhoto', photoData))
else:
modAttrs.append((ldap.MOD_ADD, 'jpegPhoto', photoData))
userDN = self.addDN("%s=%s"%(attr,userName),self.relUsersDN)
if not self.modAttrsDN(userDN, modAttrs):
return False
return True
def addDN(self, *arg):
"""Складывает текстовые элементы DN"""
DNs = []
@ -958,7 +1012,7 @@ class servUnix(shareLdap):
return findUsers
@adminConnectLdap
def addGroupUnixServer(self, groupName, options):
def addGroupUnixServer(self, groupName, options, printSuccess=True):
"""Добавляет группу пользователей Unix"""
# Если группа существует выходим без ошибки
flagErrGrExist = True
@ -994,13 +1048,13 @@ class servUnix(shareLdap):
try:
int(gid)
except:
self.printERROR(_("gid is not number") + " ...")
self.printERROR(_("GID must be is number") + " ...")
return False
if self.searchGroupGid(gid):
self.printERROR(_("gid is found in") + " /etc/group ...")
self.printERROR(_("GID is found in") + " /etc/group ...")
return False
if self.searchUnixGid(gid):
self.printERROR(_("gid is found in Unix service") + " ...")
self.printERROR(_("GID is found in Unix service") + " ...")
return False
self.clVars.Set("soft_ldap_group_id", gid)
# Коментарий к группе
@ -1022,7 +1076,8 @@ class servUnix(shareLdap):
if options.has_key('p'):
sys.stdout.write(gid)
else:
self.printSUCCESS(_("Added group in Unix service") + " ...")
if printSuccess:
self.printSUCCESS(_("Added group in Unix service") + " ...")
return True
@adminConnectLdap
@ -1183,7 +1238,8 @@ class servUnix(shareLdap):
_("create crypto password"))
return False
self.clVars.Set("soft_ldap_user_pw_hash",userPwdHash)
# флаги добавления
flagAdd = {}
# Добавление основной группы пользователя
if options.has_key('g'):
resLdap = self.searchUnixGroupName(groupName)
@ -1197,7 +1253,9 @@ class servUnix(shareLdap):
if resLdap:
userGid = resLdap[0][0][1]['gidNumber'][0]
else:
if not self.addGroupUnixServer(userName,{}):
flagAddGroup = self.addGroupUnixServer(userName,{},False)
flagAdd['group'] = flagAddGroup
if not flagAddGroup:
return False
self.clVars.Set("soft_ldap_user_gid", userGid)
@ -1212,20 +1270,41 @@ class servUnix(shareLdap):
for group in userGroupNames:
self.addUsersGroupUnix([userName],group)
# не переделывать на else
flagError = False
if self.ldapObj.getError():
print _("LDAP Error") + ": " + self.ldapObj.getError().strip()
return False
flagError = True
# Изменим время последнего измения пароля пользователя
if not self.setShadowLastChange(userName):
return False
if not flagError and not self.setShadowLastChange(userName):
flagError = True
# Добавим домашнюю директорию
if options.has_key('m'):
if not flagError and options.has_key('m'):
if not os.path.exists(homeDir):
if not self.createHomeDir(userName, homeDir, skelDir):
self.printERROR (_("ERROR") + ": " +\
_("cannot create HOME dir"))
return False
self.printSUCCESS(_("Created home dir %s")% homeDir+\
flagError = True
#загружаем картинку
if not flagError and options.has_key('i'):
photoFile = options['i']
if not self.setJpegPhotoUser(userName, photoFile):
self.printERROR(_("Not added jpeg photo for user") + " " +\
str(userName))
flagError = True
if flagError:
if options.has_key('m'):
self.delUserUnixServer(userName, {'r':""}, False)
else:
self.delUserUnixServer(userName, {}, False)
self.printERROR (_("Cannot added user")+ " " + str(userName))
return False
if flagAdd.has_key('group'):
self.printSUCCESS(_("Added group in Unix service") + " ...")
if options.has_key('m'):
self.printSUCCESS(_("Created home dir %s")% homeDir+\
" ...")
if options.has_key('i'):
self.printSUCCESS(_("Added jpeg photo: %s")% photoFile+\
" ...")
self.printSUCCESS(_("Added user in Unix service") + " ...")
return True
@ -1392,7 +1471,7 @@ class servUnix(shareLdap):
else:
return maxUid+1
def delUserUnixServer(self, userName, options):
def delUserUnixServer(self, userName, options, printSuccess=True):
"""Удаляем Unix пользователя"""
# Ищем пользователя в Samba
if self.servSambaObj.searchSambaUser(userName):
@ -1441,7 +1520,7 @@ class servUnix(shareLdap):
# В случае отсутствия других пользователей удаляем основную группу
if not resGroup[0][0][1].has_key('memberUid'):
groupName = resGroup[0][0][1]['cn'][0]
if not self.delGroupUnixServer(groupName, {}):
if not self.delGroupUnixServer(groupName, {}, False):
return False
if options.has_key('r') and\
resLdap[0][0][1].has_key('homeDirectory'):
@ -1451,10 +1530,11 @@ class servUnix(shareLdap):
self.printSUCCESS(
_("Home directory %s is removed")% str(homeDir) +\
" ...")
self.printSUCCESS(_("User %s is deleted")%userName + " ...")
if printSuccess:
self.printSUCCESS(_("User %s is deleted")%userName + " ...")
return True
def delGroupUnixServer(self, groupName, options):
def delGroupUnixServer(self, groupName, options, printSuccess=True):
"""Удаляет группу пользователей Unix"""
res = self.searchUnixGroupName(groupName)
if not res:
@ -1468,8 +1548,9 @@ class servUnix(shareLdap):
return True
delDN = self.addDN("cn="+groupName, self.relGroupsDN)
res = self.delDN(delDN)
if res: # Group %s deleted # Группа %s удалена
self.printSUCCESS( _("Group %s is deleted")%groupName+" ...")
if res:
if printSuccess:
self.printSUCCESS( _("Group %s is deleted")%groupName+" ...")
return True
else:
self.printERROR(_("Can not delete group") + " " + groupName+\
@ -1821,6 +1902,15 @@ class servUnix(shareLdap):
_("press Y") +", "+ _("if not n")
if not self.dialogYesNo(messDialog):
return True
else:
# делаем backup
# Проверим запущен ли ldap
if not self.getRunService("ldap"):
# Запускаем LDAP сервер
if not self.runLdapServer():
return False
bakupObj = servLdap()
bakupObj.backupServer()
# Имя устанавливаемого сервиса
self.clVars.Set("soft_ldap_setup_name","unix")
self.clVars.Write("soft_unix_setup","no")
@ -2059,7 +2149,7 @@ class servMail(shareLdap):
groupDN = self.addDN("cn="+groupName, self.relGroupsDN)
return self.modAttrsDN(groupDN, modAttrs)
def delGroupMailServer(self, groupName, options):
def delGroupMailServer(self, groupName, options, printSuccess=True):
"""Удаляет группу пользователей Mail"""
res = self.searchMailGroupToName(groupName)
if not res:
@ -2070,7 +2160,8 @@ class servMail(shareLdap):
delDN = self.addDN("cn="+groupName, self.relGroupsDN)
res = self.delDN(delDN)
if res:
self.printSUCCESS( _("Mail group %s is deleted")%groupName +\
if printSuccess:
self.printSUCCESS( _("Mail group %s is deleted")%groupName + \
" ...")
return True
else:
@ -2352,6 +2443,7 @@ class servMail(shareLdap):
if options.has_key('e') and modAttrs:
DN = self.addDN("cn="+groupName, self.relGroupsDN)
if not self.modAttrsDN(DN, modAttrs):
self.delGroupMailServer(groupName, {}, False)
return False
self.printSUCCESS(_("Added group in Mail service") + " ...")
return True
@ -2593,7 +2685,7 @@ class servMail(shareLdap):
uid = int(resPwd.split(":")[2])
gid = int(resPwd.split(":")[3])
else:
self.printERROR(_("Uid and gid user are not found"))
self.printERROR(_("user are not found"))
return False
self.createMailDir(userName, uid, gid)
#Добавляем альтернативные почтовые адреса
@ -2646,6 +2738,15 @@ class servMail(shareLdap):
_("press Y") +", "+ _("if not n")
if not self.dialogYesNo(messDialog):
return True
else:
# делаем backup
# Проверим запущен ли ldap
if not self.getRunService("ldap"):
# Запускаем LDAP сервер
if not self.runLdapServer():
return False
bakupObj = servLdap()
bakupObj.backupServer()
# Удаляем из автозапуска демона
if not self.delDaemonAutostart("postfix"):
return False
@ -2975,6 +3076,13 @@ class servJabber(shareLdap):
else:
self.printERROR(_("Not replaced user group") + " ...")
return False
#загружаем картинку
if options.has_key('i'):
photoFile = options['i']
if not self.setJpegPhotoUser(userName, photoFile):
self.printERROR(_("Not added jpeg photo for user") + " " +\
str(userName))
return False
# Изменяемые аттрибуты пользователя
modAttrs = []
# Включаем пользователя
@ -3015,6 +3123,9 @@ class servJabber(shareLdap):
" ...")
if options.has_key('P') or options.has_key('p'):
self.printSUCCESS(_("Modified Jabber user password") + " ...")
if options.has_key('i'):
self.printSUCCESS(_("Set image %s from Jabber user %s")\
%(str(options['i']), str(userName)) + " ...")
return True
def modGroupJabberServer(self, groupName, options):
@ -3071,7 +3182,7 @@ class servJabber(shareLdap):
return False
return True
def delUserJabberServer(self, userName, options):
def delUserJabberServer(self, userName, options, printSuccess=True):
"""Удаляем Jabber пользователя"""
# Ищем Jabber пользователя
resSearch = self.searchUserToNameOrId(userName)
@ -3084,10 +3195,11 @@ class servJabber(shareLdap):
# Удаляем пользователя
delDN = self.addDN("uid=" + uid, self.relUsersDN)
if not self.delDN(delDN):
self.printERROR(_("Mail user %s is not deleted")%userName +\
self.printERROR(_("Jabber user %s is not deleted")%userName +\
" ...")
return False
self.printSUCCESS(_("Mail user %s is deleted")%userName +\
if printSuccess:
self.printSUCCESS(_("Jabber user %s is deleted")%userName +\
" ...")
return True
@ -3168,7 +3280,6 @@ class servJabber(shareLdap):
if not userPwd:
userPwd = "crypt{xxx}"
self.clVars.Set("soft_ldap_user_pw_hash",userPwd)
self.clVars.Set("soft_ldap_user_login", userName)
#Полное имя пользователя
fullNameUser = self.servUnixObj.fullNameUser
@ -3185,6 +3296,14 @@ class servJabber(shareLdap):
if self.ldapObj.getError():
print _("LDAP Error") + ": " + self.ldapObj.getError().strip()
return False
#загружаем картинку
if options.has_key('i'):
photoFile = options['i']
if not self.setJpegPhotoUser(userName, photoFile):
self.printERROR(_("Not added jpeg photo for user") + " " +\
str(userName))
self.delUserJabberServer(userName, options, False)
return False
self.printSUCCESS(_("Added user in Jabber service") + " ...")
return True
@ -3230,6 +3349,15 @@ class servJabber(shareLdap):
_("press Y") +", "+ _("if not n")
if not self.dialogYesNo(messDialog):
return True
else:
# делаем backup
# Проверим запущен ли ldap
if not self.getRunService("ldap"):
# Запускаем LDAP сервер
if not self.runLdapServer():
return False
bakupObj = servLdap()
bakupObj.backupServer()
# Удаляем из автозапуска демона
if not self.delDaemonAutostart("ejabberd"):
return False
@ -3511,6 +3639,15 @@ class servSamba(shareLdap):
_("press Y") +", "+ _("if not n")
if not self.dialogYesNo(messDialog):
return True
else:
# делаем backup
# Проверим запущен ли ldap
if not self.getRunService("ldap"):
# Запускаем LDAP сервер
if not self.runLdapServer():
return False
bakupObj = servLdap()
bakupObj.backupServer()
# Удаляем из автозапуска демона
if not self.delDaemonAutostart("samba"):
return False
@ -3763,7 +3900,6 @@ class servLdap(shareLdap):
servInstalled.append(serv)
return (servicePaths, servInstalled)
@adminConnectLdap
def backupServer(self):
"""Сохраняет настройки установленных сервисов и базу LDAP"""
# создаем директорию backup-а
@ -3774,6 +3910,8 @@ class servLdap(shareLdap):
self.printERROR(_("Can not create directory") + ": " +\
str(self.backupDirectory))
return False
# Соединяемся с LDAP
shareLdap.getLdapObjInFile(self)
# получаем ldif текст всей базы LDAP
ldifText = self.fullElementDNtoText("")
if not ldifText:
@ -4091,6 +4229,14 @@ class servLdap(shareLdap):
_("press Y") +", "+ _("if not n")
if not self.dialogYesNo(messDialog):
return True
else:
# делаем backup
# Проверим запущен ли ldap
if not self.getRunService("ldap"):
# Запускаем LDAP сервер
if not self.runLdapServer():
return False
self.backupServer()
# останавливаем сервисы
# Удаляем из автозапуска демона
if not self.delDaemonAutostart("slapd"):
@ -4392,6 +4538,20 @@ class cl_ldap(shareLdap):
'helpChapter':_("Jabber service options"),
'help':_("set the COMMENT field for the new account")
},
{'progAccess':(3,),
'shortOption':"i",
'longOption':"image",
'optVal':_("IMAGE"),
'helpChapter':_("Jabber service options"),
'help':_("set the jpeg image photo for the new account (file)")
},
#{'progAccess':(3,),
#'shortOption':"i",
#'longOption':"image",
#'optVal':_("IMAGE"),
#'helpChapter':_("Unix service options"),
#'help':_("set the jpeg image photo for the new account (file)")
#},
{'progAccess':(3,),
'shortOption':"d",
'longOption':"home-dir",
@ -4592,6 +4752,13 @@ class cl_ldap(shareLdap):
'helpChapter':_("Unix service options"),
'help':_("new list of supplementary GROUPS")
},
{'progAccess':(5,),
'shortOption':"i",
'longOption':"image",
'optVal':_("IMAGE"),
'helpChapter':_("Jabber service options"),
'help':_("set the jpeg image photo from user (file)")
},
{'progAccess':(5,),
'shortOption':"G",
'longOption':"groups",

Loading…
Cancel
Save