develop
asamoukin 16 years ago
parent f70acbc545
commit 18527ededa

@ -1,14 +1,15 @@
# Add posix Account
dn: uid=#-soft_ldap_user_login-#,ou=Users,#-soft_ldap_base-#
objectClass: top
objectclass: person
objectClass: person
objectClass: posixAccount
objectClass: shadowAccount
cn: #-soft_ldap_user_full_name-#
gecos: #-soft_ldap_user_full_name-#
sn: #-soft_ldap_user_login-#
uid: #-soft_ldap_user_login-#
uidNumber: #-soft_ldap_user_id-#
gidNumber: #-soft_ldap_user_gid-#
homeDirectory: #-soft_ldap_user_home-#
loginShell: #-soft_ldap_user_shell-#
userPassword: #-soft_ldap_user_pw_hash-#
userPassword: #-soft_ldap_user_pw_hash-#

@ -115,7 +115,7 @@ class cl_ldap(cl_profile._error, cl_profile.xmlShare):
# ini файл
self.iniFile = "/etc/calculate2/calculate.ini"
self.column_width = 25
self.column_width = 27
# Удаляем ненужный аттрибут класса cl_profile.xmlShare
self._createElement = False
@ -171,12 +171,61 @@ class cl_ldap(cl_profile._error, cl_profile.xmlShare):
}
self.data = [\
# Options
{'progAccess':(0,),
'shortOption':"g",
'longOption':"gid",
'optVal':"GID",
'helpChapter':_("Options"),
'help':_("use GID for the new group")
},
{'progAccess':(0,),
'shortOption':"c",
'longOption':"comment",
'optVal':"COMMENT",
'helpChapter':_("Options"),
'help':_("set the GECOS field for the new group")
},
{'progAccess':(3,),
'shortOption':"b",
'longOption':"base-dir",
'optVal':"BASE_DIR",
'helpChapter':_("Options"),
'help':_("base directory for the new user account home directory")
},
{'progAccess':(3,),
'shortOption':"c",
'longOption':"comment",
'optVal':"COMMENT",
'helpChapter':_("Options"),
'help':_("set the GECOS field for the new user account")
},
{'progAccess':(3,),
'shortOption':"g",
'longOption':"gid",
'optVal':"GROUP",
'helpChapter':_("Options"),
'help':_("force use GROUP for the new user account")
},
{'progAccess':(3,),
'shortOption':"p",
'longOption':"password",
'optVal':"file",
'optVal':"PASSWORD",
'helpChapter':_("Options"),
'help':_("use encrypted password for the new user account")
},
{'progAccess':(3,),
'shortOption':"s",
'longOption':"shell",
'optVal':"SHELL",
'helpChapter':_("Options"),
'help':_("the login shell for the new user account")
},
{'progAccess':(3,),
'shortOption':"u",
'longOption':"uid",
'optVal':"UID",
'helpChapter':_("Options"),
'help':_("input user password")
'help':_("force use the UID for the new user account")
},
{'progAccess':(6,),
'shortOption':"f",
@ -184,7 +233,8 @@ class cl_ldap(cl_profile._error, cl_profile.xmlShare):
'helpChapter':_("Options"),
'help':_("forced setup service")
},
{'shortOption':"s",
{'progAccess':(0,1,2,4,5,6),
'shortOption':"s",
'longOption':"set",
'optVal':"<name>=<val>",
'helpChapter':_("Options"),
@ -242,6 +292,12 @@ class cl_ldap(cl_profile._error, cl_profile.xmlShare):
'help':Version
},
# Использование
{
'progAccess':(0,),
'helpChapter':_("Usage"),
'help': self.cmdName + " " + " [" + _("options") + "] " +\
_("group") + " " + _("service")
},
{
'progAccess':(3,),
'helpChapter':_("Usage"),
@ -293,9 +349,9 @@ class cl_ldap(cl_profile._error, cl_profile.xmlShare):
{
'progAccess':(0,),
'helpChapter':_("Examples"),
'help':" " + _("cl-groupadd -smfw guest\t # add group guest \
in services:\n\
\t\t\t\t # samba, mail, ftp, wiki.")
'help':" " + _("cl-groupadd guest ldap\t # add group guest \
in service:\n\
\t\t\t\t # ldap\n")
},
{
'progAccess':(1,),
@ -338,7 +394,7 @@ _("in the system") + ".\n"
'help':" " + self.cmdName + " --env boot #"+
_("show enviroment varibles which has type") + " 'boot'" + ".\n"
},
{
{'progAccess':(0,1,2,4,5,6),
'helpChapter':_("Examples"),
'help':" " +
self.cmdName + " --set setup_march=x86_64:setup_formatfs=raiserfs #"+
@ -392,7 +448,7 @@ _("in the system") + ".\n"
sp.sort()
for shortOption in sp:
for par in self.data:
if par.has_key("shortOption"):
if par.has_key("shortOption") and self.access(par):
if par["shortOption"] == shortOption:
if par.has_key("optVal"):
longOption = par["longOption"] + " " +\
@ -477,7 +533,7 @@ _("in the system") + ".\n"
def createLdif(self, ldifFile, objVars):
"""Cоздает ldif из ldif - профиля"""
if not os.access(ldifFile, os.F_OK):
self.setError(_("Not found file:")) + "\n " + ldifFile
self.setError(_("Not found file:") + "\n " + ldifFile)
return False
FD = open (ldifFile)
ldifProfile = FD.read()
@ -850,14 +906,55 @@ Samba in backup directory")
# или были опция вывода на печать
if not self.processOptionsForDatavars(options,clVars):
return ""
userId = clVars.Get("soft_ldap_user_id")
if not userId:
clVars.Write("soft_ldap_user_id","1000")
userId = str(userId)
clVars.Set("soft_ldap_user_id",userId)
clVars.Set("soft_ldap_user_login",username)
clVars.Set("soft_ldap_user_full_name","full name")
clVars.Set("soft_ldap_user_id","10000")
clVars.Set("soft_ldap_user_gid","65534")
clVars.Set("soft_ldap_user_home","/home/" + \
clVars.Get("soft_ldap_user_login"))
clVars.Set("soft_ldap_user_shell", "/bin/bash")
clVars.Set("soft_ldap_user_pw_hash","crypt{xxx}")
baseDir = "/home"
# Базовая домашняя директория
if options.has_key('b'):
baseDir = options['b']
# Устанавливаем базовую домашнюю директорию
clVars.Set("soft_ldap_user_home",
os.path.join (baseDir,
clVars.Get("soft_ldap_user_login")))
fullNameUser = "CDS user"
# Полное имя пользователя
if options.has_key('c'):
fullNameUser = options['c']
clVars.Set("soft_ldap_user_full_name",fullNameUser)
userGid = userId
# Группа пользователя
if options.has_key('g'):
userGid = options['g']
else:
# Здесь доделать
self.addGroupLdapServer(username,{'g':userGid})
clVars.Set("soft_ldap_user_gid",userGid)
userShell = "/bin/bash"
# Оболочка пользователя
if options.has_key('s'):
userShell = options['s']
clVars.Set("soft_ldap_user_shell", userShell)
userPwd = "crypt{xxx}"
userCrypt = "{SSHA}"
# Пароль пользователя зашифрованный
if options.has_key('p'):
userPwdHash =\
self.execProg("slappasswd -s %s -h %s" %(options['p'],userCrypt))
if userPwdHash:
userPwd = userPwdHash
else:
print _("ERROR") + ": " + _("create crypto password")
return False
clVars.Set("soft_ldap_user_pw_hash",userPwd)
ldifFile = "/usr/lib/calculate/calculate-server/ldif/ldap_user.ldif"
userLdif = self.createLdif(ldifFile, clVars)
ldapParser = iniLdapParser()
@ -869,4 +966,49 @@ Samba in backup directory")
if ldapObj.getError():
print _("LDAP Error") + ": " + ldapObj.getError()
return False
self.printOK(_("Add ldif file ..."))
clVars.Write("soft_ldap_user_id",str(int(userId)+1))
self.printOK(_("Add user ..."))
def addGroupLdapServer(self, groupname, options):
"""Добавляет группу пользователей LDAP"""
clVars = cl_base.DataVars()
clVars.flServer()
clVars.flIniFile()
# прервать если была неудачная попытка установить новые параметры
# или были опция вывода на печать
if not self.processOptionsForDatavars(options,clVars):
return ""
clVars.Set("soft_ldap_group_name",groupname)
gid = clVars.Get("soft_ldap_group_id")
# номер группы
if not gid:
clVars.Write("soft_ldap_group_id","1000")
gid = str(gid)
if options.has_key('g'):
gid = options['g']
clVars.Set("soft_ldap_group_id", gid)
gecos = "CDS group"
# Коментарий к группе
if options.has_key('c'):
gecos = options['c']
clVars.Set("soft_ldap_group_desc",gecos)
ldifFile = "/usr/lib/calculate/calculate-server/ldif/ldap_group.ldif"
userLdif = self.createLdif(ldifFile, clVars)
if not userLdif:
print self.getError()
return False
ldapParser = iniLdapParser()
adminDn = ldapParser.getVar("admin","DN")
adminPw = ldapParser.getVar("admin","PASS")
ldapObj = ldapFunction(adminDn, adminPw)
if not ldapObj.getError():
ldapObj.ldapAdd(userLdif)
if ldapObj.getError():
print _("LDAP Error") + ": " + ldapObj.getError()
return False
if not options.has_key('g'):
clVars.Write("soft_ldap_group_id",str(int(userGid)+1))
self.printOK(_("Add group ..."))

@ -127,6 +127,18 @@ class Data:
soft_ldap_user_pw_hash={'mode':"w",
'type':('param','soft'),
}
#Название группы
soft_ldap_group_name= {'mode':"w",
'type':('param','soft'),
}
#ID группы
soft_ldap_group_id= {'mode':"w",
'type':('param','soft'),
}
#Полное имя группы
soft_ldap_group_desc= {'mode':"w",
'type':('param','soft'),
}
#-----------------------------------------------------
#Служебные переменные
#-----------------------------------------------------

@ -0,0 +1,83 @@
#!/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-groupadd")
optObj = tsOpt(ldapObj)
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)

@ -3,13 +3,13 @@
# setup.py --- Setup script for calculate-server
#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.
@ -120,7 +120,8 @@ setup(
package_dir = {'calculate-server': "."},
packages = ['calculate-server.pym'],
data_files = data_files,
scripts=["./scripts/cl-useradd",
scripts=["./scripts/cl-useradd",
"./scripts/cl-groupadd",
"./scripts/cl-setup",
],
)

Loading…
Cancel
Save