From 72c6c98b4c865c7c1badd5e68fb722a2497297f5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=A1=D0=B0=D0=BC=D0=BE=D1=83=D0=BA=D0=B8=D0=BD=20=D0=90?= =?UTF-8?q?=D0=BB=D0=B5=D0=BA=D1=81=D0=B5=D0=B9?= Date: Tue, 2 Mar 2010 16:27:30 +0300 Subject: [PATCH] Rename ~/.calculate.env to ~/.calculate/server.env Change format server.env (plasma) --- pym/cl_client.py | 88 ++++++++++++++++++++++++++++++++----------- pym/cl_fill_client.py | 33 +--------------- pym/cl_vars_client.py | 11 ------ 3 files changed, 67 insertions(+), 65 deletions(-) diff --git a/pym/cl_client.py b/pym/cl_client.py index fd59340..b6344f4 100644 --- a/pym/cl_client.py +++ b/pym/cl_client.py @@ -33,6 +33,8 @@ import stat import subprocess import time +from encrypt import encrypt + Version = "calculate-client 2.1.10" tr = cl_base.lang() @@ -248,7 +250,7 @@ imp_cl_help = cl_utils2.cl_help imp_cl_smcon = cl_utils2.cl_smartcon -class cl_client(imp_cl_err, imp_cl_xml, imp_cl_help, imp_cl_smcon): +class cl_client(imp_cl_err, imp_cl_xml, imp_cl_help, imp_cl_smcon, encrypt): """Основной класс для работы клиентских приложений""" # Пути к профилям объединяемых с системными # относительный путь при объединении '/' @@ -767,6 +769,37 @@ conjunction with the 'login' or 'logout'") return False, errMessage return True, errMessage + def getServerDataUser(self): + """Получение имени LDAP сервера и DN пользователей под пользователем""" + fileName = "/etc/ldap.conf" + serverName = "" + usersDN = "" + strServer = ("host","HOST") + lenStrServer = len(strServer[0]) + strDN = ("nss_base_passwd","NSS_BASE_PASSWD") + lenStrDN = len(strDN[0]) + splList = (" ", "\t") + try: + for i in open(fileName): + if not serverName and\ + filter(lambda x: i.startswith(x),strServer) and\ + len(i)>lenStrServer: + spl = i[lenStrServer] + if spl in splList: + serverName = i.rpartition(spl)[2].strip() + if not usersDN and filter(lambda x: i.startswith(x), strDN) and\ + len(i)>lenStrDN: + spl = i[lenStrDN] + if spl in splList: + usersDN = i.rpartition(spl)[2].partition('?')[0].strip() + if serverName and usersDN: + break + except: + self.printERROR(_("Can not open %s")%fileName) + return False + return (serverName, usersDN) + + def setUserPasswordToServer(self, options): """Установка пароля пользователя на сервере""" # Проверяем на root @@ -775,21 +808,19 @@ conjunction with the 'login' or 'logout'") self.printWARNING(\ _("The program can be executed from a non-root user")) return False - # Создаем объект переменных - self.createClVars() # DNS имя хоста - server = self.clVars.Get("sr_samba_host") - if not server: + data = self.getServerDataUser() + if not data: self.printERROR(_("The computer is not in domain")) + self.printWARNING(_("Use passwd")) return False + server, usersDN = data # Получаем старый пароль пользователя curPassword = self.getUserPassword(_("Enter current password")) if not curPassword: self.printERROR(_("Current password is empty")) return False - userDN = self.addDN("uid=%s"%os.environ["USER"], - self.relUsersDN, - self.clVars.Get("ld_base_dn")) + userDN = self.addDN("uid=%s"%os.environ["USER"], usersDN) # Проверяем в LDAP сервере текущий пароль пользователя ret, err = self.checkUserPwdLDAP(server, userDN, curPassword) if not ret: @@ -801,18 +832,24 @@ conjunction with the 'login' or 'logout'") password = self.getUserPwd(optPasswd, "p", False) if password == False: return False - # Записываем пароль пользователя в переменную - self.clVars.Set("ur_pw", password) - oldEnvPath = self.clVars.Get("cl_env_path") - fileEnvPath = os.path.join(os.environ["HOME"],".calculate.env") - newEnvPath = [fileEnvPath]*3 - self.clVars.Set("cl_env_path",newEnvPath,True) + # ~/.calculate + pathConfig = os.path.join(os.environ["HOME"],".calculate") + # Создаем директорию + if not os.path.exists(pathConfig): + os.makedirs(pathConfig) # Переменные для записи в env файл - namesVars = ["ur_unix_hash","ur_samba_lm_hash","ur_samba_nt_hash"] - data = map(lambda x: (x,self.clVars.Get(x)), namesVars) - for name, value in data: - self.clVars.Write(name, value, True, "default","server") - self.clVars.Set("cl_env_path",oldEnvPath,True) + varsConfig = {"unix_hash":self.getHashPasswd(password,"ssha"), + "samba_lm_hash":self.getHashPasswd(password,"lm"), + "samba_nt_hash":self.getHashPasswd(password,"nt")} + if filter(lambda x: not x, varsConfig.values()): + return False + # ~/.calculate/server.env + fileConfig = os.path.join(pathConfig,"server.env") + txtConfig = cl_base.iniParser(fileConfig) + if not txtConfig.setVar(["passwd","samba"], varsConfig): + self.printERROR(_("Can not write password variable in file %s")\ + %fileConfig) + return False self.printOK(_("Changed password of user %s")%os.environ["USER"] + \ " ...") self.printWARNING(_("Password will be changed when you logout from the \ @@ -1470,7 +1507,16 @@ or ld_bind_dn or ld_bind_pw") def removePrivateFiles(self, userHome): """Удаление приватных файлов""" privateFiles = ['.kde4/share/apps/kwallet/kdewallet.kwl', - '.calculate.env'] + '.calculate/server.env'] + # файлы в .ssh + sshHome = ".ssh" + sshPath = os.path.join(userHome,sshHome) + if os.path.isdir(sshPath): + # .ssh файлы относительно домашней директории пользователя + privateFiles += map(lambda x:os.path.join(sshHome,x),\ + filter(lambda x:\ + os.path.isfile(os.path.join(sshPath,x)),\ + os.listdir(sshPath))) for prFile in privateFiles: rmFile = os.path.join(userHome, prFile) if os.path.exists(rmFile): @@ -2349,7 +2395,6 @@ or ld_bind_dn or ld_bind_pw") --exclude="/.local/share/mime/mime.cache" \ --exclude="/.kde4/share/apps/nepomuk/repository/main/data" \ --exclude="/.logout" \ ---exclude="/.calculate.env" \ --exclude="/.Xauthority" \ --filter="P /.googleearth" --filter="P /Home" --filter="P /Disks" \ --filter="P /.local/share/akonadi/db_data" --filter="P /.VirtualBox" \ @@ -2357,7 +2402,6 @@ or ld_bind_dn or ld_bind_pw") --filter="P /.local/share/mime/mime.cache" \ --filter="P /.kde4/share/apps/nepomuk/repository/main/data" \ --filter="P /.logout" \ ---filter="P /.calculate.env" \ --filter="P /.Xauthority" \ --filter="P /FTP" -a -x -v -v -v -v %s/ %s/' %(homeProfile,userHome) elif sync == "logout": diff --git a/pym/cl_fill_client.py b/pym/cl_fill_client.py index c5ba477..2b600cb 100644 --- a/pym/cl_fill_client.py +++ b/pym/cl_fill_client.py @@ -17,10 +17,9 @@ import os import re import cl_base -import encrypt -class fillVars(object, cl_base.glob_attr, encrypt.encrypt): +class fillVars(object, cl_base.glob_attr): def get_cl_profile_path(self): """список накладываемых профилей при установке, наложении профилей""" @@ -208,33 +207,3 @@ class fillVars(object, cl_base.glob_attr, encrypt.encrypt): if userJid: return userJid.partition('@')[2] return "" - - def get_ur_unix_hash(self): - """Хеш пароля пользователя для сервиса Unix""" - userPwd = self.Get("ur_pw") - if not userPwd: - return "" - hashPwd = self.getHashPasswd(userPwd,"ssha") - if not hashPwd: - return "" - return hashPwd - - def get_ur_samba_lm_hash(self): - """LANMAN хеш пароля пользователя для сервиса Samba""" - userPwd = self.Get("ur_pw") - if not userPwd: - return "" - hashPwd = self.getHashPasswd(userPwd,"lm") - if not hashPwd: - return "" - return hashPwd - - def get_ur_samba_nt_hash(self): - """NT хеш пароля пользователя для сервиса Samba""" - userPwd = self.Get("ur_pw") - if not userPwd: - return "" - hashPwd = self.getHashPasswd(userPwd,"nt") - if not hashPwd: - return "" - return hashPwd \ No newline at end of file diff --git a/pym/cl_vars_client.py b/pym/cl_vars_client.py index 06dc237..da32a67 100644 --- a/pym/cl_vars_client.py +++ b/pym/cl_vars_client.py @@ -152,14 +152,3 @@ class Data: # порт подключения к сервису Proxy sr_proxy_port = {'mode':"w"} - - # открытый пароль пользователя, для генераци хешей - ur_pw = {'mode':"w"} - # хеш пароля пользователя для сервиса Unix - ur_unix_hash = {'mode':"w"} - # LANMAN хеш пароля пользователя для сервиса Samba - ur_samba_lm_hash = {'mode':"w"} - # NT хеш пароля пользователя для сервиса Samba - ur_samba_nt_hash = {'mode':"w"} - - \ No newline at end of file