diff --git a/pym/cl_client.py b/pym/cl_client.py index dbf02c6..602bc5a 100644 --- a/pym/cl_client.py +++ b/pym/cl_client.py @@ -129,6 +129,12 @@ calculate-server"), 'helpChapter':_("Common options"), 'help':_("create home directory for the new user account") }, + {'progAccess':(1,), + 'longOption':"vars", + 'optVal':_("TYPE_VAR"), + 'helpChapter':_("Common options"), + 'help':_("print variables (TYPE_VAR - all:full var)") + }, {'progAccess':(0,), 'shortOption':"s", 'longOption':"cl-server", @@ -245,6 +251,29 @@ calculate-server"), else: return "" + def searchLineInFile(self, name, fileName, numEl=0): + """Ищет строку в которой есть название разделенное ':' + + в файле похожем на /etc/passwd""" + if os.path.exists(fileName): + FD = open(fileName) + lines = FD.readlines() + FD.close() + lineFound = "" + for line in lines: + if name == line.split(":")[numEl]: + lineFound = line + break + if lineFound: + return lineFound + else: + return False + + def searchPasswdUser(self, userName): + """Ищет пользователей в /etc/passwd""" + filePasswd = "/etc/passwd" + return self.searchLineInFile(userName, filePasswd) + def getUserUidGid(self, userName): """Выдаем uid и gid пользователя""" searchUser = self.searchUnixUser(userName) @@ -314,17 +343,29 @@ calculate-server"), """ 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 + 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) + """получаем 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) else: - self.printERROR(_("User %s not found")\ - %str(userName)) return False + def createHome(self, userName=False): # Подсоединяемся к movie #if not self.getLdapObjBind(server): @@ -340,13 +381,15 @@ calculate-server"), return False uid = int(uidGid[0]) gid = int(uidGid[1]) + fullName = uidGid[2] # Создаем пользовательскую директорию homeDir = os.path.join("/home",self.userName) self.clVars.Set('cl_root_path',homeDir,True) if not os.path.exists(homeDir): self.createUserDir(uid, gid, homeDir) # Записываем переменную логин - self.clVars.Set('ur_name',self.userName) + self.clVars.Set('ur_login',self.userName) + self.clVars.Set('ur_fullname',fullName) # Применяем профили для пользователя if not self.applyProfilesFromUser(): self.printERROR(_(" Not apply user profile")) @@ -392,10 +435,8 @@ class tsOpt(cl_base.opt): if self.params.has_key('user'): if len(self.nameParams) != self.__iter: self.handlerErrOpt() - else: - self.handlerErrOpt() - # В случае остсутствия опций командной строки - if notOptError and not self.opt and self.params.has_key('user'): + # В случае остсутствия опций командной строки и имени пользователя + if notOptError and not self.opt and not self.params.has_key('user'): self.printErrorNotOpt() self.flagHelp = True diff --git a/pym/cl_fill_client.py b/pym/cl_fill_client.py index 05da431..f87b469 100644 --- a/pym/cl_fill_client.py +++ b/pym/cl_fill_client.py @@ -15,7 +15,9 @@ # limitations under the License. import os -class fillVars(object): +import re +import cl_base +class fillVars(object, cl_base.glob_attr): def get_cl_profile_path(self): """список накладываемых профилей при установке, наложении профилей""" @@ -33,3 +35,30 @@ class fillVars(object): profpath.append(ph) return profpath + def getX11Resolution(self): + """возвращает текущее разрешение экрана (ширина, высота), X запущен""" + lines=self._runos("%s xdpyinfo -display :0.0"%self.path_env) + reRes = re.compile("dimensions:\s+(\d+)x(\d+)\s+pixels") + searchRes=False + for line in lines: + searchRes = reRes.search(line) + if searchRes: + break + if searchRes: + return (searchRes.group(1), searchRes.group(2)) + else: + return False + + def get_hr_x11_height(self): + """Получить высоту экрана в пикселах""" + resolution = self.getX11Resolution() + if resolution: + self.Set('hr_x11_width',resolution[0]) + return resolution[1] + + def get_hr_x11_width(self): + """Получить ширину экрана в пикселах""" + resolution = self.getX11Resolution() + if resolution: + self.Set('hr_x11_height',resolution[1]) + return resolution[0] \ No newline at end of file diff --git a/pym/cl_vars_client.py b/pym/cl_vars_client.py index 9fa4cad..83c9d48 100644 --- a/pym/cl_vars_client.py +++ b/pym/cl_vars_client.py @@ -51,8 +51,16 @@ class Data: #Логин LDAP пользователя #V soft_ldap_user_login - ur_name = {'mode':"w"} + ur_login = {'mode':"w"} + #Полное имя LDAP пользователя + #V soft_ldap_user_full_name + ur_fullname = {'mode':"w"} + + #Разрешение X по вертикали + hr_x11_height = {} + #Разрешение X по горизонтали + hr_x11_width = {} # Calculate плюс версия калкулэйта для записи в заголовок файла # объединяемого с профилем #setup_name diff --git a/scripts/cl-client b/scripts/cl-client index f890823..09ffe9d 100644 --- a/scripts/cl-client +++ b/scripts/cl-client @@ -33,7 +33,7 @@ if __name__ == "__main__": if optObj.opt and optObj.opt.has_key('p'): terms = optObj.opt['p'].split(",") clVars = cl_base.DataVars() - clVars.flServer() + clVars.flClient() if terms == ["all"]: clVars.printVars() else: diff --git a/scripts/cl-createhome b/scripts/cl-createhome index a20ea69..735c1ab 100644 --- a/scripts/cl-createhome +++ b/scripts/cl-createhome @@ -27,9 +27,17 @@ tr.setLanguage(sys.modules[__name__]) if __name__ == "__main__": ldapObj = cl_client.cl_client("cl-createhome") - optObj = cl_client.tsOpt(ldapObj) + optObj = cl_client.tsOpt(ldapObj,True) flagError = False - if not optObj.flagHelp and optObj.params.has_key('user'): + if not optObj.flagHelp and optObj.opt.has_key('vars'): + terms = optObj.opt['vars'].split(",") + clVars = cl_base.DataVars() + clVars.flClient() + if terms == ["all"]: + clVars.printVars() + else: + clVars.printVars(terms) + elif not optObj.flagHelp and optObj.params.has_key('user'): userName = optObj.params['user'].strip() if not ldapObj.createHome(userName): flagError = True