develop
asamoukin 16 years ago
parent 8279d0e788
commit ac57a5cacc

@ -1024,7 +1024,7 @@ class servUnix(shareLdap):
#Добавляем его в другие группы (опция G)
if options.has_key('G') and userGroupNames:
for group in userGroupNames:
self.addUserGroupUnix([userName],group)
self.addUsersGroupUnix([userName],group)
# не переделывать на else
if self.ldapObj.getError():
print _("Unix Error") + ": " + self.ldapObj.getError()
@ -1042,7 +1042,7 @@ class servUnix(shareLdap):
self.printSUCCESS(_("Added user in Unix service") + " ...")
return True
def addUserGroupUnix(self, users, groupName):
def addUsersGroupUnix(self, users, groupName):
"""Добавляет пользователей из списка в Unix группу"""
if not self.searchUnixGroupName(groupName):
self.printERROR(_("group name is not found in Unix service") +\
@ -1297,7 +1297,7 @@ class servUnix(shareLdap):
return False
flagError = False
for group in userGroupNames:
if not self.addUserGroupUnix([userName], group):
if not self.addUsersGroupUnix([userName], group):
flagError = True
break
if flagError:
@ -1313,7 +1313,7 @@ class servUnix(shareLdap):
return False
flagError = False
for group in userGroupNames:
if not self.addUserGroupUnix([userName], group):
if not self.addUsersGroupUnix([userName], group):
flagError = True
break
if flagError:
@ -1480,7 +1480,7 @@ class servUnix(shareLdap):
if options.has_key('a'):
# добавляемые пользователи в группу
users = options['a'].split(',')
res = self.addUserGroupUnix(users, groupName)
res = self.addUsersGroupUnix(users, groupName)
if res:
self.printSUCCESS(_("Appended list users to group") + " " +\
str(groupName) + " ...")
@ -1543,7 +1543,7 @@ class servUnix(shareLdap):
flagError = False
for group in userInGroups:
groupName = group[0][1]['cn'][0]
groupDN = self.addDN("cn="+group, self.relGroupsDN)
groupDN = self.addDN("cn=" + groupName, self.relGroupsDN)
if not self.modAttrsDN(groupDN, modAttrs):
flagError = True
break
@ -1552,6 +1552,7 @@ class servUnix(shareLdap):
else:
return True
def delUserGroupUnix(self, users, groupName):
"""Удаление пользователей из списка из группы Unix"""
res = self.searchUnixGroupName(groupName)
@ -1675,6 +1676,8 @@ class servMail(shareLdap):
"/usr/lib/calculate/calculate-server/ldif/mail_base.ldif"
self.ldifFileUser =\
"/usr/lib/calculate/calculate-server/ldif/mail_user.ldif"
self.ldifFileGroup =\
"/usr/lib/calculate/calculate-server/ldif/mail_group.ldif"
# Алгоритм шифрования пароля для Mail пользователя
self.userCrypt = "{SSHA}"
# Директория где хранятся письма
@ -1686,16 +1689,152 @@ class servMail(shareLdap):
# создаем объект сервиса Unix
self.servUnixObj = servUnix()
def searchGroupsMail(self, userGroups, printError=True):
"""Ищет список групп из списка userGroups в Mail сервисе
Список групп может состоять из названий групп или их почтовых адресов
Возвращает список названий групп
"""
userGroupNames = []
flagError = False
searchEmailGroup = True
searchNameGroup = True
for userGroup in userGroups:
if "@" in userGroup:
searchEmailGroup = self.searchGroupToMail(userGroup)
if not searchEmailGroup:
flagError = True
break
userGroupNames.append(searchEmailGroup[0][0][1]['cn'][0])
else:
searchNameGroup = self.searchMailGroupToName(userGroup)
if not searchNameGroup:
flagError = True
break
userGroupNames.append(userGroup)
if flagError:
if printError:
if not searchEmailGroup:
self.printERROR(_("Email addres") + ": " +\
str(userGroup) + " " +\
_("is not found in Mail service") + " ...")
elif not searchNameGroup:
self.printERROR(_("Group name") + ": " +\
str(userGroup) + " " +\
_("is not found in Mail service") + " ...")
return False
return userGroupNames
def searchMailGroupToName(self, groupName):
"""Находит группу сервиса Unix по её имени"""
resSearch = self.searchLdapDN(groupName, self.relGroupsDN, "cn")
return resSearch
def searchMailGroup(self, nameOrMali):
"""Находит группу сервиса Mail по имени или email"""
if "@" in nameOrMali:
resSearch = self.searchGroupToMail(nameOrMali)
else:
resSearch = self.searchMailGroupToName(nameOrMali)
return resSearch
def searchMailMember(self, nameOrMali, printError=True):
"""Ищет группы сервиса Unix в котрых есть данный пользователь
Поиск происходит по email или имени пользователя
"""
resSearchUser = self.searchMailUser(nameOrMali)
if not resSearchUser:
if printError:
self.printERROR(_("Mail user or email:")+ " " +\
str(nameOrMali) + " " +\
_("not found in Mail service") + " ...")
return False
userMail = resSearchUser[0][0][1]['mail'][0]
resSearchGroup = self.searchLdapDN(userMail, self.relGroupsDN,
"rfc822member")
return (userMail, resSearchGroup)
def delUserInGroup(self, userName):
"""Удаление из групп в которые входит пользователь"""
resSearch = self.searchMailMember(userName)
if not resSearch:
return False
userMail = resSearch[0]
userInGroups = resSearch[1]
modAttrs = [(ldap.MOD_DELETE, 'rfc822member', userMail)]
flagError = False
for group in userInGroups:
groupName = group[0][1]['cn'][0]
groupDN = self.addDN("cn=" + groupName, self.relGroupsDN)
if not self.modAttrsDN(groupDN, modAttrs):
flagError = True
break
if flagError:
return False
else:
return True
def modUserMailServer(self,userName, options):
"""Модифицирует настройки пользователя Mail в LDAP"""
res = self.searchMailUserToName(userName)
if not res:
self.printERROR(_("User") + " " + str(userName) + " " +\
_("not found in Mail service") + " ...")
return False
# Новые группы в которые входит пользователь
if options.has_key('G'):
userGroups = options['G'].split(',')
#список имен добавляемых групп
userGroupNames = self.searchGroupsMail(userGroups)
if not userGroupNames:
return False
# Удаляем пользователя из групп в которые он входит
if not self.delUserInGroup(userName):
return False
flagError = False
for group in userGroupNames:
if not self.addUsersGroupMail([userName], group):
flagError = True
break
if flagError:
return False
self.printSUCCESS(_("Replace list of supplementary group") +\
" ...")
@adminConnectLdap
def addGroupMailServer(self, groupName, options):
"""Добавляет группу пользователей Mail"""
pass
#resGroup = self.searchGroupToMail(groupName)
#resUser =
if self.searchMailGroupToName(groupName):
self.printERROR(_("group name")+ " " + str(groupName) + " " +\
_("found in Mail dervice") + " ...")
return False
mail = "%s@%s.%s" %(groupName,
self.clVars.Get("net_host"),
self.clVars.Get("sys_domain"))
if self.searchUserToMail(mail) or\
self.searchGroupToMail(mail):
self.printERROR(_("Email addres") + ": " + str(mail) +\
" " + _("is found in Mail service") + " ...")
return False
self.clVars.Set("soft_ldap_group_name",groupName)
ldifFile = self.ldifFileGroup
groupLdif = self.createLdif(ldifFile)
if not groupLdif:
print self.getError()
return False
if not self.ldapObj.getError():
self.ldapObj.ldapAdd(groupLdif)
if self.ldapObj.getError():
print _("LDAP Error") + ": " + self.ldapObj.getError()
return False
self.printSUCCESS(_("Added group in Mail service") + " ...")
return True
def modUserMailPasswd(self, userName, options):
"""Устанавливает пароль Mail пользователя и меняет его опции"""
res = self.searchMailUser(userName)
res = self.searchMailUserToName(userName)
if not res:
self.printERROR(
_("User %s is not found in Mail service") % str(userName) +\
@ -1746,8 +1885,30 @@ class servMail(shareLdap):
os.chown(mailDir,uid,gid)
return True
def searchUsersInGroupMail(self, usersNames, groupName):
"""Ищет спиcок пользователей в группе, ищет в LDAP
В случае успеха выводит список найденных пользователей
если нет группы False
если ничего не найдено пустой список
"""
res = self.searchMailGroupToName(groupName)
if not res:
return False
else:
findUsers = []
if res[0][0][1].has_key('rfc822member'):
usersInGroup = res[0][0][1]['rfc822member']
for userName in usersNames:
userMail = "%s@%s.%s" %(userName,
self.clVars.Get("net_host"),
self.clVars.Get("sys_domain"))
if userMail in usersInGroup:
findUsers.append(userName)
return findUsers
def searchMailUser(self, userName):
def searchMailUserToName(self, userName):
"""Находит пользователя сервиса Mail по имени"""
resSearch = self.searchLdapDN(userName, self.relUsersDN, "uid")
return resSearch
@ -1760,6 +1921,14 @@ class servMail(shareLdap):
"mailAlternateAddress")
return resSearch
def searchMailUser(self, nameOrMali):
"""Находит пользователя сервиса Mail по имени или email"""
if "@" in nameOrMali:
resSearch = self.searchUserToMail(nameOrMali)
else:
resSearch = self.searchMailUserToName(nameOrMali)
return resSearch
def searchGroupToMail(self, mail):
"""Находит группу по ее почтовому адресу"""
resSearch = self.searchLdapDN(mail, self.relGroupsDN, "mail")
@ -1768,6 +1937,39 @@ class servMail(shareLdap):
"mailAlternateAddress")
return resSearch
def addUsersGroupMail(self, users, groupName):
"""Добавляет пользователей из списка в Mail группу"""
if not self.searchMailGroupToName(groupName):
self.printERROR(_("Group name not found in Mail service ..."))
return False
flagFalse = False
for userName in users:
if not self.searchMailUserToName(userName):
self.printERROR(_("User") + " " + str(userName) + " " +\
_("not found in Mail service" +" ..."))
flagFalse = True
break
if flagFalse:
return False
foundUsersMail = self.searchUsersInGroupMail(users, groupName)
foundUsers = []
if foundUsersMail:
foundUsers = foundUsersMail
addUsers = []
for user in users:
if not(user in foundUsers):
addUsers.append(user)
modAttrs = []
for userName in addUsers:
userMail = "%s@%s.%s" %(userName,
self.clVars.Get("net_host"),
self.clVars.Get("sys_domain"))
modAttrs.append((ldap.MOD_ADD, 'rfc822member', userMail))
if modAttrs:
groupDN = self.addDN("cn="+groupName, self.relGroupsDN)
return self.modAttrsDN(groupDN, modAttrs)
return True
@adminConnectLdap
def addUserMailServer(self, userName, options):
"""Добавляет почтового пользователя в LDAP-сервер"""
@ -1789,6 +1991,18 @@ class servMail(shareLdap):
" ...")
return False
modAttrs.append((ldap.MOD_ADD, 'mailAlternateAddress', mail))
if self.searchMailUserToName(userName):
self.printERROR(_("User exists in Mail service"))
return False
else:
mail = "%s@%s.%s" %(userName,
self.clVars.Get("net_host"),
self.clVars.Get("sys_domain"))
if self.searchUserToMail(mail) or\
self.searchGroupToMail(mail):
self.printERROR(_("Email addres") + ": " + str(mail) +\
" " + _("is found in Mail service") + " ...")
return False
resUnix = self.servUnixObj.searchUnixUser(userName)
resPwd = self.servUnixObj.searchPasswdUser(userName)
# Пароль пользователя почты
@ -1813,15 +2027,6 @@ class servMail(shareLdap):
_("User %s is not found in Mail service") % str(userName) +\
" ...")
return False
if self.searchMailUser(userName):
self.printERROR(_("User exists in Mail service"))
return False
elif self.searchUserToMail(userName) or\
self.searchGroupToMail(userName):
self.printERROR(\
_("User name %s is found in Mail service") %\
str(userName) + "...")
return False
self.clVars.Set("soft_ldap_user_login", userName)
#Полное имя пользователя
fullNameUser = self.servUnixObj.fullNameUser
@ -2410,7 +2615,7 @@ class servLdap(shareLdap):
# получаем ldif текст всей базы LDAP
ldifText = self.fullElementDNtoText("")
if not ldifText:
self.printError("Not found or empty service Unix DN")
self.printERROR("Not found or empty service Unix DN")
return False
# генерируем название файла архива
@ -2424,7 +2629,7 @@ class servLdap(shareLdap):
# находим пути к профилям установленных сервисов
servicePaths, servInstalled = self.getServiceSetupPathProfiles()
if not servicePaths:
self.printError("Services are not installed")
self.printERROR("Services are not installed")
return False
# Все файлы которые нужно заархивировать
allArchFiles = []
@ -3090,6 +3295,13 @@ group already exists")
'helpChapter':_("Service Unix options"),
'help':_("new list of supplementary GROUPS")
},
{'progAccess':(5,),
'shortOption':"G",
'longOption':"groups",
'optVal':"GROUPS",
'helpChapter':_("Service Mail options"),
'help':_("new list of supplementary email GROUPS")
},
{'progAccess':(5,),
'shortOption':"a",
'longOption':"append",
@ -3097,6 +3309,13 @@ group already exists")
'helpChapter':_("Service Unix options"),
'help':_("append the user to the supplemental GROUPS")
},
{'progAccess':(5,),
'shortOption':"a",
'longOption':"append",
'optVal':"GROUPS",
'helpChapter':_("Service Mail options"),
'help':_("append the user to the supplemental email GROUPS")
},
{'progAccess':(5,),
'shortOption':"m",
'longOption':"move-home",

Loading…
Cancel
Save