|
|
|
@ -3085,7 +3085,7 @@ are incompatible, use one of the options"))
|
|
|
|
|
if email != altEmail:
|
|
|
|
|
attrDeleteFirst.append(
|
|
|
|
|
(ldap.MOD_DELETE, 'mailAlternateAddress',
|
|
|
|
|
altEmail))
|
|
|
|
|
altEmail))
|
|
|
|
|
i = 0
|
|
|
|
|
for altMail in altMails:
|
|
|
|
|
if "@" in altMail:
|
|
|
|
@ -3096,8 +3096,10 @@ option '-e'"))
|
|
|
|
|
mail = altMail
|
|
|
|
|
else:
|
|
|
|
|
mail = "%s@%s" %(altMail,self.clVars.Get("sr_mail_host"))
|
|
|
|
|
if self.searchUserToMail(mail) or\
|
|
|
|
|
self.searchGroupToMail(mail):
|
|
|
|
|
searchGroupMail = self.searchGroupToMail(mail)
|
|
|
|
|
if self.searchUserToMail(mail) or (searchGroupMail and\
|
|
|
|
|
(not (mail in altEmails) and len(searchGroupMail) == 1 or\
|
|
|
|
|
len(searchGroupMail) != 1)):
|
|
|
|
|
self.printERROR(
|
|
|
|
|
_("Alternate email address %s is found in Mail service")%\
|
|
|
|
|
str(mail) + " ...")
|
|
|
|
@ -3324,6 +3326,7 @@ in 'Replication/Mail' branch ...") %groupName)
|
|
|
|
|
primaryMail = ""
|
|
|
|
|
altMails = []
|
|
|
|
|
if options.has_key('e'):
|
|
|
|
|
altEmails = res[0][0][1]["mailAlternateAddress"]
|
|
|
|
|
altMails = options['e'].split(",")
|
|
|
|
|
for altMail in altMails:
|
|
|
|
|
if "@" in altMail:
|
|
|
|
@ -3336,11 +3339,13 @@ option '-e'"))
|
|
|
|
|
mail = "%s@%s" %(altMail,self.clVars.Get("sr_mail_host"))
|
|
|
|
|
if not primaryMail:
|
|
|
|
|
primaryMail = mail
|
|
|
|
|
if self.searchUserToMail(mail) or\
|
|
|
|
|
self.searchGroupToMail(mail):
|
|
|
|
|
self.printERROR(_("Alternate email address") + ": " +\
|
|
|
|
|
str(mail) + " " + _("is found in Mail service") +\
|
|
|
|
|
" ...")
|
|
|
|
|
searchUserMail = self.searchUserToMail(mail)
|
|
|
|
|
if self.searchGroupToMail(mail) or (searchUserMail and\
|
|
|
|
|
(not (mail in altEmails) and len(searchUserMail) == 1 or\
|
|
|
|
|
len(searchUserMail) != 1)):
|
|
|
|
|
self.printERROR(
|
|
|
|
|
_("Alternate email address %s is found in Mail service")%\
|
|
|
|
|
str(mail) + " ...")
|
|
|
|
|
return False
|
|
|
|
|
modAttrs.append((ldap.MOD_ADD, 'mailAlternateAddress', mail))
|
|
|
|
|
# Удаляем предыдущие адреса
|
|
|
|
@ -4121,6 +4126,12 @@ class servJabber(shareLdap):
|
|
|
|
|
"departmentNumber")
|
|
|
|
|
return resSearch
|
|
|
|
|
|
|
|
|
|
def searchUsersToHostName(self, hostName):
|
|
|
|
|
"""Находит всех пользователей с данным именем хоста"""
|
|
|
|
|
resSearch = self.searchLdapDN("*@%s" %hostName, self.relUsersDN,
|
|
|
|
|
"mail",["uid","mail"])
|
|
|
|
|
return resSearch
|
|
|
|
|
|
|
|
|
|
def searchUserToNameOrId(self, nameOrId):
|
|
|
|
|
"""Находит пользователя сервиса Jabber по имени или id"""
|
|
|
|
|
resSearch = self.searchUserToName(nameOrId)
|
|
|
|
@ -4157,7 +4168,42 @@ class servJabber(shareLdap):
|
|
|
|
|
userDN = self.addDN("uid="+uid, self.relUsersDN)
|
|
|
|
|
return self.modAttrsDN(userDN, modAttrs)
|
|
|
|
|
|
|
|
|
|
def renameJabberId(self, userName, newJabberId):
|
|
|
|
|
"""Изменяет jabber ID для пользователя"""
|
|
|
|
|
searchUser = self.searchUserToName(userName)
|
|
|
|
|
if not searchUser:
|
|
|
|
|
self.printERROR(_("User %s is not found in Jabber service")%\
|
|
|
|
|
str(userName) + " ...")
|
|
|
|
|
return False
|
|
|
|
|
modAttrs = []
|
|
|
|
|
if searchUser[0][0][1].has_key('mail'):
|
|
|
|
|
modAttrs.append((ldap.MOD_REPLACE, 'mail', newJabberId))
|
|
|
|
|
else:
|
|
|
|
|
modAttrs.append((ldap.MOD_ADD, 'mail', newJabberId))
|
|
|
|
|
userDN = self.addDN("uid="+userName, self.relUsersDN)
|
|
|
|
|
return self.modAttrsDN(userDN, modAttrs)
|
|
|
|
|
|
|
|
|
|
@adminConnectLdap
|
|
|
|
|
def setHostName(self, newHostName, oldHostName):
|
|
|
|
|
"""Заменяет пользователям имя хоста на новое"""
|
|
|
|
|
searchUsers = self.searchUsersToHostName(oldHostName)
|
|
|
|
|
if not searchUsers:
|
|
|
|
|
self.printWARNING(_("Host name %s not found in Jabber service")\
|
|
|
|
|
%oldHostName)
|
|
|
|
|
return True
|
|
|
|
|
flagError = False
|
|
|
|
|
for userFields in searchUsers:
|
|
|
|
|
newJabberId = userFields[0][1]['mail'][0].replace(oldHostName,
|
|
|
|
|
newHostName)
|
|
|
|
|
userName = userFields[0][1]['uid'][0]
|
|
|
|
|
if not self.renameJabberId(userName, newJabberId):
|
|
|
|
|
self.printERROR(_("Can not change host name for user %s \
|
|
|
|
|
in Jabber service"))
|
|
|
|
|
flagError = True
|
|
|
|
|
break
|
|
|
|
|
if flagError:
|
|
|
|
|
return False
|
|
|
|
|
return True
|
|
|
|
|
|
|
|
|
|
def addUsersGroupJabber(self, users, groupName, replaceFlag=False):
|
|
|
|
|
"""Добавляет пользователей из списка в Jabber группу"""
|
|
|
|
@ -5594,6 +5640,8 @@ class servLdap(shareLdap):
|
|
|
|
|
self.servSambaObj = servSamba()
|
|
|
|
|
# Сервис Mail
|
|
|
|
|
self.servMailObj = servMail()
|
|
|
|
|
# Сервис Jabber
|
|
|
|
|
self.servJabberObj = servJabber()
|
|
|
|
|
|
|
|
|
|
def savePrivateFile(self, fileName, data):
|
|
|
|
|
"""Записать файл с правами 0600"""
|
|
|
|
@ -5793,19 +5841,20 @@ outdated. If the backup is obsolete, use cl-backup."))
|
|
|
|
|
mailCrypt = ""
|
|
|
|
|
self.clVars.Set("sr_mail_crypt", mailCrypt, True)
|
|
|
|
|
# Настройка jabber cервиса
|
|
|
|
|
# Предыдущее имя хоста для Jabber
|
|
|
|
|
previousJabberHost = self.clVars.Get("sr_jabber_host")
|
|
|
|
|
if serviceUpdate in ["all","jabber"]:
|
|
|
|
|
# История для jabber
|
|
|
|
|
if options.has_key("history"):
|
|
|
|
|
history = options["history"].strip()
|
|
|
|
|
if history in ("on", "off"):
|
|
|
|
|
self.clVars.Set("sr_jabber_history", history)
|
|
|
|
|
else :
|
|
|
|
|
else:
|
|
|
|
|
self.printERROR(\
|
|
|
|
|
_("Command line incorrect, \
|
|
|
|
|
'history=%s' - error, to use 'history on' or 'history off'")\
|
|
|
|
|
%str(history) + " ...")
|
|
|
|
|
return False
|
|
|
|
|
|
|
|
|
|
# находим установленные сервисы
|
|
|
|
|
servInstalled = self.getServiceSetup()
|
|
|
|
|
if not servInstalled:
|
|
|
|
@ -5844,7 +5893,7 @@ outdated. If the backup is obsolete, use cl-backup."))
|
|
|
|
|
if service == "ldap":
|
|
|
|
|
continue
|
|
|
|
|
if service == "samba":
|
|
|
|
|
# Получаем от пользователя доверительные сети
|
|
|
|
|
# Получаем от п<EFBFBD>льзователя доверительные сети
|
|
|
|
|
# для сервиса Samba
|
|
|
|
|
if options.has_key("a") and\
|
|
|
|
|
not service in noInputAllowNetServices:
|
|
|
|
@ -5938,6 +5987,19 @@ it was added by the calculate-server")
|
|
|
|
|
if not self.restartLdapServer():
|
|
|
|
|
return False
|
|
|
|
|
self.printOK(_("Restarting service %s")%"LDAP")
|
|
|
|
|
if not flagError and serviceUpdate in ["all","jabber"]:
|
|
|
|
|
# Замена имени хоста для сервиса Jabber
|
|
|
|
|
if options.has_key("host"):
|
|
|
|
|
newHostName = options['host']
|
|
|
|
|
if not "." in newHostName:
|
|
|
|
|
newHostName = "%s.%s" %(newHostName,
|
|
|
|
|
self.clVars.Get('os_net_domain'))
|
|
|
|
|
if newHostName != previousJabberHost:
|
|
|
|
|
self.clVars.Set("sr_jabber_host",newHostName,True)
|
|
|
|
|
# Установка в LDAP ветке Jabber cервиса нового имени хоста
|
|
|
|
|
if not self.servJabberObj.setHostName(newHostName,
|
|
|
|
|
previousJabberHost):
|
|
|
|
|
return False
|
|
|
|
|
if not flagError and serviceUpdate in ["all","unix","samba","mail"]:
|
|
|
|
|
# создаем объект репликации
|
|
|
|
|
objRepl = servRepl()
|
|
|
|
@ -5970,6 +6032,9 @@ it was added by the calculate-server")
|
|
|
|
|
self.clVars.Write("sr_jabber_history",
|
|
|
|
|
self.clVars.Get("sr_jabber_history"),
|
|
|
|
|
True,"local")
|
|
|
|
|
self.clVars.Write("sr_jabber_host",
|
|
|
|
|
self.clVars.Get("sr_jabber_host"),
|
|
|
|
|
True,"local")
|
|
|
|
|
# Переменные для почты
|
|
|
|
|
if "mail" in servInstalled and serviceUpdate in ["all","mail"]:
|
|
|
|
|
self.clVars.Write("sr_mail_type",
|
|
|
|
@ -7782,6 +7847,12 @@ the password will be changed only for Samba account")
|
|
|
|
|
'help':_("enabled or disabled jabber history logging, default disable.\
|
|
|
|
|
(on/off)")
|
|
|
|
|
},
|
|
|
|
|
{'progAccess':(9,),
|
|
|
|
|
'optVal':"HOST",
|
|
|
|
|
'longOption':"host",
|
|
|
|
|
'helpChapter':_("Jabber service options"),
|
|
|
|
|
'help':_("jabber host, default - hostname")
|
|
|
|
|
},
|
|
|
|
|
{'progAccess':(9,),
|
|
|
|
|
'shortOption':"a",
|
|
|
|
|
'longOption':"allow",
|
|
|
|
@ -10195,7 +10266,6 @@ class tsOpt(cl_base.opt):
|
|
|
|
|
_("Try") + ' "' + sys.argv[0].split("/")[-1] + ' --help" ' +\
|
|
|
|
|
_("for more information.")
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def handlerParam(self,param):
|
|
|
|
|
# Обработчик хвостов (значение)
|
|
|
|
|
self.__iter += 1
|
|
|
|
|