On Dec 4, 2009, at 9:03 PM, Brian Corbin wrote:

> Awesome, thank you for the advice, Matt!  I've pretty much got it
> working.  I just moved all that stuff out of environment.rb and into
> it's own initializer.  I somehow missed the comment in there that
> reads:  Application configuration should go into files in config/
> initializers
>  # -- all .rb files in that directory are automatically loaded.
>
> (Apologies in advance for the formatting)
>
> In the user model I have:
>  def self.authenticate(login, password)
>
>        if SimpleLdapAuthenticator.valid?(login, password)
>                u = find(:first, :conditions => ["#...@login_attribute} = ?", 
> login +
> "@domain.com"])
>               if u.nil?
>                       u = User.new
>                       u.email_address = login + "@domain.com"
>                       #u.name = # Hmmmmm!
>               end
>
>          if u.respond_to?(:last_login_at) || u.respond_to?
> (:login_count)
>            u.last_login_at = Time.now if u.respond_to?
> (:last_login_at)
>            u.login_count = (u.login_count.to_i + 1) if u.respond_to?
> (:login_count)

Note that you shouldn't need the respond_to? calls here either - does  
your user model support :last_login_at / :login_count or not? The  
original is very generic, but there's no need to keep it that way in a  
real app.


> Now I'm trying to figure out how to get the user's name out of Active
> Directory so I can stick it in their user model record.  I was
> thinking I'd reuse SimpleLdapAuthenticator.connection to do a search,
> but that's not working for me.
>
> The search/query parameters I'm using work in the mmc snap-in, ADSI
> Edit, so I know that's good.
> I'm in a script/console now:
>
> . >> conn = SimpleLdapAuthenticator.connection
> . >> conn.bound?
> . => false
> . >> conn.bind("[email protected]","password")
> . => <LDAP::Conn:0xb74e8a9c>
> . >> conn.search("DC=mydomain,DC=com",LDAP::LDAP_SCOPE_SUBTREE,"(&
> (objectCategory=user)(userPrincipalName=bcorbin))")
> .  LDAP::ResultError: Operations error
> .        from (irb):3:in `search'
> .        from (irb):3
> .  >>  conn.perror('')
> .  : Operations error (1)
> .          additional info: 00000000: LdapErr: DSID-0C090627, comment:
> In order to perform this operation a successful bind must be
> completed .  on the connection., data 0, vece
>

What a delightfully non-informative error message! An AD-specific one,  
with absolutely no documentation on MS's own site...

Google seems to think it's caused by the bind not taking - apparently  
the call can fail without throwing an exception. You may want to try  
checking the status and/or calling perror to see what it tells you.

--Matt Jones

--

You received this message because you are subscribed to the Google Groups "Hobo 
Users" 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/hobousers?hl=en.


Reply via email to