#!/usr/bin/python
# -*- coding: utf-8 -*-
import sys,ldap,string,ldap.modlist as modlist,ldif,Conf
class LdapUserManage:
def __init__ (self):
""" Initialise la connexion
Établit une connexion avec le serveur LDAP en tant qu'administrateur
Retour : référence vers la connexion
"""
l = ldap.initialize(LdapUrl)
l.simple_bind_s("cn=admin,dc=basch,dc=ac-rennes,dc=fr","1&a.!")
return l
def getid (self):
""" Recupère l'identifiant du premier groupe libre
Récupère sur le serveur LDAP le plus petit gid libre (> 1000)
Retour : valeur de l'identifiant
"""
id = l.search_s("cn=index,ou=mygroup,dc=basch,dc=ac-rennes,dc=fr",ldap.SCOPE_SUBTREE,"objectClass=posixGroup",[ "gidNumber" ])
id = id[0][1]["gidNumber"][0]
return id
def incid (self,curentid):
""" Incrémente l'identifiant de groupe
Incrémente l'identifiant du plus petit gid libre
"""
dn = "cn=index,ou=mygroup,dc=basch,dc=ac-rennes,dc=fr"
ldif = modlist.modifyModList(old,new)
l.modify_s(dn,ldif)
def addUser (self):
"""Ajout d'un utilisateur
Paramètre : chaine sous la forme 'username;nom;nom;prénom;class;password'
Soit la chaine est passée en paramèetre du programme
Soit lue sur l'entrée standard si $1 = '-'
"""
#Récupération de la chaine contenant les paramètres de l'utilisateur
if len(sys.argv) == 1:
print "Erreur, vous devez mettre au moins un paramètre"
quit()
if sys.argv[1] == '-':
ParamUser = sys.stdin.read()
else:
ParamUser = sys.argv[1]
ParamUser = ParamUser.strip('\r\n')
id = getid()
a_Param = {}
#Define attribute from parameters
a_Param["uid"],a_Param["sn"],a_Param["givenName"],a_Param["description"],a_Param["userPassword"] = [[x] for x in ParamUser.split(";")]
#Build missing attributes
a_Param["objectclass"] = ['inetOrgPerson','posixAccount','shadowAccount','sambaSamAccount']
a_Param["uidNumber"] = [id]
a_Param["gidNumber"] = [id]
a_Param["homeDirectory"] = ['/home/' + a_Param["uid"][0]]
a_Param["loginShell"] = ['/bin/bash']
a_Param["cn"] = [a_Param["givenName"][0]+ " " + a_Param["sn"][0]]
a_Param["sambaSID"] = ['S-1-5-21-4043153765-4081505042-1247131504-512']
dn = "cn=" + a_Param["cn"][0] +",ou=People,dc=basch,dc=ac-rennes,dc=fr"
#Ajout à LDAP
ldi = modlist.addModlist(a_Param)
l.add_s(dn,ldi)
c = l.search_s(dn,ldap.SCOPE_SUBTREE,"objectClass=*")
if len(c) != 0:
print "Utilisateur "+a_Param["cn"][0]+" ajouté !"
self.incid(id)
l.unbind_s()
~
fred@linux1:~$ ./script.py -
Traceback (most recent call last):
File "./script.py", line 5, in <module>
class LdapUserManage:
File "./script.py", line 76, in LdapUserManage
self.incid(id)
NameError: name 'self' is not defined
BACKTRACE