f5771ca6983e060118cfd7f33bb619c4e8ede45b
Benjamin Renard Initial commit

Benjamin Renard authored 10 years ago

1) #!/usr/bin/python
2) 
3) import ldap
4) import ldap.modlist as modlist
5) import logging
6) 
7) class LdapServer(object):
8) 
9) 	uri = None
10) 	dn = None
11) 	pwd = None
12) 	v2 = None
13) 
14) 	con = 0
15) 
Benjamin Renard LdapServer : Review logging...

Benjamin Renard authored 9 years ago

16) 	def __init__(self,uri,dn=None,pwd=None,v2=None,raiseOnError=False):
Benjamin Renard Initial commit

Benjamin Renard authored 10 years ago

17) 		self.uri  = uri
18) 		self.dn   = dn
19) 		self.pwd  = pwd
Benjamin Renard LdapServer : Review logging...

Benjamin Renard authored 9 years ago

20) 		self.raiseOnError  = raiseOnError
Benjamin Renard Initial commit

Benjamin Renard authored 10 years ago

21) 		if v2:
22) 			self.v2=True
23) 
Benjamin Renard LdapServer : Review logging...

Benjamin Renard authored 9 years ago

24) 	def _error(self,error,level=logging.WARNING):
25) 		if self.raiseOnError:
Benjamin Renard Fix/improve error reporting

Benjamin Renard authored 6 years ago

26) 			raise LdapServerException(error)
Benjamin Renard LdapServer : Review logging...

Benjamin Renard authored 9 years ago

27) 		else:
28) 			logging.log(level,error)
29) 
Benjamin Renard Initial commit

Benjamin Renard authored 10 years ago

30) 	def connect(self):
31) 		if self.con == 0:
32) 			try:
33) 				con = ldap.initialize(self.uri)
34) 				if self.v2:
35) 					con.protocol_version = ldap.VERSION2
36) 				else:
37) 					con.protocol_version = ldap.VERSION3
38) 
39) 				if self.dn:
40) 					con.simple_bind_s(self.dn,self.pwd)
41) 
42) 				self.con = con
Benjamin Renard LdapServer : Review logging...

Benjamin Renard authored 9 years ago

43) 				return True
Benjamin Renard Initial commit

Benjamin Renard authored 10 years ago

44) 			except ldap.LDAPError, e:
Benjamin Renard LdapServer : Review logging...

Benjamin Renard authored 9 years ago

45) 				self._error('LdapServer - Error connecting and binding to LDAP server : %s' % e,logging.CRITICAL)
46) 			return False
47) 		return True
Benjamin Renard Initial commit

Benjamin Renard authored 10 years ago

48) 
49) 	def search(self,basedn,filter,attrs,sizelimit=0):
50) 		res_id = self.con.search(basedn,ldap.SCOPE_SUBTREE,filter,attrs)
51) 		ret = {}
52) 		c=0
53) 		while 1:
54) 			res_type, res_data = self.con.result(res_id,0)
55) 			if res_data == [] or sizelimit!=0 and c>sizelimit:
56) 				break
57) 			else:
58) 				if res_type == ldap.RES_SEARCH_ENTRY:
59) 					ret[res_data[0][0]]=res_data[0][1]
60) 			c=c+1
61) 		return ret
62) 
63) 	def add_object(self,dn,attrs):
64) 		ldif = modlist.addModlist(attrs)
65) 		try:
66) 			logging.debug("LdapServer - Add %s" % dn)
67) 			self.con.add_s(dn,ldif)
68) 			return True
69) 		except ldap.LDAPError, e:
Benjamin Renard Fix/improve error reporting

Benjamin Renard authored 6 years ago

70) 			self._error("LdapServer - Error adding %s : %s" % (dn,e), logging.error)
Benjamin Renard Initial commit

Benjamin Renard authored 10 years ago

71) 
72) 		return False
73) 
Benjamin Renard LdapServer :: update_object...

Benjamin Renard authored 6 years ago

74) 	def update_object(self, dn, old, new, ignore_attrs=[]):
75) 		ldif = modlist.modifyModlist(old, new, ignore_attr_types=ignore_attrs)
Benjamin Renard Initial commit

Benjamin Renard authored 10 years ago

76) 		if ldif == []:
77) 			return True
78) 		try:
79) 			self.con.modify_s(dn,ldif)
80) 			return True
81) 		except ldap.LDAPError, e:
Benjamin Renard Fix/improve error reporting

Benjamin Renard authored 6 years ago

82) 			self._error("LdapServer - Error updating %s : %s\nOld : %s\nNew : %s" % (dn, e, old, new), logging.error)
Benjamin Renard Initial commit

Benjamin Renard authored 10 years ago

83) 		return False
84) 
Benjamin Renard Add rename_object method

Benjamin Renard authored 9 years ago

85) 	def rename_object(self,dn,new_rdn):
86) 		try:
87) 			logging.debug("LdapServer - Rename %s in %s" % (dn,new_rdn))
88) 			self.con.rename_s(dn,new_rdn)
89) 			return True
90) 		except ldap.LDAPError, e:
Benjamin Renard Fix/improve error reporting

Benjamin Renard authored 6 years ago

91) 			self._error("LdapServer - Error renaming %s in %s : %s" % (dn,new_rdn,e), logging.error)
Benjamin Renard Add rename_object method

Benjamin Renard authored 9 years ago

92) 
93) 		return False
94) 
Benjamin Renard Initial commit

Benjamin Renard authored 10 years ago

95) 	def drop_object(self,dn):
96) 		try:
97) 			logging.debug("LdapServer - Delete %s" % dn)
98) 			self.con.delete_s(dn)
99) 			return True
100) 		except ldap.LDAPError, e:
Benjamin Renard Fix/improve error reporting

Benjamin Renard authored 6 years ago

101) 			self._error("LdapServer - Error deleting %s : %s" % (dn,e), logging.error)
Benjamin Renard Initial commit

Benjamin Renard authored 10 years ago

102) 
103) 		return False
104) 
105) 	def get_dn(self,obj):
106) 		return obj[0][0]
107) 
Benjamin Renard Add default parameter to ge...

Benjamin Renard authored 9 years ago

108) 	def get_attr(self,obj,attr,all=None,default=None):
Benjamin Renard get_attr : make case-insens...

Benjamin Renard authored 6 years ago

109) 		if attr not in obj:
110) 			for k in obj:
111) 				if k.lower() == attr.lower():
112) 					attr = k
113) 					break
Benjamin Renard Initial commit

Benjamin Renard authored 10 years ago

114) 		if all is not None:
115) 			if attr in obj:
116) 				return obj[attr]
117) 			else:
Benjamin Renard Add default parameter to ge...

Benjamin Renard authored 9 years ago

118) 				return default or []
Benjamin Renard Initial commit

Benjamin Renard authored 10 years ago

119) 		else:
120) 			if attr in obj:
121) 				return obj[attr][0]
122) 			else:
Benjamin Renard Add default parameter to ge...

Benjamin Renard authored 9 years ago

123) 				return default