IDSync 6.0 Bug with updating passwords

I have noticed this problem with IDsync, does anyone know if this is a bug or feature? and if there is a workaround? Here is the bug and steps to reproduce it.

-User has a SSHA hash in DS using IDSync 6.0, aka, not his first time logging in to DS

-User changes password in AD, dsvalidate is set to "true", so the password should be updated.

-If user binds to DS with his new password, the hash is updated and dsvalidate is removed. This all works perfectly.

-But, if the user binds to DS and uses his old password, DS returns a successful bind(assuming it checks the current hash...therefore never looking to AD). This isn't horrible, but the problem is it also removes the dsvalidate field. This causes the passwords to be out of sync unless dsvalidate is set manually again.

I think DS should look to dsvalidate before it checks against the hash, and therefore should know that the current hash is DS is invalid and should look to AD no matter what. I am not sure why when the IDsync plugin sets dsvalidate to true, that it doesn't also invalidate the current hash?

This is causing problems because users have password saved in their email clients and the first time the log in after changing there AD password, that old password is attempted by email and although it works, then their passwords are out of sync.

Any incite or help is appreciated.

-Nick

[1415 byte] By [Nick1472a] at [2007-11-27 8:20:29]
# 1
Do you notice this with any other hashing ? Which version of DS are you using? Meanwhile, let me have a look at this.
sinha_ka at 2007-7-12 20:08:48 > top of Java-index,Web & Directory Servers,Directory Servers...
# 2

Sinha,

I haven't tried it with any other hashing, but I can give it a try and let you know. I would guess that it would still exist because it seems like a logic problem in the code to me.

I am running DS 6.0 and IDSync6.0. I was previously running DS 5.2 with IDsync 1.1 2004Q3 and the problem existed there as well.

Thanks for looking into this,

Nick

Nick1472a at 2007-7-12 20:08:48 > top of Java-index,Web & Directory Servers,Directory Servers...
# 3
Our investigation is on. We will update you shortly.
sinha_ka at 2007-7-12 20:08:48 > top of Java-index,Web & Directory Servers,Directory Servers...
# 4

The DS plugin does look at the dspsvalidate first before doing any authentication with the DS. IMHO, you might see this error only when your plugin isn't working somehow.

Could you do a netstat with your connector port to verify if the plugin is successfully connected? Also, could you paste the errors log of the Directory server being used for synchronizing the data?

sinha_ka at 2007-7-12 20:08:48 > top of Java-index,Web & Directory Servers,Directory Servers...
# 5

Sinha,

I set up the scenario and watched the logs and tried to grab as much as I could in sequential order. I know this probably won't help you debug my problem much, but I just wanted to give the a better idea of the order of event and show that the plug in was working successfully as well.

From Audit, Error and Access logs

Create New User:

time: 20070622105259

dn: cn=pass test,ou=***,dc=***

changetype: add

cn: pass test

sn: test

givenName: pass

displayName: pass test

uid: passtest

dspswuserlink:: EZKsz+oW0EewlJg3x2P/zw==

objectClass: dspswuser

objectClass: inetOrgPerson

objectClass: top

objectClass: organizationalPerson

objectClass: person

dspswloop: true

userPassword: {PSWSYNC}*ON-DEMAND*SYNCHRONIZATION*REQUIRED*

dspswvalidate: true

creatorsName: uid=pswconnector,dc=***

modifiersName: uid=pswconnector,dc=***

entrydn: cn=pass test,ou=***,dc=***

modifyTimestamp: 20070622145259Z

time: 20070622105300

dn: cn=pass test,ou=***,dc=***

delete: dspswloop

-

replace: modifiersname

modifiersname: uid=pswconnector,dc=***

replace: modifytimestamp

modifytimestamp: 20070622145300Z

Bind in for first time:

time: 20070622105300

dn: cn=pass test,ou=***,dc=***

changetype: modify

delete: dspswloop

-

replace: modifiersname

modifiersname: uid=pswconnector,dc=***

-

replace: modifytimestamp

modifytimestamp: 20070622145300Z

userPassword: {SSHA}rkOUETlMqRybQ9ALypk779g/gs//JSs57WxRDQ==

Change PW in AD:

time: 20070622110225

dn: cn=pass test,ou=***,dc=***

changetype: modify

replace: dspswvalidate

dspswvalidate: true

-

replace: dspswloop

dspswloop: true

-

replace: dspswloop

-

replace: modifiersname

modifiersname: uid=pswconnector,dc=***

-

replace: modifytimestamp

modifytimestamp: 20070622150225Z

-

[22/Jun/2007:11:02:25.595 -0400] FINE530 CNN101 **** "LDAP Modify Request: [REPLACE dspswvalidate: true] [REPLACE dspswloop: true] [REPLACE dspswloop: ] "

[22/Jun/2007:11:02:25.642 -0400] FINE530 CNN101 **** "Successfully modified user 'cn=pass test,ou=***,dc=***', action=Type: MODIFY SUL: MiscUsers {Data Attrs: [REPL dspswvalidate: true]}." (Action ID=CNN100-1134FA70F88-16, SN=7)

[22/Jun/2007:11:02:25.649 -0400] INFO530 CNN101 **** "Successfully modified user cn=pass test,ou=***,dc=***" (Action ID=CNN100-1134FA70F88-16, SN=8)

Bind With Old Password, Success: [note: hash does change, but it is a hash of old password and dsvalidate is not longer set]

[22/Jun/2007:11:03:49.684 -0400] INFO535 CNN101 **** "DS Plugin (SUBC100): on-demand validation has been successfully completed for 'cn=pass test,ou=***,dc=***' by authenticating the user against ldap://****:389"

dn: cn=pass test,ou=***,dc=***

dspswvalidate: [no value]

userPassword: {SSHA}GVKtDoIEbo1XQIFqPO2S70StyeemerM1D3DZaA==

Now try new password:

Fail,

dn: cn=pass test,ou=***,dc=***

pwdfailuretime: 20070622151105.0000001603Z

Reset Password again:

time: 20070622111741

dn: cn=pass test,ou=***,dc=***

changetype: modify

replace: dspswvalidate

dspswvalidate: true

-

replace: dspswloop

dspswloop: true

-

replace: dspswloop

-

replace: modifiersname

modifiersname: uid=pswconnector,dc=***

-

replace: modifytimestamp

modifytimestamp: 20070622151741Z

[22/Jun/2007:11:17:42.149 -0400] FINE527 CNN101 **** "LDAP Modify Request: [REPLACE dspswvalidate: true] [REPLACE dspswloop: true] [REPLACE dspswloop: ] "

[22/Jun/2007:11:17:42.202 -0400] FINE527 CNN101 **** "Successfully modified user 'cn=pass test,ou=***,dc=***', action=Type: MODIFY SUL: MiscUsers {Data Attrs: [REPL dspswvalidate: true]}." (Action ID=CNN100-1134FA70F88-17, SN=7)

[22/Jun/2007:11:17:42.206 -0400] INFO527 CNN101 **** "Successfully modified user cn=pass test,ou=***,dc=***" (Action ID=CNN100-1134FA70F88-17, SN=8)

Log in with New Password again to verify things also work as they should

[22/Jun/2007:11:20:03.889 -0400] INFO535 CNN101 **** "DS Plugin (SUBC100): on-demand validation has been successfully completed for 'cn=pass test,ou=***,dc=***' by authenticating the user against ldap://****:389"

dn: cn=pass test,ou=***,dc=***

userpassword: {SSHA}r8oWXeADpQQc3MSPwVyiBlTdauMRbgVt1zYXRQ==

Hopefully this will help. Let me know what you think or if you want me to try anything else.

Thanks, Nick

Nick1472a at 2007-7-12 20:08:48 > top of Java-index,Web & Directory Servers,Directory Servers...
# 6

Bind With Old Password, Success: [note: hash does change, but it is a hash of old password and dsvalidate is not longer set]

[22/Jun/2007:11:03:49.684 -0400] INFO 535 CNN101 **** "DS Plugin (SUBC100): on-demand validation has been successfully completed for 'cn=pass test,ou=***,dc=***' by authenticating the user against ldap://****:389"

dn: cn=pass test,ou=***,dc=***

dspswvalidate: [no value]

userPassword: {SSHA}GVKtDoIEbo1XQIFqPO2S70StyeemerM1D3DZaA==

>> It seems that the plugin is somehow skipping the on-demand though it's printing the message ( I guess that the ldap://**:389 points to your AD setup..right?).

Other interesting thing to note is that the dspswvalidate isn't getting deleted in the case above. The plugin is just resetting it value. I would like to know if you have any special settings in DS in terms of password policy, history or anything like that.

It would be of great help if you can get us a reproducible testcase with all the steps clearly mentioned.

sinha_ka at 2007-7-12 20:08:48 > top of Java-index,Web & Directory Servers,Directory Servers...