From: Sandrine Avakian Date: Tue, 15 May 2012 09:43:38 +0000 (+0200) Subject: Modified LdapAPI.py and client_helper to match the master one. X-Git-Tag: sfa-2.1-24~3^2~174 X-Git-Url: http://git.onelab.eu/?p=sfa.git;a=commitdiff_plain;h=a0d8a4a55f2bf3c8b50b3de9e5feebfddbba190b Modified LdapAPI.py and client_helper to match the master one. --- diff --git a/sfa/client/client_helper.py b/sfa/client/client_helper.py index 549b0678..e1edfb82 100644 --- a/sfa/client/client_helper.py +++ b/sfa/client/client_helper.py @@ -15,8 +15,8 @@ def sfa_users_arg(records, slice_record): for record in records: if record['type'] != 'user': continue - user = {#'urn': record['geni_urn'], - #'keys': record['keys'], + user = {'urn': record['geni_urn'], + 'keys': record['keys'], 'email': record['email'], # needed for MyPLC 'person_id': record['record_id'], 'hrn': record['hrn'], @@ -26,7 +26,7 @@ def sfa_users_arg(records, slice_record): 'first_name': record['first_name'], # needed for MyPLC 'last_name': record['last_name'], # needed for MyPLC 'slice_record': slice_record, # needed for legacy refresh peer - #'key_ids': record['key_ids'] # needed for legacy refresh peer + 'key_ids': record['key_ids'] # needed for legacy refresh peer } users.append(user) print>>sys.stderr, " \r\n \r\n \t CLIENT_HELPER.PY sfa_users_arg user %s",user diff --git a/sfa/senslab/LDAPapi.py b/sfa/senslab/LDAPapi.py index caad804e..430d6b9c 100644 --- a/sfa/senslab/LDAPapi.py +++ b/sfa/senslab/LDAPapi.py @@ -1,6 +1,6 @@ -from sfa.util.xrn import Xrn,get_authority, +from sfa.util.xrn import Xrn,get_authority import ldap from sfa.util.config import * from sfa.trust.gid import * @@ -10,7 +10,6 @@ from sfa.trust.certificate import * class LDAPapi : def __init__(self, record_filter = None): - self.ldapserv=ldap.open("192.168.0.251") self.senslabauth=Hierarchy() config=Config() self.authname=config.SFA_REGISTRY_ROOT_AUTH @@ -29,61 +28,90 @@ class LDAPapi : 'hrn'] self.baseDN = "ou=people,dc=senslab,dc=info" - def ldapSearch (self, record ): + def connect (self): + self.ldapserv=ldap.open("192.168.0.251") + + def authenticate(self): + self.l = ldap.initialize("ldaps://192.168.0.251:636/") + + # Bind/authenticate with a user with apropriate rights to add objects + self.l = simple_bind_s(" ","") + + def ldapAdd(self, record) : + self.authenticate() + return + + def parse_record(self, record): req_ldapdict = {} - if 'first_name' in record and 'last_name' in record: req_ldapdict['cn'] = str(record['first_name'])+" "+str(record['last_name']) if 'email' in record : req_ldapdict['mail'] = record['email'] - + + req_ldap='' + print >>sys.stderr, "\r\n \r\n \t LDAP.PY \t\t parse_record record %s req_ldapdict %s" %(record,req_ldapdict) for k in req_ldapdict: - req_ldap += '('+str(k)+'='+str(req_ldapdict['k'])+')' + req_ldap += '('+str(k)+'='+str(req_ldapdict[k])+')' if len(req_ldapdict.keys()) >1 : req_ldap = req_ldap[:0]+"(&"+req_ldap[0:] size = len(req_ldap) req_ldap= req_ldap[:(size-1)] +')'+ req_ldap[(size-1):] + + return req_ldap + + def parse_ldapresults(self, ldapentry): + return + + + + def ldapSearch (self, record ): + + + self.connect() + req_ldap = self.parse_record(record) print >>sys.stderr, "\r\n \r\n \t LDAP.PY \t\t ldapSearch req_ldap %s" %(req_ldap) try: msg_id=self.ldapserv.search(self.baseDN,ldap.SCOPE_SUBTREE,req_ldap, ['mail','givenName', 'sn', 'uid','sshPublicKey']) #Get all the results matching the search from ldap in one shot (1 value) result_type, result_data=self.ldapserv.result(msg_id,1) results = [] - for ldapentry in result_data[1]: - #print>>sys.stderr, " \r\n \t LDAP : ! mail ldapentry[1]['mail'][0] %s " %(ldapentry[1]['mail'][0]) - - tmpname = ldapentry[1]['uid'][0] - - if ldapentry[1]['uid'][0] == "savakian": - tmpname = 'avakian' + print >>sys.stderr, "\r\n \r\n \t LDAP.PY \t\t ldapSearch result_data %s" %(result_data) + #Dafuq is this result_data shit ?? + ldapentry = result_data[0][1] + #print>>sys.stderr, " \r\n \t LDAP : ! mail ldapentry[1]['mail'][0] %s " %(ldapentry[1]['mail'][0]) + print >>sys.stderr, "\r\n \r\n \t LDAP.PY \t\t ldapSearch ldapentry %s" %(ldapentry) + tmpname = ldapentry['uid'][0] + + if ldapentry['uid'][0] == "savakian": + tmpname = 'avakian' - tmpemail = ldapentry[1]['mail'][0] - if ldapentry[1]['mail'][0] == "unknown": - tmpemail = None - - hrn = record['hrn'] - parent_hrn = get_authority(hrn) - peer_authority = None - if parent_hrn is not self.authname: - peer_authority = parent_hrn + tmpemail = ldapentry['mail'][0] + if ldapentry['mail'][0] == "unknown": + tmpemail = None + + hrn = record['hrn'] + parent_hrn = get_authority(hrn) + peer_authority = None + if parent_hrn is not self.authname: + peer_authority = parent_hrn - results.append( { - 'type': 'user', - 'pkey': ldapentry[1]['sshPublicKey'][0], + results.append( { + 'type': 'user', + 'pkey': ldapentry['sshPublicKey'][0], #'uid': ldapentry[1]['uid'][0], 'uid': tmpname , 'email':tmpemail, - #'email': ldapentry[1]['mail'][0], - 'first_name': ldapentry[1]['givenName'][0], - 'last_name': ldapentry[1]['sn'][0], + #'email': ldapentry[1]['mail'][0], + 'first_name': ldapentry['givenName'][0], + 'last_name': ldapentry['sn'][0], # 'phone': 'none', - 'serial': 'none', - 'authority': parent_hrn, - 'peer_authority': peer_authority, - 'pointer' : -1, - 'hrn': hrn, - } ) + 'serial': 'none', + 'authority': parent_hrn, + 'peer_authority': peer_authority, + 'pointer' : -1, + 'hrn': hrn, + } ) return results @@ -91,12 +119,13 @@ class LDAPapi : print >>sys.stderr, "ERROR LDAP %s" %(e) - + + def ldapFindHrn(self, record_filter = None): #def ldapFindHrn(self, record_filter = None, columns=None): results = [] - + self.connect() if 'authority' in record_filter: # ask for authority if record_filter['authority']==self.authname: @@ -133,6 +162,7 @@ class LDAPapi : rindex=self.ldapserv.search(self.baseDN,ldap.SCOPE_SUBTREE,ldapfilter, ['mail','givenName', 'sn', 'uid','sshPublicKey']) ldapresponse=self.ldapserv.result(rindex,1) + #print>>sys.stderr, " \r\n \t LDAP : ldapresponse %s " %(ldapresponse) for ldapentry in ldapresponse[1]: #print>>sys.stderr, " \r\n \t LDAP : ! mail ldapentry[1]['mail'][0] %s " %(ldapentry[1]['mail'][0]) diff --git a/sfa/senslab/slabdriver.py b/sfa/senslab/slabdriver.py index 643134dc..a909f7ff 100644 --- a/sfa/senslab/slabdriver.py +++ b/sfa/senslab/slabdriver.py @@ -999,46 +999,54 @@ class SlabDriver(Driver): #print >>sys.stderr, "\r\n \t\t SLABDRIVER.PY fill_record_info \t\t HOY HOY reclise %s" %(recslice) #if isinstance(recslice,list) and len(recslice) == 1: #recslice = recslice[0] - + recuser = dbsession.query(RegRecord).filter_by(record_id = recslice['record_id_user']).first() #existing_records_by_id[recslice['record_id_user']] #print >>sys.stderr, "\r\n \t\t SLABDRIVER.PY fill_record_info \t\t recuser %s" %(recuser) - + record.update({'PI':[recuser.hrn], 'researcher': [recuser.hrn], 'name':record['hrn'], 'oar_job_id':recslice['oar_job_id'], 'node_ids': [], - 'person_ids':[recslice['record_id_user']]}) + 'person_ids':[recslice['record_id_user']], + 'geni_urn':'', #For client_helper.py compatibility + 'keys':'', #For client_helper.py compatibility + 'key_ids':''}) #For client_helper.py compatibility elif str(record['type']) == 'user': #Add the data about slice rec = self.GetSlices(slice_filter = record['record_id'], filter_type = 'record_id_user') - print >>sys.stderr, "\r\n \t\t SLABDRIVER.PY fill_record_info USEEEEEEEEEERDESU! rec %s" %(rec) + print >>sys.stderr, "\r\n \t\t SLABDRIVER.PY fill_record_info USEEEEEEEEEERDESU! rec %s \r\n \t rec['record_id_user'] %s " %(rec,rec['record_id_user']) #Append record in records list, therfore fetches user and slice info again(one more loop) #Will update PIs and researcher for the slice - recuser = dbsession.query(RegRecord).filter_by(record_id = rec['record_id_user']).first() - rec.update({'PI':[recuser.hrn], + recuser = dbsession.query(RegRecord).filter_by(record_id = rec['record_id_user']).first() + rec.update({'PI':[recuser.hrn], 'researcher': [recuser.hrn], 'name':record['hrn'], 'oar_job_id':rec['oar_job_id'], 'node_ids': [], 'person_ids':[rec['record_id_user']]}) - #retourne une liste 100512 + #retourne une liste 100512 + user_slab = self.GetPersons({'hrn':recuser.hrn}) - - print >>sys.stderr, "\r\n \t\t SLABDRIVER.PY fill_record_info user_slab %s ! r ecuser %s " %(user_slab, recuser.hrn) + + rec.update({'type':'slice','hrn':rec['slice_hrn']}) - record.update(user_slab[0]) + record.update(user_slab[0]) + #For client_helper.py compatibility + record.update( { 'geni_urn':'', + 'keys':'', + 'key_ids':'' }) records.append(rec) - + print >>sys.stderr, "\r\n \t\t SLABDRIVER.PY fill_record_info ADDING SLICEINFO TO USER records %s" %(records) print >>sys.stderr, "\r\n \t\t SLABDRIVER.PY fill_record_info OKrecords %s" %(records) except TypeError: print >>sys.stderr, "\r\n \t\t SLABDRIVER fill_record_info EXCEPTION RECORDS : %s" %(records) - return + return #self.fill_record_slab_info(records) ##print >>sys.stderr, "\r\n \t\t after fill_record_slab_info %s" %(records) diff --git a/sfa/senslab/slabslices.py b/sfa/senslab/slabslices.py index 85a5234f..7ec7ba48 100644 --- a/sfa/senslab/slabslices.py +++ b/sfa/senslab/slabslices.py @@ -464,9 +464,20 @@ class SlabSlices: #Check before adding them to LDAP else: - ldap_reslt = self.driver.ldap.ldapSearch(users) - print>>sys.stderr, " \r\n \r\n \t slabslices.py verify_person users HUMHUMHUMHUM ... %s \r\n \t ldap_reslt %s " %(users, ldap_reslt) - pass + + if isinstance(users,list): + ldap_reslt = self.driver.ldap.ldapSearch(users[0]) + else: + ldap_reslt = self.driver.ldap.ldapSearch(users) + if ldap_result: + existing_users = ldap_reslt[0] + existing_user_hrns.append (users_dict[user['hrn']]['hrn']) + existing_user_ids.append (users_dict[user['hrn']]['person_id']) + else: + #User not existing in LDAP + + print>>sys.stderr, " \r\n \r\n \t slabslices.py verify_person users HUMHUMHUMHUM ... %s \r\n \t ldap_reslt %s " %(users, ldap_reslt) + # requested slice users requested_user_ids = users_by_id.keys()