|
|
|
@ -458,8 +458,6 @@ conjunction with the 'login' or 'logout'")
|
|
|
|
|
ServicesDN)
|
|
|
|
|
# Объект хранения переменных
|
|
|
|
|
self.clVars = False
|
|
|
|
|
# Файл в ресурсе share для обработки подключения клиента
|
|
|
|
|
self.replRunFileShare = ".reprun"
|
|
|
|
|
# файл с дополнительной информацией о профиле
|
|
|
|
|
# на данный момент только количество файлов для rsync
|
|
|
|
|
# используемое для прогрессбара
|
|
|
|
@ -467,9 +465,15 @@ conjunction with the 'login' or 'logout'")
|
|
|
|
|
# При включениии репликации
|
|
|
|
|
# Временные задержки для монтирования в секундах
|
|
|
|
|
self.sleeps = [0.5, 2, 5]
|
|
|
|
|
# Название ветки хранения последнего посещенного пользователя
|
|
|
|
|
self.replBranchName = "Worked"
|
|
|
|
|
# Аттрибут ветки хранения последнего посещенного пользователя
|
|
|
|
|
self.replAttr = "ou"
|
|
|
|
|
# DN системной ветки
|
|
|
|
|
self.sysDN = self.addDN("ou=Replication","ou=LDAP", ServicesDN)
|
|
|
|
|
replBranch = self.replAttr + "=" + self.replBranchName
|
|
|
|
|
# DN хранения последнего посещенного пользователя
|
|
|
|
|
self.replHostsDN = self.addDN("ou=Worked","ou=Replication",
|
|
|
|
|
"ou=LDAP", ServicesDN)
|
|
|
|
|
self.replHostsDN = self.addDN(replBranch,self.sysDN)
|
|
|
|
|
# Файл репликации
|
|
|
|
|
self.replLogoutFile = ".logout"
|
|
|
|
|
self.skipHomeFile = ["Home","Disks","FTP",
|
|
|
|
@ -544,6 +548,16 @@ conjunction with the 'login' or 'logout'")
|
|
|
|
|
resSearch = self.searchLdapDN(userLogin, self.replHostsDN, "uid")
|
|
|
|
|
return resSearch
|
|
|
|
|
|
|
|
|
|
def searchReplBranch(self):
|
|
|
|
|
"""Находит ветку создаваемую при включении репликации
|
|
|
|
|
|
|
|
|
|
В ветке находятся ((имя пользователя, имя системы, хост) ....)
|
|
|
|
|
"""
|
|
|
|
|
resSearch = self.searchLdapDN(self.replBranchName,
|
|
|
|
|
self.sysDN,
|
|
|
|
|
self.replAttr)
|
|
|
|
|
return resSearch
|
|
|
|
|
|
|
|
|
|
def searchUnixUser(self, userName):
|
|
|
|
|
"""Находит пользователя сервиса Unix"""
|
|
|
|
|
resSearch = self.searchLdapDN(userName, self.relUsersDN, "uid")
|
|
|
|
@ -1503,21 +1517,11 @@ or ld_bind_dn or ld_bind_pw")
|
|
|
|
|
# Отмонтируем пользовательские ресурсы в случае ошибки
|
|
|
|
|
self.errorAndUnmountUserRes = True
|
|
|
|
|
return False
|
|
|
|
|
|
|
|
|
|
# Удаляем приватные файлы
|
|
|
|
|
self.removePrivateFiles(homeDir)
|
|
|
|
|
flagError = False
|
|
|
|
|
for path, res in pathRemote:
|
|
|
|
|
if self.isMount(path ,"cifs"):
|
|
|
|
|
# В случае репликации
|
|
|
|
|
if res == "share":
|
|
|
|
|
# Проверка на репликацию
|
|
|
|
|
pathReplRun = os.path.join(path, self.replRunFileShare)
|
|
|
|
|
if os.path.exists(pathReplRun):
|
|
|
|
|
FD = open(pathReplRun)
|
|
|
|
|
# Записывает доменное имя сервера если
|
|
|
|
|
# с сервером корректно соединились
|
|
|
|
|
FD.close()
|
|
|
|
|
textLine = self.umountSleepPath(path)
|
|
|
|
|
if not textLine:
|
|
|
|
|
flagError = True
|
|
|
|
@ -1778,8 +1782,8 @@ or ld_bind_dn or ld_bind_pw")
|
|
|
|
|
# Удаленный ресурс ftp
|
|
|
|
|
pathRemote.append((os.path.join(homeDir,"FTP"), "ftp"))
|
|
|
|
|
flagError = False
|
|
|
|
|
# Запускаемый файл на сервере в случае репликации
|
|
|
|
|
pathReplRun = ""
|
|
|
|
|
# В случае включения репликации на сервере True
|
|
|
|
|
replOn = self.searchReplBranch()
|
|
|
|
|
# Путь к профилю пользователя по умолчанию
|
|
|
|
|
defaultPath = ""
|
|
|
|
|
# Хост пользователя по умолчанию
|
|
|
|
@ -1800,7 +1804,7 @@ or ld_bind_dn or ld_bind_pw")
|
|
|
|
|
if self.isMount(path, 'cifs'):
|
|
|
|
|
continue
|
|
|
|
|
# В случае репликации не монтируем профиль пользователя
|
|
|
|
|
if pathReplRun and res=="unix":
|
|
|
|
|
if replOn and res=="unix":
|
|
|
|
|
defaultPath = path
|
|
|
|
|
continue
|
|
|
|
|
# Монтируем Samba ресурс
|
|
|
|
@ -1810,23 +1814,12 @@ or ld_bind_dn or ld_bind_pw")
|
|
|
|
|
%res + " ...")
|
|
|
|
|
flagError = True
|
|
|
|
|
break
|
|
|
|
|
# В случае репликации
|
|
|
|
|
if res == "share":
|
|
|
|
|
# Проверка на репликацию
|
|
|
|
|
pathReplRun = os.path.join(path, self.replRunFileShare)
|
|
|
|
|
if os.path.exists(pathReplRun):
|
|
|
|
|
FD = open(pathReplRun)
|
|
|
|
|
# Создание директорий пользователя на сервере
|
|
|
|
|
# в случае если их нет
|
|
|
|
|
FD.close()
|
|
|
|
|
else:
|
|
|
|
|
pathReplRun = ""
|
|
|
|
|
if flagError:
|
|
|
|
|
# Отмонтируем пользовательские ресурсы в случае ошибки
|
|
|
|
|
self.errorAndUnmountUserRes = True
|
|
|
|
|
return False
|
|
|
|
|
flagFirstSync = False
|
|
|
|
|
if pathReplRun or sync:
|
|
|
|
|
if replOn or sync:
|
|
|
|
|
# Ошибка при монтировании unix ресурса удаленного сервера при
|
|
|
|
|
# включенной репликации
|
|
|
|
|
replErrorMount = False
|
|
|
|
@ -1841,7 +1834,7 @@ or ld_bind_dn or ld_bind_pw")
|
|
|
|
|
prevHost = ""
|
|
|
|
|
# Монтирование по умолчанию (default - cвой сервер, remote - чужой)
|
|
|
|
|
mountServer = ""
|
|
|
|
|
if pathReplRun:
|
|
|
|
|
if replOn:
|
|
|
|
|
searchPrevHost = self.searchPrevHost(userName)
|
|
|
|
|
if searchPrevHost and searchPrevHost[0][0][1].has_key('host'):
|
|
|
|
|
prevHost = searchPrevHost[0][0][1]['host'][0]
|
|
|
|
@ -1940,7 +1933,7 @@ or ld_bind_dn or ld_bind_pw")
|
|
|
|
|
else:
|
|
|
|
|
prevHost=self.clVars.Get('cl_remote_host')
|
|
|
|
|
# Синхронизируем настройки пользователя
|
|
|
|
|
if not (pathReplRun and mountServer == "default"):
|
|
|
|
|
if not (replOn and mountServer == "default"):
|
|
|
|
|
# Переносим настройки пользователя в новую директорию
|
|
|
|
|
# .CLD
|
|
|
|
|
self.upgradeProfileClient(userName, homeDir)
|
|
|
|
@ -1952,7 +1945,7 @@ or ld_bind_dn or ld_bind_pw")
|
|
|
|
|
if os.listdir(homeProfile):
|
|
|
|
|
if not self.syncUser(userName, homeDir, "login", uid, gid,\
|
|
|
|
|
progress=progress,host=prevHost):
|
|
|
|
|
if pathReplRun and mountServer == "remote":
|
|
|
|
|
if replOn and mountServer == "remote":
|
|
|
|
|
replErrorSync = True
|
|
|
|
|
else:
|
|
|
|
|
# Отмонтируем пользовательские ресурсы
|
|
|
|
@ -1977,7 +1970,7 @@ or ld_bind_dn or ld_bind_pw")
|
|
|
|
|
return False
|
|
|
|
|
elif stat.S_ISSOCK(os.stat(delFile)[stat.ST_MODE]):
|
|
|
|
|
os.remove(delFile)
|
|
|
|
|
if pathReplRun and mountServer == "remote":
|
|
|
|
|
if replOn and mountServer == "remote":
|
|
|
|
|
# В случае репликации перемонтируем ресурс профилей
|
|
|
|
|
# на текущий сервер (в случае необходимости)
|
|
|
|
|
textLine = self.umountSleepPath(defaultPath)
|
|
|
|
@ -1993,7 +1986,7 @@ or ld_bind_dn or ld_bind_pw")
|
|
|
|
|
# Отмонтируем пользовательские ресурсы в случае ошибки
|
|
|
|
|
self.errorAndUnmountUserRes = True
|
|
|
|
|
return False
|
|
|
|
|
if pathReplRun:
|
|
|
|
|
if replOn:
|
|
|
|
|
if replErrorMount or replErrorSync:
|
|
|
|
|
self.createUserFile(logOutFile,"ERROR", uid, gid)
|
|
|
|
|
else:
|
|
|
|
|