Исправлены ошибки связанные с добавлением групп в Samba сервис

git-svn-id: http://svn.calculate.ru/calculate2/calculate-server/trunk@1358 c91db197-33c1-4113-bf15-f8a5c547ca64
develop
asamoukin 15 years ago
parent bb7ddf374f
commit 7452043958

@ -1815,47 +1815,47 @@ class servUnix(shareLdap):
"""Ищет список групп из списка userGroups в LDAP
Список групп может состоять из чисел или названий групп
Возвращает (результат выполнения, список имен групп, сообщение о ошибке)
Возвращает (результат выполнения,словарь имен групп,сообщение о ошибке)
"""
userGroupNames = []
flagInt = True
userGroupNames = {}
flagError = False
gidErrors = []
groupErrors = []
for gid in userGroups:
try:
int(gid)
except:
flagInt = False
break
flagError = False
if flagInt:
gidError = ""
for gidNumber in userGroups:
res = self.searchUnixGid(gidNumber)
if not res:
gidError = gidNumber
flagError = True
continue
userGroupNames.append(res[0][0][1]['cn'][0])
if flagError:
errorMessage=_("Group number %s is not found in Unix service")\
%str(gidError)
if printError:
self.printERROR(errorMessage)
return (False, userGroupNames, errorMessage)
else:
groupError = ""
for groupName in userGroups:
groupName = gid
res = self.searchUnixGroupName(groupName)
if not res:
groupError = groupName
groupErrors.append(groupName)
flagError = True
continue
userGroupNames.append(res[0][0][1]['cn'][0])
if flagError:
errorMessage=_("Group name %s is not found in Unix service")\
%str(groupError)
userGroupNames[res[0][0][1]['cn'][0]]=\
res[0][0][1]['gidNumber'][0]
continue
gidNumber = gid
res = self.searchUnixGid(gidNumber)
if not res:
gidErrors.append(gidNumber)
flagError = True
continue
userGroupNames[res[0][0][1]['cn'][0]] = res[0][0][1]['gidNumber'][0]
if flagError:
errorMessage = ""
if groupErrors:
errorGroup=_("Group names (%s) is not found in Unix service")\
%", ".join(groupErrors)
errorMessage = errorGroup
if printError:
self.printERROR(errorGroup)
if gidErrors:
errorGid=_("Group numbers (%s) is not found in Unix service")\
%", ".join(gidErrors)
errorMessage += errorGid
if printError:
self.printERROR(errorMessage)
return (False, userGroupNames, errorMessage)
self.printERROR(errorGid)
return (False, userGroupNames, errorMessage)
return (True, userGroupNames, "")
def searchGroupsGroups(self, userGroups, printError=True):
@ -2139,11 +2139,13 @@ class servUnix(shareLdap):
userGid = options['g']
retCondUnix, userGidNamesUnix, errMessUnix =\
self.searchGroupsUnix([userGid], False)
userGidNamesUnix = userGidNamesUnix.keys()
userGidNamesSamba = False
# В случае вызова из Samba объекта
if callSamba:
retCondSamba, userGidNamesSamba, errMessSamba =\
self.servSambaObj.searchGroupsSamba([userGid], False)
userGidNamesSamba = userGidNamesSamba.keys()
userGidNamesPasswd = self.searchGroupsGroups([userGid], False)
if userGidNamesPasswd:
#Имя группы пользователя
@ -2706,18 +2708,21 @@ service"))
if callSamba:
retCondUnix, userGroupNames, errMessUnix =\
self.searchGroupsUnix([newFirstGroup],False)
userGroupNames = userGroupNames.keys()
if not userGroupNames:
retCondSamba ,userGroupNames, errMessSamba =\
self.servSambaObj.searchGroupsSamba([newFirstGroup],
False)
userGroupNames = userGroupNames.keys()
if not userGroupNames:
self.printERROR(\
_("Group %s is not found in Unix and Samba services")%\
str(groupName))
str(newFirstGroup))
return False
else:
retCondUnix, userGroupNames, errMessUnix =\
self.searchGroupsUnix([newFirstGroup])
userGroupNames = userGroupNames.keys()
if not retCondUnix:
return False
groupName = userGroupNames[0]
@ -2797,15 +2802,6 @@ service"))
else:
if printSuccess:
self.printSUCCESS(_("Moved home directory"))
if options.has_key('c'):
if printSuccess:
self.printSUCCESS(_("Modified comment"))
if options.has_key('s'):
if printSuccess:
self.printSUCCESS(_("Modified shell"))
if options.has_key('d'):
if printSuccess:
self.printSUCCESS(_("Modified home directory"))
if options.has_key('P') or options.has_key('p'):
# Изменим время последнего измения пароля пользователя
if not self.setShadowLastChange(userName):
@ -2813,18 +2809,23 @@ service"))
if printSuccess:
self.printSUCCESS(\
_("Modified user password of Unix service"))
if options.has_key('U'):
if printSuccess:
if printSuccess:
if options.has_key('g'):
self.printSUCCESS(_("Modified primary group"))
if options.has_key('c'):
self.printSUCCESS(_("Modified comment"))
if options.has_key('s'):
self.printSUCCESS(_("Modified shell"))
if options.has_key('d'):
self.printSUCCESS(_("Modified home directory"))
if options.has_key('U'):
self.printSUCCESS(_("Unlocked user %s")% str(userName))
if options.has_key('I'):
if printSuccess:
if options.has_key('I'):
self.printSUCCESS(\
_("User %s is invisible")% str(userName))
if options.has_key('V'):
if printSuccess:
_("User %s is invisible")% str(userName))
if options.has_key('V'):
self.printSUCCESS(_("User %s is visible")% str(userName))
if options.has_key('L'):
if printSuccess:
if options.has_key('L'):
self.printSUCCESS(_("Locked user %s")% str(userName))
return True
@ -2989,11 +2990,29 @@ service"))
def delUsersGroupUnix(self, users, groupName):
"""Удаление пользователей из списка из группы Unix"""
def getPrimaryUsers():
gidNumber = res[0][0][1]["gidNumber"][0]
searchUsers = self.searchUnixUserPrimGroup(gidNumber)
foundUserNames = []
if searchUsers:
for data in searchUsers:
foundUserNames.append(data[0][1]["uid"][0])
if foundUserNames:
primaryUsers = list(set(foundUserNames)&set(users))
if primaryUsers:
self.printERROR(_("%s is primary group")% groupName + " " +\
_("for users (%s)")%", ".join(primaryUsers))
return False
return True
res = self.searchUnixGroupName(groupName)
if not res :
self.printERROR(_("group name is not found in Unix service"))
return False
if not res[0][0][1].has_key("memberUid"):
if not getPrimaryUsers():
return False
self.printERROR(
_("Member list of group %s is empty")%str(groupName))
return False
@ -3004,6 +3023,8 @@ service"))
flagError = True
break
if flagError:
if not getPrimaryUsers():
return False
self.printERROR(
_("User %s is not found in group")%str(user)+" "+\
str(groupName))
@ -4749,7 +4770,8 @@ in Unix service") %str(jabberId))
if options.has_key('P') or options.has_key('p'):
self.printSUCCESS(_("Modified Jabber user password"))
if options.has_key('j'):
self.printSUCCESS(_("Modified JID"))
self.printSUCCESS(_("JID changed, a new JID is %s")\
%jabberId)
if printSuccess and options.has_key('i'):
self.printSUCCESS(_("Set image %s for Jabber user")%\
str(options['i']) + " " + str(userName))
@ -5278,13 +5300,32 @@ the calculate-server")
"""Cоединение с LDAP администратором Samba сервиса"""
return shareLdap.getLdapObjInFile(self, "samba")
def delUsersGroupSamba(self, users, groupName):
"""Удаление пользователей из списка из группы Samba"""
def getPrimaryUsers():
gidNumber = res[0][0][1]["gidNumber"][0]
searchUsers = self.servUnixObj.searchUnixUserPrimGroup(gidNumber)
foundUserNames = []
if searchUsers:
for data in searchUsers:
foundUserNames.append(data[0][1]["uid"][0])
if foundUserNames:
primaryUsers = list(set(foundUserNames)&set(users))
if primaryUsers:
self.printERROR(_("%s is primary group")% groupName + " " +\
_("for users (%s)")%", ".join(primaryUsers))
return False
return True
res = self.searchSambaGroupName(groupName)
if not res :
self.printERROR(_("group name is not found in Samba service"))
return False
if not res[0][0][1].has_key("memberUid"):
if not getPrimaryUsers():
return False
self.printERROR(
_("Member list of group %s is empty")%str(groupName))
return False
@ -5295,6 +5336,8 @@ the calculate-server")
flagError = True
break
if flagError:
if not getPrimaryUsers():
return False
self.printERROR(
_("User %s is not found in group")%str(user)+" "+\
str(groupName))
@ -5755,13 +5798,44 @@ if %%errorlevel%%==0 NET USE T: \\\\%s\\ftp' %(netbios,netbios,netbios)
# Ищем группы в Unix сервисе
rezultUnix, groupNamesUnix, errMessUnix =\
self.servUnixObj.searchGroupsUnix(userGroups, False)
grUnix = groupNamesUnix
groupNamesUnix = groupNamesUnix.keys()
# Если установлен сервис Samba
groupNamesSamba = []
gidNotFound = []
if checkSetup and self.isServiceSetup("samba", False):
rezultSamba, groupNamesSamba, errMessSamba =\
self.searchGroupsSamba(userGroups, False)
grSamba = groupNamesSamba
groupNamesSamba = groupNamesSamba.keys()
userGroupNames = []
for userGr in userGroups:
try:
int(userGr)
except:
userGroupNames.append(userGr)
continue
flagFound = False
for grName in grUnix.keys():
if grUnix[grName] == userGr:
userGroupNames.append(grName)
flagFound = True
if not flagFound:
for grName in grSamba.keys():
if grSamba[grName] == userGr:
userGroupNames.append(grName)
flagFound = True
if not flagFound:
gidNotFound.append(userGr)
if gidNotFound:
errorMessage = _("Groups numbers (%s) is not found in \
Samba and Unix services") %", ".join(gidNotFound)
# Выдаем ошибку
self.printERROR(errorMessage)
return False
# Если нет какой то из групп
exclGroup=set(userGroups)^(set(groupNamesUnix)|set(groupNamesSamba))
exclGroup=\
set(userGroupNames)^(set(groupNamesUnix)|set(groupNamesSamba))
if exclGroup:
errorMessage = _("Groups (%s) is not found in \
Samba and Unix services") %", ".join(exclGroup)
@ -5779,51 +5853,52 @@ Samba and Unix services") %", ".join(exclGroup)
resSearch = self.searchLdapDN(groupName, self.relGroupsDN, "cn")
return resSearch
def searchGroupsSamba(self, userGroups, printError=True):
"""Ищет список групп из списка userGroups в LDAP
Список групп может состоять из чисел или названий групп
Возвращает (результат выполнения, список имен групп, сообщение о ошибке)
Возвращает (результат выполнения,словарь имен групп,сообщение о ошибке)
"""
userGroupNames = []
flagInt = True
userGroupNames = {}
flagError = False
gidErrors = []
groupErrors = []
for gid in userGroups:
try:
int(gid)
except:
flagInt = False
break
flagError = False
if flagInt:
gidError = ""
for gidNumber in userGroups:
res = self.searchSambaGid(gidNumber)
if not res:
gidError = gidNumber
flagError = True
continue
userGroupNames.append(res[0][0][1]['cn'][0])
if flagError:
errorMessage=_("Group number %s is not found in Samba service")\
%str(gidError)
if printError:
self.printERROR(errorMessage)
return (False, userGroupNames, errorMessage)
else:
groupError = ""
for groupName in userGroups:
groupName = gid
res = self.searchSambaGroupName(groupName)
if not res:
groupError = groupName
groupErrors.append(groupName)
flagError = True
continue
userGroupNames.append(res[0][0][1]['cn'][0])
if flagError:
errorMessage=_("Group name %s is not found in Samba service")\
%str(groupError)
userGroupNames[res[0][0][1]['cn'][0]]=\
res[0][0][1]['gidNumber'][0]
continue
gidNumber = gid
res = self.searchSambaGid(gidNumber)
if not res:
gidErrors.append(gidNumber)
flagError = True
continue
userGroupNames[res[0][0][1]['cn'][0]] = res[0][0][1]['gidNumber'][0]
if flagError:
errorMessage = ""
if groupErrors:
errorGroup=_("Group names (%s) is not found in Samba service")\
%", ".join(groupErrors)
errorMessage = errorGroup
if printError:
self.printERROR(errorMessage)
return (False, userGroupNames, errorMessage)
self.printERROR(errorGroup)
if gidErrors:
errorGid=_("Group numbers (%s) is not found in Samba service")\
%", ".join(gidErrors)
errorMessage += errorGid
if printError:
self.printERROR(errorGid)
return (False, userGroupNames, errorMessage)
return (True, userGroupNames, "")
def searchSambaGid(self, groupId):
@ -6538,14 +6613,14 @@ Samba and Unix services") %", ".join(exclGroup)
self.printERROR(_("Can not modify Samba user password"))
return False
self.printSUCCESS(_("Modified Samba user password"))
# изменяем Unix и Samba группы в которые включен пользователь
if options.has_key("G"):
strGroups = options["G"]
optUnix = {'G':strGroups}
# Изменяем Unix группы пользователя
if options.has_key("g"):
optUnix = {'g':options['g']}
if not self.servUnixObj.modUserUnixServer(userName,
optUnix,False, True):
optUnix, True, True):
return False
# изменяем Unix и Samba группы в которые включен пользователь
if options.has_key("G"):
# Изменяем Samba группы пользователя
userGroups = options['G'].split(',')
data = self.searchUnixAndSambaGroups(userGroups, True)
@ -6553,6 +6628,12 @@ Samba and Unix services") %", ".join(exclGroup)
userGroupNamesUnix, userGroupNamesSamba = data
else:
return False
if userGroupNamesUnix:
optUnix = {'G':",".join(userGroupNamesUnix)}
# Изменяем Unix группы пользователя
if not self.servUnixObj.modUserUnixServer(userName,
optUnix,False, True):
return False
# Удаляем Samba группы у пользователя
if not self.delUserInGroup(userName):
return False
@ -8662,6 +8743,13 @@ the password will be changed only for Samba account")
},
{'progAccess':(5,),
'shortOption':"g",
'longOption':"gid",
'optVal':"GROUP",
'helpChapter':_("Samba service options"),
'help':_("force use GROUP as new primary group")
},
{'progAccess':(5,),
'shortOption':"g",
'longOption':"group",
'optVal':"GROUP",
'helpChapter':_("Jabber service options"),
@ -11534,7 +11622,7 @@ with another option."))
return (headers, data)
def getGroup(self, groupName, service):
"""Информация о группе"""
"""Инфо<EFBFBD>мация о группе"""
searchAttr = "cn"
searchStr = groupName
data, delData = self.genDataGroups(service)
@ -11703,10 +11791,12 @@ with another option."))
service)
attrApp = _("Supplementary groups")
if service == "unix":
memberGroups.insert(0,value)
if not value in memberGroups:
memberGroups.insert(0,value)
elif service == "samba":
if value:
memberGroups.insert(0,value)
if not value in memberGroups:
memberGroups.insert(0,value)
elif service == "mail":
attrApp = _("Group mail")
flagFirst = False
@ -11837,9 +11927,10 @@ with another option."))
(_("Name"),"description"),
(_("Mail"),"mail"),
(_("Alternate mail"),"mailAlternateAddress"),
(_("Hide hosts"),"filtersender"),
(_("Member UID"),"rfc822member")]
if fields == "short":
delData = [_("Mail"), _("Member UID")]
delData = [_("Mail"),_("Hide hosts"), _("Member UID")]
elif service == "jabber":
data = [(_("Group"),"cn"),
(_("Comment"),"description")]
@ -11874,17 +11965,18 @@ with another option."))
(_("Visible"),"shadowFlag"),
(_("Primary group"),"gidNumber"),
(_("Home directory"),"homeDirectory"),
(_("Shell"),"loginShell"),
(_("Password"),"userPassword"),
(_("Last change password"),"shadowLastChange"),
(_("Jabber ID"),"registeredAddress"),
(_("Mail"),"mail")]
if fields == "short":
delData = [_("Lock"),_("Visible"),_("Password"),
delData = [_("Lock"),_("Visible"),_("Shell"),_("Password"),
_("Last change password"),_("Jabber ID"),_("Mail")]
elif service == "samba":
data = [(_("Login"),"uid"),
(_("Name"),"displayName"),
(_("Lock"),"accountStatus"),
(_("Lock"),"sambaAcctFlags"),
(_("Password"),"sambaNTPassword"),
(_("Last change password"),"sambaPwdLastSet")]
if fields == "short":
@ -11900,7 +11992,7 @@ with another option."))
delData = [_("Lock"), _("Password"), _("Mail")]
elif service == "jabber":
data = [(_("Login"),"uid"),
(_("Name"),"cn"),
(_("Name"),"sn"),
(_("Group"),"departmentNumber"),
(_("Jabber ID"),"mail"),
(_("Lock"),"initials"),
@ -12034,7 +12126,7 @@ with another option."))
else:
retValue = _("No")
elif attr == "sambaAcctFlags":
if value == "[DU ]":
if "D" in value:
retValue = _("Yes")
else:
retValue = _("No")
@ -12074,6 +12166,7 @@ with another option."))
if service == "unix":
retCondUnix, userGidNamesLdap, errMessUnix =\
servObj.searchGroupsUnix([userGid], False)
userGidNamesLdap = userGidNamesLdap.keys()
userGidNamesPasswd = servObj.searchGroupsGroups([userGid], False)
if userGidNamesPasswd:
#Имя группы пользователя
@ -12087,6 +12180,7 @@ with another option."))
if service == "samba":
retCondSamba, userGidNamesLdap, errMessUnix =\
servObj.searchGroupsSamba([userGid], False)
userGidNamesLdap = userGidNamesLdap.keys()
if userGidNamesLdap:
#Имя группы пользователя
groupName = userGidNamesLdap[0]

Loading…
Cancel
Save