|
|
|
@ -171,12 +171,12 @@ class shareLdap(imp_cl_err, imp_cl_xml, imp_cl_help, imp_cl_smcon):
|
|
|
|
|
# DN сервисов относительно базового
|
|
|
|
|
self.ServicesDN = "ou=Services"
|
|
|
|
|
|
|
|
|
|
def restorePathDelUser(self, userName, destDir, relDir, message):
|
|
|
|
|
def restorePathDelUser(self,userName,destDir,relDir,message,unixObj=False):
|
|
|
|
|
"""Восстанавливает директорию удаленного пользователя"""
|
|
|
|
|
removeDir = False
|
|
|
|
|
flagError = False
|
|
|
|
|
resRestore = self.restoreDelUser(userName, relDir,
|
|
|
|
|
destDir, message)
|
|
|
|
|
destDir, message,unixObj)
|
|
|
|
|
# Если ошибка то выходим
|
|
|
|
|
if not resRestore:
|
|
|
|
|
flagError = True
|
|
|
|
@ -627,11 +627,12 @@ class shareLdap(imp_cl_err, imp_cl_xml, imp_cl_help, imp_cl_smcon):
|
|
|
|
|
break
|
|
|
|
|
return True
|
|
|
|
|
|
|
|
|
|
def createUserDir(self, uid, gid, userDir):
|
|
|
|
|
def createUserDir(self, uid, gid, userDir, mode=0700):
|
|
|
|
|
"""Создание пользовательской директории для почты"""
|
|
|
|
|
if not os.path.exists(userDir):
|
|
|
|
|
os.makedirs(userDir)
|
|
|
|
|
os.chmod(userDir,0700)
|
|
|
|
|
if mode:
|
|
|
|
|
os.chmod(userDir,mode)
|
|
|
|
|
os.chown(userDir,uid,gid)
|
|
|
|
|
return True
|
|
|
|
|
else:
|
|
|
|
@ -1493,33 +1494,18 @@ class servUnix(shareLdap):
|
|
|
|
|
if self.ldapObj.getError():
|
|
|
|
|
print _("LDAP Error") + ": " + self.ldapObj.getError().strip()
|
|
|
|
|
flagError = True
|
|
|
|
|
message = _("Restored deleted user %s")% userName + "\n" +\
|
|
|
|
|
_("(Y - yes, n - no, ctrl+c - cansel)")
|
|
|
|
|
removeHomeBack = False
|
|
|
|
|
if not flagError:
|
|
|
|
|
# Востановим удаленного пользователя
|
|
|
|
|
resRestoreHm = self.restoreDelUser(userName, "unix/home",
|
|
|
|
|
homeDir, message, self)
|
|
|
|
|
# Если ошибка то выходим
|
|
|
|
|
if not resRestoreHm:
|
|
|
|
|
# Востановим (home на сервере) удаленного пользователя
|
|
|
|
|
message = _("Restored deleted user %s")% userName + "\n" +\
|
|
|
|
|
_("(Y - yes, n - no, ctrl+c - cansel)")
|
|
|
|
|
resHomeDir = self.restorePathDelUser(userName, homeDir,
|
|
|
|
|
"unix/home", message, self)
|
|
|
|
|
if not resHomeDir:
|
|
|
|
|
flagError = True
|
|
|
|
|
# Флаг создания домашней директории пользователя на сервере
|
|
|
|
|
createDirHome = True
|
|
|
|
|
if not flagError and type(resRestoreHm) == types.TupleType:
|
|
|
|
|
# Если cansel
|
|
|
|
|
if resRestoreHm[0] == "Cansel":
|
|
|
|
|
# Удаляем пользователя
|
|
|
|
|
flagError = True
|
|
|
|
|
# Если No
|
|
|
|
|
if resRestoreHm[0] == "No":
|
|
|
|
|
if not self.removeDir(resRestoreHm[1]):
|
|
|
|
|
flagError = True
|
|
|
|
|
if not flagError:
|
|
|
|
|
createDirHome = True
|
|
|
|
|
removeHomeBack = resRestoreHm[1]
|
|
|
|
|
if resRestoreHm[0] == "Yes":
|
|
|
|
|
createDirHome = False
|
|
|
|
|
removeHomeBack = resRestoreHm[1]
|
|
|
|
|
createDirHome = False
|
|
|
|
|
else:
|
|
|
|
|
term, createDirHome, removeHomeBack = resHomeDir
|
|
|
|
|
# Удаляем бекап домашней директории на сервере (удаленного польз..)
|
|
|
|
|
if not flagError and removeHomeBack and\
|
|
|
|
|
os.path.exists(removeHomeBack):
|
|
|
|
@ -2360,8 +2346,11 @@ class servMail(shareLdap):
|
|
|
|
|
backup = False
|
|
|
|
|
# Делаем сохранение данных удаляемого пользователя
|
|
|
|
|
if backup and os.path.exists(mailDir) and os.listdir(mailDir):
|
|
|
|
|
if not self.backupDelUser(userName, 'mail', mailDir):
|
|
|
|
|
if not self.backupDelUser(userName, 'mail/imap', mailDir):
|
|
|
|
|
return False
|
|
|
|
|
#удаляем почту из Unix сервиса
|
|
|
|
|
if not self.servUnixObj.deleteUserMail(userName):
|
|
|
|
|
return False
|
|
|
|
|
# Удаляем пользователя из групп
|
|
|
|
|
if not self.delUserInGroup(userName):
|
|
|
|
|
return False
|
|
|
|
@ -2865,9 +2854,40 @@ in Unix service ...") %str(primaryMail))
|
|
|
|
|
|
|
|
|
|
def createMailDir(self, userName, uid, gid):
|
|
|
|
|
"""Создание пользовательской директории для почты"""
|
|
|
|
|
def createCNT(mailDir, uid, gid):
|
|
|
|
|
"""создание cur, new, tmp в текущей директории"""
|
|
|
|
|
appendDirs = ["cur","new","tmp"]
|
|
|
|
|
flagError = False
|
|
|
|
|
for appDir in appendDirs:
|
|
|
|
|
createDir = os.path.join(mailDir, appDir)
|
|
|
|
|
if not self.createUserDir(uid, gid, createDir, False):
|
|
|
|
|
flagError = True
|
|
|
|
|
break
|
|
|
|
|
if flagError:
|
|
|
|
|
return False
|
|
|
|
|
return True
|
|
|
|
|
mailDir = os.path.join(self.clVars.Get("soft_ldap_mail_path"),
|
|
|
|
|
userName)
|
|
|
|
|
return self.createUserDir(uid, gid, mailDir)
|
|
|
|
|
flagError = False
|
|
|
|
|
if not self.createUserDir(uid, gid, mailDir):
|
|
|
|
|
flagError = True
|
|
|
|
|
if not flagError and not createCNT(mailDir, uid, gid):
|
|
|
|
|
flagError = True
|
|
|
|
|
if not flagError:
|
|
|
|
|
mailDirs = [os.path.join(mailDir,".Drafts"),
|
|
|
|
|
os.path.join(mailDir,".Sent"),
|
|
|
|
|
os.path.join(mailDir,".Spam"),
|
|
|
|
|
os.path.join(mailDir,".Trash")]
|
|
|
|
|
for createDir in mailDirs:
|
|
|
|
|
if not self.createUserDir(uid, gid, createDir, False):
|
|
|
|
|
flagError = True
|
|
|
|
|
break
|
|
|
|
|
if not createCNT(createDir, uid, gid):
|
|
|
|
|
flagError = True
|
|
|
|
|
break
|
|
|
|
|
if flagError:
|
|
|
|
|
return False
|
|
|
|
|
return True
|
|
|
|
|
|
|
|
|
|
def addUsersGroupMail(self, users, groupName):
|
|
|
|
|
"""Добавляет пользователей из списка в Mail группу"""
|
|
|
|
@ -2977,6 +2997,8 @@ in Unix service ...") %str(primaryMail))
|
|
|
|
|
# Полное имя пользователя
|
|
|
|
|
if options.has_key('c'):
|
|
|
|
|
optUnix['c'] = options['c']
|
|
|
|
|
# Cделаем пользователя видимым
|
|
|
|
|
optUnix['v'] = ""
|
|
|
|
|
if not self.servUnixObj.addUserUnixServer(userName, optUnix,
|
|
|
|
|
False):
|
|
|
|
|
return False
|
|
|
|
@ -3020,64 +3042,54 @@ in Unix service ...") %str(primaryMail))
|
|
|
|
|
self.ldapObj.ldapAdd(userLdif)
|
|
|
|
|
#ldapObj.ldapAdd(userLdif1)
|
|
|
|
|
# не переделывать на else
|
|
|
|
|
flagError = False
|
|
|
|
|
if self.ldapObj.getError():
|
|
|
|
|
print _("LDAP Error") + ": " + self.ldapObj.getError().strip()
|
|
|
|
|
if flagCreateUnixUser:
|
|
|
|
|
self.servUnixObj.delUserUnixServer(userName, {}, False, False)
|
|
|
|
|
return False
|
|
|
|
|
if resUnix:
|
|
|
|
|
uid = int(resUnix[0][0][1]['uidNumber'][0])
|
|
|
|
|
gid = int(resUnix[0][0][1]['gidNumber'][0])
|
|
|
|
|
elif resPwd:
|
|
|
|
|
uid = int(resPwd.split(":")[2])
|
|
|
|
|
gid = int(resPwd.split(":")[3])
|
|
|
|
|
else:
|
|
|
|
|
self.printERROR(_("user are not found"))
|
|
|
|
|
flagError = True
|
|
|
|
|
if not flagError:
|
|
|
|
|
if resUnix:
|
|
|
|
|
uid = int(resUnix[0][0][1]['uidNumber'][0])
|
|
|
|
|
gid = int(resUnix[0][0][1]['gidNumber'][0])
|
|
|
|
|
elif resPwd:
|
|
|
|
|
uid = int(resPwd.split(":")[2])
|
|
|
|
|
gid = int(resPwd.split(":")[3])
|
|
|
|
|
else:
|
|
|
|
|
self.printERROR(_("user are not found"))
|
|
|
|
|
flagError = True
|
|
|
|
|
if not flagError:
|
|
|
|
|
# Востановим удаленного пользователя
|
|
|
|
|
# Почтовая директория пользователя
|
|
|
|
|
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)")
|
|
|
|
|
|
|
|
|
|
resMailDir = self.restorePathDelUser(userName, mailDir,
|
|
|
|
|
"mail/imap", message)
|
|
|
|
|
removeMailDirBack = False
|
|
|
|
|
if not resMailDir:
|
|
|
|
|
flagError = True
|
|
|
|
|
createDirMail = False
|
|
|
|
|
else:
|
|
|
|
|
term, createDirMail, removeMailDirBack = resMailDir
|
|
|
|
|
# Создаем почтовую директорию
|
|
|
|
|
if not flagError and createDirMail:
|
|
|
|
|
if not self.createMailDir(userName, uid, gid):
|
|
|
|
|
flagError = True
|
|
|
|
|
# Записываем основной почтовый адрес
|
|
|
|
|
if not flagError and primaryMail:
|
|
|
|
|
if not self.servUnixObj.setUserMail(userName, primaryMail):
|
|
|
|
|
self.printERROR(_("Failed set primary email for user %s in\
|
|
|
|
|
Unix service ...") %str(primaryMail))
|
|
|
|
|
flagError = True
|
|
|
|
|
if not flagError and removeMailDirBack\
|
|
|
|
|
and os.path.exists(removeMailDirBack):
|
|
|
|
|
self.removeDir(removeMailDirBack)
|
|
|
|
|
self.removeEmptyDir(os.path.split(removeMailDirBack)[0])
|
|
|
|
|
if flagError:
|
|
|
|
|
self.delUserInMailAndUnix(userName, flagCreateUnixUser)
|
|
|
|
|
self.printERROR(_("Can not add user") + " ...")
|
|
|
|
|
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.delUserInMailAndUnix(userName, flagCreateUnixUser)
|
|
|
|
|
return False
|
|
|
|
|
# Если No
|
|
|
|
|
if resRestore[0] == "No":
|
|
|
|
|
if not self.removeDir(resRestore[1]):
|
|
|
|
|
self.delUserInMailAndUnix(userName, flagCreateUnixUser)
|
|
|
|
|
return False
|
|
|
|
|
createDir = True
|
|
|
|
|
if resRestore[0] == "Yes":
|
|
|
|
|
createDir = False
|
|
|
|
|
# Создаем почтовую директорию
|
|
|
|
|
if createDir:
|
|
|
|
|
if not self.createMailDir(userName, uid, gid):
|
|
|
|
|
self.delUserInMailAndUnix(userName, flagCreateUnixUser)
|
|
|
|
|
return False
|
|
|
|
|
# Записываем основной почтовый адрес
|
|
|
|
|
if primaryMail:
|
|
|
|
|
if not self.servUnixObj.setUserMail(userName, primaryMail):
|
|
|
|
|
self.printERROR(_("Failed set primary email for user %s in\
|
|
|
|
|
Unix service ...") %str(primaryMail))
|
|
|
|
|
self.delUserInMailAndUnix(userName, flagCreateUnixUser)
|
|
|
|
|
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])
|
|
|
|
|
self.removeEmptyDir(os.path.split(resRestore[1])[0])
|
|
|
|
|
if flagCreateUnixUser:
|
|
|
|
|
self.printSUCCESS(_("Added user in Unix service") + " ...")
|
|
|
|
|
self.printSUCCESS(_("Added user in Mail service") + " ...")
|
|
|
|
@ -3967,8 +3979,6 @@ class servSamba(shareLdap):
|
|
|
|
|
optUnix['c'] = options['c']
|
|
|
|
|
# Cделаем пользователя видимым
|
|
|
|
|
optUnix['v'] = ""
|
|
|
|
|
# Cоздадим директорию профиля
|
|
|
|
|
optUnix['n'] = ""
|
|
|
|
|
if not self.servUnixObj.addUserUnixServer(userName, optUnix,
|
|
|
|
|
False):
|
|
|
|
|
return False
|
|
|
|
@ -5130,13 +5140,6 @@ 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",
|
|
|
|
@ -5166,8 +5169,8 @@ preferences")
|
|
|
|
|
'shortOption':"n",
|
|
|
|
|
'longOption':"create-profile",
|
|
|
|
|
'helpChapter':_("Samba service options"),
|
|
|
|
|
'help':_("create a directory for storing new user account \
|
|
|
|
|
preferences")
|
|
|
|
|
'help':_("create a directories for storing new user account \
|
|
|
|
|
preferences and data")
|
|
|
|
|
},
|
|
|
|
|
{'progAccess':(3,),
|
|
|
|
|
'shortOption':"p",
|
|
|
|
|