diff --git a/pym/cl_client.py b/pym/cl_client.py index 1acb2dc..e5630fc 100644 --- a/pym/cl_client.py +++ b/pym/cl_client.py @@ -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: