[
https://issues.apache.org/jira/browse/DIRSERVER-1750?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13476500#comment-13476500
]
Carlo Accorsi commented on DIRSERVER-1750:
------------------------------------------
This functionaity is working in the build we made from the trunk on Tuesday
2012-10-09. Thanks!
> Change password attribute with policy throws exception and does not complete
> operation
> --------------------------------------------------------------------------------------
>
> Key: DIRSERVER-1750
> URL: https://issues.apache.org/jira/browse/DIRSERVER-1750
> Project: Directory ApacheDS
> Issue Type: Bug
> Components: core
> Affects Versions: 2.0.0-M8
> Environment: Win32, Java 1.6.0_32
> Reporter: Carlo Accorsi
> Priority: Critical
>
> Hi, we're receiving an exception when a user tries to reset their own expired
> password on a grace login.
> Relevant password policy fields:
> ads-maxage=600 // expire password in 5 mins
> ads-passwordmustchange=TRUE // causes pwdReset=TRUE on entry when ADMIN, not
> USER changes
> ads-graceauthnlimit=5 // how many logins are permitted once password expires.
> Once the password has expired (as defined above) a subsequent bind as the
> user, will cause a pwdGraceUseTime attribute to be set with time stamp of the
> login. This works great. When the field is present, we are able to get the #
> of gracelogins that remain from the response controls.
> The issue occurs when at least one pwdGraceUseTime field set and binding as
> themselves, they try to set the password. The password is set correctly
> (becasue logging in later with the new password works) however an exception
> thrown (below) while trying to remove the field pwdReset. This field is not
> and should not be there in this case as the password was only expired, it was
> not reset by an admin. The code seems to be looking to delete this field and
> probably the grace login fields afterwards but does not. Perhaps the code to
> remove the field could check for NoSuchAttributeException and continue as if
> it were deleted. Thanks!!
> Here is the code snip.
> ModificationItem[] mods = new ModificationItem[1];
> mods[0] = new ModificationItem(LdapContext.REPLACE_ATTRIBUTE,
> new BasicAttribute("userPassword", strValue));
> try {
> // set control in here.
> ctx.setRequestControls(new Control[]{new
> PasswordPolicyRqControl()});
> ctx.modifyAttributes(strDn, mods);
> } catch (InvalidAttributeValueException iae){
> iae.printStackTrace();
> } catch (NoSuchAttributeException nae){
> nae.printStackTrace();
> }
> Exception
> javax.naming.directory.NoSuchAttributeException: [LDAP: error code 16 -
> NO_SUCH_ATTRIBUTE: failed for MessageType : MODIFY_REQUEST
> Message ID : 2
> Modify Request
> Object : 'uid=1307087872588,ou=users,ou=int,o=cpro'
> Modification[0]
> Operation : replace
> Modification
> userPassword: '0x23 0x62 0x6F 0x73 0x74 0x6F 0x6E 0x31 '
> org.apache.directory.shared.ldap.model.message.modifyrequesti...@b95d19f4org.apache.directory.shared.ldap.extras.controls.ppolicy.PasswordPolicyImpl@e4d0cd
> ManageDsaITImpl Control
> Type OID : '2.16.840.1.113730.3.4.2'
> Criticality : 'false'
> '
> : ERR_55 Trying to remove an non-existant attribute: ATTRIBUTE_TYPE (
> 1.3.6.1.4.1.42.2.27.8.1.22
> NAME 'pwdReset'
> DESC The indication that the password has been reset
> EQUALITY booleanMatch
> SYNTAX 1.3.6.1.4.1.1466.115.121.1.7
> SINGLE-VALUE
> USAGE directoryOperation
> )
> ]; remaining name 'uid=1307087872588,ou=users,ou=int,o=cpro'
> at com.sun.jndi.ldap.LdapCtx.mapErrorCode(LdapCtx.java:3062)
> at com.sun.jndi.ldap.LdapCtx.processReturnCode(LdapCtx.java:2987)
> at com.sun.jndi.ldap.LdapCtx.processReturnCode(LdapCtx.java:2794)
> at com.sun.jndi.ldap.LdapCtx.c_modifyAttributes(LdapCtx.java:1455)
> at
> com.sun.jndi.toolkit.ctx.ComponentDirContext.p_modifyAttributes(ComponentDirContext.java:255)
> at
> com.sun.jndi.toolkit.ctx.PartialCompositeDirContext.modifyAttributes(PartialCompositeDirContext.java:172)
> at
> com.sun.jndi.toolkit.ctx.PartialCompositeDirContext.modifyAttributes(PartialCompositeDirContext.java:161)
> at
> javax.naming.directory.InitialDirContext.modifyAttributes(InitialDirContext.java:148)
> at
> com.ibsamericainc.dir.DirectoryAdapterConnection.setAttribute(DirectoryAdapterConnection.java:367)
> at
> com.ibsamericainc.dir.DirectoryAdapterPassword.setUpdatePassword(DirectoryAdapterPassword.java:277)
> at
> com.ibsamericainc.dir.DirectoryAdapter.setUpdateUserPassword(DirectoryAdapter.java:248)
> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> at
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
> at
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
> at java.lang.reflect.Method.invoke(Method.java:597)
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira