|
|
|
@ -136,6 +136,7 @@ class report():
|
|
|
|
|
|
|
|
|
|
сначала строки будет вставлено char[1:] в конце строки char[:-1]
|
|
|
|
|
"""
|
|
|
|
|
lineUnicode = cl_utils._toUNICODE(line)
|
|
|
|
|
prevPos = 0
|
|
|
|
|
convLine = char[1:]
|
|
|
|
|
lenLenCols = len(lenCols)
|
|
|
|
@ -145,9 +146,9 @@ class report():
|
|
|
|
|
insertChar = char[:-1]
|
|
|
|
|
else:
|
|
|
|
|
insertChar = char
|
|
|
|
|
convLine += line[prevPos:pos] + insertChar
|
|
|
|
|
convLine += lineUnicode[prevPos:pos] + insertChar
|
|
|
|
|
prevPos = pos + 1
|
|
|
|
|
return convLine
|
|
|
|
|
return convLine.encode("UTF-8")
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def adminConnectLdap(fun):
|
|
|
|
@ -8197,13 +8198,27 @@ the password will be changed only for Samba account")
|
|
|
|
|
},
|
|
|
|
|
{'progAccess':(14,),
|
|
|
|
|
'shortOption':"u",
|
|
|
|
|
'longOption':"users",
|
|
|
|
|
'helpChapter':_("Common options"),
|
|
|
|
|
'help':_("information about users")
|
|
|
|
|
},
|
|
|
|
|
{'progAccess':(14,),
|
|
|
|
|
{'progAccess':(14,),
|
|
|
|
|
'shortOption':"U",
|
|
|
|
|
'optVal':"LOGIN",
|
|
|
|
|
'helpChapter':_("Common options"),
|
|
|
|
|
'help':_("information about user")
|
|
|
|
|
},
|
|
|
|
|
{'progAccess':(14,),
|
|
|
|
|
'shortOption':"g",
|
|
|
|
|
'longOption':"groups",
|
|
|
|
|
'helpChapter':_("Common options"),
|
|
|
|
|
'help':_("information about groups")
|
|
|
|
|
},
|
|
|
|
|
{'progAccess':(14,),
|
|
|
|
|
'shortOption':"G",
|
|
|
|
|
'optVal':"GROUP",
|
|
|
|
|
'helpChapter':_("Common options"),
|
|
|
|
|
'help':_("information about group")
|
|
|
|
|
},
|
|
|
|
|
{'progAccess':(14,),
|
|
|
|
|
'longOption':"full",
|
|
|
|
@ -10484,6 +10499,28 @@ class cl_info(cl_utils2.cl_smartcon):
|
|
|
|
|
|
|
|
|
|
def getInfoServer(self, options, service):
|
|
|
|
|
"""Выводит на печать информацию"""
|
|
|
|
|
strService = service.capitalize()
|
|
|
|
|
if service == "ftp":
|
|
|
|
|
strService = service.upper()
|
|
|
|
|
# Информация о пользователе
|
|
|
|
|
if options.has_key("U"):
|
|
|
|
|
userName = options["U"]
|
|
|
|
|
data = self.getUser(userName, service)
|
|
|
|
|
if not data:
|
|
|
|
|
return False
|
|
|
|
|
headerList, dataList = data
|
|
|
|
|
title=_("Information about user %s") %userName + " " +\
|
|
|
|
|
_("for service %s") %strService
|
|
|
|
|
# Информация о группе
|
|
|
|
|
if options.has_key("G"):
|
|
|
|
|
groupName = options["G"]
|
|
|
|
|
data = self.getGroup(groupName, service)
|
|
|
|
|
if not data:
|
|
|
|
|
return False
|
|
|
|
|
headerList, dataList = data
|
|
|
|
|
title=_("Information about group %s") %groupName + " " +\
|
|
|
|
|
_("for service %s") %strService
|
|
|
|
|
# Информация о пользователях
|
|
|
|
|
if options.has_key("u"):
|
|
|
|
|
fields = "short"
|
|
|
|
|
if options.has_key("full"):
|
|
|
|
@ -10492,16 +10529,20 @@ class cl_info(cl_utils2.cl_smartcon):
|
|
|
|
|
if not data:
|
|
|
|
|
return False
|
|
|
|
|
headerList, dataList = data
|
|
|
|
|
title=_("All users in LDAP for service %s")%service.capitalize()
|
|
|
|
|
|
|
|
|
|
title=_("All users in LDAP for service %s")%strService
|
|
|
|
|
# Информация о группах
|
|
|
|
|
elif options.has_key("g"):
|
|
|
|
|
data = self.getAllGroups(service)
|
|
|
|
|
fields = "short"
|
|
|
|
|
if options.has_key("full"):
|
|
|
|
|
fields = "full"
|
|
|
|
|
data = self.getAllGroups(fields, service)
|
|
|
|
|
if not data:
|
|
|
|
|
return False
|
|
|
|
|
headerList, dataList = data
|
|
|
|
|
title=_("All groups in LDAP for service %s")%service.capitalize()
|
|
|
|
|
title=_("All groups in LDAP for service %s")%strService
|
|
|
|
|
|
|
|
|
|
if options.has_key("u") or options.has_key("g"):
|
|
|
|
|
if options.has_key("U") or options.has_key("G") or\
|
|
|
|
|
options.has_key("u") or options.has_key("g"):
|
|
|
|
|
repObj = report(title, headerList, dataList)
|
|
|
|
|
repObj.printReport()
|
|
|
|
|
#print users
|
|
|
|
@ -10519,7 +10560,7 @@ with another option."))
|
|
|
|
|
return False
|
|
|
|
|
|
|
|
|
|
def getQueryLDAP(self, service, branch, searchAttr, searchStr,
|
|
|
|
|
retrAttrs=None):
|
|
|
|
|
retrAttrs=None, returnClVars=False):
|
|
|
|
|
"""Выдает данные из LDAP"""
|
|
|
|
|
branchData = {'users':'relUsersDN',
|
|
|
|
|
'groups':'relGroupsDN',
|
|
|
|
@ -10544,20 +10585,160 @@ with another option."))
|
|
|
|
|
return False
|
|
|
|
|
searchRes = servObj.searchLdapDN(searchStr, getattr(servObj, relAttr),
|
|
|
|
|
searchAttr, retrAttrs)
|
|
|
|
|
if returnClVars:
|
|
|
|
|
return (servObj.clVars, searchRes)
|
|
|
|
|
return searchRes
|
|
|
|
|
|
|
|
|
|
def getAllGroups(self, service):
|
|
|
|
|
def getGroup(self, groupName, service):
|
|
|
|
|
"""Информация о группе"""
|
|
|
|
|
searchAttr = "cn"
|
|
|
|
|
searchStr = groupName
|
|
|
|
|
data, delData = self.genDataGroups(service)
|
|
|
|
|
if not data:
|
|
|
|
|
self.printERROR(_("Incorrect service %s") %service.capitalize())
|
|
|
|
|
return False
|
|
|
|
|
headers = ["ATTR","VALUE"]
|
|
|
|
|
attributes = map(lambda x: x[0], data)
|
|
|
|
|
retrAttrs = map(lambda x: x[1], data)
|
|
|
|
|
retClVars=False
|
|
|
|
|
searchRes = self.getQueryLDAP(service, "groups", searchAttr,
|
|
|
|
|
searchStr, retrAttrs)
|
|
|
|
|
if not searchRes:
|
|
|
|
|
return (headers , [])
|
|
|
|
|
if service == "jabber":
|
|
|
|
|
servObj = servJabber()
|
|
|
|
|
resMemberSearch = servObj.searchUsersToGroup(groupName)
|
|
|
|
|
if resMemberSearch:
|
|
|
|
|
memberUid = []
|
|
|
|
|
for dataGroup in resMemberSearch:
|
|
|
|
|
memberUid.append(dataGroup[0][1]['uid'][0])
|
|
|
|
|
for i in searchRes:
|
|
|
|
|
i[0][1]['memberUid'] = memberUid
|
|
|
|
|
data.append(("MEMBER_UID","memberUid"))
|
|
|
|
|
attributes = map(lambda x: x[0], data)
|
|
|
|
|
retrAttrs = map(lambda x: x[1], data)
|
|
|
|
|
data = []
|
|
|
|
|
lenRetrAttrs = len(retrAttrs)
|
|
|
|
|
for info in searchRes:
|
|
|
|
|
for i in range(lenRetrAttrs):
|
|
|
|
|
attr = retrAttrs[i]
|
|
|
|
|
attrName = attributes[i]
|
|
|
|
|
if attr in info[0][1]:
|
|
|
|
|
ldapValue = info[0][1][attr]
|
|
|
|
|
# Изменяем значения аттрибутов для вывода на печать
|
|
|
|
|
ldapValue[0] = self.modGroupAttr(attr, ldapValue[0], service)
|
|
|
|
|
flagFirst = False
|
|
|
|
|
for value in ldapValue:
|
|
|
|
|
if not flagFirst:
|
|
|
|
|
data.append((attrName, value))
|
|
|
|
|
flagFirst = True
|
|
|
|
|
else:
|
|
|
|
|
data.append(("", value))
|
|
|
|
|
else:
|
|
|
|
|
data.append((attrName, "N"))
|
|
|
|
|
return (headers, data)
|
|
|
|
|
|
|
|
|
|
def getUser(self, userName, service):
|
|
|
|
|
"""Информация о пользователе"""
|
|
|
|
|
searchAttr = "uid"
|
|
|
|
|
searchStr = userName
|
|
|
|
|
data, delData = self.genDataUsers(service)
|
|
|
|
|
if not data:
|
|
|
|
|
self.printERROR(_("Incorrect service %s") %service.capitalize())
|
|
|
|
|
return False
|
|
|
|
|
headers = ["ATTR","VALUE"]
|
|
|
|
|
attributes = map(lambda x: x[0], data)
|
|
|
|
|
retrAttrs = map(lambda x: x[1], data)
|
|
|
|
|
retClVars=False
|
|
|
|
|
if service in ["mail", "samba"]:
|
|
|
|
|
retClVars=True
|
|
|
|
|
searchRes = self.getQueryLDAP(service, "users", searchAttr,
|
|
|
|
|
searchStr, retrAttrs, retClVars)
|
|
|
|
|
if not searchRes:
|
|
|
|
|
return (headers , [])
|
|
|
|
|
if service in ["mail", "samba"]:
|
|
|
|
|
clVars, searchRes = searchRes
|
|
|
|
|
if not searchRes:
|
|
|
|
|
return (headers , [])
|
|
|
|
|
# Добавляем директорию хранения писем для сервиса mail
|
|
|
|
|
if service == "mail":
|
|
|
|
|
for i in searchRes:
|
|
|
|
|
i[0][1]['homeDirectory'] = [os.path.join(\
|
|
|
|
|
clVars.Get("sr_mail_path"),i[0][1]['uid'][0])]
|
|
|
|
|
data.append(("HOME","homeDirectory"))
|
|
|
|
|
if service == "samba":
|
|
|
|
|
for i in searchRes:
|
|
|
|
|
i[0][1]['winProfPath'] = [os.path.join(\
|
|
|
|
|
clVars.Get("sr_samba_winprof_path"),
|
|
|
|
|
i[0][1]['uid'][0])]
|
|
|
|
|
i[0][1]['linProfPath'] = [os.path.join(\
|
|
|
|
|
clVars.Get("sr_samba_linprof_path"),
|
|
|
|
|
i[0][1]['uid'][0])]
|
|
|
|
|
i[0][1]['homePath'] = [os.path.join(\
|
|
|
|
|
clVars.Get("sr_samba_home_path"),
|
|
|
|
|
i[0][1]['uid'][0])]
|
|
|
|
|
i[0][1]['winLogonPath'] = [os.path.join(\
|
|
|
|
|
clVars.Get("sr_samba_winlogon_path"),
|
|
|
|
|
i[0][1]['uid'][0])]
|
|
|
|
|
i[0][1]['sharePath'] = [os.path.join(\
|
|
|
|
|
clVars.Get("sr_samba_share_path"),
|
|
|
|
|
i[0][1]['uid'][0])]
|
|
|
|
|
data.append(("WIN_PROF","winProfPath"))
|
|
|
|
|
data.append(("LIN_PROF","linProfPath"))
|
|
|
|
|
data.append(("HOME","homePath"))
|
|
|
|
|
data.append(("WIN_LOGON","winLogonPath"))
|
|
|
|
|
data.append(("SHARE","sharePath"))
|
|
|
|
|
attributes = map(lambda x: x[0], data)
|
|
|
|
|
retrAttrs = map(lambda x: x[1], data)
|
|
|
|
|
|
|
|
|
|
data = []
|
|
|
|
|
lenRetrAttrs = len(retrAttrs)
|
|
|
|
|
for info in searchRes:
|
|
|
|
|
for i in range(lenRetrAttrs):
|
|
|
|
|
attr = retrAttrs[i]
|
|
|
|
|
attrName = attributes[i]
|
|
|
|
|
if attr in info[0][1]:
|
|
|
|
|
ldapValue = info[0][1][attr]
|
|
|
|
|
# Изменяем значения аттрибутов для вывода на печать
|
|
|
|
|
ldapValue[0] = self.modUserAttr(attr, ldapValue[0], service)
|
|
|
|
|
flagFirst = False
|
|
|
|
|
for value in ldapValue:
|
|
|
|
|
if not flagFirst:
|
|
|
|
|
data.append((attrName, value))
|
|
|
|
|
flagFirst = True
|
|
|
|
|
else:
|
|
|
|
|
data.append(("", value))
|
|
|
|
|
if (service == "unix" and attr == "gidNumber") or\
|
|
|
|
|
(service == "mail" and attr == "mailAlternateAddress"):
|
|
|
|
|
memberGroups = self._getUserMemberGroups(userName,
|
|
|
|
|
service)
|
|
|
|
|
attrApp = "GROUPS"
|
|
|
|
|
if service == "unix":
|
|
|
|
|
memberGroups.insert(0,value)
|
|
|
|
|
elif service == "mail":
|
|
|
|
|
attrApp = "GROUP_MAIL"
|
|
|
|
|
flagFirst = False
|
|
|
|
|
for value in memberGroups:
|
|
|
|
|
if not flagFirst:
|
|
|
|
|
data.append((attrApp, value))
|
|
|
|
|
flagFirst = True
|
|
|
|
|
else:
|
|
|
|
|
data.append(("", value))
|
|
|
|
|
else:
|
|
|
|
|
data.append((attrName, "N"))
|
|
|
|
|
return (headers, data)
|
|
|
|
|
|
|
|
|
|
def getAllGroups(self, fields, service):
|
|
|
|
|
"""Выдает список всех групп и пользователей"""
|
|
|
|
|
searchAttr = "cn"
|
|
|
|
|
searchStr = "*"
|
|
|
|
|
if service == "unix":
|
|
|
|
|
data = [("GROUP","cn"),
|
|
|
|
|
("NAME","description"),
|
|
|
|
|
("GID","gidNumber"),
|
|
|
|
|
("MEMBER","memberUid")]
|
|
|
|
|
else:
|
|
|
|
|
self.printERROR(_("Incorrect service %s") %service.capitalize())
|
|
|
|
|
data, delData = self.genDataGroups(service, fields)
|
|
|
|
|
if not data:
|
|
|
|
|
self.printWARNING(_("Service %s has no groups")\
|
|
|
|
|
%service.capitalize())
|
|
|
|
|
return False
|
|
|
|
|
if fields == "short":
|
|
|
|
|
data = filter(lambda x: not x[0] in delData, data)
|
|
|
|
|
headers = map(lambda x: x[0], data)
|
|
|
|
|
retrAttrs = map(lambda x: x[1], data)
|
|
|
|
|
groups = []
|
|
|
|
@ -10580,10 +10761,33 @@ with another option."))
|
|
|
|
|
groups.append(listAttr)
|
|
|
|
|
return (headers, groups)
|
|
|
|
|
|
|
|
|
|
def getAllUsers(self, fields, service):
|
|
|
|
|
"""Выдает список login-ов всех пользователей сервиса"""
|
|
|
|
|
searchAttr = "uid"
|
|
|
|
|
searchStr = "*"
|
|
|
|
|
def genDataGroups(self, service, fields='full'):
|
|
|
|
|
"""Формирует поля нужные для вывода информации о группе"""
|
|
|
|
|
data = []
|
|
|
|
|
delData = []
|
|
|
|
|
if service == "unix":
|
|
|
|
|
data = [("GROUP","cn"),
|
|
|
|
|
("NAME","description"),
|
|
|
|
|
("GID","gidNumber"),
|
|
|
|
|
("MEMBER_UID","memberUid")]
|
|
|
|
|
if fields == "short":
|
|
|
|
|
delData = ["MEMBER_UID"]
|
|
|
|
|
elif service == "mail":
|
|
|
|
|
data = [("GROUP","cn"),
|
|
|
|
|
("NAME","description"),
|
|
|
|
|
("MAIL","mail"),
|
|
|
|
|
("ALT_MAIL","mailAlternateAddress"),
|
|
|
|
|
("MEMBER_UID","rfc822member")]
|
|
|
|
|
if fields == "short":
|
|
|
|
|
delData = ["MAIL", "MEMBER_UID"]
|
|
|
|
|
elif service == "jabber":
|
|
|
|
|
data = [("GROUP","cn"),
|
|
|
|
|
("COMMENT","description")]
|
|
|
|
|
return (data, delData)
|
|
|
|
|
|
|
|
|
|
def genDataUsers(self, service, fields='full'):
|
|
|
|
|
"""Формирует поля нужные для вывода информации о пользователе"""
|
|
|
|
|
data = []
|
|
|
|
|
delData = []
|
|
|
|
|
if service == "unix":
|
|
|
|
|
data = [("LOGIN","uid"),
|
|
|
|
@ -10603,7 +10807,7 @@ with another option."))
|
|
|
|
|
data = [("LOGIN","uid"),
|
|
|
|
|
("NAME","displayName"),
|
|
|
|
|
("LOCK","accountStatus"),
|
|
|
|
|
("PWD",""),
|
|
|
|
|
("PWD","sambaNTPassword"),
|
|
|
|
|
("DATE_PWD","sambaPwdLastSet")]
|
|
|
|
|
elif service == "mail":
|
|
|
|
|
data = [("LOGIN","uid"),
|
|
|
|
@ -10618,10 +10822,11 @@ with another option."))
|
|
|
|
|
data = [("LOGIN","uid"),
|
|
|
|
|
("NAME","cn"),
|
|
|
|
|
("LOCK","initials"),
|
|
|
|
|
("GROUP","departmentNumber"),
|
|
|
|
|
("PWD","userPassword"),
|
|
|
|
|
("JID","mail")]
|
|
|
|
|
if fields == "short":
|
|
|
|
|
delData = ["LOCK", "PWD"]
|
|
|
|
|
delData = ["LOCK", "GROUP", "PWD"]
|
|
|
|
|
elif service == "ftp":
|
|
|
|
|
data = [("LOGIN","uid"),
|
|
|
|
|
("NAME","cn"),
|
|
|
|
@ -10631,7 +10836,14 @@ with another option."))
|
|
|
|
|
("PWD","userPassword")]
|
|
|
|
|
if fields == "short":
|
|
|
|
|
delData = ["UID", "PWD", "GROUP"]
|
|
|
|
|
else:
|
|
|
|
|
return (data, delData)
|
|
|
|
|
|
|
|
|
|
def getAllUsers(self, fields, service):
|
|
|
|
|
"""Выдает список login-ов всех пользователей сервиса"""
|
|
|
|
|
searchAttr = "uid"
|
|
|
|
|
searchStr = "*"
|
|
|
|
|
data, delData = self.genDataUsers(service, fields)
|
|
|
|
|
if not data:
|
|
|
|
|
self.printERROR(_("Incorrect service %s") %service.capitalize())
|
|
|
|
|
return False
|
|
|
|
|
if fields == "short":
|
|
|
|
@ -10640,58 +10852,35 @@ with another option."))
|
|
|
|
|
retrAttrs = map(lambda x: x[1], data)
|
|
|
|
|
|
|
|
|
|
loginsUsers = []
|
|
|
|
|
retClVars=False
|
|
|
|
|
if service == "mail":
|
|
|
|
|
retClVars=True
|
|
|
|
|
searchRes = self.getQueryLDAP(service, "users", searchAttr,
|
|
|
|
|
searchStr, retrAttrs)
|
|
|
|
|
searchStr, retrAttrs, retClVars)
|
|
|
|
|
if not searchRes:
|
|
|
|
|
return (headers , [])
|
|
|
|
|
if service == "mail":
|
|
|
|
|
clVars, searchRes = searchRes
|
|
|
|
|
if not searchRes:
|
|
|
|
|
return (headers , [])
|
|
|
|
|
# Добавляем директорию хранения писем для сервиса mail
|
|
|
|
|
for i in searchRes:
|
|
|
|
|
i[0][1]['homeDirectory'] = [os.path.join(\
|
|
|
|
|
clVars.Get("sr_mail_path"),i[0][1]['uid'][0])]
|
|
|
|
|
data.append(("HOME","homeDirectory"))
|
|
|
|
|
delData.append("HOME")
|
|
|
|
|
if fields == "short":
|
|
|
|
|
data = filter(lambda x: not x[0] in delData, data)
|
|
|
|
|
headers = map(lambda x: x[0], data)
|
|
|
|
|
retrAttrs = map(lambda x: x[1], data)
|
|
|
|
|
for info in searchRes:
|
|
|
|
|
listAttr = []
|
|
|
|
|
for attr in retrAttrs:
|
|
|
|
|
if attr in info[0][1]:
|
|
|
|
|
ldapValue = info[0][1][attr]
|
|
|
|
|
# Конвертируем время в текстовый формат
|
|
|
|
|
if attr == "shadowLastChange" or\
|
|
|
|
|
attr == "sambaPwdLastSet":
|
|
|
|
|
ldapValue[0] = self. _convDatatoStr(ldapValue[0])
|
|
|
|
|
# Находим имя группы
|
|
|
|
|
if attr == "gidNumber" and service in ("unix", "ftp"):
|
|
|
|
|
ldapValue[0] = self._getUserGroupName(ldapValue[0],
|
|
|
|
|
"unix")
|
|
|
|
|
# Ставим Y в случае выставленного флага
|
|
|
|
|
if attr == "initials":
|
|
|
|
|
if ldapValue[0] == "No":
|
|
|
|
|
ldapValue[0] = "Y"
|
|
|
|
|
else:
|
|
|
|
|
ldapValue[0] = "N"
|
|
|
|
|
if attr == "accountStatus":
|
|
|
|
|
if ldapValue[0] == "passive":
|
|
|
|
|
ldapValue[0] = "Y"
|
|
|
|
|
else:
|
|
|
|
|
ldapValue[0] = "N"
|
|
|
|
|
if attr == "shadowExpire":
|
|
|
|
|
if ldapValue[0] == "1":
|
|
|
|
|
ldapValue[0] = "Y"
|
|
|
|
|
else:
|
|
|
|
|
ldapValue[0] = "N"
|
|
|
|
|
if attr == "sambaAcctFlags":
|
|
|
|
|
if ldapValue[0] == "[DU ]":
|
|
|
|
|
ldapValue[0] = "Y"
|
|
|
|
|
else:
|
|
|
|
|
ldapValue[0] = "N"
|
|
|
|
|
if attr == "userPassword":
|
|
|
|
|
if ldapValue[0] == "crypt{xxx}":
|
|
|
|
|
ldapValue[0] = "N"
|
|
|
|
|
else:
|
|
|
|
|
ldapValue[0] = "Y"
|
|
|
|
|
if attr == "shadowFlag":
|
|
|
|
|
if ldapValue[0] == "1":
|
|
|
|
|
ldapValue[0] = "Y"
|
|
|
|
|
else:
|
|
|
|
|
ldapValue[0] = "N"
|
|
|
|
|
if attr == "sambaNTPassword":
|
|
|
|
|
ldapValue[0] = "Y"
|
|
|
|
|
|
|
|
|
|
#Если несколько значений то разделяем их запятыми
|
|
|
|
|
# Изменяем значения аттрибутов для вывода на печать
|
|
|
|
|
ldapValue[0] = self.modUserAttr(attr, ldapValue[0], service)
|
|
|
|
|
# Если несколько значений то разделяем их запятыми
|
|
|
|
|
value = reduce(lambda x,y: ",".join([x,y])[0] == "," and\
|
|
|
|
|
",".join([x,y])[1:] or ",".join([x,y])[1:]\
|
|
|
|
|
and ",".join([x,y]) , ldapValue, "")
|
|
|
|
@ -10701,6 +10890,64 @@ with another option."))
|
|
|
|
|
loginsUsers.append(listAttr)
|
|
|
|
|
return (headers, loginsUsers)
|
|
|
|
|
|
|
|
|
|
def modGroupAttr(self, attr, value, service):
|
|
|
|
|
"""Модифицирует аттрибуты группы для вывода на печать"""
|
|
|
|
|
retValue = value
|
|
|
|
|
# Заменяем mail на имя пользователя
|
|
|
|
|
if service == "mail" and attr == "rfc822member":
|
|
|
|
|
servObj = servMail()
|
|
|
|
|
searchUser = servObj.searchUserToMail(value)
|
|
|
|
|
if searchUser:
|
|
|
|
|
retValue = searchUser[0][0][1]['uid'][0]
|
|
|
|
|
else:
|
|
|
|
|
retValue = "Not found"
|
|
|
|
|
return retValue
|
|
|
|
|
|
|
|
|
|
def modUserAttr(self, attr, value, service):
|
|
|
|
|
"""Модифицирует аттрибуты пользователя для вывода на печать"""
|
|
|
|
|
# Конвертируем время в текстовый формат
|
|
|
|
|
retValue = value
|
|
|
|
|
if attr == "shadowLastChange" or\
|
|
|
|
|
attr == "sambaPwdLastSet":
|
|
|
|
|
retValue = self._convDatatoStr(value)
|
|
|
|
|
# Находим имя группы
|
|
|
|
|
elif attr == "gidNumber" and service in ("unix", "ftp"):
|
|
|
|
|
retValue = self._getUserGroupName(value, "unix")
|
|
|
|
|
# Ставим Y в случае выставленного флага
|
|
|
|
|
elif attr == "initials":
|
|
|
|
|
if value == "No":
|
|
|
|
|
retValue = "Y"
|
|
|
|
|
else:
|
|
|
|
|
retValue = "N"
|
|
|
|
|
elif attr == "accountStatus":
|
|
|
|
|
if value == "passive":
|
|
|
|
|
retValue = "Y"
|
|
|
|
|
else:
|
|
|
|
|
retValue = "N"
|
|
|
|
|
elif attr == "shadowExpire":
|
|
|
|
|
if value == "1":
|
|
|
|
|
retValue = "Y"
|
|
|
|
|
else:
|
|
|
|
|
retValue = "N"
|
|
|
|
|
elif attr == "sambaAcctFlags":
|
|
|
|
|
if value == "[DU ]":
|
|
|
|
|
retValue = "Y"
|
|
|
|
|
else:
|
|
|
|
|
retValue = "N"
|
|
|
|
|
elif attr == "userPassword":
|
|
|
|
|
if value == "crypt{xxx}":
|
|
|
|
|
retValue = "N"
|
|
|
|
|
else:
|
|
|
|
|
retValue = "Y"
|
|
|
|
|
elif attr == "shadowFlag":
|
|
|
|
|
if value == "1":
|
|
|
|
|
retValue = "Y"
|
|
|
|
|
else:
|
|
|
|
|
retValue = "N"
|
|
|
|
|
elif attr == "sambaNTPassword":
|
|
|
|
|
retValue = "Y"
|
|
|
|
|
return retValue
|
|
|
|
|
|
|
|
|
|
def _convDatatoStr(self, dataDays):
|
|
|
|
|
"""Конвертирует количество дней или секунд с 1970, в строку даты"""
|
|
|
|
|
if dataDays:
|
|
|
|
@ -10734,6 +10981,31 @@ with another option."))
|
|
|
|
|
return groupName
|
|
|
|
|
return userGid
|
|
|
|
|
|
|
|
|
|
def _getUserMemberGroups(self, userName, service):
|
|
|
|
|
"""Находит имена групп в которые входит пользователь"""
|
|
|
|
|
try:
|
|
|
|
|
exec ("servObj=serv%s()" %service.capitalize())
|
|
|
|
|
except:
|
|
|
|
|
self.printERROR(\
|
|
|
|
|
_("ERROR: _getUserGroupsNames incorrect service=%s")%service)
|
|
|
|
|
return False
|
|
|
|
|
memberGroups = []
|
|
|
|
|
userInGroups = []
|
|
|
|
|
if service == "unix":
|
|
|
|
|
userInGroups = servObj.searchUnixMemberGid(userName)
|
|
|
|
|
if service == "mail":
|
|
|
|
|
resSearch = servObj.searchMailMember(userName)
|
|
|
|
|
if not resSearch:
|
|
|
|
|
return []
|
|
|
|
|
userMail, userInGroups = resSearch
|
|
|
|
|
for group in userInGroups:
|
|
|
|
|
mailGroup = group[0][1]['mail']
|
|
|
|
|
altMailGroup = group[0][1]['mailAlternateAddress']
|
|
|
|
|
listMail = mailGroup + altMailGroup
|
|
|
|
|
for mail in listMail:
|
|
|
|
|
if not mail in memberGroups:
|
|
|
|
|
memberGroups.append(mail)
|
|
|
|
|
return memberGroups
|
|
|
|
|
|
|
|
|
|
class tsOpt(cl_base.opt):
|
|
|
|
|
"""Класс для обработки параметров и вывода help
|
|
|
|
|