LDAP not updating RT data when LDAP data changes

I set up the LDAP overlay. To be specific, I set up
LdapUserLocalOverlay from the wiki. It is doing autocreate for our
users just fine. It is also working (“username/password is incorrect”)
when we set the user to “disabled” in LDAP.

However, when I change an attribute for the user (I am using City for my
test), RT doesn’t update the city field in my database.

I turned up logging, and found the following in my log file:

[Wed Dec 27 18:52:03 2006] [debug]: UPDATED user rwalker from LDAP

  • (/usr/local/share/request-tracker3.4/lib/RT/User_Local.pm:621)

I looked at that file.

My version now is a little bit different than the one which was first there.

The if statement at the end of the file now looks like this, pardon the
gratuitous line wraps):

     if ($disabled_users->count) {
         my $UserObj = RT::User->new($RT::SystemUser);
         $UserObj->Load($self->Name);
         my ($val, $message) = $UserObj->SetDisabled(1);

         $RT::Logger->info("DISABLED user " . $self->Name .
                           " per LDAP ($val, $message)\n");
         $msg = "User disabled";
     } else {
         # Update their info from LDAP
         my %args = (Name => $self->Name);
         $self->CanonicalizeUserInfo(\%args);

         foreach my $key (sort(keys(%args))) {
             next unless $args{$key};
             my $method = "Set$key";
             $self->$method($args{$key});
             $RT::Logger->debug("UPDATED user " . $self->Name . "\

from LDAP – $key is $key\n");
$RT::Logger->debug("UPDATED user " . $self->Name . “
from LDAP – $args is $args{$key}\n”);
}

         $updated = 1;
         $RT::Logger->debug("UPDATED user " . $self->Name . " from\

LDAP\n");
$msg = ‘User updated’;
}

So I copied the debug statements into the foreach loop, and now my
debugs look like this (datestamps and other data elided):

[] [debug]: UPDATED user rwalker from LDAP – $key is Address1
(/usr/local/share/request-tracker3.4/lib/RT/User_Local.pm:618)
[] [debug]: UPDATED user rwalker from LDAP – $args is myaddress
(/usr/local/share/request-tracker3.4/lib/RT/User_Local.pm:619)
[] [debug]: UPDATED user rwalker from LDAP – $key is City
(/usr/local/share/request-tracker3.4/lib/RT/User_Local.pm:618)
[] [debug]: UPDATED user rwalker from LDAP – $args is mycity
(/usr/local/share/request-tracker3.4/lib/RT/User_Local.pm:619)
[] [debug]: UPDATED user rwalker from LDAP – $key is Country
(/usr/local/share/request-tracker3.4/lib/RT/User_Local.pm:618)
[] [debug]: UPDATED user rwalker from LDAP – $args is mycountry
(/usr/local/share/request-tracker3.4/lib/RT/User_Local.pm:619)
[] [debug]: UPDATED user rwalker from LDAP – $key is EmailAddress
(/usr/local/share/request-tracker3.4/lib/RT/User_Local.pm:618)
[] [debug]: UPDATED user rwalker from LDAP – $args is myemail
(/usr/local/share/request-tracker3.4/lib/RT/User_Local.pm:619)
[] [debug]: UPDATED user rwalker from LDAP – $key is ExternalAuthId
(/usr/local/share/request-tracker3.4/lib/RT/User_Local.pm:618)
[] [debug]: UPDATED user rwalker from LDAP – $args is myid
(/usr/local/share/request-tracker3.4/lib/RT/User_Local.pm:619)
[] [debug]: UPDATED user rwalker from LDAP – $key is ExternalContactInfoId
(/usr/local/share/request-tracker3.4/lib/RT/User_Local.pm:618)
[] [debug]: UPDATED user rwalker from LDAP – $args is ldapgook
(/usr/local/share/request-tracker3.4/lib/RT/User_Local.pm:619)
[] [debug]: UPDATED user rwalker from LDAP – $key is Gecos
(/usr/local/share/request-tracker3.4/lib/RT/User_Local.pm:618)
[] [debug]: UPDATED user rwalker from LDAP – $args is mygecosfield
(/usr/local/share/request-tracker3.4/lib/RT/User_Local.pm:619)
[] [debug]: UPDATED user rwalker from LDAP – $key is Name
(/usr/local/share/request-tracker3.4/lib/RT/User_Local.pm:618)
[] [debug]: UPDATED user rwalker from LDAP – $args is myname
(/usr/local/share/request-tracker3.4/lib/RT/User_Local.pm:619)
[] [debug]: UPDATED user rwalker from LDAP – $key is Organization
(/usr/local/share/request-tracker3.4/lib/RT/User_Local.pm:618)
[] [debug]: UPDATED user rwalker from LDAP – $args is myorg
(/usr/local/share/request-tracker3.4/lib/RT/User_Local.pm:619)
[] [debug]: UPDATED user rwalker from LDAP – $key is RealName
(/usr/local/share/request-tracker3.4/lib/RT/User_Local.pm:618)
[] [debug]: UPDATED user rwalker from LDAP – $args is myrealname
(/usr/local/share/request-tracker3.4/lib/RT/User_Local.pm:619)
[] [debug]: UPDATED user rwalker from LDAP – $key is State
(/usr/local/share/request-tracker3.4/lib/RT/User_Local.pm:618)
[] [debug]: UPDATED user rwalker from LDAP – $args is mystate
(/usr/local/share/request-tracker3.4/lib/RT/User_Local.pm:619)
[] [debug]: UPDATED user rwalker from LDAP – $key is WorkPhone
(/usr/local/share/request-tracker3.4/lib/RT/User_Local.pm:618)
[] [debug]: UPDATED user rwalker from LDAP – $args is myphone
(/usr/local/share/request-tracker3.4/lib/RT/User_Local.pm:619)
[] [debug]: UPDATED user rwalker from LDAP – $key is Zip
(/usr/local/share/request-tracker3.4/lib/RT/User_Local.pm:618)
[] [debug]: UPDATED user rwalker from LDAP – $args is myzip
(/usr/local/share/request-tracker3.4/lib/RT/User_Local.pm:619)
[] [debug]: UPDATED user rwalker from LDAP
(/usr/local/share/request-tracker3.4/lib/RT/User_Local.pm:623)

After this is finished, the database shows the old information still in
the database.

I am not really sure where to look on this, line 616-617 is

my $method = “Set$key”;
$self->$method($args{$key});

So I thought that there might be a function somewhere called SetCity .

~$ cd /usr/share/request-tracker3.4/
/usr/share/request-tracker3.4$ grep -rni SetCity *
lib/RT/User.pm:625:=head2 SetCity VALUE

After looking at that file, I wonder if my problem here is a problem
with DBIx::SearchBuilder … ?

dpkg -l libdbix-searchbuilder-perl returns me 1.38-1 (We are running
Ubuntu Dapper Drake, would love to see an install guide for RT3.6 on
Dapper Drake!)

Thanks in advance for any ideas.

Rob

Rob Walker wrote:

I set up the LDAP overlay. To be specific, I set up
LdapUserLocalOverlay from the wiki. It is doing autocreate for our
users just fine. It is also working (“username/password is incorrect”)
when we set the user to “disabled” in LDAP.

However, when I change an attribute for the user (I am using City for my
test), RT doesn’t update the city field in my database.

Thanks in advance for any ideas.

I was wrong. It works. It looks like you have to either

  1. Give AD a few minutes to start serving up the new data

or

  1. Give RT some time to get it.

Either way, my AD changes are propagating to RT now.

Rob