One more comment
This problem only occurred in the TestCredentialHandler testcase. I couldn't reproduce 
it from within the portal!

[EMAIL PROTECTED] wrote:

ate         2004/10/19 14:07:55

Modified: components/security/src/java/org/apache/jetspeed/security/spi/impl
DefaultCredentialHandler.java
Log:
Fix/workaround for a strange ojb bug?
Changing a password was implemented by removing the old credential and adding a new one.
But, OJB didn't remove the old credential. And when deleting the principal it 'forgot' to delete this child record leading to child found exceptions.
Solved by doing an actual update on the persistent credential.
Revision Changes Path
1.6 +17 -7 jakarta-jetspeed-2/components/security/src/java/org/apache/jetspeed/security/spi/impl/DefaultCredentialHandler.java
Index: DefaultCredentialHandler.java
===================================================================
RCS file: /home/cvs/jakarta-jetspeed-2/components/security/src/java/org/apache/jetspeed/security/spi/impl/DefaultCredentialHandler.java,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- DefaultCredentialHandler.java 18 Oct 2004 01:35:48 -0000 1.5
+++ DefaultCredentialHandler.java 19 Oct 2004 21:07:55 -0000 1.6
@@ -151,15 +151,25 @@
{
credentials = new ArrayList();
}
+ if (null != oldPwdCredential)
{
InternalCredential oldInternalCredential = new InternalCredentialImpl(internalUser.getPrincipalId(),
new String(oldPwdCredential.getPassword()), type, oldPwdCredential.getClass().getName());
- if (credentials.contains(oldInternalCredential))
+ Iterator iter = credentials.iterator();
+ boolean updated = false;
+ + while (iter.hasNext())
{
- credentials.remove(oldInternalCredential);
+ InternalCredential credential = (InternalCredential) iter.next();
+ if ( credential.equals(oldInternalCredential))
+ {
+ credential.setValue(new String(newPwdCredential.getPassword()));
+ updated = true;
+ break;
+ }
}
- else
+ if (!updated)
{
// supplied PasswordCredential not defined for this user
throw new SecurityException(SecurityException.INVALID_PASSWORD);
@@ -181,11 +191,11 @@
throw new SecurityException(SecurityException.PASSWORD_REQUIRED);
}
}
- } + } + InternalCredential newInternalCredential = new InternalCredentialImpl(internalUser.getPrincipalId(),
+ new String(newPwdCredential.getPassword()), type, newPwdCredential.getClass().getName());
+ credentials.add(newInternalCredential);
}
- InternalCredential newInternalCredential = new InternalCredentialImpl(internalUser.getPrincipalId(),
- new String(newPwdCredential.getPassword()), type, newPwdCredential.getClass().getName());
- credentials.add(newInternalCredential);
internalUser.setModifiedDate(new Timestamp(System.currentTimeMillis()));
internalUser.setCredentials(credentials);
// Set the user with the new credentials.


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]






---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



Reply via email to