|
|
@ -25,7 +25,7 @@ import cl_utils
|
|
|
|
|
|
|
|
|
|
|
|
import ldap
|
|
|
|
import ldap
|
|
|
|
|
|
|
|
|
|
|
|
Version = "calculate-client 0.0.1_alpha"
|
|
|
|
Version = "calculate-client 0.0.1"
|
|
|
|
|
|
|
|
|
|
|
|
tr = cl_base.lang()
|
|
|
|
tr = cl_base.lang()
|
|
|
|
tr.setLanguage(sys.modules[__name__])
|
|
|
|
tr.setLanguage(sys.modules[__name__])
|
|
|
@ -67,6 +67,7 @@ class cl_client(imp_cl_err, imp_cl_xml, imp_cl_help, imp_cl_smcon):
|
|
|
|
# имена используемых программ и их номера для доступа к переменным
|
|
|
|
# имена используемых программ и их номера для доступа к переменным
|
|
|
|
# self.data
|
|
|
|
# self.data
|
|
|
|
self.progName = { 'cl-client':0,
|
|
|
|
self.progName = { 'cl-client':0,
|
|
|
|
|
|
|
|
'cl-createhome':1
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
# Cвязь длинных опций помощи и выводимых разделов помощи с опциями
|
|
|
|
# Cвязь длинных опций помощи и выводимых разделов помощи с опциями
|
|
|
@ -96,6 +97,11 @@ class cl_client(imp_cl_err, imp_cl_xml, imp_cl_help, imp_cl_smcon):
|
|
|
|
'helpChapter':_("Usage"),
|
|
|
|
'helpChapter':_("Usage"),
|
|
|
|
'help': cmdName + " [" + _("options") + "] " + _("user")
|
|
|
|
'help': cmdName + " [" + _("options") + "] " + _("user")
|
|
|
|
},
|
|
|
|
},
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
'progAccess':(1,),
|
|
|
|
|
|
|
|
'helpChapter':_("Usage"),
|
|
|
|
|
|
|
|
'help': cmdName + " " + _("user")
|
|
|
|
|
|
|
|
},
|
|
|
|
# Function
|
|
|
|
# Function
|
|
|
|
{
|
|
|
|
{
|
|
|
|
'progAccess':(0,),
|
|
|
|
'progAccess':(0,),
|
|
|
@ -117,20 +123,20 @@ calculate-server"),
|
|
|
|
'helpChapter':_("Common options"),
|
|
|
|
'helpChapter':_("Common options"),
|
|
|
|
'help':_("display this help and exit")
|
|
|
|
'help':_("display this help and exit")
|
|
|
|
},
|
|
|
|
},
|
|
|
|
{
|
|
|
|
{'progAccess':(0,),
|
|
|
|
'shortOption':"m",
|
|
|
|
'shortOption':"m",
|
|
|
|
'longOption':"create-home",
|
|
|
|
'longOption':"create-home",
|
|
|
|
'helpChapter':_("Common options"),
|
|
|
|
'helpChapter':_("Common options"),
|
|
|
|
'help':_("create home directory for the new user account")
|
|
|
|
'help':_("create home directory for the new user account")
|
|
|
|
},
|
|
|
|
},
|
|
|
|
{
|
|
|
|
{'progAccess':(0,),
|
|
|
|
'shortOption':"s",
|
|
|
|
'shortOption':"s",
|
|
|
|
'longOption':"cl-server",
|
|
|
|
'longOption':"cl-server",
|
|
|
|
'optVal':_("CL_SERVER"),
|
|
|
|
'optVal':_("CL_SERVER"),
|
|
|
|
'helpChapter':_("Common options"),
|
|
|
|
'helpChapter':_("Common options"),
|
|
|
|
'help':_("name or ip calculate server")
|
|
|
|
'help':_("name or ip calculate server")
|
|
|
|
},
|
|
|
|
},
|
|
|
|
{
|
|
|
|
{'progAccess':(0,),
|
|
|
|
'shortOption':"p",
|
|
|
|
'shortOption':"p",
|
|
|
|
'longOption':"prvar",
|
|
|
|
'longOption':"prvar",
|
|
|
|
'optVal':_("TYPES_VAR"),
|
|
|
|
'optVal':_("TYPES_VAR"),
|
|
|
@ -189,7 +195,7 @@ calculate-server"),
|
|
|
|
|
|
|
|
|
|
|
|
def searchLdapDN(self, name, relDN, attr, retAttr=None):
|
|
|
|
def searchLdapDN(self, name, relDN, attr, retAttr=None):
|
|
|
|
"""Находит DN в LDAP"""
|
|
|
|
"""Находит DN в LDAP"""
|
|
|
|
baseDN = self.clVars.Get("soft_ldap_base")
|
|
|
|
baseDN = self.clVars.Get("ld_base_dn")
|
|
|
|
DN = self.addDN(relDN,baseDN)
|
|
|
|
DN = self.addDN(relDN,baseDN)
|
|
|
|
#searchScope = ldap.SCOPE_SUBTREE
|
|
|
|
#searchScope = ldap.SCOPE_SUBTREE
|
|
|
|
searchScope = ldap.SCOPE_ONELEVEL
|
|
|
|
searchScope = ldap.SCOPE_ONELEVEL
|
|
|
@ -212,8 +218,8 @@ calculate-server"),
|
|
|
|
В выходном объекте есть соединение с LDAP сервером: self.conLdap
|
|
|
|
В выходном объекте есть соединение с LDAP сервером: self.conLdap
|
|
|
|
"""
|
|
|
|
"""
|
|
|
|
self.createClVars(self.clVars)
|
|
|
|
self.createClVars(self.clVars)
|
|
|
|
bindDn = self.clVars.Get("soft_ldap_bind")
|
|
|
|
bindDn = self.clVars.Get("ld_bind_dn")
|
|
|
|
bindPw = self.clVars.Get("soft_ldap_bindpw")
|
|
|
|
bindPw = self.clVars.Get("ld_bind_pw")
|
|
|
|
if not (bindDn or bindPw):
|
|
|
|
if not (bindDn or bindPw):
|
|
|
|
self.printERROR(_("not found LDAP bind DN or password") + " ...")
|
|
|
|
self.printERROR(_("not found LDAP bind DN or password") + " ...")
|
|
|
|
return False
|
|
|
|
return False
|
|
|
@ -297,15 +303,38 @@ calculate-server"),
|
|
|
|
os.lchown(linkCh[1], uid, gid)
|
|
|
|
os.lchown(linkCh[1], uid, gid)
|
|
|
|
return True
|
|
|
|
return True
|
|
|
|
|
|
|
|
|
|
|
|
def createHome(self, server, userName=False):
|
|
|
|
def execProg(self, cmdStrProg, inStr=False, retFull=True):
|
|
|
|
# Подсоединяемся к movie
|
|
|
|
"""Выполняет внешнюю программу
|
|
|
|
if not self.getLdapObjBind(server):
|
|
|
|
|
|
|
|
|
|
|
|
Параметры:
|
|
|
|
|
|
|
|
cmdStrProg внешняя программа
|
|
|
|
|
|
|
|
inStr данные передаваемые программе на страндартный вход.
|
|
|
|
|
|
|
|
Возвращаемые параметры:
|
|
|
|
|
|
|
|
строка которую выведет внешняя программа
|
|
|
|
|
|
|
|
"""
|
|
|
|
|
|
|
|
return cl_utils.runOsCommand(cmdStrProg, inStr, retFull)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def getUidAndGidUser(self, userName):
|
|
|
|
|
|
|
|
strRes = self.execProg("id %s" %userName)
|
|
|
|
|
|
|
|
reFind = re.compile("uid=(\d+)\(.+gid=(\d+)\(")
|
|
|
|
|
|
|
|
res = reFind.search(strRes)
|
|
|
|
|
|
|
|
if res:
|
|
|
|
|
|
|
|
return res.group(1), res.group(2)
|
|
|
|
|
|
|
|
else:
|
|
|
|
|
|
|
|
self.printERROR(_("User %s not found")\
|
|
|
|
|
|
|
|
%str(userName))
|
|
|
|
return False
|
|
|
|
return False
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def createHome(self, userName=False):
|
|
|
|
|
|
|
|
# Подсоединяемся к movie
|
|
|
|
|
|
|
|
#if not self.getLdapObjBind(server):
|
|
|
|
|
|
|
|
#return False
|
|
|
|
# Создаем объект переменных
|
|
|
|
# Создаем объект переменных
|
|
|
|
self.createClVars()
|
|
|
|
self.createClVars()
|
|
|
|
if userName:
|
|
|
|
if userName:
|
|
|
|
self.userName = userName
|
|
|
|
self.userName = userName
|
|
|
|
uidGid = self.getUserUidGid(self.userName)
|
|
|
|
#uidGid = self.getUserUidGid(self.userName)
|
|
|
|
|
|
|
|
uidGid = self.getUidAndGidUser(self.userName)
|
|
|
|
if not uidGid:
|
|
|
|
if not uidGid:
|
|
|
|
self.printERROR(_(" Not found user uid and gid"))
|
|
|
|
self.printERROR(_(" Not found user uid and gid"))
|
|
|
|
return False
|
|
|
|
return False
|
|
|
@ -313,11 +342,11 @@ calculate-server"),
|
|
|
|
gid = int(uidGid[1])
|
|
|
|
gid = int(uidGid[1])
|
|
|
|
# Создаем пользовательскую директорию
|
|
|
|
# Создаем пользовательскую директорию
|
|
|
|
homeDir = os.path.join("/home",self.userName)
|
|
|
|
homeDir = os.path.join("/home",self.userName)
|
|
|
|
self.clVars.Set('setup_path_install',homeDir,True)
|
|
|
|
self.clVars.Set('cl_root_path',homeDir,True)
|
|
|
|
if not os.path.exists(homeDir):
|
|
|
|
if not os.path.exists(homeDir):
|
|
|
|
self.createUserDir(uid, gid, homeDir)
|
|
|
|
self.createUserDir(uid, gid, homeDir)
|
|
|
|
# Записываем переменную логин
|
|
|
|
# Записываем переменную логин
|
|
|
|
self.clVars.Set('ur_login',self.userName)
|
|
|
|
self.clVars.Set('ur_name',self.userName)
|
|
|
|
# Применяем профили для пользователя
|
|
|
|
# Применяем профили для пользователя
|
|
|
|
if not self.applyProfilesFromUser():
|
|
|
|
if not self.applyProfilesFromUser():
|
|
|
|
self.printERROR(_(" Not apply user profile"))
|
|
|
|
self.printERROR(_(" Not apply user profile"))
|
|
|
|