|
|
|
@ -2752,15 +2752,208 @@ class servJabber(shareLdap):
|
|
|
|
|
self.servUnixObj = servUnix()
|
|
|
|
|
|
|
|
|
|
def searchGroupName(self, groupName):
|
|
|
|
|
"""Находит группу сервиса Unix по её имени"""
|
|
|
|
|
"""Находит группу сервиса Jabber по её имени"""
|
|
|
|
|
resSearch = self.searchLdapDN(groupName, self.relGroupsDN, "cn")
|
|
|
|
|
return resSearch
|
|
|
|
|
|
|
|
|
|
def searchUserToMail(self, mail):
|
|
|
|
|
"""Находит пользователя по почтовому адресу в сервисе Jabber"""
|
|
|
|
|
def searchGroupDesc(self, descr):
|
|
|
|
|
"""Находит группу сервиса Jabber по её description"""
|
|
|
|
|
resSearch = self.searchLdapDN(descr, self.relGroupsDN,
|
|
|
|
|
"departmentNumber")
|
|
|
|
|
return resSearch
|
|
|
|
|
|
|
|
|
|
def searchUserToJabberId(self, mail):
|
|
|
|
|
"""Находит пользователя по Jabber ID в сервисе Jabber"""
|
|
|
|
|
resSearch = self.searchLdapDN(mail, self.relUsersDN, "mail")
|
|
|
|
|
return resSearch
|
|
|
|
|
|
|
|
|
|
def searchUserToName(self, name):
|
|
|
|
|
"""Находит пользователя по имени в сервисе Jabber"""
|
|
|
|
|
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)
|
|
|
|
|
return resSearch
|
|
|
|
|
|
|
|
|
|
def searchJabberGroup(self, nameOrDesc):
|
|
|
|
|
"""Находит группу сервиса Jabber по названию или description"""
|
|
|
|
|
resSearch = self.searchGroupName(nameOrDesc)
|
|
|
|
|
if resSearch:
|
|
|
|
|
return resSearch
|
|
|
|
|
resSearch = self.searchGroupDesc(nameOrDesc)
|
|
|
|
|
return resSearch
|
|
|
|
|
|
|
|
|
|
def setUserGroup(self, userName, groupName):
|
|
|
|
|
"""Устанавливает Jabber группу для пользователя"""
|
|
|
|
|
groupSearch = self.searchJabberGroup(groupName)
|
|
|
|
|
if not groupSearch:
|
|
|
|
|
self.printERROR(_("Group name is not found in Jabber service") +\
|
|
|
|
|
" ...")
|
|
|
|
|
return False
|
|
|
|
|
userSearch = self.searchJabberUser(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]
|
|
|
|
|
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)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def addUsersGroupJabber(self, users, groupName):
|
|
|
|
|
"""Добавляет пользователей из списка в Jabber группу"""
|
|
|
|
|
groupSearch = self.searchJabberGroup(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)
|
|
|
|
|
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'):
|
|
|
|
|
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 not self.setUserGroup(userName, groupName):
|
|
|
|
|
flagFalse = True
|
|
|
|
|
break
|
|
|
|
|
if flagFalse:
|
|
|
|
|
return False
|
|
|
|
|
return True
|
|
|
|
|
|
|
|
|
|
def delUsersGroupJabber(self, users, groupName):
|
|
|
|
|
"""Удаляет пользователей из списка в Jabber группе"""
|
|
|
|
|
groupSearch = self.searchJabberGroup(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)
|
|
|
|
|
if userSearch[0][0][1].has_key('departmentNumber'):
|
|
|
|
|
modAttrs = ((ldap.MOD_DELETE, 'departmentNumber', None))
|
|
|
|
|
userDN = self.addDN("uid="+uid, self.relUsersDN)
|
|
|
|
|
return self.modAttrsDN(groupDN, modAttrs)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def modGroupJabberServer(self, groupName, options):
|
|
|
|
|
"""Модифицирует настройки группы пользователей Jabber"""
|
|
|
|
|
searchGroup = self.searchJabberGroup(groupName)
|
|
|
|
|
if not searchGroup:
|
|
|
|
|
self.printERROR(_("group name not found in Jabber service") +\
|
|
|
|
|
" ...")
|
|
|
|
|
return False
|
|
|
|
|
# Добавляем список пользователей в группу
|
|
|
|
|
if options.has_key('a'):
|
|
|
|
|
# добавляемые пользователи в группу
|
|
|
|
|
users = options['a'].split(',')
|
|
|
|
|
res = self.addUsersGroupJabber(users, groupName)
|
|
|
|
|
if res:
|
|
|
|
|
self.printSUCCESS(_("Appended list users to group") + " " +\
|
|
|
|
|
str(groupName) + " ...")
|
|
|
|
|
else:
|
|
|
|
|
self.printERROR(_("Can not append list users to group") +\
|
|
|
|
|
" " + str(groupName) + " ...")
|
|
|
|
|
return False
|
|
|
|
|
# Удаляем список пользователей из группы
|
|
|
|
|
if options.has_key('d'):
|
|
|
|
|
# удаляемые пользователи из группы
|
|
|
|
|
users = options['d'].split(',')
|
|
|
|
|
res = self.delUsersGroupJabber(users, groupName)
|
|
|
|
|
if res:
|
|
|
|
|
self.printSUCCESS(_("Deleted list users from group") + " " +\
|
|
|
|
|
str(groupName) + " ...")
|
|
|
|
|
else:
|
|
|
|
|
self.printERROR(_("Can not delete list users from 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:
|
|
|
|
|
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") +\
|
|
|
|
|
" ...")
|
|
|
|
|
return False
|
|
|
|
|
return True
|
|
|
|
|
|
|
|
|
|
@adminConnectLdap
|
|
|
|
|
def addGroupJabberServer(self, groupName, options):
|
|
|
|
|
"""Добавляет группу пользователей Jabber"""
|
|
|
|
@ -2794,10 +2987,10 @@ class servJabber(shareLdap):
|
|
|
|
|
def addUserJabberServer(self, userName, options):
|
|
|
|
|
"""Добавляет jabber пользователя"""
|
|
|
|
|
#jabber id
|
|
|
|
|
mail = "%s@%s.%s" %(userName,
|
|
|
|
|
jabberId = "%s@%s.%s" %(userName,
|
|
|
|
|
self.clVars.Get("net_host"),
|
|
|
|
|
self.clVars.Get("sys_domain"))
|
|
|
|
|
if self.searchUserToMail(mail):
|
|
|
|
|
if self.searchUserToJabberId(jabberId):
|
|
|
|
|
self.printERROR(_("User exists in Jabber service"))
|
|
|
|
|
return False
|
|
|
|
|
|
|
|
|
|