develop
asamoukin 16 years ago
parent f1ba5527a8
commit 477ea3ca66

@ -40,7 +40,7 @@
add user script = /usr/bin/cl-useradd "%u" samba
ldap delete dn = Yes
#delete user script = /usr/sbin/smbldap-userdel "%u"
add group script = /usr/sbin/smbldap-groupadd -p "%g"
add group script = /usr/sbin/cl-groupadd -p "%g" samba
#delete group script = /usr/sbin/smbldap-groupdel "%g"
add user to group script = /usr/sbin/smbldap-groupmod -m "%u" "%g"
delete user from group script = /usr/sbin/smbldap-groupmod -x "%u" "%g"

@ -37,7 +37,7 @@ Version = "calculate-server 0.0.1"
tr = cl_base.lang()
tr.setLanguage(sys.modules[__name__])
CONWIDTH = 79
CONWIDTH = 78
pcs = cl_utils.prettyColumnStr
def unicList(lst):
@ -142,7 +142,7 @@ imp_cl_con = cl_utils2.cl_smartconsole
class cl_ldap(imp_cl_err, imp_cl_xml, imp_cl_par, imp_cl_con):
"""Основной класс для работы с LDAP"""
def __init__(self, cmdName):
self.column_width = 30
self.column_width = 32
# ini файл
self.iniFile = "/etc/calculate2/calculate.ini"
@ -197,6 +197,11 @@ class cl_ldap(imp_cl_err, imp_cl_xml, imp_cl_par, imp_cl_con):
'helpChapter':_("Options"),
'help':_("set the GECOS field for the new group")
},
{'progAccess':(0,),
'shortOption':"p",
'helpChapter':_("Options"),
'help':_("print the gidNumber to stdout")
},
{'progAccess':(3,),
'shortOption':"b",
'longOption':"base-dir",
@ -257,25 +262,86 @@ class cl_ldap(imp_cl_err, imp_cl_xml, imp_cl_par, imp_cl_con):
'helpChapter':_("Options"),
'help':_("force use the UID for the new user account")
},
{'progAccess':(6,),
'shortOption':"f",
'longOption':"force",
{'progAccess':(4,),
'shortOption':"r",
'longOption':"remove",
'helpChapter':_("Options"),
'help':_("forced setup service")
'help':_("remove home directory")
},
{'progAccess':(5,),
'shortOption':"c",
'longOption':"comment",
'optVal':"COMMENT",
'helpChapter':_("Options"),
'help':_("new value of the GECOS field")
},
{'progAccess':(5,),
'shortOption':"g",
'longOption':"gid",
'optVal':"GROUP",
'helpChapter':_("Options"),
'help':_("force use GROUP as new primary group")
},
{'progAccess':(5,),
'shortOption':"G",
'longOption':"groups",
'optVal':"GROUPS",
'helpChapter':_("Options"),
'help':_("new list of supplementary GROUPS")
},
{'progAccess':(5,),
'shortOption':"a",
'longOption':"append",
'helpChapter':_("Options"),
'help':_("append the user to the supplemental GROUPS")
},
{'progAccess':(5,),
'shortOption':"l",
'longOption':"login",
'optVal':"NEW_LOGIN",
'helpChapter':_("Options"),
'help':_("new value of the login name")
},
{'progAccess':(5,),
'shortOption':"m",
'longOption':"move-home",
'helpChapter':_("Options"),
'help':_("move contents of the home directory to the new location\
(use only with -d)")
},
{'progAccess':(0,1,2,4,5,6),
{'progAccess':(5,),
'shortOption':"s",
'longOption':"set",
'optVal':"<name>=<val>",
'longOption':"shell",
'optVal':"SHELL",
'helpChapter':_("Options"),
'help':_("new login shell for the user account")
},
{'progAccess':(5,),
'shortOption':"u",
'longOption':"uid",
'optVal':"UID",
'helpChapter':_("Options"),
'help':_("change enviroment values")
'help':_("new UID for the user account")
},
{'shortOption':"e",
'longOption':"env",
'optVal':"filter",
{'progAccess':(6,),
'shortOption':"f",
'longOption':"force",
'helpChapter':_("Options"),
'help':_("show enviroment values (filter for type, all - no filter)")
'help':_("forced setup service")
},
#{'progAccess':(0,1,2,4,5,6),
#'shortOption':"s",
#'longOption':"set",
#'optVal':"<name>=<val>",
#'helpChapter':_("Options"),
#'help':_("change enviroment values")
#},
#{'shortOption':"e",
#'longOption':"env",
#'optVal':"filter",
#'helpChapter':_("Options"),
#'help':_("show enviroment values (filter for type, all - no filter)")
#},
# Services
{'helpChapter':_("Services"),
'help':pcs(" ldap", self.column_width,
@ -336,6 +402,12 @@ class cl_ldap(imp_cl_err, imp_cl_xml, imp_cl_par, imp_cl_con):
'help': cmdName + " " + " [" + _("options") + "] " + _("user") +\
" " + _("service")
},
{
'progAccess':(5,),
'helpChapter':_("Usage"),
'help': cmdName + " " + " [" + _("options") + "] " + _("user") +\
" " + _("service")
},
{
'progAccess':(6,),
'helpChapter':_("Usage"),
@ -388,9 +460,9 @@ class cl_ldap(imp_cl_err, imp_cl_xml, imp_cl_par, imp_cl_con):
{
'progAccess':(1,),
'helpChapter':_("Examples"),
'help':pcs( " cl-groupdel -smfw guest", self.column_width,
"# " + _("delete group guest in services")+
":\n# samba, mail, ftp, wiki.", CONWIDTH-self.column_width)
'help':pcs( " cl-groupdel guest samba", self.column_width,
"# " + _("delete group guest in service samba") + "."
, CONWIDTH-self.column_width)
},
{
'progAccess':(2,),
@ -407,14 +479,17 @@ class cl_ldap(imp_cl_err, imp_cl_xml, imp_cl_par, imp_cl_con):
{
'progAccess':(4,),
'helpChapter':_("Examples"),
'help':pcs(" cl-userdel -smfw guest", self.column_width,
"# " + _("delete user guest in services") +
":\n# samba, mail, ftp, wiki.", CONWIDTH-self.column_width)
'help':pcs(" cl-userdel guest samba", self.column_width,
"# " + _("delete user guest in service samba") + ".",
CONWIDTH-self.column_width)
},
{
'progAccess':(5,),
'helpChapter':_("Examples"),
'help':""
'help':pcs(" cl-usermod -u 1000 guest samba",
self.column_width,
"# " + _("new UID 1000 for the user account guest") + ".",
CONWIDTH-self.column_width)
},
{
'progAccess':(6,),
@ -423,18 +498,19 @@ class cl_ldap(imp_cl_err, imp_cl_xml, imp_cl_par, imp_cl_con):
"# "+_("set service") + " samba "+_("in the system") + ".",
CONWIDTH-self.column_width)
},
{
'helpChapter':_("Examples"),
'help':pcs(" " + cmdName + " --env boot", self.column_width,
"# "+_("show enviroment varibles which has type")+" 'boot'" + ".",
CONWIDTH-self.column_width)
},
{'progAccess':(0,1,2,4,5,6),
'helpChapter':_("Examples"),
'help':pcs(" " + cmdName + " \\\n --set setup_march=x86_64",
self.column_width, "# "+ _("modify some env") + ".",
CONWIDTH-self.column_width)
},
#{
#'helpChapter':_("Examples"),
#'help':pcs(" " + cmdName + " --env boot", self.column_width,
#"# "+_("show enviroment varibles which has type")+" 'boot'" +\
#".",
#CONWIDTH-self.column_width)
#},
#{'progAccess':(0,1,2,4,5,6),
#'helpChapter':_("Examples"),
#'help':pcs(" " + cmdName + " \\\n --set setup_march=x86_64",
#self.column_width, "# "+ _("modify some env") + ".",
#CONWIDTH-self.column_width)
#},
]
cl_utils2.cl_params.__init__(self, cmdName)
@ -785,7 +861,75 @@ Samba in backup directory")
self.printSUCCESS(_("Add machine ..."))
return True
def addUserLdapServer(self, userName, options, clVars=False):
def delUserLdapServer(self, userName, options, clVars=False,
orgUnit="ou=Users"):
"""Удаляем LDAP пользователя"""
if not clVars:
clVars = cl_base.DataVars()
clVars.flServer()
clVars.flIniFile()
ldapParser = iniLdapParser()
adminDn = ldapParser.getVar("admin","DN")
adminPw = ldapParser.getVar("admin","PASS")
ldapObj = ldapFunction(adminDn, adminPw)
# Ищем пользователя в LDAP
resLdap = self.searchLdapUser(userName, ldapObj, clVars)
if not resLdap:
self.printERROR (_("ERROR") + ": " +\
_("User") + " " + str(userName) + " " +\
_("not foung in LDAP"))
return False
deleteDN = "uid=%s,%s,%s"\
%(userName,orgUnit,clVars.Get("soft_ldap_base"))
#Удаление пользователя
try:
ldapObj.conLdap.delete_s(deleteDN)
except ldap.LDAPError, e:
self.printERROR(e[0]['desc'])
return False
# Удаляем пользователя из групп
userInGroups = self.searchLdapMemberGid(userName, ldapObj, clVars)
for group in userInGroups:
groupName = group[0][1]['cn'][0]
modAttrs = [(ldap.MOD_DELETE, 'memberUid', userName)]
try:
ldapObj.conLdap.modify_s("cn=%s,%s,%s"\
%(groupName,"ou=Groups",clVars.Get("soft_ldap_base")),
modAttrs)
except ldap.LDAPError, e:
self.printERROR(e[0]['desc'])
return False
if resLdap[0][0][1].has_key('gidNumber'):
gid = resLdap[0][0][1]['gidNumber'][0]
else:
resPasswd = self.searchPasswdUser(userName)
if resPasswd:
gid = resPasswd.split(":")[2]
#Находим основную группу пользователя
resGroup = False
if gid:
resGroup = self.searchLdapGid(gid, ldapObj, clVars)
if resGroup:
# В случае отсутствия других пользователей удаляем основную группу
if not resGroup[0][0][1].has_key('memberUid'):
groupName = resGroup[0][0][1]['cn'][0]
if not self.delGroupLdapServer(groupName, {}, clVars):
return False
if options.has_key('r') and\
resLdap[0][0][1].has_key('homeDirectory'):
#Домашняя директория пользователя
homeDir = resLdap[0][0][1]['homeDirectory'][0]
if self.removeHomeDir(homeDir):
self.printSUCCESS(_("Home dir") + " " + str(homeDir) + " " +\
_("deleted") + " ...")
self.printSUCCESS(_("User") + " " + userName + " " + _("deleted") +\
" ...")
return True
def addUserLdapServer(self, userName, options, clVars=False,optOut=False,
pwDialog=False):
"""Добавляет LDAP пользователя в LDAP-сервер"""
if not clVars:
clVars = cl_base.DataVars()
@ -861,40 +1005,33 @@ Samba in backup directory")
clVars.Set("soft_ldap_user_id",userId)
# Добавляем пользователя в группы (находим имена групп)
if options.has_key('G'):
userGroups = options['G'].split(',')
flagInt = True
for gid in userGroups:
try:
int(gid)
except:
flagInt = False
break
userGroupsNamesAdd = []
flagError = False
if flagInt:
for gidNumber in userGroups:
res = self.searchLdapGid(gidNumber, ldapObj, clVars)
if not res:
flagError = True
break
userGroupsNamesAdd.append(res[0][0][1]['cn'][0])
if flagError:
self.printERROR (_("ERROR") + ": " +\
_("not found group number")+ " " + str(gidNumber))
return False
#список имен добавляемых групп
userGroupNames = self.searchGroupsLdap(userGroups,
ldapObj, clVars)
if not userGroupNames:
return False
userGid = str(self.getMaxGid(ldapObj, clVars))
# Группа пользователя
if options.has_key('g'):
userGid = options['g']
userGidNamesLdap = self.searchGroupsLdap([userGid],
ldapObj, clVars, False)
userGidNamesPasswd = self.searchGroupsGroups([userGid], False)
if userGidNamesPasswd:
#Имя группы пользователя
groupName = userGidNamesPasswd[0]
elif userGidNamesLdap:
#Имя группы пользователя
groupName = userGidNamesLdap[0]
else:
for groupName in userGroups:
res = self.searchLdapGroupName(groupName, ldapObj, clVars)
if not res:
flagError = True
break
if flagError:
self.printERROR (_("ERROR") + ": " +\
_("not found group name")+ " " + str(groupName))
return False
userGroupsNamesAdd = userGroups
self.printERROR(_("Group") + " " + str(userGid) + " " +\
_("not found") + " ...")
return False
#userPwd = "crypt{xxx}"
userCrypt = "{SSHA}"
@ -902,8 +1039,12 @@ Samba in backup directory")
if options.has_key('p'):
userPwd = options['p']
else:
pwdA = getpass.getpass(_("New password")+":")
pwdB = getpass.getpass(_("Retype new password")+":")
if pwDialog:
pwdA = getpass.getpass(pwDialog[0]+":")
pwdB = getpass.getpass(pwDialog[1]+":")
else:
pwdA = getpass.getpass(_("New password")+":")
pwdB = getpass.getpass(_("Retype new password")+":")
if not (pwdA == pwdB):
self.printERROR (_("ERROR") + ": " +\
_("password incorrect")+ ": " + _("try again"))
@ -920,34 +1061,20 @@ Samba in backup directory")
return False
clVars.Set("soft_ldap_user_pw_hash",userPwd)
userGid = str(self.getMaxGid(ldapObj, clVars))
# Группа пользователя
# Добавление основной группы пользователя
if options.has_key('g'):
userGid = options['g']
flagInt = True
try:
int(userGid)
except:
flagInt = False
if not flagInt:
groupName = userGid
resLdap = self.searchLdapGroupName(groupName, ldapObj, clVars)
resGroup = self.searchGroupGroupName(groupName)
if not (resLdap or resGroup):
self.printERROR (_("ERROR") + ": " +\
_("not found gid=") + userGid)
return False
if resGroup:
userGid = resGroup.split(":")[2]
if resLdap:
userGid = resLdap[0][0][1]['gidNumber'][0]
if flagInt and not(self.searchLdapGid(userGid, ldapObj, clVars) or\
self.searchGroupGid(userGid)):
resLdap = self.searchLdapGroupName(groupName, ldapObj, clVars)
resGroup = self.searchGroupGroupName(groupName)
if not (resLdap or resGroup):
self.printERROR (_("ERROR") + ": " +\
_("not found gid=") + userGid)
return False
if resGroup:
userGid = resGroup.split(":")[2]
if resLdap:
userGid = resLdap[0][0][1]['gidNumber'][0]
else:
#if not self.searchLdapGid(userGid, ldapObj, clVars):
self.addGroupLdapServer(userName,{},clVars)
clVars.Set("soft_ldap_user_gid",userGid)
@ -957,8 +1084,8 @@ Samba in backup directory")
#Добавляем пользователя в LDAP
ldapObj.ldapAdd(userLdif)
#Добавляем его в другие группы (опция G)
if options.has_key('G') and userGroupsNamesAdd:
for group in userGroupsNamesAdd:
if options.has_key('G') and userGroupNames:
for group in userGroupNames:
self.addUserGroupLdap([userName],
group, ldapObj, clVars)
# не переделывать на else
@ -970,7 +1097,11 @@ Samba in backup directory")
if not self.createHomeDir(userName, homeDir, ldapObj, clVars):
self.printERROR (_("ERROR") + ": " + _("create HOME dir"))
return False
self.printSUCCESS(_("Create home dir")+ " " + homeDir + " ...")
self.printSUCCESS(_("Add user ..."))
# return passwd
if optOut and optOut =='passwd':
return userPwd
return True
def addUserGroupLdap(self, users, groupName, ldapObj, clVars):
@ -1017,13 +1148,11 @@ Samba in backup directory")
def addGroupLdapServer(self, groupName, options, clVars=False):
"""Добавляет группу пользователей LDAP"""
flagWriteGid = False
if not clVars:
clVars = cl_base.DataVars()
clVars.flServer()
clVars.flIniFile()
else:
flagWriteGid = True
# прервать если была неудачная попытка установить новые параметры
# или были опция вывода на печать
#if not self.processOptionsForDatavars(options,clVars):
@ -1078,11 +1207,48 @@ Samba in backup directory")
if ldapObj.getError():
print _("LDAP Error") + ": " + ldapObj.getError()
return False
#if not options.has_key('g') or flagWriteGid:
#clVars.Write("soft_ldap_group_id",str(int(gid)+1))
self.printSUCCESS(_("Add group ..."))
if options.has_key('p'):
sys.stdout.write(gid)
else:
self.printSUCCESS(_("Add group ..."))
return True
def delGroupLdapServer(self, groupName, options, clVars=False,
orgUnit="ou=Groups"):
"""Удаляет группу пользователей LDAP"""
if not clVars:
clVars = cl_base.DataVars()
clVars.flServer()
clVars.flIniFile()
#gid = clVars.Get("soft_ldap_group_id")
ldapParser = iniLdapParser()
adminDn = ldapParser.getVar("admin","DN")
adminPw = ldapParser.getVar("admin","PASS")
ldapObj = ldapFunction(adminDn, adminPw)
res = self.searchLdapGroupName(groupName, ldapObj, clVars)
if not res:
self.printERROR(_("Group") + " " + groupName + " "+\
_("not found in LDAP ..."))
return False
groupId = res[0][0][1]['gidNumber'][0]
if self.searchLdapUserPrimGroup(groupId, ldapObj, clVars):
self.printERROR(_("cannot remove user's primary group") + ".")
return False
deleteDN = "cn=%s,%s,%s"\
%(groupName,orgUnit,clVars.Get("soft_ldap_base"))
# Удаление группы
try:
ldapObj.conLdap.delete_s(deleteDN)
except ldap.LDAPError, e:
self.printERROR(e[0]['desc'])
return False
self.printSUCCESS(_("Group") + " " + groupName + " " + _("deleted") +\
" ...")
return True
def searchLdapUser(self, userName, ldapObj, clVars, orgUnit="ou=Users"):
"""Находит пользователя сервиса LDAP"""
baseDN = "%s,%s"%(orgUnit,clVars.Get("soft_ldap_base"))
@ -1094,6 +1260,18 @@ Samba in backup directory")
searchFilter, retrieveAttributes)
return resSearch
def searchLdapUserPrimGroup(self, groupId, ldapObj, clVars):
"""Находит пользователей с первичной группой groupId"""
baseDN = "%s,%s"%("ou=Users",clVars.Get("soft_ldap_base"))
#searchScope = ldap.SCOPE_SUBTREE
searchScope = ldap.SCOPE_ONELEVEL
searchFilter = "gidNumber=%s" %(groupId)
retrieveAttributes = None
resSearch = ldapObj.ldapSearch(baseDN, searchScope,
searchFilter, retrieveAttributes)
return resSearch
def searchSambaUser(self, userName, ldapObj, clVars):
"""Находит пользователя сервиса LDAP"""
baseDN = "ou=Users,%s"\
@ -1212,6 +1390,100 @@ Samba in backup directory")
searchFilter, retrieveAttributes)
return resSearch
def searchLdapMemberGid(self, userName, ldapObj, clVars):
"""Находит группу сервиса LDAP по ёе id"""
baseDN = "ou=Groups,%s"\
% clVars.Get("soft_ldap_base")
#searchScope = ldap.SCOPE_SUBTREE
searchScope = ldap.SCOPE_ONELEVEL
searchFilter = "memberUid=%s" %(userName)
retrieveAttributes = None
resSearch = ldapObj.ldapSearch(baseDN, searchScope,
searchFilter, retrieveAttributes)
return resSearch
def searchGroupsGroups(self, userGroups, printError=True):
"""Ищет список групп из списка userGroups в /etc/group
Список групп может состоять из чисел или названий групп
Возвращает список имен групп
"""
userGroupNames = []
flagInt = True
for gid in userGroups:
try:
int(gid)
except:
flagInt = False
break
flagError = False
if flagInt:
for gidNumber in userGroups:
res = self.searchGroupGid(gidNumber)
if not res:
flagError = True
break
userGroupNames.append(res.split(':')[0])
if flagError:
if printError:
self.printERROR(_("Group number") + " " + str(gidNumber) +\
" " + _("not found in /etc/group") + " ...")
return False
else:
for groupName in userGroups:
res = self.searchGroupGroupName(groupName)
if not res:
flagError = True
break
if flagError:
if printError:
self.printERROR(_("Group name") + " " + str(groupName) +\
" " + _("not found in /etc/group") + " ...")
return False
userGroupNames = userGroups
return userGroupNames
def searchGroupsLdap(self, userGroups, ldapObj, clVars, printError=True):
"""Ищет список групп из списка userGroups в LDAP
Список групп может состоять из чисел или названий групп
Возвращает список имен групп
"""
userGroupNames = []
flagInt = True
for gid in userGroups:
try:
int(gid)
except:
flagInt = False
break
flagError = False
if flagInt:
for gidNumber in userGroups:
res = self.searchLdapGid(gidNumber, ldapObj, clVars)
if not res:
flagError = True
break
userGroupNames.append(res[0][0][1]['cn'][0])
if flagError:
if printError:
self.printERROR(_("Group number") + " " + str(gidNumber) +\
" " + _("not found in LDAP") + " ...")
return False
else:
for groupName in userGroups:
res = self.searchLdapGroupName(groupName, ldapObj, clVars)
if not res:
flagError = True
break
if flagError:
if printError:
self.printERROR(_("Group name") + " " + str(groupName) +\
" " + _("not found in LDAP") + " ...")
return False
userGroupNames = userGroups
return userGroupNames
def searchGroupGid(self, groupId):
"""Ищет gid в /etc/group"""
gId = int(groupId)
@ -1252,14 +1524,15 @@ Samba in backup directory")
FD = open(filePasswd)
lines = FD.readlines()
FD.close()
users = []
lineUser = ""
for line in lines:
users.append(line.split(":")[0])
if userName in users:
return True
else:
return False
return False
if userName == line.split(":")[0]:
lineUser = line
break
if lineUser:
return lineUser
else:
return False
def getUidMin(self):
"""Получаем начальный UID пользователя"""
@ -1321,6 +1594,13 @@ Samba in backup directory")
os.chown(homeDir, uid,gid)
return True
def removeHomeDir(self, homeDir):
"""Удаление домашней директории пользователя"""
if os.path.exists(homeDir):
self.execProg("rm -rf %s" %homeDir)
return True
return False
def getUidMax(self):
"""Получаем конечный UID пользователя"""
@ -1498,18 +1778,25 @@ Samba in backup directory")
if self.searchSambaUser(userName, ldapObj, clVars):
self.printERROR(_("SMB user exists"))
return False
#пароль пользователя
userPwd = ""
# пароль пользователя
pwdA = getpass.getpass(_("New SMB password")+":")
pwdB = getpass.getpass(_("Retype new SMB password")+":")
if not (pwdA == pwdB):
self.printERROR (_("ERROR") + ": " +\
_("password incorrect")+ ": " + _("try again"))
return False
userPwd = pwdA
#диалог ввода пароля
pwDialog = [_("New SMB password"),
_("Retype new SMB password")]
if not resSearch:
options['p'] = userPwd
self.addUserLdapServer(userName, options, clVars)
# Добавим пользователя LDAP
userPwd = self.addUserLdapServer(userName, options,
clVars, 'passwd', pwDialog)
if not userPwd:
return False
else:
pwdA = getpass.getpass(pwDialog[0]+":")
pwdB = getpass.getpass(pwDialog[1]+":")
if not (pwdA == pwdB):
self.printERROR (_("ERROR") + ": " +\
_("password incorrect")+ ": " + _("try again"))
return False
userPwd = pwdA
textLine = self.execProg("smbpasswd -a -s %s" %(userName),
"%s\n%s\n" %(userPwd,userPwd))
if "Added" in str(textLine):

@ -76,8 +76,20 @@ _("for more information.")
if __name__ == "__main__":
ldapObj = cl_ldap.cl_ldap("cl-groupadd")
optObj = tsOpt(ldapObj)
flagError = False
if optObj.params.has_key('service') and\
optObj.params.has_key('group'):
if optObj.params['service'] == "ldap":
# Добавляем пользователя LDAP
ldapObj.addGroupLdapServer(optObj.params['group'], optObj.opt)
# Добавляем группу
if not ldapObj.addGroupLdapServer(optObj.params['group'],
optObj.opt):
flagError = True
elif optObj.params['service'] == "samba":
# Добавляем группу
if not ldapObj.addGroupLdapServer(optObj.params['group'],
optObj.opt):
flagError = True
if flagError:
sys.exit(1)
else:
sys.exit(0)

@ -0,0 +1,95 @@
#!/usr/bin/python
#-*- coding: utf-8 -*-
#Copyright 2008 Calculate Pack, http://www.calculate-linux.ru
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
import sys
import os
sys.path.insert(0,os.path.abspath('/usr/lib/calculate/calculate-lib/pym'))
sys.path.insert(0,os.path.abspath('/usr/lib/calculate/calculate-server/pym'))
import cl_base
tr = cl_base.lang()
tr.setGlobalDomain('cl_server')
tr.setLanguage(sys.modules[__name__])
import cl_ldap
class tsOpt(cl_base.opt):
def __init__(self, obj):
self.obj =obj
self.shortOpt = self.obj.getAllOpt('short')
self.longOpt = self.obj.getAllOpt('long')
self.opt = {}
self.sysArgv = sys.argv[1:]
self.__iter = 0
self.params = {}
cl_base.opt.__init__(self, self.shortOpt, self.longOpt)
if "h" in self.opt or (not (self.params.has_key('group') and\
self.params.has_key('service')) and\
not self.opt):
print self.obj.getHelp()
else:
if self.params.has_key('service'):
if not (self.params['service'] in self.obj.allServ):
self.handlerErrOpt()
else:
self.handlerErrOpt()
def handlerOpt(self,option,value):
# Обработчик (опция значение)
#print option, value
shortOpt = self.obj.getShortOpt(option)
if not self.opt.has_key(shortOpt):
self.opt[shortOpt] = value
def handlerErrOpt(self):
# Обработчик ошибок
argv = " ".join(sys.argv[1:])
print _("Unrecognized option") + ' "' + argv + '"\n' + \
_("Try") + ' "' + sys.argv[0].split("/")[-1] + ' --help" ' +\
_("for more information.")
def handlerParam(self,param):
# Обработчик хвостов (значение)
self.__iter += 1
# Достаем название пользователя
if self.__iter == 1:
self.params['group'] = param
# Достаем название сервиса
if self.__iter == 2:
self.params['service'] = param
if __name__ == "__main__":
ldapObj = cl_ldap.cl_ldap("cl-groupdel")
optObj = tsOpt(ldapObj)
flagError = False
if optObj.params.has_key('service') and\
optObj.params.has_key('group'):
if optObj.params['service'] == "ldap":
# Добавляем группу
if not ldapObj.delGroupLdapServer(optObj.params['group'],
optObj.opt):
flagError = True
elif optObj.params['service'] == "samba":
# Добавляем группу
if not ldapObj.delGroupLdapServer(optObj.params['group'],
optObj.opt):
flagError = True
if flagError:
sys.exit(1)
else:
sys.exit(0)

@ -84,7 +84,7 @@ if __name__ == "__main__":
# Добавляем LDAP пользователя
if ldapObj.addUserLdapServer(optObj.params['user'], optObj.opt):
flagError = False
if optObj.params['service'] == "samba":
elif optObj.params['service'] == "samba":
# Добавляем Samba пользователя
if ldapObj.addUserSambaServer(optObj.params['user'], optObj.opt):
flagError = False

@ -0,0 +1,95 @@
#!/usr/bin/python
#-*- coding: utf-8 -*-
#Copyright 2008 Calculate Pack, http://www.calculate-linux.ru
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
import sys
import os
sys.path.insert(0,os.path.abspath('/usr/lib/calculate/calculate-lib/pym'))
sys.path.insert(0,os.path.abspath('/usr/lib/calculate/calculate-server/pym'))
import cl_base
tr = cl_base.lang()
tr.setGlobalDomain('cl_server')
tr.setLanguage(sys.modules[__name__])
import cl_ldap
class tsOpt(cl_base.opt):
def __init__(self, obj):
self.obj =obj
self.shortOpt = self.obj.getAllOpt('short')
self.longOpt = self.obj.getAllOpt('long')
self.opt = {}
self.sysArgv = sys.argv[1:]
self.__iter = 0
self.params = {}
cl_base.opt.__init__(self, self.shortOpt, self.longOpt)
if "h" in self.opt or (not (self.params.has_key('user') and\
self.params.has_key('service')) and\
not self.opt):
print self.obj.getHelp()
else:
if self.params.has_key('service'):
if not (self.params['service'] in self.obj.allServ):
self.handlerErrOpt()
else:
self.handlerErrOpt()
def handlerOpt(self,option,value):
# Обработчик (опция значение)
#print option, value
shortOpt = self.obj.getShortOpt(option)
if not self.opt.has_key(shortOpt):
self.opt[shortOpt] = value
def handlerErrOpt(self):
# Обработчик ошибок
argv = " ".join(sys.argv[1:])
print _("Unrecognized option") + ' "' + argv + '"\n' + \
_("Try") + ' "' + sys.argv[0].split("/")[-1] + ' --help" ' +\
_("for more information.")
def handlerParam(self,param):
# Обработчик хвостов (значение)
self.__iter += 1
# Достаем название пользователя
if self.__iter == 1:
self.params['user'] = param
# Достаем название сервиса
if self.__iter == 2:
self.params['service'] = param
if __name__ == "__main__":
ldapObj = cl_ldap.cl_ldap("cl-userdel")
optObj = tsOpt(ldapObj)
flagError = False
if optObj.params.has_key('service') and\
optObj.params.has_key('user'):
flagError = True
if optObj.params['service'] == "ldap":
# Добавляем LDAP пользователя
if ldapObj.delUserLdapServer(optObj.params['user'], optObj.opt):
flagError = False
elif optObj.params['service'] == "samba":
# Добавляем Samba пользователя
if ldapObj.delUserLdapServer(optObj.params['user'], optObj.opt):
flagError = False
if flagError:
sys.exit(1)
else:
sys.exit(0)

@ -0,0 +1,95 @@
#!/usr/bin/python
#-*- coding: utf-8 -*-
#Copyright 2008 Calculate Pack, http://www.calculate-linux.ru
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
import sys
import os
sys.path.insert(0,os.path.abspath('/usr/lib/calculate/calculate-lib/pym'))
sys.path.insert(0,os.path.abspath('/usr/lib/calculate/calculate-server/pym'))
import cl_base
tr = cl_base.lang()
tr.setGlobalDomain('cl_server')
tr.setLanguage(sys.modules[__name__])
import cl_ldap
class tsOpt(cl_base.opt):
def __init__(self, obj):
self.obj =obj
self.shortOpt = self.obj.getAllOpt('short')
self.longOpt = self.obj.getAllOpt('long')
self.opt = {}
self.sysArgv = sys.argv[1:]
self.__iter = 0
self.params = {}
cl_base.opt.__init__(self, self.shortOpt, self.longOpt)
if "h" in self.opt or (not (self.params.has_key('user') and\
self.params.has_key('service')) and\
not self.opt):
print self.obj.getHelp()
else:
if self.params.has_key('service'):
if not (self.params['service'] in self.obj.allServ):
self.handlerErrOpt()
else:
self.handlerErrOpt()
def handlerOpt(self,option,value):
# Обработчик (опция значение)
#print option, value
shortOpt = self.obj.getShortOpt(option)
if not self.opt.has_key(shortOpt):
self.opt[shortOpt] = value
def handlerErrOpt(self):
# Обработчик ошибок
argv = " ".join(sys.argv[1:])
print _("Unrecognized option") + ' "' + argv + '"\n' + \
_("Try") + ' "' + sys.argv[0].split("/")[-1] + ' --help" ' +\
_("for more information.")
def handlerParam(self,param):
# Обработчик хвостов (значение)
self.__iter += 1
# Достаем название пользователя
if self.__iter == 1:
self.params['user'] = param
# Достаем название сервиса
if self.__iter == 2:
self.params['service'] = param
if __name__ == "__main__":
ldapObj = cl_ldap.cl_ldap("cl-usermod")
optObj = tsOpt(ldapObj)
flagError = False
if optObj.params.has_key('service') and\
optObj.params.has_key('user'):
flagError = True
if optObj.params['service'] == "ldap":
# Добавляем LDAP пользователя
if ldapObj.modUserLdapServer(optObj.params['user'], optObj.opt):
flagError = False
elif optObj.params['service'] == "samba":
# Добавляем Samba пользователя
if ldapObj.modUserSambaServer(optObj.params['user'], optObj.opt):
flagError = False
if flagError:
sys.exit(1)
else:
sys.exit(0)

@ -121,7 +121,10 @@ setup(
packages = ['calculate-server.pym'],
data_files = data_files,
scripts=["./scripts/cl-useradd",
"./scripts/cl-userdel",
"./scripts/cl-usermod",
"./scripts/cl-groupadd",
"./scripts/cl-groupdel",
"./scripts/cl-setup",
],
)

Loading…
Cancel
Save