Christoph Zwerschke wrote:
Am 20.07.2011 15:41, schrieb jo:
Thanks for your tip, Christoph. In this way I avoid the error.
Now I get: No such LDAP user: steve

You did not show your validate_password code. Did you make the changes
mentioned in the update to the recipe? Because the original code used
sAMAccountName instead of uid.
Here is the code:

class SaLdapIdentityProvider(saprovider.SqlAlchemyIdentityProvider):
   def __init__(self):
       saprovider.SqlAlchemyIdentityProvider.__init__(self)
       self.host       = config.get("identity.saldapprovider.host")
       self.port       = config.get("identity.saldapprovider.port")
       self.basedn     = config.get("identity.saldapprovider.basedn")
       self.autocreate = config.get("identity.saldapprovider.autocreate")
       self.filter_id  = config.get("identity.saldapprovider.filter_id")
       log.default.info("host :: %s" % self.host)
       log.default.info("port :: %d" % self.port)
       log.default.info("basedn :: %s" % self.basedn)
       log.default.info("autocreate :: %s" % self.autocreate)

   def validate_identity( self, user_name, password, visit_key ):
       if not self.autocreate:
return saprovider.SqlAlchemyIdentityProvider.validate_identity(user_name, password, visit_key )

       user=None
user=saprovider.user_class.query.filter_by(user_name=user_name).first()

       if not self.validate_password(user, user_name, password):
           log.default.info( "user '%s' or password invalid",user_name )
           return None
       if not user:
           try:
user=saprovider.user_class(user_name=user_name,email_address=user_name, display_name=user_name, password=u'ldap')
           except:
               log.default.error( "Creating user: %s", user_name )
               return None
           else:
               log.default.info( "user created: %s", user_name )

link=saprovider.visit_class.query.filter_by(visit_key = visit_key).first()
       if link:
           link.user_id = user.user_id
       else: #crea visit...
link = saprovider.visit_class(visit_key=visit_key,user_id=user.user_id )
           saprovider.session.flush()
       return saprovider.SqlAlchemyIdentity( visit_key, user )

   def validate_password( self, user, user_name, password ):
       ldapcon = ldap.initialize('ldap://%s'%self.host)
       filter = "(%s=%s)" % (self.filter_id,user_name)
       rc = ldapcon.search(self.basedn, ldap.SCOPE_SUBTREE, filter)
       try:
           objects = ldapcon.result(rc)[1]
       except ldap.NO_SUCH_OBJECT:
           objects = []
       if(len(objects) == 0):
           log.default.warning("No such LDAP user: %s" % user_name)
           return False
       elif(len(objects) > 1):
           log.default.error("Too many users: %s" % user_name)
           return False
       dn = objects[0][0]
       try:
           rc = ldapcon.simple_bind(dn, password)
           ldapcon.result(rc)
       except ldap.INVALID_CREDENTIALS:
log.default.error("Invalid password supplied for %s" % user_name)
           return False
       return True

------------

and this is my dev.cfg:

identity.provider = 'ldap'
identity.saldapprovider.host = 'myhost'
identity.saldapprovider.port = 389
identity.saldapprovider.basedn = 'ou=pippoauth,dc=host,dc=com'
identity.saldapprovider.filter_id = 'uid'
identity.saldapprovider.autocreate = True

--------
this is my entry_point.txt:
ldap         = sicer.lib.identity:SaLdapIdentityProvider

--
You received this message because you are subscribed to the Google Groups 
"TurboGears" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/turbogears?hl=en.

Reply via email to