Moved file calculate.env in .calculate/server.env in the user profile

legacy
Самоукин Алексей 15 years ago
parent 86aeb0cd88
commit ca9b583b5a

@ -11629,7 +11629,7 @@ class servRepl(shareLdap):
# Файл для определения выхода пользователя.
logOutFile = ".logout"
# Файл для управления сервером
envFile = ".calculate.env"
envFile = ".calculate/server.env"
# Переменные (/etc/calculate/calculate.env)
# которые будут сохранены при rebuild
restoreDefaultVar =["sr_ldap_set", "ld_repl_pw", "ld_repl_set",
@ -12494,6 +12494,8 @@ if %%errorlevel%%==0 NET USE T: \\\\%s\\ftp' %(netbios,netbios,netbios)
flagRepl = True
flagLogOut = False
retStr = ""
# Сообщения о успехе
messages =[]
if not errorFlag:
if self.servSambaObj.searchSambaUser(login):
if self.isLoginUser(login):
@ -12510,10 +12512,6 @@ if %%errorlevel%%==0 NET USE T: \\\\%s\\ftp' %(netbios,netbios,netbios)
flagLogOut = True
# Cоздаем объект переменные
self.createClVars()
# Пути к env файлам
oldEnvPath = self.clVars.Get("cl_env_path")
# количество путей
lenOldEnvPath = len(oldEnvPath)
# Удаляем файлы .logout
for dirLogOut in dirsLogOut:
logoutFile = os.path.join(dirLogOut, self.logOutFile)
@ -12554,22 +12552,44 @@ remove user %s in the LDAP branch 'Worked'")%str(login))
envFile = os.path.join(dirLogOut,
self.envFile)
if os.path.exists(envFile):
oldEnvPath.insert(lenOldEnvPath,
envFile)
self.clVars.Set("cl_env_path",oldEnvPath,
True)
# Заполняем переменные значениями из
# env файла
self.clVars.flIniFile()
oldEnvPath = oldEnvPath[:-1]
self.clVars.Set("cl_env_path",oldEnvPath,
True)
# обработка env
if not self.changeUserPassword(login,
errMessages):
errorFlag = True
# удаление файла
os.remove(envFile)
# Получаем переменные из env файла
txtConfig = cl_base.iniParser(envFile)
# словарь переменных из файла
varsDict = txtConfig.getAreaVars(["passwd",
"samba"])
error = txtConfig.getError()
if error:
errors = error.splitlines()
errMessages + errors
errorFlag = True
break
if varsDict:
# замена пароля пользователя
# Сохранение печати ошибок
prnErr = self.printERROR
prnSucces = self.printSUCCESS
self.printERROR = \
lambda x: errMessages.append(x)
# Переопределение печати ошибок
self.printSUCCESS = \
lambda x: messages.append(x)
# Переопределение печати ошибок
self.servUnixObj.printERROR =\
self.printERROR
self.servSambaObj.printERROR =\
self.printERROR
if not self.changeUserPassword(login,
varsDict,
envFile):
errorFlag = True
# Удаляем область изменения пароля из
# конфигурационного файла
txtConfig.delArea(["passwd", "samba"])
# Восстановление печати ошибок
self.printERROR = prnErr
self.printSUCCESS = prnSucces
if errorFlag:
break
else:
errorFlag = True
errMessages.append(_("Samba user %s is not found")%str(login))
@ -12582,82 +12602,87 @@ remove user %s in the LDAP branch 'Worked'")%str(login))
for errMess in errMessages:
logObj.writeError(errMess)
return False
messages = ""
if flagLogOut:
messages += _("User %s logout")%login + " %s"%retStr
messages.append(_("User %s logout")%login + " %s"%retStr)
else:
messages += _("User %s login")%login
messages.append(_("User %s login")%login)
if verboseMode:
self.printSUCCESS(messages)
for mess in messages:
self.printSUCCESS(mess)
if logObj:
logObj.writeSuccess(messages)
for mess in messages:
logObj.writeSuccess(mess)
return True
def changeUserPassword(self, userName, errMessages):
def changeUserPassword(self, userName, varsDict, confFile):
"""Изменение пароля пользователя при помощи конфигурационного файла
.calculate.env в домашней директории пользователя
"""
userPwdHash = self.clVars.Get("ur_unix_hash")
userLMHash = self.clVars.Get("ur_samba_lm_hash")
userNTHash = self.clVars.Get("ur_samba_nt_hash")
# Переопределение печати ошибок
self.printERROR = lambda x: errMessages.append(x)
self.servUnixObj.printERROR = self.printERROR
self.servSambaObj.printERROR = self.printERROR
if userPwdHash and userLMHash and userNTHash:
resUnix = self.servUnixObj.searchUnixUser(userName)
resSamba = self.servSambaObj.searchSambaUser(userName)
if not resUnix:
self.printError(
_("User %s is not found in Unix service")%str(userName))
return False
if not resSamba:
self.printERROR(
_("Samba user %s is not found")%str(userName))
return False
# Изменение пароля пользователя Unix
# Изменяемые аттрибуты пользователя
modAttrs = []
if resUnix[0][0][1].has_key('userPassword'):
modAttrs.append((ldap.MOD_REPLACE, 'userPassword',
userPwdHash))
else:
modAttrs.append((ldap.MOD_ADD, 'userPassword',
userPwdHash))
DN = self.servUnixObj.addDN("uid="+userName,
self.servUnixObj.relUsersDN)
if not self.servUnixObj.modAttrsDN(DN, modAttrs):
return False
# Изменим время последнего измения пароля пользователя
if not self.servUnixObj.setShadowLastChange(userName):
return False
# Изменение пароля пользователя Samba
# Изменяемые аттрибуты пользователя
modAttrs = []
# Текущее время в секундах от 1970 года
recTime = str(int(time.time()))
data = [("sambaPwdLastSet",recTime),
("sambaLMPassword",userLMHash),
("sambaNTPassword",userNTHash)]
resSambaAttr = resSamba[0][0][1]
for attr, value in data:
if resSambaAttr.has_key(attr):
modAttrs.append((ldap.MOD_REPLACE, attr, value))
else:
if attr!="sambaLMPassword":
modAttrs.append((ldap.MOD_ADD, attr, value))
DN = self.servSambaObj.addDN("uid="+userName,
self.servSambaObj.relUsersDN)
if not self.servSambaObj.modAttrsDN(DN, modAttrs):
return False
varsData = ("unix_hash", "samba_lm_hash", "samba_nt_hash")
if not set(varsData)<=set(varsDict.keys():
notFoundVars = set(varsData) - set(varsDict.keys())
if len(notFoundVars)<len(varsData):
# Если какой либо ключ или ключи есть - выходим с ошибкой
self.printError(_("Variables (%s) is empty")\
%", ".join(notFoundVars) + ", "+\
_("file %s")%confFile)
return False
# Если нет всех ключей - выходим без ошибки
return True
userPwdHash = varsDict["unix_hash"]
userLMHash = varsDict["samba_lm_hash"]
userNTHash = varsDict["samba_nt_hash"]
# Поиск пользователя в Unix сервисе
resUnix = self.servUnixObj.searchUnixUser(userName)
# Поиск пользователя в Samba сервисе
resSamba = self.servSambaObj.searchSambaUser(userName)
if not resUnix:
self.printError(
_("User %s is not found in Unix service")%str(userName))
return False
if not resSamba:
self.printERROR(
_("Samba user %s is not found")%str(userName))
return False
# Изменение пароля пользователя Unix
# Изменяемые аттрибуты пользователя
modAttrs = []
if resUnix[0][0][1].has_key('userPassword'):
modAttrs.append((ldap.MOD_REPLACE, 'userPassword',
userPwdHash))
else:
variables = ("ur_unix_hash","ur_samba_lm_hash","ur_samba_nt_hash")
self.printERROR(_("Profile variables: %s is empty")\
%filter(lambda x: self.clVars.Get(x), variables))
modAttrs.append((ldap.MOD_ADD, 'userPassword',
userPwdHash))
DN = self.servUnixObj.addDN("uid="+userName,
self.servUnixObj.relUsersDN)
if not self.servUnixObj.modAttrsDN(DN, modAttrs):
return False
# Изменим время последнего измения пароля пользователя
if not self.servUnixObj.setShadowLastChange(userName):
return False
# Изменение пароля пользователя Samba
# Изменяемые аттрибуты пользователя
modAttrs = []
# Текущее время в секундах от 1970 года
recTime = str(int(time.time()))
data = [("sambaPwdLastSet",recTime),
("sambaLMPassword",userLMHash),
("sambaNTPassword",userNTHash)]
resSambaAttr = resSamba[0][0][1]
for attr, value in data:
if resSambaAttr.has_key(attr):
modAttrs.append((ldap.MOD_REPLACE, attr, value))
else:
if attr!="sambaLMPassword":
modAttrs.append((ldap.MOD_ADD, attr, value))
DN = self.servSambaObj.addDN("uid="+userName,
self.servSambaObj.relUsersDN)
if not self.servSambaObj.modAttrsDN(DN, modAttrs):
return False
self.printSUCCESS(_("Changed password of user %s")%userName)
return True
def genReplServers(self, replServers, hostName, fullHostName):

Loading…
Cancel
Save