|
|
|
@ -214,7 +214,7 @@ class cl_client(imp_cl_err, imp_cl_xml, imp_cl_help, imp_cl_smcon):
|
|
|
|
|
resSearch = self.searchLdapDN(userName, self.relUsersDN, "uid")
|
|
|
|
|
return resSearch
|
|
|
|
|
|
|
|
|
|
def getLdapObjBind(self, host):
|
|
|
|
|
def getLdapObjBind(self, host, printError=True):
|
|
|
|
|
"""Получаем объект ldapFunction
|
|
|
|
|
|
|
|
|
|
Соединяемся пользователем bind
|
|
|
|
@ -224,11 +224,14 @@ class cl_client(imp_cl_err, imp_cl_xml, imp_cl_help, imp_cl_smcon):
|
|
|
|
|
bindDn = self.clVars.Get("ld_bind_dn")
|
|
|
|
|
bindPw = self.clVars.Get("ld_bind_pw")
|
|
|
|
|
if not (bindDn or bindPw):
|
|
|
|
|
self.printERROR(_("not found LDAP bind DN or password") + " ...")
|
|
|
|
|
if printError:
|
|
|
|
|
self.printERROR(_("not found LDAP bind DN or password") +\
|
|
|
|
|
" ...")
|
|
|
|
|
return False
|
|
|
|
|
ldapObj = cl_utils2.ldapFun(bindDn, bindPw, host)
|
|
|
|
|
if ldapObj.getError():
|
|
|
|
|
self.printERROR (_("LDAP connect error") + ": " +\
|
|
|
|
|
if printError:
|
|
|
|
|
self.printERROR (_("LDAP connect error") + ": " +\
|
|
|
|
|
ldapObj.getError().strip())
|
|
|
|
|
return False
|
|
|
|
|
# Устанавливаем у объекта соединение и объект LDAP функций
|
|
|
|
@ -271,17 +274,28 @@ class cl_client(imp_cl_err, imp_cl_xml, imp_cl_help, imp_cl_smcon):
|
|
|
|
|
filePasswd = "/etc/passwd"
|
|
|
|
|
return self.searchLineInFile(userName, filePasswd)
|
|
|
|
|
|
|
|
|
|
def getUserUidGid(self, userName):
|
|
|
|
|
def getUserLdapInfo(self, userName, printError=True):
|
|
|
|
|
"""Выдаем uid и gid пользователя"""
|
|
|
|
|
searchUser = self.searchUnixUser(userName)
|
|
|
|
|
if not searchUser:
|
|
|
|
|
self.printERROR(_("User %s not found in Unix service")\
|
|
|
|
|
if printError:
|
|
|
|
|
self.printERROR(_("User %s not found in Unix service")\
|
|
|
|
|
%str(userName))
|
|
|
|
|
return False
|
|
|
|
|
if searchUser[0][0][1].has_key('uidNumber') and\
|
|
|
|
|
searchUser[0][0][1].has_key('gidNumber'):
|
|
|
|
|
return (searchUser[0][0][1]['uidNumber'][0],
|
|
|
|
|
searchUser[0][0][1]['gidNumber'][0])
|
|
|
|
|
uid = False
|
|
|
|
|
gid = False
|
|
|
|
|
fullName = ""
|
|
|
|
|
mail = ""
|
|
|
|
|
if searchUser[0][0][1].has_key('uidNumber'):
|
|
|
|
|
uid = searchUser[0][0][1]['uidNumber'][0]
|
|
|
|
|
if searchUser[0][0][1].has_key('gidNumber'):
|
|
|
|
|
gid = searchUser[0][0][1]['gidNumber'][0]
|
|
|
|
|
if searchUser[0][0][1].has_key('cn'):
|
|
|
|
|
fullName = searchUser[0][0][1]['cn'][0]
|
|
|
|
|
if searchUser[0][0][1].has_key('mail'):
|
|
|
|
|
mail = searchUser[0][0][1]['mail'][0]
|
|
|
|
|
if uid and gid:
|
|
|
|
|
return (uid,gid,fullName,mail)
|
|
|
|
|
else:
|
|
|
|
|
return ()
|
|
|
|
|
|
|
|
|
@ -362,33 +376,44 @@ class cl_client(imp_cl_err, imp_cl_xml, imp_cl_help, imp_cl_smcon):
|
|
|
|
|
#%str(userName))
|
|
|
|
|
#return False
|
|
|
|
|
|
|
|
|
|
def getUidAndGidUser(self, userName):
|
|
|
|
|
def getUserPasswdInfo(self, userName):
|
|
|
|
|
"""получаем uid и gid пользователя из /etc/passwd"""
|
|
|
|
|
resPasswd = self.searchPasswdUser(userName)
|
|
|
|
|
if resPasswd:
|
|
|
|
|
uid = resPasswd.split(":")[2]
|
|
|
|
|
gid = resPasswd.split(":")[3]
|
|
|
|
|
full_name = resPasswd.split(":")[4]
|
|
|
|
|
return (uid, gid, full_name)
|
|
|
|
|
mail = ""
|
|
|
|
|
return (uid, gid, full_name,mail)
|
|
|
|
|
else:
|
|
|
|
|
return False
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def createHome(self, userName):
|
|
|
|
|
"""Создание пользовательской директории с настройками для kde4"""
|
|
|
|
|
# Подсоединяемся к серверу
|
|
|
|
|
#if not self.getLdapObjBind(server):
|
|
|
|
|
#return False
|
|
|
|
|
# Создаем объект переменных
|
|
|
|
|
self.createClVars()
|
|
|
|
|
#uidGid = self.getUserUidGid(userName)
|
|
|
|
|
uidGid = self.getUidAndGidUser(userName)
|
|
|
|
|
uidGid = False
|
|
|
|
|
# Подсоединяемся к серверу
|
|
|
|
|
domain = self.clVars.Get("cl_remote_host")
|
|
|
|
|
connectLdap = False
|
|
|
|
|
if domain:
|
|
|
|
|
if not self.getLdapObjBind(domain):
|
|
|
|
|
return False
|
|
|
|
|
connectLdap = True
|
|
|
|
|
if connectLdap:
|
|
|
|
|
# uid и gid и mail из Ldap
|
|
|
|
|
uidGid = self.getUserLdapInfo(userName,False)
|
|
|
|
|
if not uidGid:
|
|
|
|
|
# uid и gid и mail из passwd
|
|
|
|
|
uidGid = self.getUserPasswdInfo(userName)
|
|
|
|
|
if not uidGid:
|
|
|
|
|
self.printERROR(_(" Not found user uid and gid"))
|
|
|
|
|
return False
|
|
|
|
|
uid = int(uidGid[0])
|
|
|
|
|
gid = int(uidGid[1])
|
|
|
|
|
fullName = uidGid[2]
|
|
|
|
|
mail = uidGid[3]
|
|
|
|
|
# Создаем пользовательскую директорию
|
|
|
|
|
homeDir = os.path.join("/home",userName)
|
|
|
|
|
self.clVars.Set('cl_root_path',homeDir,True)
|
|
|
|
@ -400,6 +425,7 @@ class cl_client(imp_cl_err, imp_cl_xml, imp_cl_help, imp_cl_smcon):
|
|
|
|
|
# Записываем переменную логин
|
|
|
|
|
self.clVars.Set('ur_login',userName)
|
|
|
|
|
self.clVars.Set('ur_fullname',fullName)
|
|
|
|
|
self.clVars.Set('ur_mail',mail)
|
|
|
|
|
# Применяем профили для пользователя
|
|
|
|
|
if not self.applyProfilesFromUser():
|
|
|
|
|
self.printERROR(_(" Not apply user profile"))
|
|
|
|
|