175 self.authmode = source_config.get('auth-mode', 'simple') |
175 self.authmode = source_config.get('auth-mode', 'simple') |
176 self._authenticate = getattr(self, '_auth_%s' % self.authmode) |
176 self._authenticate = getattr(self, '_auth_%s' % self.authmode) |
177 self.cnx_dn = source_config.get('data-cnx-dn') or '' |
177 self.cnx_dn = source_config.get('data-cnx-dn') or '' |
178 self.cnx_pwd = source_config.get('data-cnx-password') or '' |
178 self.cnx_pwd = source_config.get('data-cnx-password') or '' |
179 self.user_base_scope = globals()[source_config['user-scope']] |
179 self.user_base_scope = globals()[source_config['user-scope']] |
180 self.user_base_dn = source_config['user-base-dn'] |
180 self.user_base_dn = str(source_config['user-base-dn']) |
181 self.user_base_scope = globals()[source_config['user-scope']] |
181 self.user_base_scope = globals()[source_config['user-scope']] |
182 self.user_classes = splitstrip(source_config['user-classes']) |
182 self.user_classes = splitstrip(source_config['user-classes']) |
183 self.user_login_attr = source_config['user-login-attr'] |
183 self.user_login_attr = source_config['user-login-attr'] |
184 self.user_default_groups = splitstrip(source_config['user-default-group']) |
184 self.user_default_groups = splitstrip(source_config['user-default-group']) |
185 self.user_attrs = dict(v.split(':', 1) for v in splitstrip(source_config['user-attrs-map'])) |
185 self.user_attrs = dict(v.split(':', 1) for v in splitstrip(source_config['user-attrs-map'])) |
326 relname = iter(var.stinfo['relations']).next().r_type |
326 relname = iter(var.stinfo['relations']).next().r_type |
327 return self.user_rev_attrs.get(relname) |
327 return self.user_rev_attrs.get(relname) |
328 return None |
328 return None |
329 |
329 |
330 def prepare_columns(self, mainvars, rqlst): |
330 def prepare_columns(self, mainvars, rqlst): |
331 """return two list describin how to build the final results |
331 """return two list describing how to build the final results |
332 from the result of an ldap search (ie a list of dictionnary) |
332 from the result of an ldap search (ie a list of dictionnary) |
333 """ |
333 """ |
334 columns = [] |
334 columns = [] |
335 global_transforms = [] |
335 global_transforms = [] |
336 for i, term in enumerate(rqlst.selection): |
336 for i, term in enumerate(rqlst.selection): |
530 |
530 |
531 def _search(self, session, base, scope, |
531 def _search(self, session, base, scope, |
532 searchstr='(objectClass=*)', attrs=()): |
532 searchstr='(objectClass=*)', attrs=()): |
533 """make an ldap query""" |
533 """make an ldap query""" |
534 self.debug('ldap search %s %s %s %s %s', self.uri, base, scope, searchstr, list(attrs)) |
534 self.debug('ldap search %s %s %s %s %s', self.uri, base, scope, searchstr, list(attrs)) |
|
535 # XXX for now, we do not have connection pool support for LDAP, so |
|
536 # this is always self._conn |
535 cnx = session.pool.connection(self.uri).cnx |
537 cnx = session.pool.connection(self.uri).cnx |
536 try: |
538 try: |
537 res = cnx.search_s(base, scope, searchstr, attrs) |
539 res = cnx.search_s(base, scope, searchstr, attrs) |
538 except ldap.PARTIAL_RESULTS: |
540 except ldap.PARTIAL_RESULTS: |
539 res = cnx.result(all=0)[1] |
541 res = cnx.result(all=0)[1] |
596 res = self._search(session, lid, BASE)[0] |
598 res = self._search(session, lid, BASE)[0] |
597 for attr in entity.e_schema.indexable_attributes(): |
599 for attr in entity.e_schema.indexable_attributes(): |
598 entity.cw_edited[attr] = res[self.user_rev_attrs[attr]] |
600 entity.cw_edited[attr] = res[self.user_rev_attrs[attr]] |
599 return entity |
601 return entity |
600 |
602 |
601 def after_entity_insertion(self, session, dn, entity): |
603 def after_entity_insertion(self, session, lid, entity): |
602 """called by the repository after an entity stored here has been |
604 """called by the repository after an entity stored here has been |
603 inserted in the system table. |
605 inserted in the system table. |
604 """ |
606 """ |
605 self.debug('ldap after entity insertion') |
607 self.debug('ldap after entity insertion') |
606 super(LDAPUserSource, self).after_entity_insertion(session, dn, entity) |
608 super(LDAPUserSource, self).after_entity_insertion(session, lid, entity) |
|
609 dn = lid |
607 for group in self.user_default_groups: |
610 for group in self.user_default_groups: |
608 session.execute('SET X in_group G WHERE X eid %(x)s, G name %(group)s', |
611 session.execute('SET X in_group G WHERE X eid %(x)s, G name %(group)s', |
609 {'x': entity.eid, 'group': group}) |
612 {'x': entity.eid, 'group': group}) |
610 # search for existant email first |
613 # search for existant email first |
611 try: |
614 try: |