summaryrefslogtreecommitdiff
path: root/qpid/java
diff options
context:
space:
mode:
authorAndrew Donald Kennedy <grkvlt@apache.org>2010-07-31 23:46:15 +0000
committerAndrew Donald Kennedy <grkvlt@apache.org>2010-07-31 23:46:15 +0000
commita814c3a19ab2357bc6ea3a7cae19ec10df3a254e (patch)
tree9e31084a0b9531414140abe0d23ed1d1fd99afb8 /qpid/java
parent99c468887842114c2932d9b675cd1daee1cf5b9b (diff)
downloadqpid-python-a814c3a19ab2357bc6ea3a7cae19ec10df3a254e.tar.gz
QPID-2668: Improve PlainPasswordPrincipalDatabase lock management
Applied patch from Sorin Suciu <ssuciu@gmail.com> git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk@981103 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'qpid/java')
-rw-r--r--qpid/java/broker/src/main/java/org/apache/qpid/server/security/auth/database/PlainPasswordFilePrincipalDatabase.java41
1 files changed, 15 insertions, 26 deletions
diff --git a/qpid/java/broker/src/main/java/org/apache/qpid/server/security/auth/database/PlainPasswordFilePrincipalDatabase.java b/qpid/java/broker/src/main/java/org/apache/qpid/server/security/auth/database/PlainPasswordFilePrincipalDatabase.java
index 8665e579ba..cea4e90c31 100644
--- a/qpid/java/broker/src/main/java/org/apache/qpid/server/security/auth/database/PlainPasswordFilePrincipalDatabase.java
+++ b/qpid/java/broker/src/main/java/org/apache/qpid/server/security/auth/database/PlainPasswordFilePrincipalDatabase.java
@@ -179,39 +179,28 @@ public class PlainPasswordFilePrincipalDatabase implements PrincipalDatabase
throw new AccountNotFoundException(principal.getName());
}
+ char[] orig = user.getPassword();
+ _userUpdate.lock();
try
{
- try
- {
- _userUpdate.lock();
- char[] orig = user.getPassword();
- user.setPassword(password);
+ user.setPassword(password);
- try
- {
- savePasswordFile();
- }
- catch (IOException e)
- {
- _logger.error("Unable to save password file, password change for user '" + principal + "' discarded");
- //revert the password change
- user.setPassword(orig);
- return false;
- }
- return true;
- }
- finally
- {
- if (_userUpdate.isHeldByCurrentThread())
- {
- _userUpdate.unlock();
- }
- }
+ savePasswordFile();
+
+ return true;
}
- catch (Exception e)
+ catch (IOException e)
{
+ _logger.error("Unable to save password file due to '"+e.getMessage()
+ +"', password change for user '" + principal + "' discarded");
+ //revert the password change
+ user.setPassword(orig);
return false;
}
+ finally
+ {
+ _userUpdate.unlock();
+ }
}
public boolean createPrincipal(Principal principal, char[] password)