diff --git a/pym/cl_ldap.py b/pym/cl_ldap.py index e390625..16fefa1 100644 --- a/pym/cl_ldap.py +++ b/pym/cl_ldap.py @@ -144,7 +144,7 @@ class ldapUser(_error): return groupsDNs return False - def getUserLdapInfo(self, userName): + def getUserLdapInfo(self, userName, shadowAttr=False): """Выдаем информацию о пользователе из LDAP""" connectData = self.getBindConnectData() if not connectData: @@ -159,39 +159,59 @@ class ldapUser(_error): "uid=%s" %userName, None) if not searchUser: return False - uid = False - gid = False - fullName = "" - mail = "" - jid = "" - group = "" - if 'uidNumber' in searchUser[0][0][1]: - uid = searchUser[0][0][1]['uidNumber'][0] - if 'gidNumber' in searchUser[0][0][1]: - gid = searchUser[0][0][1]['gidNumber'][0] - for groupDN in groupsDNs: - searchGroup = self.ldapObj.ldapSearch(groupDN, + convertDict = {'uid':('user','uidNumber'), + 'gid':('user','gidNumber'), + 'fullName':('user','cn'), + 'mail':('user','mail'), + 'jid':('user','registeredAddress'), + 'home':('user','homeDirectory'), + 'group':('group','cn')} + if shadowAttr: + convertDict.update({'loginShell':('user','loginShell'), + 'shadowLastChange':('user','shadowLastChange'), + 'shadowMin':('user','shadowMin'), + 'shadowMax':('user','shadowMax'), + 'shadowWarning':('user','shadowWarning'), + 'shadowExpire':('user','shadowExpire'), + 'shadowFlag':('user','shadowFlag')}) + listUserAttr = map(lambda x: x[0], + filter(lambda x: x[1][0]=="user", + convertDict.items())) + listGroupAttr = map(lambda x: x[0], + filter(lambda x: x[1][0]=="group", + convertDict.items())) + uid = "" + gid = "" + dictOut = {} + for dictAttr in listUserAttr: + ldapAttr = convertDict[dictAttr][1] + if ldapAttr in searchUser[0][0][1]: + dictOut[dictAttr] = searchUser[0][0][1][ldapAttr][0] + else: + dictOut[dictAttr] = "" + if dictAttr == 'uid': + uid = dictOut[dictAttr] + if dictAttr == 'gid': + gid = dictOut[dictAttr] + if gid: + for dictAttr in listGroupAttr: + searchGroup = [] + ldapAttr = convertDict[dictAttr][1] + for groupDN in groupsDNs: + searchGroup = self.ldapObj.ldapSearch(groupDN, ldap.SCOPE_ONELEVEL, - "gidNumber=%s" %gid, ['cn']) + "gidNumber=%s" %gid, None) + if searchGroup: + break if searchGroup: - group = searchGroup[0][0][1]['cn'][0] - break - if 'cn' in searchUser[0][0][1]: - fullName = searchUser[0][0][1]['cn'][0] - if 'mail' in searchUser[0][0][1]: - mail = searchUser[0][0][1]['mail'][0] - if 'registeredAddress' in searchUser[0][0][1]: - jid = searchUser[0][0][1]['registeredAddress'][0] - if 'homeDirectory' in searchUser[0][0][1]: - home = searchUser[0][0][1]['homeDirectory'][0] + if ldapAttr in searchGroup[0][0][1]: + dictOut[dictAttr] = searchGroup[0][0][1][ldapAttr][0] + else: + dictOut[dictAttr] = "" + else: + dictOut[dictAttr] = "" if uid and gid: - return {"uid":uid, - "gid":gid, - "fullName":fullName, - "mail":mail, - "jid":jid, - "home":home, - "group":group} + return dictOut else: return {} diff --git a/pym/cl_template.py b/pym/cl_template.py index 824df8f..e577b9f 100644 --- a/pym/cl_template.py +++ b/pym/cl_template.py @@ -4208,6 +4208,13 @@ re.M|re.S) preReturn(pathProg) return ([], False) if flagSymlink: + if objHeadNew.body.strip(): + self.setError(_("Error in template") + ": " +\ + nameFileTemplate) + self.setError(_("In template to create a link is found text \ +after title")) + preReturn(pathProg) + return ([], False) if os.path.exists(prevOldFile) or os.path.islink(prevOldFile): try: if os.path.islink(prevOldFile): @@ -4236,9 +4243,6 @@ re.M|re.S) "%s -> %s"%(prevOldFile, pathOldFile)) preReturn(pathProg) return ([], False) - if not objHeadNew.body.strip(): - preReturn(pathProg) - return ([], False) else: applyFiles = [pathOldFile] if pathProg: