develop
asamoukin 16 years ago
parent f5c5cb038b
commit 25a23960f7

@ -171,6 +171,38 @@ class shareLdap(imp_cl_err, imp_cl_xml, imp_cl_help, imp_cl_smcon):
# DN сервисов относительно базового
self.ServicesDN = "ou=Services"
@adminConnectLdap
def restoreDelUser(self, userName, service, srcDir, message):
"""Возвращаем данные удаленного пользователя"""
# Ищем Unix пользователя
searchUnixUser = self.servUnixObj.searchUnixUser(userName)
# id пользователя
strUid = ""
if searchUnixUser:
strUid = searchUnixUser[0][0][1]['uidNumber'][0]
if strUid:
delBackDir =\
os.path.join(self.clVars.Get("soft_ldap_delete_user_dir"),
"%s-%s"%(userName,strUid),
service)
if os.path.exists(delBackDir) and os.listdir(delBackDir):
dialogRes = self.dialogYesNo(message)
if dialogRes and dialogRes == True:
#try:
self.copyDir(srcDir, delBackDir)
#except:
#self.printERROR(_("Not restore user data dir %s")\
#%srcDir)
#return False
self.printSUCCESS(_("Restore user data in dir %s")\
%srcDir)
return "Yes", delBackDir
elif dialogRes == False:
return "No", delBackDir
elif dialogRes == None:
return "Cansel", delBackDir
return True
@adminConnectLdap
def backupDelUser(self, userName, service, srcDir):
"""Сохраняем данные удаляемого пользователя"""
@ -198,21 +230,24 @@ class shareLdap(imp_cl_err, imp_cl_xml, imp_cl_help, imp_cl_smcon):
service)
i = 0
while os.path.exists(delBackDir):
i += 1
delBackDir =\
os.path.join(self.clVars.Get("soft_ldap_delete_user_dir"),
"%s_%s"%(userName,i),
service)
i += 1
#Делаем сохранение почтовой директории
self.copyDir(delBackDir, srcDir)
if os.path.exists(delBackDir):
self.printSUCCESS(_("Created deleted user data dir %s")\
%delBackDir)
return True
else:
# Cоздаем директорию хранения удаленных пользователей
if not os.path.exists(self.clVars.Get("soft_ldap_delete_user_dir")):
os.makedirs(self.clVars.Get("soft_ldap_delete_user_dir"))
#Делаем сохранение директории
try:
os.renames(srcDir, delBackDir)
except:
self.printERROR(_("Not created deleted user data dir %s")\
%delBackDir)
return False
self.printSUCCESS(_("Created deleted user data dir %s")\
%delBackDir)
return True
def stringIsJpeg(self, string):
"""Определяет является ли строка jpeg изображением"""
@ -507,6 +542,38 @@ class shareLdap(imp_cl_err, imp_cl_xml, imp_cl_help, imp_cl_smcon):
return False
return True
def removeDir(self, rmDir):
"""Рекурсивное удаление директории"""
if not os.path.exists(rmDir):
self.printERROR(_("Not found remove dir %s") %rmDir)
return False
fileObj = cl_profile._file()
# Сканируем директорию
scanObjs = fileObj.scanDirs([rmDir])
for fileRm in scanObjs[0].files:
# Удаляем файлы
os.remove(fileRm)
for linkRm in scanObjs[0].links:
# Удаляем ссылки
os.unlink(linkRm)
scanObjs[0].dirs.sort(lambda x, y: cmp(len(y), len(x)))
for dirRm in scanObjs[0].dirs:
# Удаляем директории
os.rmdir(dirRm)
os.rmdir(rmDir)
return True
def createUserDir(self, uid, gid, userDir):
"""Создание пользовательской директории для почты"""
if not os.path.exists(userDir):
os.makedirs(userDir)
os.chmod(userDir,0700)
os.chown(userDir,uid,gid)
return True
else:
self.printERROR(_("Path %s exists") %userDir)
return False
def copyDir(self, destDir, srcDir):
"""Копируем директорию в другое место
@ -517,11 +584,10 @@ class shareLdap(imp_cl_err, imp_cl_xml, imp_cl_help, imp_cl_smcon):
os.makedirs(destDir)
# Файловый объект
fileObj = cl_profile._file()
# Сканируем скелетную директорию
# Сканируем директорию
scanObjs = fileObj.scanDirs([srcDir])
if not scanObjs:
return True
scanObjs[0].dirs.sort(lambda x, y: cmp(len(y), len(x)))
for dirSrc in scanObjs[0].dirs:
#создаем в домашней директории директории из srcDir
dirName = destDir + dirSrc.split(srcDir)[1]
@ -769,6 +835,8 @@ class shareLdap(imp_cl_err, imp_cl_xml, imp_cl_help, imp_cl_smcon):
termios.tcsetattr(fd, termios.TCSADRAIN, oldSet)
return char
def term(char):
if ord(char) == 3:
return None
if char == "Y":
return True
elif char == "n":
@ -864,6 +932,15 @@ class servUnix(shareLdap):
"""Cоединение с LDAP администратором Samba сервиса"""
return shareLdap.getLdapObjInFile(self, "unix")
def createUnixDir(self, userName, uid, gid):
"""Создание пользовательской директории хранения профилей"""
unixDir = os.path.join(self.clVars.Get("soft_ldap_unix_path"),
userName)
if self.createUserDir(uid, gid, unixDir):
return unixDir
else:
return False
def createHomeDir(self, userName, homeDir, skelDir):
"""Создаем домашнюю директорию пользователя
@ -1385,6 +1462,14 @@ class servUnix(shareLdap):
self.printERROR(_("Not added jpeg photo for user") + " " +\
str(userName))
flagError = True
# Cоздаем директорию профиля
createDirProfile = False
if not flagError and (options.has_key('n') or int(userId) >= 1000):
profileDir = self.createUnixDir(userName,int(userId),int(userGid))
if not profileDir:
flagError = True
else:
createDirProfile = True
if flagError:
if options.has_key('m'):
self.delUserUnixServer(userName, {'r':""}, False)
@ -1401,7 +1486,11 @@ class servUnix(shareLdap):
" ...")
if options.has_key('i'):
if printSuccess:
self.printSUCCESS(_("Added jpeg photo: %s")% photoFile+\
self.printSUCCESS(_("Added jpeg photo %s")% photoFile+\
" ...")
if createDirProfile:
if printSuccess:
self.printSUCCESS(_("Created profile dir %s") %profileDir +\
" ...")
if printSuccess:
self.printSUCCESS(_("Added user in Unix service") + " ...")
@ -1609,7 +1698,8 @@ service"))
else:
return maxUid+1
def delUserUnixServer(self, userName, options, printSuccess=True):
def delUserUnixServer(self, userName, options, printSuccess=True,
backup=True):
"""Удаляем Unix пользователя"""
# Ищем пользователя в Samba
if self.servSambaObj.searchSambaUser(userName):
@ -1636,7 +1726,14 @@ service"))
_("User %s is not found in Unix service") % str(userName) +\
" ...")
return False
#директория хранения настроек пользователя
unixDir = os.path.join(self.clVars.Get("soft_ldap_unix_path"),
userName)
# Делаем сохранение данных удаляемого пользователя
if backup and os.listdir(unixDir):
if not self.backupDelUser(userName, 'unix', unixDir):
return False
# Удаляем пользователя
delDN = self.addDN("uid=" + userName, self.relUsersDN)
if not self.delDN(delDN):
return False
@ -2044,11 +2141,6 @@ service"))
_("Executing of the program will change") + " " +
_("the configuration files and database of LDAP service")+
".")
# если вы ранее использовали программу cl-setup то в дальнейшем
# можете использовать cl-backup для резервного копирования
self.printWARNING (
_("If cl-setup program was used previously") + ", " +
_("you may execute cl-backup program for backup services"))
# если вы готовы продолжить работу программы нажмите Y если нет n
messDialog = \
_("If you are ready to continue executing the program")+", "+\
@ -2203,7 +2295,9 @@ class servMail(shareLdap):
mailDir = os.path.join(self.clVars.Get("soft_ldap_mail_path"),
userName)
# Делаем сохранение данных удаляемого пользователя
if backup and os.listdir(mailDir):
if options.has_key('r'):
backup = False
if backup and os.path.exists(mailDir) and os.listdir(mailDir):
if not self.backupDelUser(userName, 'mail', mailDir):
return False
# Удаляем пользователя из групп
@ -2655,19 +2749,6 @@ in Unix service ...") %str(primaryMail))
return True
return False
def createMailDir(self, userName, uid, gid):
"""Создание пользовательской директории для почты"""
mailDir = os.path.join(self.clVars.Get("soft_ldap_mail_path"),
userName)
if not os.path.exists(mailDir):
os.makedirs(mailDir)
os.chmod(mailDir,0700)
os.chown(mailDir,uid,gid)
return True
else:
self.printERROR(_("Path %s exists") %mailDir)
return False
def searchUsersInGroupMail(self, usersNames, groupName):
"""Ищет спиcок пользователей в группе, ищет в LDAP
@ -2720,6 +2801,12 @@ in Unix service ...") %str(primaryMail))
"mailAlternateAddress")
return resSearch
def createMailDir(self, userName, uid, gid):
"""Создание пользовательской директории для почты"""
mailDir = os.path.join(self.clVars.Get("soft_ldap_mail_path"),
userName)
return self.createUserDir(uid, gid, mailDir)
def addUsersGroupMail(self, users, groupName):
"""Добавляет пользователей из списка в Mail группу"""
if not self.searchMailGroupToName(groupName):
@ -2875,12 +2962,43 @@ in Unix service ...") %str(primaryMail))
if flagCreateUnixUser:
self.servUnixObj.delUserUnixServer(userName, {}, False)
return False
# Востановим удаленного пользователя
# Почтовая директория пользователя
mailDir = os.path.join(self.clVars.Get("soft_ldap_mail_path"),
userName)
message = _("Restored deleted user %s data")% userName + "\n" +\
_("(Y - yes, n - no, ctrl+c - cansel)")
resRestore = self.restoreDelUser(userName, "mail", mailDir, message)
# Если ошибка то выходим
if not resRestore:
return False
# Флаг создания почтовой директории пользователя
createDir = True
if type(resRestore) == types.TupleType:
# Если cansel
if resRestore[0] == "Cansel":
# Удаляем пользователя
self.delUserMailServer(userName, {}, False,False)
if flagCreateUnixUser:
self.servUnixObj.delUserUnixServer(userName, {}, False)
return False
# Если No
if resRestore[0] == "No":
if not self.removeDir(resRestore[1]):
self.delUserMailServer(userName, {}, False,False)
if flagCreateUnixUser:
self.servUnixObj.delUserUnixServer(userName, {}, False)
return False
createDir = True
if resRestore[0] == "Yes":
createDir = False
# Создаем почтовую директорию
if not self.createMailDir(userName, uid, gid):
self.delUserMailServer(userName, {}, False,False)
if flagCreateUnixUser:
self.servUnixObj.delUserUnixServer(userName, {}, False)
return False
if createDir:
if not self.createMailDir(userName, uid, gid):
self.delUserMailServer(userName, {}, False,False)
if flagCreateUnixUser:
self.servUnixObj.delUserUnixServer(userName, {}, False)
return False
# Записываем основной почтовый адрес
if primaryMail:
if not self.servUnixObj.setUserMail(userName, primaryMail):
@ -2890,6 +3008,10 @@ in Unix service ...") %str(primaryMail))
self.printERROR(_("Failed set primary email for user %s in\
Unix service ...") %str(primaryMail))
return False
if type(resRestore) == types.TupleType and\
(resRestore[0] == "Yes" or resRestore[0] == "No")\
and os.path.exists(resRestore[1]):
self.removeDir(resRestore[1])
if flagCreateUnixUser:
self.printSUCCESS(_("Added user in Unix service") + " ...")
self.printSUCCESS(_("Added user in Mail service") + " ...")
@ -2926,11 +3048,6 @@ in Unix service ...") %str(primaryMail))
_("Executing of the program will change") + " " +
_("the configuration files of Mail service") +" ("+
_("programs Postfix and Dovecot") + ")." )
# если вы ранее использовали программу cl-setup то в дальнейшем
# можете использовать cl-backup для резервного копирования
self.printWARNING (
_("If cl-setup program was used previously") + ", " +
_("you may execute cl-backup program for backup services"))
# если вы готовы продолжить работу программы нажмите Y если нет n
messDialog = \
_("If you are ready to continue executing the program") + ", "+\
@ -3537,11 +3654,6 @@ class servJabber(shareLdap):
_("Executing of the program will change") + " " +
_("the configuration files of Jabber service") +" ("+
_("program Ejabberd") + ")." )
# если вы ранее использовали программу cl-setup то в дальнейшем
# можете использовать cl-backup для резервного копирования
self.printWARNING (
_("If cl-setup program was used previously") + ", " +
_("you may execute cl-backup program for backup services"))
# если вы готовы продолжить работу программы нажмите Y если нет n
messDialog = \
_("If you are ready to continue executing the program") + ", "+\
@ -3864,11 +3976,6 @@ user %s") %str(userName))
self.printWARNING (_("WARNING") + ": " +
_("Executing of the program will change") + " " +
_("the configuration files of Samba service") + ".")
# если вы ранее использовали программу cl-setup то в дальнейшем
# можете использовать cl-backup для резервного копирования
self.printWARNING (
_("If cl-setup program was used previously") + ", " +
_("you may execute cl-backup program for backup services"))
# если вы готовы продолжить работу программы нажмите Y если нет n
messDialog = \
_("If you are ready to continue executing the program")+", "+\
@ -4454,11 +4561,6 @@ class servLdap(shareLdap):
_("Executing of the program will change") + " " +
_("the configuration files and database of LDAP service")+
".")
# если вы ранее использовали программу cl-setup то в дальнейшем
# можете использовать cl-backup для резервного копирования
self.printWARNING (
_("If cl-setup program was used previously") + ", " +
_("you may execute cl-backup program for backup services"))
# если вы готовы продолжить работу программы нажмите Y если нет n
messDialog = \
_("If you are ready to continue executing the program")+", "+\
@ -4836,6 +4938,13 @@ class cl_ldap(shareLdap):
'helpChapter':_("Unix service options"),
'help':_("create home directory for the new user account")
},
{'progAccess':(3,),
'shortOption':"n",
'longOption':"create-profile",
'helpChapter':_("Unix service options"),
'help':_("create a directory for storing new user account \
preferences")
},
{'progAccess':(3,),
'shortOption':"p",
'longOption':"password",
@ -4930,13 +5039,13 @@ class cl_ldap(shareLdap):
'shortOption':"r",
'longOption':"remove",
'helpChapter':_("Unix service options"),
'help':_("remove home directory")
'help':_("not create backup deleted user data")
},
{'progAccess':(4,),
'shortOption':"r",
'longOption':"remove",
'helpChapter':_("Mail service options"),
'help':_("remove user mail directory")
'help':_("not create backup deleted user data")
},
{'progAccess':(5,),
'shortOption':"c",

@ -195,6 +195,10 @@ class Data:
soft_ldap_admin_unixpw_hash= {'mode':"r",
'type':('param','soft'),
}
# Директория хранения настроек пользователя
soft_ldap_unix_path = {'mode':"r",
'type':('param','soft'),
'value':'/var/calculate/services/unix'}
#Настроен или нет сервис Unix
soft_unix_setup= {'mode':"w",
'type':('param','soft'),

Loading…
Cancel
Save