server/sources/ldapuser.py
changeset 6931 0af44a38fe41
parent 6751 02091c91520f
parent 6887 72d7feeb071e
child 6943 406a41c25e13
equal deleted inserted replaced
6884:6fa712e9dfa5 6931:0af44a38fe41
   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: