|
|
|
@ -1147,24 +1147,35 @@ install/6intranet" %(domain,servDn,unixDN,bindDn,bindPw)
|
|
|
|
|
# проверяем произведен ли корректный вход в систему -
|
|
|
|
|
# в этом случае закачиваем профиль с локальной машины на сервер
|
|
|
|
|
logOutFile = os.path.join(homeDir,self.replLogoutFile)
|
|
|
|
|
# необходима ли синхронизация с локальным сервером
|
|
|
|
|
needSync = False
|
|
|
|
|
try:
|
|
|
|
|
# проверяем logOutFile: содержит ли он "PROCESS"
|
|
|
|
|
FD = open(logOutFile)
|
|
|
|
|
exitStr = FD.read().strip()
|
|
|
|
|
FD.close()
|
|
|
|
|
if exitStr != "PROCESS":
|
|
|
|
|
if not self.syncUser(userName, homeDir, "logout", uid, gid):
|
|
|
|
|
# Удаляем приватные файлы
|
|
|
|
|
self.removePrivateFiles(homeDir)
|
|
|
|
|
# Отмонтируем пользовательские ресурсы в случае ошибки
|
|
|
|
|
self.errorAndUnmountUserRes = True
|
|
|
|
|
return False
|
|
|
|
|
# если актуальный профиль хранистся не на локальном сервер
|
|
|
|
|
# то на локальный сервер закачиваем профиль
|
|
|
|
|
# так как даже если он будет поврежденные на другом серевер
|
|
|
|
|
# остаётся правильная копия
|
|
|
|
|
if not self.isCorrectProfileOnLocalServer(userName):
|
|
|
|
|
needSync = True
|
|
|
|
|
else:
|
|
|
|
|
FD = open(logOutFile)
|
|
|
|
|
exitStr = FD.read().strip()
|
|
|
|
|
FD.close()
|
|
|
|
|
# проверяем logOutFile: не содержит ли он "PROCESS"
|
|
|
|
|
if exitStr != "PROCESS":
|
|
|
|
|
needSync = True
|
|
|
|
|
except:
|
|
|
|
|
# Удаляем приватные файлы
|
|
|
|
|
self.removePrivateFiles(homeDir)
|
|
|
|
|
# Отмонтируем пользовательские ресурсы в случае ошибки
|
|
|
|
|
self.errorAndUnmountUserRes = True
|
|
|
|
|
return False
|
|
|
|
|
|
|
|
|
|
if needSync and not self.syncUser(userName, homeDir, "logout", uid, gid):
|
|
|
|
|
# Удаляем приватные файлы
|
|
|
|
|
self.removePrivateFiles(homeDir)
|
|
|
|
|
# Отмонтируем пользовательские ресурсы в случае ошибки
|
|
|
|
|
self.errorAndUnmountUserRes = True
|
|
|
|
|
return False
|
|
|
|
|
|
|
|
|
|
# Удаляем приватные файлы
|
|
|
|
|
self.removePrivateFiles(homeDir)
|
|
|
|
@ -1200,9 +1211,8 @@ install/6intranet" %(domain,servDn,unixDN,bindDn,bindPw)
|
|
|
|
|
self.printOK(_("Umount user resource in domain") + " ...")
|
|
|
|
|
return True
|
|
|
|
|
|
|
|
|
|
def umountUserResNoSync(self, userName, printError=True,
|
|
|
|
|
printSuccess=True, isXsession=True, killRsync=False,
|
|
|
|
|
progress=False):
|
|
|
|
|
def umountUserResNoSync(self, userName, printError=True, printSuccess=True,
|
|
|
|
|
isXsession=True, killRsync=False, progress=False):
|
|
|
|
|
"""Отмонтирование пользовательских ресурсов
|
|
|
|
|
|
|
|
|
|
без синхронизации настроек"""
|
|
|
|
@ -1349,6 +1359,23 @@ install/6intranet" %(domain,servDn,unixDN,bindDn,bindPw)
|
|
|
|
|
os.rmdir(rmDir)
|
|
|
|
|
return True
|
|
|
|
|
|
|
|
|
|
def isCorrectProfileOnLocalServer(self,userName):
|
|
|
|
|
"""Узнать находится ли актуальный профиль пользователя на локальном
|
|
|
|
|
сервере
|
|
|
|
|
"""
|
|
|
|
|
searchPrevHost = self.searchPrevHost(userName)
|
|
|
|
|
if searchPrevHost and searchPrevHost[0][0][1].has_key('host'):
|
|
|
|
|
prevHost = searchPrevHost[0][0][1]['host'][0]
|
|
|
|
|
print prevHost
|
|
|
|
|
else:
|
|
|
|
|
prevHost = None
|
|
|
|
|
# если местоположение актуального профиля найти не удалось
|
|
|
|
|
# или его местоположение не на локальном сервере
|
|
|
|
|
if not prevHost or prevHost == self.clVars.Get('cl_remote_host'):
|
|
|
|
|
return True
|
|
|
|
|
else:
|
|
|
|
|
return False
|
|
|
|
|
|
|
|
|
|
def mountUserRes(self, userName, sync=True, progress=False):
|
|
|
|
|
"""Монтирование пользовательских ресурсов и синхронизация настроек"""
|
|
|
|
|
# Имя пользователя
|
|
|
|
@ -1785,7 +1812,6 @@ install/6intranet" %(domain,servDn,unixDN,bindDn,bindPw)
|
|
|
|
|
rsync.runsilent()
|
|
|
|
|
if sync == "logout":
|
|
|
|
|
rsync.runsilent()
|
|
|
|
|
# получаем uid и gid пользователя
|
|
|
|
|
try:
|
|
|
|
|
if cl_base.iniParser(configFileName).setVar('rsync',{'files':\
|
|
|
|
|
rsync.getFilesNum()}):
|
|
|
|
@ -1795,6 +1821,13 @@ install/6intranet" %(domain,servDn,unixDN,bindDn,bindPw)
|
|
|
|
|
pass
|
|
|
|
|
rsync.close()
|
|
|
|
|
if rsync.getExitCode() != 0:
|
|
|
|
|
try:
|
|
|
|
|
if cl_base.iniParser(configFileName).setVar(\
|
|
|
|
|
'rsync',{'exitcode':rsync.getExitCode()}):
|
|
|
|
|
os.chmod(configFileName, 0600)
|
|
|
|
|
os.chown(configFileName,uid,gid)
|
|
|
|
|
except:
|
|
|
|
|
pass
|
|
|
|
|
self.printERROR(_("Can not rsync") + " " + str(sync) +\
|
|
|
|
|
" ...")
|
|
|
|
|
flagError = True
|
|
|
|
|