Modified algorithm for checking a replication to server

master
Самоукин Алексей 14 years ago
parent 1fbe88b44d
commit 7350ce44e7

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

Loading…
Cancel
Save