Добавлено отмонтирование пользовательских директорий при ошибке

git-svn-id: http://svn.calculate.ru/calculate2/calculate-client/trunk@1018 c91db197-33c1-4113-bf15-f8a5c547ca64
develop
asamoukin 15 years ago
parent 8175318e3f
commit 8ed713fbff

@ -242,6 +242,15 @@ conjunction with the 'login' or 'logout'")
self.replHostsDN = self.addDN("ou=Worked","ou=Replication",
"ou=LDAP", self.ServicesDN)
self.replLogoutFile = ".logout"
# Если атрибут установлен то значит (ошибка и отмонтируются
# пользовательские ресурсы)
self.errorAndUnmountUserRes = False
# Имя пользователя
self.userName = ""
def __del__(self):
if self.errorAndUnmountUserRes and self.userName:
self.umountUserResNoSync(self.userName, False, False)
def isRoot(self):
"""Определяет является ли пользователь root"""
@ -505,6 +514,8 @@ conjunction with the 'login' or 'logout'")
def createHome(self, userName, applyAlways=False):
"""Создание пользовательской директории с настройками для kde4"""
# Имя пользователя
self.userName = userName
# Проверяем на root
if not self.isRoot():
return False
@ -525,6 +536,8 @@ conjunction with the 'login' or 'logout'")
# uid и gid и mail из passwd
uidGid = self.getUserPasswdInfo(userName)
if not uidGid:
# Отмонтируем пользовательские ресурсы в случае ошибки
self.errorAndUnmountUserRes = True
self.printERROR(_("Not found user uid and gid"))
return False
uid = int(uidGid[0])
@ -561,6 +574,8 @@ conjunction with the 'login' or 'logout'")
# Применяем профили для пользователя
dirsAndFiles = self.applyProfilesFromUser()
if not dirsAndFiles:
# Отмонтируем пользовательские ресурсы в случае ошибки
self.errorAndUnmountUserRes = True
self.printERROR(_("Not apply user profile"))
return False
self.chownR(homeDir, uid, gid, dirsAndFiles)
@ -824,6 +839,8 @@ install/6intranet" %(domain,servDn,unixDN,bindDn,bindPw)
def umountUserRes(self, userName):
"""Отмонтирование пользовательских ресурсов и синхронизация настроек"""
# Имя пользователя
self.userName = userName
# Проверяем на root
if not self.isRoot():
return False
@ -834,10 +851,14 @@ install/6intranet" %(domain,servDn,unixDN,bindDn,bindPw)
return True
connectDomain = self.isDomain()
if not connectDomain:
# Отмонтируем пользовательские ресурсы в случае ошибки
self.errorAndUnmountUserRes = True
return False
elif not connectDomain[0]:
self.printERROR(_("Can not mount Samba resource [remote]") + \
" ...")
# Отмонтируем пользовательские ресурсы в случае ошибки
self.errorAndUnmountUserRes = True
return False
# Если пользователь в X сессии тогда не будем отмонтировать ресурсы
if self.isSessionUser(userName):
@ -845,10 +866,14 @@ install/6intranet" %(domain,servDn,unixDN,bindDn,bindPw)
# Подсоединяемся к серверу
domain = self.clVars.Get("cl_remote_host")
if not self.getLdapObjBind(domain):
# Отмонтируем пользовательские ресурсы в случае ошибки
self.errorAndUnmountUserRes = True
return False
# homeDir из LDAP
resLdap = self.getUserLdapInfo(userName)
if not resLdap:
# Отмонтируем пользовательские ресурсы в случае ошибки
self.errorAndUnmountUserRes = True
return False
homeDir = resLdap[4]
home = os.path.split(homeDir)[0]
@ -865,6 +890,8 @@ install/6intranet" %(domain,servDn,unixDN,bindDn,bindPw)
self.moveHomeDir(homeDir)
# Синхронизируем настройки
if not self.syncUser(userName, homeDir, "logout"):
# Отмонтируем пользовательские ресурсы в случае ошибки
self.errorAndUnmountUserRes = True
return False
# Удаляем приватные файлы
self.removePrivateFiles(homeDir)
@ -892,16 +919,20 @@ install/6intranet" %(domain,servDn,unixDN,bindDn,bindPw)
flagError = True
break
if flagError:
# Отмонтируем пользовательские ресурсы в случае ошибки
self.errorAndUnmountUserRes = True
self.printERROR(_("Can not keep a user profile in the domain"))
return False
self.printSUCCESS(_("Keep a user profile in the domain"))
self.printOK(_("Umount user resource in domain") + " ...")
return True
def umountUserResNoSync(self, userName):
def umountUserResNoSync(self, userName, printError=True, printSuccess=True):
"""Отмонтирование пользовательских ресурсов
без синхронизации настроек"""
# Имя пользователя
self.userName = userName
# Проверяем на root
if not self.isRoot():
return False
@ -912,17 +943,23 @@ install/6intranet" %(domain,servDn,unixDN,bindDn,bindPw)
return True
# Подсоединяемся к серверу
domain = self.clVars.Get("cl_remote_host")
if not self.getLdapObjBind(domain):
return False
home = ""
homeDir = ""
if not self.getLdapObjBind(domain, printError):
home = "/home"
homeDir = os.path.join(home,userName)
# Если пользователь в X сессии тогда не будем отмонтировать ресурсы
if self.isSessionUser(userName):
return True
# homeDir из LDAP
resLdap = self.getUserLdapInfo(userName)
if not resLdap:
return False
homeDir = resLdap[4]
home = os.path.split(homeDir)[0]
if not homeDir:
# homeDir из LDAP
resLdap = self.getUserLdapInfo(userName, printError)
if not resLdap:
home = "/home"
homeDir = os.path.join(home,userName)
else:
homeDir = resLdap[4]
home = os.path.split(homeDir)[0]
pathRemote = []
# Удаленный ресурс профилей
pathRemote.append((os.path.join(home,"." + userName), "unix"))
@ -934,7 +971,8 @@ install/6intranet" %(domain,servDn,unixDN,bindDn,bindPw)
# Удаленный ресурс share
pathRemote.append((os.path.join(homeDir,"Disks"), "share"))
flagError = False
self.moveHomeDir(homeDir)
if self.isMount(pathRemote[1][0] ,"cifs"):
self.moveHomeDir(homeDir)
for path, res in pathRemote:
if self.isMount(path ,"cifs"):
textLine = self.umountSleepPath(path)
@ -945,13 +983,16 @@ install/6intranet" %(domain,servDn,unixDN,bindDn,bindPw)
try:
os.rmdir(path)
except:
self.printERROR(_("Can not remove dir %s")% path)
if printError:
self.printERROR(_("Can not remove dir %s")% path)
flagError = True
break
if flagError:
self.printERROR(_("Can not unmount user %s resource")%userName)
if printError:
self.printERROR(_("Can not unmount user %s resource")%userName)
return False
self.printOK(_("Umount user %s resource") %userName + " ...")
if printSuccess:
self.printOK(_("Umount user %s resources") %userName + " ...")
return True
def isSessionUser(self, userName):
@ -1006,6 +1047,8 @@ install/6intranet" %(domain,servDn,unixDN,bindDn,bindPw)
def mountUserRes(self, userName, sync=True):
"""Монтирование пользовательских ресурсов и синхронизация настроек"""
# Имя пользователя
self.userName = userName
# Проверяем на root
if not self.isRoot():
return False
@ -1020,18 +1063,26 @@ install/6intranet" %(domain,servDn,unixDN,bindDn,bindPw)
# Проверим что компьютер в домене и смонтирован [remote]
connectDomain = self.isDomain()
if not connectDomain:
# Отмонтируем пользовательские ресурсы в случае ошибки
self.errorAndUnmountUserRes = True
return False
elif not connectDomain[0]:
self.printERROR(_("Can not mount Samba resource [remote]") + \
" ...")
# Отмонтируем пользовательские ресурсы в случае ошибки
self.errorAndUnmountUserRes = True
return False
# Подсоединяемся к серверу
domain = self.clVars.Get("cl_remote_host")
if not self.getLdapObjBind(domain):
# Отмонтируем пользовательские ресурсы в случае ошибки
self.errorAndUnmountUserRes = True
return False
# homeDir из LDAP
resLdap = self.getUserLdapInfo(userName)
if not resLdap:
# Отмонтируем пользовательские ресурсы в случае ошибки
self.errorAndUnmountUserRes = True
return False
uid = int(resLdap[0])
gid = int(resLdap[1])
@ -1045,6 +1096,8 @@ install/6intranet" %(domain,servDn,unixDN,bindDn,bindPw)
userPwd = _cl_keys.getKey(userName)
if not userPwd:
self.printERROR(_("Not found user password"))
# Отмонтируем пользовательские ресурсы в случае ошибки
self.errorAndUnmountUserRes = True
return False
home = os.path.split(homeDir)[0]
pathRemote = []
@ -1100,6 +1153,8 @@ install/6intranet" %(domain,servDn,unixDN,bindDn,bindPw)
# в случае если их нет
FD.close()
if flagError:
# Отмонтируем пользовательские ресурсы в случае ошибки
self.errorAndUnmountUserRes = True
return False
# Синхронизируем настройки
if sync:
@ -1124,15 +1179,21 @@ install/6intranet" %(domain,servDn,unixDN,bindDn,bindPw)
if not (textLine == None):
self.printERROR(_("Can not mount Samba resource [%s]")\
%"unix" + " ...")
# Отмонтируем пользовательские ресурсы в случае ошибки
self.errorAndUnmountUserRes = True
return False
# Если на текущем сервере в ресурсе unix есть файлы
# то синхронируем настройки
#if os.listdir(defaultPath):
if not self.syncUser(userName, homeDir, "login"):
# Отмонтируем пользовательские ресурсы в случае ошибки
self.errorAndUnmountUserRes = True
return False
# Отмонтируем ресурс
textLine = self.umountSleepPath(defaultPath)
if not textLine:
# Отмонтируем пользовательские ресурсы в случае ошибки
self.errorAndUnmountUserRes = True
return False
if prevHost and prevHost != self.clVars.Get("cl_remote_host"):
# Монтируем настройки пользователя удаленного сервера
@ -1146,6 +1207,9 @@ install/6intranet" %(domain,servDn,unixDN,bindDn,bindPw)
if self.isMount(defaultPath, 'cifs'):
textLine = self.umountSleepPath(defaultPath)
if not textLine:
# Отмонтируем пользовательские ресурсы
# в случае ошибки
self.errorAndUnmountUserRes = True
return False
# Монтируем текущий сервер если ошибка подключения к
# к найденному серверу
@ -1155,6 +1219,9 @@ install/6intranet" %(domain,servDn,unixDN,bindDn,bindPw)
if not (textLine == None):
self.printERROR(_("Can not mount Samba resource \
[%s]")%"unix" + " ...")
# Отмонтируем пользовательские ресурсы
# в случае ошибки
self.errorAndUnmountUserRes = True
return False
replErrorMount = True
else:
@ -1165,6 +1232,8 @@ install/6intranet" %(domain,servDn,unixDN,bindDn,bindPw)
if not (textLine == None):
self.printERROR(_("Can not mount Samba resource \
[%s]")%"unix" + " ...")
# Отмонтируем пользовательские ресурсы в случае ошибки
self.errorAndUnmountUserRes = True
return False
# Синхронизируем настройки пользователя
if not (pathReplRun and mountServer == "default"):
@ -1172,18 +1241,24 @@ install/6intranet" %(domain,servDn,unixDN,bindDn,bindPw)
if pathReplRun and mountServer == "remote":
replErrorSync = True
else:
# Отмонтируем пользовательские ресурсы в случае ошибки
self.errorAndUnmountUserRes = True
return False
if pathReplRun and mountServer == "remote":
# В случае репликации перемонтируем ресурс профилей
# на текущий сервер (в случае необходимости)
textLine = self.umountSleepPath(defaultPath)
if not textLine:
# Отмонтируем пользовательские ресурсы в случае ошибки
self.errorAndUnmountUserRes = True
return False
textLine = self.mountSambaRes(userName,userPwd,uid,gid,
"unix",defaultPath)
if not (textLine == None):
self.printERROR(_("Can not mount Samba resource [%s]")\
%"unix" + " ...")
# Отмонтируем пользовательские ресурсы в случае ошибки
self.errorAndUnmountUserRes = True
return False
if pathReplRun:
logOutFile = os.path.join(homeDir,self.replLogoutFile)

Loading…
Cancel
Save