|
|
|
@ -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",
|
|
|
|
|