|
|
|
@ -237,7 +237,6 @@ class shareLdap(imp_cl_err, imp_cl_xml, imp_cl_help, imp_cl_smcon):
|
|
|
|
|
# apache и jabber
|
|
|
|
|
service.remove('backup')
|
|
|
|
|
service.remove('apache')
|
|
|
|
|
service.remove('jabber')
|
|
|
|
|
return service
|
|
|
|
|
|
|
|
|
|
def applyProfilesFromService(self, service):
|
|
|
|
@ -1586,8 +1585,8 @@ class servUnix(shareLdap):
|
|
|
|
|
textLine = self.execProg("mv %s %s" %(homeDirOld, homeDirNew))
|
|
|
|
|
if not (textLine == None):
|
|
|
|
|
self.printERROR(_("Can not move home directory") + " ...")
|
|
|
|
|
modAttrs = ((ldap.MOD_REPLACE, 'homeDirectory',
|
|
|
|
|
homeDirOld),)
|
|
|
|
|
modAttrs = [(ldap.MOD_REPLACE, 'homeDirectory',
|
|
|
|
|
homeDirOld)]
|
|
|
|
|
self.modAttrsDN(DN, modAttrs)
|
|
|
|
|
return False
|
|
|
|
|
else:
|
|
|
|
@ -1822,11 +1821,6 @@ class servUnix(shareLdap):
|
|
|
|
|
_("press Y") +", "+ _("if not n")
|
|
|
|
|
if not self.dialogYesNo(messDialog):
|
|
|
|
|
return True
|
|
|
|
|
# Проверим запущен ли ldap
|
|
|
|
|
if not self.getRunService("ldap"):
|
|
|
|
|
# Запускаем LDAP сервер
|
|
|
|
|
if not self.runLdapServer():
|
|
|
|
|
return False
|
|
|
|
|
# Имя устанавливаемого сервиса
|
|
|
|
|
self.clVars.Set("soft_ldap_setup_name","unix")
|
|
|
|
|
self.clVars.Write("soft_unix_setup","no")
|
|
|
|
@ -1836,8 +1830,14 @@ class servUnix(shareLdap):
|
|
|
|
|
# файлов профилей
|
|
|
|
|
if not self.applyProfilesFromService('unix'):
|
|
|
|
|
return False
|
|
|
|
|
# Рестартуем LDAP
|
|
|
|
|
self.restartLdapServer()
|
|
|
|
|
# Проверим запущен ли ldap
|
|
|
|
|
if not self.getRunService("ldap"):
|
|
|
|
|
# Запускаем LDAP сервер
|
|
|
|
|
if not self.runLdapServer():
|
|
|
|
|
return False
|
|
|
|
|
else:
|
|
|
|
|
if not self.restartLdapServer():
|
|
|
|
|
return False
|
|
|
|
|
#Cоединение с Ldap (администратор)
|
|
|
|
|
shareLdap.getLdapObjInFile(self)
|
|
|
|
|
# Удаляем предыдущую ветку сервиса Unix
|
|
|
|
@ -2395,7 +2395,7 @@ class servMail(shareLdap):
|
|
|
|
|
self.printSUCCESS(_("Locked Mail user %s")% str(userName)+\
|
|
|
|
|
" ...")
|
|
|
|
|
if options.has_key('u'):
|
|
|
|
|
self.printSUCCESS(_("Unlocked Mail user %s")% str(userName)+
|
|
|
|
|
self.printSUCCESS(_("Unlocked Mail user %s")% str(userName)+\
|
|
|
|
|
" ...")
|
|
|
|
|
if not options:
|
|
|
|
|
self.printSUCCESS(_("Changed Mail user password") + " ...")
|
|
|
|
@ -2661,6 +2661,18 @@ class servMail(shareLdap):
|
|
|
|
|
# Имя устанавливаемого сервиса
|
|
|
|
|
self.clVars.Set("soft_ldap_setup_name","mail")
|
|
|
|
|
self.clVars.Write("soft_mail_setup","no")
|
|
|
|
|
# Cоздаем объект профиль устанавливая директорию samba для
|
|
|
|
|
# файлов профилей
|
|
|
|
|
if not self.applyProfilesFromService('mail'):
|
|
|
|
|
return False
|
|
|
|
|
# Проверим запущен ли ldap
|
|
|
|
|
if not self.getRunService("ldap"):
|
|
|
|
|
# Запускаем LDAP сервер
|
|
|
|
|
if not self.runLdapServer():
|
|
|
|
|
return False
|
|
|
|
|
else:
|
|
|
|
|
if not self.restartLdapServer():
|
|
|
|
|
return False
|
|
|
|
|
# Находим в LDAP Mail сервис
|
|
|
|
|
resSearch = self.searchService()
|
|
|
|
|
ret = True
|
|
|
|
@ -2682,16 +2694,6 @@ class servMail(shareLdap):
|
|
|
|
|
if self.ldapObj.getError():
|
|
|
|
|
print _("LDAP Error") + ": " + self.ldapObj.getError().strip()
|
|
|
|
|
return False
|
|
|
|
|
# Cоздаем объект профиль устанавливая директорию samba для
|
|
|
|
|
# файлов профилей
|
|
|
|
|
if not self.applyProfilesFromService('mail'):
|
|
|
|
|
return False
|
|
|
|
|
textLine = self.execProg("/etc/init.d/slapd restart")
|
|
|
|
|
if "ok" in textLine:
|
|
|
|
|
self.printOK("LDAP" + " " + _("restart")+ " ...")
|
|
|
|
|
else:
|
|
|
|
|
self.printNotOK("LDAP" + " " + _("restart")+ " ...")
|
|
|
|
|
return False
|
|
|
|
|
# Записываем данные администратора сервиса Mail
|
|
|
|
|
ldapParser = iniLdapParser()
|
|
|
|
|
ldapParser.setVar("mail",
|
|
|
|
@ -2751,20 +2753,14 @@ class servJabber(shareLdap):
|
|
|
|
|
# создаем объект сервиса Unix
|
|
|
|
|
self.servUnixObj = servUnix()
|
|
|
|
|
|
|
|
|
|
def searchGroupName(self, groupName):
|
|
|
|
|
def searchGroupToName(self, groupName):
|
|
|
|
|
"""Находит группу сервиса Jabber по её имени"""
|
|
|
|
|
resSearch = self.searchLdapDN(groupName, self.relGroupsDN, "cn")
|
|
|
|
|
return resSearch
|
|
|
|
|
|
|
|
|
|
def searchGroupDesc(self, descr):
|
|
|
|
|
"""Находит группу сервиса Jabber по её description"""
|
|
|
|
|
resSearch = self.searchLdapDN(descr, self.relGroupsDN,
|
|
|
|
|
"departmentNumber")
|
|
|
|
|
return resSearch
|
|
|
|
|
|
|
|
|
|
def searchUserToJabberId(self, mail):
|
|
|
|
|
def searchUserToId(self, jabberId):
|
|
|
|
|
"""Находит пользователя по Jabber ID в сервисе Jabber"""
|
|
|
|
|
resSearch = self.searchLdapDN(mail, self.relUsersDN, "mail")
|
|
|
|
|
resSearch = self.searchLdapDN(jabberId, self.relUsersDN, "mail")
|
|
|
|
|
return resSearch
|
|
|
|
|
|
|
|
|
|
def searchUserToName(self, name):
|
|
|
|
@ -2772,68 +2768,74 @@ class servJabber(shareLdap):
|
|
|
|
|
resSearch = self.searchLdapDN(name, self.relUsersDN, "uid")
|
|
|
|
|
return resSearch
|
|
|
|
|
|
|
|
|
|
def searchJabberUser(self, nameOrId):
|
|
|
|
|
"""Находит пользователя сервиса Jabber по имени или id"""
|
|
|
|
|
resSearch = self.searchUserToName(nameOrId)
|
|
|
|
|
if resSearch:
|
|
|
|
|
return resSearch
|
|
|
|
|
resSearch = self.searchUserToJabberId(nameOrId)
|
|
|
|
|
def searchUsersToGroup(self, descr):
|
|
|
|
|
"""Находит пользователей по description"""
|
|
|
|
|
resSearch = self.searchLdapDN(descr, self.relUsersDN,
|
|
|
|
|
"departmentNumber")
|
|
|
|
|
return resSearch
|
|
|
|
|
|
|
|
|
|
def searchJabberGroup(self, nameOrDesc):
|
|
|
|
|
"""Находит группу сервиса Jabber по названию или description"""
|
|
|
|
|
resSearch = self.searchGroupName(nameOrDesc)
|
|
|
|
|
def searchUserToNameOrId(self, nameOrId):
|
|
|
|
|
"""Находит пользователя сервиса Jabber по имени или id"""
|
|
|
|
|
resSearch = self.searchUserToName(nameOrId)
|
|
|
|
|
if resSearch:
|
|
|
|
|
return resSearch
|
|
|
|
|
resSearch = self.searchGroupDesc(nameOrDesc)
|
|
|
|
|
resSearch = self.searchUserToId(nameOrId)
|
|
|
|
|
return resSearch
|
|
|
|
|
|
|
|
|
|
def setUserGroup(self, userName, groupName):
|
|
|
|
|
def setUserGroup(self, userName, groupName, userS=False, groupS=False):
|
|
|
|
|
"""Устанавливает Jabber группу для пользователя"""
|
|
|
|
|
groupSearch = self.searchJabberGroup(groupName)
|
|
|
|
|
if groupS:
|
|
|
|
|
groupSearch = groupS
|
|
|
|
|
else:
|
|
|
|
|
groupSearch = self.searchGroupToName(groupName)
|
|
|
|
|
if not groupSearch:
|
|
|
|
|
self.printERROR(_("Group name is not found in Jabber service") +\
|
|
|
|
|
" ...")
|
|
|
|
|
return False
|
|
|
|
|
userSearch = self.searchJabberUser(userName)
|
|
|
|
|
if userS:
|
|
|
|
|
userSearch = userS
|
|
|
|
|
else:
|
|
|
|
|
userSearch = self.searchUserToNameOrId(userName)
|
|
|
|
|
if not userSearch:
|
|
|
|
|
self.printERROR(_("User %s is not found in Jabber service")%\
|
|
|
|
|
str(userName) + " ...")
|
|
|
|
|
return False
|
|
|
|
|
modAttrs = []
|
|
|
|
|
descr = groupSearch[0][0][1]["description"][0]
|
|
|
|
|
descr = groupSearch[0][0][1]["cn"][0]
|
|
|
|
|
uid = userSearch[0][0][1]["uid"][0]
|
|
|
|
|
if userSearch[0][0][1].has_key('departmentNumber'):
|
|
|
|
|
modAttrs.append((ldap.MOD_REPLACE, 'departmentNumber', descr))
|
|
|
|
|
else:
|
|
|
|
|
modAttrs.append((ldap.MOD_ADD, 'departmentNumber', descr))
|
|
|
|
|
userDN = self.addDN("uid="+uid, self.relUsersDN)
|
|
|
|
|
return self.modAttrsDN(groupDN, modAttrs)
|
|
|
|
|
return self.modAttrsDN(userDN, modAttrs)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def addUsersGroupJabber(self, users, groupName):
|
|
|
|
|
def addUsersGroupJabber(self, users, groupName, replaceFlag=False):
|
|
|
|
|
"""Добавляет пользователей из списка в Jabber группу"""
|
|
|
|
|
groupSearch = self.searchJabberGroup(groupName)
|
|
|
|
|
groupSearch = self.searchGroupToName(groupName)
|
|
|
|
|
if not groupSearch:
|
|
|
|
|
self.printERROR(_("Group name is not found in Jabber service") +\
|
|
|
|
|
" ...")
|
|
|
|
|
return False
|
|
|
|
|
flagFalse = False
|
|
|
|
|
for userName in users:
|
|
|
|
|
userSearch = self.searchJabberUser(userName)
|
|
|
|
|
userSearch = self.searchUserToNameOrId(userName)
|
|
|
|
|
if not userSearch:
|
|
|
|
|
self.printERROR(_("User %s is not found in Jabber service")%\
|
|
|
|
|
str(userName) + " ...")
|
|
|
|
|
flagFalse = True
|
|
|
|
|
break
|
|
|
|
|
if userSearch[0][0][1].has_key('departmentNumber'):
|
|
|
|
|
if not replaceFlag and\
|
|
|
|
|
userSearch[0][0][1].has_key('departmentNumber'):
|
|
|
|
|
self.printERROR(_("User %s is found in group %s")%\
|
|
|
|
|
(str(userName),str(groupName)) + " ...")
|
|
|
|
|
self.printWARNING(_("Delete user %s in group %s")%\
|
|
|
|
|
(str(userName),str(groupName)) + " ...")
|
|
|
|
|
flagFalse = True
|
|
|
|
|
break
|
|
|
|
|
if flagFalse:
|
|
|
|
|
return False
|
|
|
|
|
for userName in users:
|
|
|
|
|
if not self.setUserGroup(userName, groupName):
|
|
|
|
|
flagFalse = True
|
|
|
|
|
break
|
|
|
|
@ -2843,26 +2845,184 @@ class servJabber(shareLdap):
|
|
|
|
|
|
|
|
|
|
def delUsersGroupJabber(self, users, groupName):
|
|
|
|
|
"""Удаляет пользователей из списка в Jabber группе"""
|
|
|
|
|
groupSearch = self.searchJabberGroup(groupName)
|
|
|
|
|
groupSearch = self.searchGroupToName(groupName)
|
|
|
|
|
if not groupSearch:
|
|
|
|
|
self.printERROR(_("Group name is not found in Jabber service") +\
|
|
|
|
|
" ...")
|
|
|
|
|
return False
|
|
|
|
|
flagFalse = False
|
|
|
|
|
res = True
|
|
|
|
|
for userName in users:
|
|
|
|
|
userSearch = self.searchJabberUser(userName)
|
|
|
|
|
userSearch = self.searchUserToNameOrId(userName)
|
|
|
|
|
if userSearch[0][0][1].has_key('departmentNumber'):
|
|
|
|
|
modAttrs = ((ldap.MOD_DELETE, 'departmentNumber', None))
|
|
|
|
|
if not userSearch[0][0][1]['departmentNumber'][0] == \
|
|
|
|
|
groupSearch[0][0][1]['cn'][0]:
|
|
|
|
|
self.printERROR(_("User %s is not found in group %s")%\
|
|
|
|
|
(str(userName),str(groupName)) + " ...")
|
|
|
|
|
res = False
|
|
|
|
|
break
|
|
|
|
|
else:
|
|
|
|
|
self.printERROR(_("User %s is not a member of any group")%\
|
|
|
|
|
str(userName) + " ...")
|
|
|
|
|
res = False
|
|
|
|
|
break
|
|
|
|
|
if not res:
|
|
|
|
|
return False
|
|
|
|
|
for userName in users:
|
|
|
|
|
userSearch = self.searchUserToNameOrId(userName)
|
|
|
|
|
uid = userSearch[0][0][1]['uid'][0]
|
|
|
|
|
modAttrs = [(ldap.MOD_DELETE, 'departmentNumber', None)]
|
|
|
|
|
userDN = self.addDN("uid="+uid, self.relUsersDN)
|
|
|
|
|
res = self.modAttrsDN(userDN, modAttrs)
|
|
|
|
|
if not res:
|
|
|
|
|
break
|
|
|
|
|
return res
|
|
|
|
|
|
|
|
|
|
def renameGroup(self, oldName, newName):
|
|
|
|
|
"""Изменяет имя группы"""
|
|
|
|
|
searchOldGroup = self.searchGroupToName(oldName)
|
|
|
|
|
if not searchOldGroup:
|
|
|
|
|
self.printERROR(\
|
|
|
|
|
_("Old group name %s not found in Jabber service")%str(oldName)+\
|
|
|
|
|
" ...")
|
|
|
|
|
return False
|
|
|
|
|
searchNewGroup = self.searchGroupToName(newName)
|
|
|
|
|
if searchNewGroup:
|
|
|
|
|
self.printERROR(\
|
|
|
|
|
_("New group name %s found in Jabber service")%str(newName)+\
|
|
|
|
|
" ...")
|
|
|
|
|
return False
|
|
|
|
|
groupDN = self.addDN("cn="+oldName, self.relGroupsDN)
|
|
|
|
|
searchUsers = self.searchUsersToGroup(oldName)
|
|
|
|
|
if searchUsers:
|
|
|
|
|
flagError = False
|
|
|
|
|
for data in searchUsers:
|
|
|
|
|
uid = data[0][1]['uid'][0]
|
|
|
|
|
userDN = self.addDN("uid="+uid, self.relUsersDN)
|
|
|
|
|
return self.modAttrsDN(groupDN, modAttrs)
|
|
|
|
|
modAttrs = [(ldap.MOD_REPLACE,
|
|
|
|
|
'departmentNumber',
|
|
|
|
|
newName)]
|
|
|
|
|
res = self.modAttrsDN(userDN, modAttrs)
|
|
|
|
|
if not res:
|
|
|
|
|
flagError = True
|
|
|
|
|
break
|
|
|
|
|
if flagError:
|
|
|
|
|
return False
|
|
|
|
|
newFirstDn = "cn=" + newName
|
|
|
|
|
oldDN = groupDN
|
|
|
|
|
res = self.modifyElemDN(oldDN, newFirstDn)
|
|
|
|
|
return res
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def modUserJabberPasswd(self, userName, options):
|
|
|
|
|
"""Устанавливает пароль Jabber пользователя и меняет его опции"""
|
|
|
|
|
resSearch = self.searchUserToNameOrId(userName)
|
|
|
|
|
if not resSearch:
|
|
|
|
|
self.printERROR(
|
|
|
|
|
_("User %s is not found in Jabber service") % str(userName) +\
|
|
|
|
|
" ...")
|
|
|
|
|
return False
|
|
|
|
|
# Изменяемые аттрибуты пользователя
|
|
|
|
|
modAttrs = []
|
|
|
|
|
# Включаем пользователя
|
|
|
|
|
if options.has_key('u'):
|
|
|
|
|
modAttrs += [(ldap.MOD_REPLACE, 'initials', "Yes")]
|
|
|
|
|
# Выключаем пользователя
|
|
|
|
|
elif options.has_key('l'):
|
|
|
|
|
modAttrs += [(ldap.MOD_REPLACE, 'initials', "No")]
|
|
|
|
|
if not options:
|
|
|
|
|
optPasswd = {"p":""}
|
|
|
|
|
userPwd = self.getUserPassword(optPasswd, "p", False)
|
|
|
|
|
if userPwd == False:
|
|
|
|
|
return False
|
|
|
|
|
userPwdHash = userPwd
|
|
|
|
|
if resSearch[0][0][1].has_key('userPassword'):
|
|
|
|
|
modAttrs.append((ldap.MOD_REPLACE, 'userPassword',
|
|
|
|
|
userPwdHash))
|
|
|
|
|
else:
|
|
|
|
|
modAttrs.append((ldap.MOD_ADD, 'userPassword',
|
|
|
|
|
userPwdHash))
|
|
|
|
|
if modAttrs:
|
|
|
|
|
uid = resSearch[0][0][1]['uid'][0]
|
|
|
|
|
DN = self.addDN("uid="+userName, self.relUsersDN)
|
|
|
|
|
if not self.modAttrsDN(DN, modAttrs):
|
|
|
|
|
return False
|
|
|
|
|
if options.has_key('l'):
|
|
|
|
|
self.printSUCCESS(_("Locked Jabber user %s")% str(userName)+\
|
|
|
|
|
" ...")
|
|
|
|
|
if options.has_key('u'):
|
|
|
|
|
self.printSUCCESS(_("Unlocked Jabber user %s")%\
|
|
|
|
|
str(userName)+ " ...")
|
|
|
|
|
if not options:
|
|
|
|
|
self.printSUCCESS(_("Changed Jabber user password") + " ...")
|
|
|
|
|
return True
|
|
|
|
|
return False
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def modUserJabberServer(self, userName, options):
|
|
|
|
|
"""Модифицирует настройки пользователя Jabber в LDAP"""
|
|
|
|
|
res = self.searchUserToNameOrId(userName)
|
|
|
|
|
if not res:
|
|
|
|
|
self.printERROR(
|
|
|
|
|
_("User %s is not found in Jabber service")%\
|
|
|
|
|
str(userName) + " ...")
|
|
|
|
|
return False
|
|
|
|
|
# Изменяет группу в которую входит пользователь
|
|
|
|
|
if options.has_key('g'):
|
|
|
|
|
userGroup = options['g']
|
|
|
|
|
if self.setUserGroup(userName, userGroup, res):
|
|
|
|
|
self.printSUCCESS(_("Replaced user group") + " ...")
|
|
|
|
|
else:
|
|
|
|
|
self.printERROR(_("Not replaced user group") + " ...")
|
|
|
|
|
return False
|
|
|
|
|
# Изменяемые аттрибуты пользователя
|
|
|
|
|
modAttrs = []
|
|
|
|
|
# Включаем пользователя
|
|
|
|
|
if options.has_key('U'):
|
|
|
|
|
modAttrs += [(ldap.MOD_REPLACE, 'initials', "Yes")]
|
|
|
|
|
# Выключаем пользователя
|
|
|
|
|
elif options.has_key('L'):
|
|
|
|
|
modAttrs += [(ldap.MOD_REPLACE, 'initials', "No")]
|
|
|
|
|
# Изменяем коментарий к пользователю
|
|
|
|
|
if options.has_key('c'):
|
|
|
|
|
comment = options['c']
|
|
|
|
|
modAttrs += [(ldap.MOD_REPLACE, 'sn', comment),
|
|
|
|
|
(ldap.MOD_REPLACE, 'cn', comment)]
|
|
|
|
|
# Изменяем пароль пользователя
|
|
|
|
|
userPwd = self.getUserPassword(options, "p", "P")
|
|
|
|
|
if userPwd == False:
|
|
|
|
|
return False
|
|
|
|
|
if userPwd:
|
|
|
|
|
userPwdHash = userPwd
|
|
|
|
|
if res[0][0][1].has_key('userPassword'):
|
|
|
|
|
modAttrs.append((ldap.MOD_REPLACE, 'userPassword',
|
|
|
|
|
userPwdHash))
|
|
|
|
|
else:
|
|
|
|
|
modAttrs.append((ldap.MOD_ADD, 'userPassword',
|
|
|
|
|
userPwdHash))
|
|
|
|
|
if modAttrs:
|
|
|
|
|
uid = res[0][0][1]['uid'][0]
|
|
|
|
|
DN = self.addDN("uid="+uid, self.relUsersDN)
|
|
|
|
|
if not self.modAttrsDN(DN, modAttrs):
|
|
|
|
|
return False
|
|
|
|
|
if options.has_key('c'):
|
|
|
|
|
self.printSUCCESS(_("Modified comment (full name)") + " ...")
|
|
|
|
|
if options.has_key('L'):
|
|
|
|
|
self.printSUCCESS(_("Locked Jabber user %s")%str(userName) +
|
|
|
|
|
" ...")
|
|
|
|
|
if options.has_key('U'):
|
|
|
|
|
self.printSUCCESS(_("Unlocked Jabber user %s")%str(userName) +
|
|
|
|
|
" ...")
|
|
|
|
|
if options.has_key('P') or options.has_key('p'):
|
|
|
|
|
self.printSUCCESS(_("Modified Jabber user password") + " ...")
|
|
|
|
|
return True
|
|
|
|
|
|
|
|
|
|
def modGroupJabberServer(self, groupName, options):
|
|
|
|
|
"""Модифицирует настройки группы пользователей Jabber"""
|
|
|
|
|
searchGroup = self.searchJabberGroup(groupName)
|
|
|
|
|
searchGroup = self.searchGroupToName(groupName)
|
|
|
|
|
if not searchGroup:
|
|
|
|
|
self.printERROR(_("group name not found in Jabber service") +\
|
|
|
|
|
" ...")
|
|
|
|
|
self.printERROR(_("Group name %s is not found in Jabber service")\
|
|
|
|
|
%str(groupName) + " ...")
|
|
|
|
|
return False
|
|
|
|
|
# Добавляем список пользователей в группу
|
|
|
|
|
if options.has_key('a'):
|
|
|
|
@ -2888,87 +3048,95 @@ class servJabber(shareLdap):
|
|
|
|
|
self.printERROR(_("Can not delete list users from group") +\
|
|
|
|
|
" " + str(groupName) + " ...")
|
|
|
|
|
return False
|
|
|
|
|
# Изменяем коментарий к группе
|
|
|
|
|
if options.has_key('c'):
|
|
|
|
|
gecos = options['c']
|
|
|
|
|
modAttrs = [(ldap.MOD_REPLACE, 'description', gecos)]
|
|
|
|
|
groupDN = self.addDN("cn="+groupName, self.relGroupsDN)
|
|
|
|
|
if self.modAttrsDN(groupDN, modAttrs):
|
|
|
|
|
self.printSUCCESS(_("Modified group comment") + " ...")
|
|
|
|
|
else:
|
|
|
|
|
self.printERROR(_("Can not modify comment group") +\
|
|
|
|
|
" " + str(groupName) + " ...")
|
|
|
|
|
return False
|
|
|
|
|
# Изменяем имя группы
|
|
|
|
|
attrDelete = []
|
|
|
|
|
attrAppend = []
|
|
|
|
|
modGroupName = groupName
|
|
|
|
|
if options.has_key('n'):
|
|
|
|
|
newGroupName = options['n']
|
|
|
|
|
if self.searchMailGroupToName(newGroupName):
|
|
|
|
|
self.printERROR(
|
|
|
|
|
_("group name %s is found in Mail service")%\
|
|
|
|
|
str(newGroupName) + " ...")
|
|
|
|
|
return False
|
|
|
|
|
# изменяем адрес и альтернативный адрес
|
|
|
|
|
altEmails = searchGroup[0][0][1]["mailAlternateAddress"]
|
|
|
|
|
for altEmail in altEmails:
|
|
|
|
|
splAltEmail = altEmail.split("@")
|
|
|
|
|
grName = splAltEmail[0]
|
|
|
|
|
if groupName == grName:
|
|
|
|
|
altEmailDomen = ""
|
|
|
|
|
if len(splAltEmail)==2:
|
|
|
|
|
altEmailDomen = splAltEmail[1]
|
|
|
|
|
newAltEmail = "%s@%s" %(newGroupName,altEmailDomen)
|
|
|
|
|
attrDelete.append(
|
|
|
|
|
(ldap.MOD_DELETE, 'mailAlternateAddress',
|
|
|
|
|
altEmail))
|
|
|
|
|
attrAppend.append(
|
|
|
|
|
(ldap.MOD_ADD, 'mailAlternateAddress',
|
|
|
|
|
newAltEmail))
|
|
|
|
|
break
|
|
|
|
|
email = searchGroup[0][0][1]["mail"][0]
|
|
|
|
|
splEmail = email.split("@")
|
|
|
|
|
emailDomen = ""
|
|
|
|
|
if len(splEmail)==2:
|
|
|
|
|
emailDomen = splEmail[1]
|
|
|
|
|
newEmail = "%s@%s" %(newGroupName,emailDomen)
|
|
|
|
|
attrAppend.append((ldap.MOD_REPLACE, 'mail', newEmail))
|
|
|
|
|
attrAppend.append((ldap.MOD_REPLACE, 'mailMessageStore',
|
|
|
|
|
newGroupName + "/"))
|
|
|
|
|
|
|
|
|
|
newFirstDn = "cn=" + newGroupName
|
|
|
|
|
oldDN = self.addDN("cn=" + groupName, self.relGroupsDN)
|
|
|
|
|
res = self.modifyElemDN(oldDN, newFirstDn)
|
|
|
|
|
if res:
|
|
|
|
|
oldGroupName = searchGroup[0][0][1]["cn"][0]
|
|
|
|
|
if self.renameGroup(oldGroupName, newGroupName):
|
|
|
|
|
self.printSUCCESS(_("Group renamed") + " ...")
|
|
|
|
|
modGroupName = newGroupName
|
|
|
|
|
else:
|
|
|
|
|
self.printERROR(_("Can not rename group") + "...")
|
|
|
|
|
return False
|
|
|
|
|
modAttrs = attrAppend + attrDelete
|
|
|
|
|
# Изменяем коментарий к группе
|
|
|
|
|
if options.has_key('c'):
|
|
|
|
|
gecos = options['c']
|
|
|
|
|
modAttrs.append((ldap.MOD_REPLACE, 'description', gecos))
|
|
|
|
|
if modAttrs:
|
|
|
|
|
groupDN = self.addDN("cn=" + modGroupName, self.relGroupsDN)
|
|
|
|
|
res = self.modAttrsDN(groupDN, modAttrs)
|
|
|
|
|
if res:
|
|
|
|
|
if options.has_key('c'):
|
|
|
|
|
self.printSUCCESS(_("Modified group comment") + " ...")
|
|
|
|
|
return True
|
|
|
|
|
else:
|
|
|
|
|
if options.has_key('c'):
|
|
|
|
|
self.printSUCCESS(_("Can not modify group comment") +\
|
|
|
|
|
" ...")
|
|
|
|
|
self.printERROR(_("Can not rename group") +\
|
|
|
|
|
" " + str(groupName) + " ...")
|
|
|
|
|
return False
|
|
|
|
|
return True
|
|
|
|
|
|
|
|
|
|
def delUserJabberServer(self, userName, options):
|
|
|
|
|
"""Удаляем Jabber пользователя"""
|
|
|
|
|
# Ищем Jabber пользователя
|
|
|
|
|
resSearch = self.searchUserToNameOrId(userName)
|
|
|
|
|
if not resSearch:
|
|
|
|
|
self.printERROR (_("ERROR") + ": " +\
|
|
|
|
|
_("User %s is not found in Jabber service") % str(userName) +\
|
|
|
|
|
" ...")
|
|
|
|
|
return False
|
|
|
|
|
uid = resSearch[0][0][1]['uid'][0]
|
|
|
|
|
# Удаляем пользователя
|
|
|
|
|
delDN = self.addDN("uid=" + uid, self.relUsersDN)
|
|
|
|
|
if not self.delDN(delDN):
|
|
|
|
|
self.printERROR(_("Mail user %s is not deleted")%userName +\
|
|
|
|
|
" ...")
|
|
|
|
|
return False
|
|
|
|
|
self.printSUCCESS(_("Mail user %s is deleted")%userName +\
|
|
|
|
|
" ...")
|
|
|
|
|
return True
|
|
|
|
|
|
|
|
|
|
def delGroupJabberServer(self, groupName, options):
|
|
|
|
|
"""Удаляет группу пользователей Jabber"""
|
|
|
|
|
res = self.searchGroupToName(groupName)
|
|
|
|
|
if not res:
|
|
|
|
|
self.printERROR(
|
|
|
|
|
_("Group %s is not found in Jabber service")%groupName +\
|
|
|
|
|
" ...")
|
|
|
|
|
return False
|
|
|
|
|
users = []
|
|
|
|
|
flagError = False
|
|
|
|
|
searchUsers = self.searchUsersToGroup(groupName)
|
|
|
|
|
if searchUsers:
|
|
|
|
|
for data in searchUsers:
|
|
|
|
|
users.append(data[0][1]['uid'][0])
|
|
|
|
|
if not self.delUsersGroupJabber(users, groupName):
|
|
|
|
|
flagError = True
|
|
|
|
|
if not flagError:
|
|
|
|
|
delDN = self.addDN("cn="+groupName, self.relGroupsDN)
|
|
|
|
|
res = self.delDN(delDN)
|
|
|
|
|
if not res:
|
|
|
|
|
flagError = True
|
|
|
|
|
if flagError:
|
|
|
|
|
self.printERROR(_("Can not delete Jabber group") +\
|
|
|
|
|
" " + groupName + " ...")
|
|
|
|
|
return False
|
|
|
|
|
else:
|
|
|
|
|
self.printSUCCESS( _("Jabber group %s is deleted")%groupName +\
|
|
|
|
|
" ...")
|
|
|
|
|
return True
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@adminConnectLdap
|
|
|
|
|
def addGroupJabberServer(self, groupName, options):
|
|
|
|
|
"""Добавляет группу пользователей Jabber"""
|
|
|
|
|
# Если группа существует выходим без ошибки
|
|
|
|
|
if self.searchGroupName(groupName):
|
|
|
|
|
if self.searchGroupToName(groupName):
|
|
|
|
|
self.printERROR(\
|
|
|
|
|
_("group name %s is found in Jabber service") %\
|
|
|
|
|
str(groupName) + " ...")
|
|
|
|
|
return False
|
|
|
|
|
self.clVars.Set("soft_ldap_group_name",groupName)
|
|
|
|
|
# Коментарий к группе
|
|
|
|
|
gecos = self.servUnixObj.groupGecos
|
|
|
|
|
# Комментарий к группе
|
|
|
|
|
groupGecos = self.servUnixObj.groupGecos
|
|
|
|
|
if options.has_key('c'):
|
|
|
|
|
gecos = options['c']
|
|
|
|
|
self.clVars.Set("soft_ldap_group_desc",gecos)
|
|
|
|
|
groupGecos = options['c']
|
|
|
|
|
self.clVars.Set("soft_ldap_group_desc",groupGecos)
|
|
|
|
|
ldifFile = self.ldifFileGroup
|
|
|
|
|
groupLdif = self.createLdif(ldifFile)
|
|
|
|
|
if not groupLdif:
|
|
|
|
@ -2990,10 +3158,9 @@ class servJabber(shareLdap):
|
|
|
|
|
jabberId = "%s@%s.%s" %(userName,
|
|
|
|
|
self.clVars.Get("net_host"),
|
|
|
|
|
self.clVars.Get("sys_domain"))
|
|
|
|
|
if self.searchUserToJabberId(jabberId):
|
|
|
|
|
if self.searchUserToId(jabberId):
|
|
|
|
|
self.printERROR(_("User exists in Jabber service"))
|
|
|
|
|
return False
|
|
|
|
|
|
|
|
|
|
# Пароль пользователя Jabber
|
|
|
|
|
userPwd = self.getUserPassword(options, "p", "P")
|
|
|
|
|
if userPwd == False:
|
|
|
|
@ -3005,11 +3172,9 @@ class servJabber(shareLdap):
|
|
|
|
|
self.clVars.Set("soft_ldap_user_login", userName)
|
|
|
|
|
#Полное имя пользователя
|
|
|
|
|
fullNameUser = self.servUnixObj.fullNameUser
|
|
|
|
|
|
|
|
|
|
if options.has_key('c'):
|
|
|
|
|
fullNameUser = options['c']
|
|
|
|
|
self.clVars.Set("soft_ldap_user_full_name",fullNameUser)
|
|
|
|
|
|
|
|
|
|
ldifFile = self.ldifFileUser
|
|
|
|
|
userLdif = self.createLdif(ldifFile)
|
|
|
|
|
if not self.ldapObj.getError():
|
|
|
|
@ -3020,7 +3185,6 @@ class servJabber(shareLdap):
|
|
|
|
|
if self.ldapObj.getError():
|
|
|
|
|
print _("LDAP Error") + ": " + self.ldapObj.getError().strip()
|
|
|
|
|
return False
|
|
|
|
|
|
|
|
|
|
self.printSUCCESS(_("Added user in Jabber service") + " ...")
|
|
|
|
|
return True
|
|
|
|
|
|
|
|
|
@ -3072,12 +3236,24 @@ class servJabber(shareLdap):
|
|
|
|
|
# останавливаем сервис Jabber
|
|
|
|
|
if not self.stopServices(["jabber"]):
|
|
|
|
|
return False
|
|
|
|
|
# Подключаемся к LDAP cерверу
|
|
|
|
|
if not shareLdap.getLdapObjInFile(self):
|
|
|
|
|
return False
|
|
|
|
|
# Имя устанавливаемого сервиса
|
|
|
|
|
self.clVars.Set("soft_ldap_setup_name","jabber")
|
|
|
|
|
self.clVars.Write("soft_jabber_setup","no")
|
|
|
|
|
# Cоздаем объект профиль устанавливая директорию jabber для
|
|
|
|
|
# файлов профилей
|
|
|
|
|
if not self.applyProfilesFromService('jabber'):
|
|
|
|
|
return False
|
|
|
|
|
# Проверим запущен ли ldap
|
|
|
|
|
if not self.getRunService("ldap"):
|
|
|
|
|
# Запускаем LDAP сервер
|
|
|
|
|
if not self.runLdapServer():
|
|
|
|
|
return False
|
|
|
|
|
else:
|
|
|
|
|
if not self.restartLdapServer():
|
|
|
|
|
return False
|
|
|
|
|
# Подключаемся к LDAP cерверу
|
|
|
|
|
if not shareLdap.getLdapObjInFile(self):
|
|
|
|
|
return False
|
|
|
|
|
# Находим в LDAP Jabber сервис
|
|
|
|
|
resSearch = self.searchService()
|
|
|
|
|
ret = True
|
|
|
|
@ -3099,10 +3275,6 @@ class servJabber(shareLdap):
|
|
|
|
|
if self.ldapObj.getError():
|
|
|
|
|
print _("LDAP Error") + ": " + self.ldapObj.getError().strip()
|
|
|
|
|
return False
|
|
|
|
|
# Cоздаем объект профиль устанавливая директорию jabber для
|
|
|
|
|
# файлов профилей
|
|
|
|
|
if not self.applyProfilesFromService('jabber'):
|
|
|
|
|
return False
|
|
|
|
|
# Администратор сервиса
|
|
|
|
|
adminName = "admin"
|
|
|
|
|
adminFullName = "%s@%s.%s" %(adminName,
|
|
|
|
@ -3363,6 +3535,14 @@ class servSamba(shareLdap):
|
|
|
|
|
# файлов профилей
|
|
|
|
|
if not self.applyProfilesFromService('samba'):
|
|
|
|
|
return False
|
|
|
|
|
# Проверим запущен ли ldap
|
|
|
|
|
if not self.getRunService("ldap"):
|
|
|
|
|
# Запускаем LDAP сервер
|
|
|
|
|
if not self.runLdapServer():
|
|
|
|
|
return False
|
|
|
|
|
else:
|
|
|
|
|
if not self.restartLdapServer():
|
|
|
|
|
return False
|
|
|
|
|
# Записываем данные администратора сервиса Samba
|
|
|
|
|
ldapParser = iniLdapParser()
|
|
|
|
|
ldapParser.setVar("samba",
|
|
|
|
@ -3577,6 +3757,10 @@ class servLdap(shareLdap):
|
|
|
|
|
serv = "mail"
|
|
|
|
|
servicePaths.append(os.path.join(profilePath,serv))
|
|
|
|
|
servInstalled.append(serv)
|
|
|
|
|
if self.clVars.Get("soft_jabber_setup") == "yes":
|
|
|
|
|
serv = "jabber"
|
|
|
|
|
servicePaths.append(os.path.join(profilePath,serv))
|
|
|
|
|
servInstalled.append(serv)
|
|
|
|
|
return (servicePaths, servInstalled)
|
|
|
|
|
|
|
|
|
|
@adminConnectLdap
|
|
|
|
@ -3707,7 +3891,7 @@ class servLdap(shareLdap):
|
|
|
|
|
for service in servInstalled:
|
|
|
|
|
if service == "unix" or service == "ldap":
|
|
|
|
|
continue
|
|
|
|
|
if service == "mail":
|
|
|
|
|
elif service == "mail":
|
|
|
|
|
if not self.startDaemons('mail',['postfix', 'dovecot']):
|
|
|
|
|
flagError = True
|
|
|
|
|
break
|
|
|
|
@ -3716,6 +3900,10 @@ class servLdap(shareLdap):
|
|
|
|
|
self.setDaemonAutostart("dovecot")):
|
|
|
|
|
flagError = True
|
|
|
|
|
break
|
|
|
|
|
elif service == "jabber":
|
|
|
|
|
if not self.startDaemons('jabber',['ejabberd']):
|
|
|
|
|
flagError = True
|
|
|
|
|
break
|
|
|
|
|
else:
|
|
|
|
|
if not self.startDaemons(service,[service]):
|
|
|
|
|
flagError = True
|
|
|
|
@ -4362,6 +4550,13 @@ class cl_ldap(shareLdap):
|
|
|
|
|
'helpChapter':_("Mail service options"),
|
|
|
|
|
'help':_("new value of the COMMENT field")
|
|
|
|
|
},
|
|
|
|
|
{'progAccess':(5,),
|
|
|
|
|
'shortOption':"c",
|
|
|
|
|
'longOption':"comment",
|
|
|
|
|
'optVal':_("COMMENT"),
|
|
|
|
|
'helpChapter':_("Jabber service options"),
|
|
|
|
|
'help':_("new value of the COMMENT field (full name user)")
|
|
|
|
|
},
|
|
|
|
|
{'progAccess':(5,),
|
|
|
|
|
'shortOption':"e",
|
|
|
|
|
'longOption':"alt-emails",
|
|
|
|
@ -4383,6 +4578,13 @@ class cl_ldap(shareLdap):
|
|
|
|
|
'helpChapter':_("Unix service options"),
|
|
|
|
|
'help':_("force use GROUP as new primary group")
|
|
|
|
|
},
|
|
|
|
|
{'progAccess':(5,),
|
|
|
|
|
'shortOption':"g",
|
|
|
|
|
'longOption':"group",
|
|
|
|
|
'optVal':_("GROUP"),
|
|
|
|
|
'helpChapter':_("Jabber service options"),
|
|
|
|
|
'help':_("force use GROUP as new Jabber group")
|
|
|
|
|
},
|
|
|
|
|
{'progAccess':(5,),
|
|
|
|
|
'shortOption':"G",
|
|
|
|
|
'longOption':"groups",
|
|
|
|
@ -4532,7 +4734,7 @@ class cl_ldap(shareLdap):
|
|
|
|
|
'help':pcs(" mail", self.column_width,
|
|
|
|
|
"mail " + servName, self.consolewidth-self.column_width)
|
|
|
|
|
},
|
|
|
|
|
{'progAccess':(0,3,6,),
|
|
|
|
|
{'progAccess':(0,1,2,3,4,5,6,7,),
|
|
|
|
|
'helpChapter':_("Services"),
|
|
|
|
|
'help':pcs(" jabber", self.column_width,
|
|
|
|
|
"jabber " + servName, self.consolewidth-self.column_width)
|
|
|
|
@ -4867,8 +5069,9 @@ class tsOpt(cl_base.opt):
|
|
|
|
|
else:
|
|
|
|
|
self.handlerErrOpt()
|
|
|
|
|
# В случае остсутствия опций командной строки
|
|
|
|
|
if notOptError and not self.opt:
|
|
|
|
|
if notOptError and not self.opt and self.params.has_key('service'):
|
|
|
|
|
self.printErrorNotOpt()
|
|
|
|
|
self.flagHelp = True
|
|
|
|
|
|
|
|
|
|
def printErrorNotOpt(self):
|
|
|
|
|
"""Сообщение в случае отсутствия опций"""
|
|
|
|
|