|
|
|
@ -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)
|
|
|
|
|