python-mylib/LdapServer.py
2013-06-07 12:13:03 +02:00

103 lines
2.2 KiB
Python

#!/usr/bin/python
import sys
import ldap
import ldap.modlist as modlist
import logging
class LdapServer(object):
uri = None
dn = None
pwd = None
v2 = None
con = 0
def __init__(self,uri,dn=None,pwd=None,v2=None):
self.uri = uri
self.dn = dn
self.pwd = pwd
if v2:
self.v2=True
def connect(self):
if self.con == 0:
try:
con = ldap.initialize(self.uri)
if self.v2:
con.protocol_version = ldap.VERSION2
else:
con.protocol_version = ldap.VERSION3
if self.dn:
con.simple_bind_s(self.dn,self.pwd)
self.con = con
except ldap.LDAPError, e:
logging.critical('LdapServer - Error connecting and binding to LDAP server : %s' % e)
sys.exit(1)
def search(self,basedn,filter,attrs,sizelimit=0):
res_id = self.con.search(basedn,ldap.SCOPE_SUBTREE,filter,attrs)
ret = {}
c=0
while 1:
res_type, res_data = self.con.result(res_id,0)
if res_data == [] or sizelimit!=0 and c>sizelimit:
break
else:
if res_type == ldap.RES_SEARCH_ENTRY:
ret[res_data[0][0]]=res_data[0][1]
c=c+1
return ret
def add_object(self,dn,attrs):
ldif = modlist.addModlist(attrs)
try:
logging.debug("LdapServer - Add %s" % dn)
self.con.add_s(dn,ldif)
return True
except ldap.LDAPError, e:
logging.warning("LdapServer - Error adding %s : %s" % (dn,e))
return False
def update_object(self,dn,old,new):
ldif = modlist.modifyModlist(old,new)
if ldif == []:
#logging.debug("LdapServer - No change for %s" % dn)
return True
try:
#logging.debug("LdapServer - Update %s" % dn)
self.con.modify_s(dn,ldif)
return True
except ldap.LDAPError, e:
logging.warning("LdapServer - Error updating %s : %s" % (dn,e))
return False
def drop_object(self,dn):
try:
logging.debug("LdapServer - Delete %s" % dn)
self.con.delete_s(dn)
return True
except ldap.LDAPError, e:
logging.warning("LdapServer - Error deleting %s : %s" % (dn,e))
return False
def get_dn(self,obj):
return obj[0][0]
def get_attr(self,obj,attr,all=None):
if all is not None:
if attr in obj:
return obj[attr]
else:
return []
else:
if attr in obj:
return obj[attr][0]
else:
return None