From 43cb63667d6ddf2bc4a39f4ad1e1910ed5d0abc8 Mon Sep 17 00:00:00 2001 From: Andrew Donald Kennedy Date: Sat, 31 Jul 2010 23:46:15 +0000 Subject: QPID-2668: Improve PlainPasswordPrincipalDatabase lock management Applied patch from Sorin Suciu git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk/qpid@981103 13f79535-47bb-0310-9956-ffa450edef68 --- .../PlainPasswordFilePrincipalDatabase.java | 41 ++++++++-------------- 1 file changed, 15 insertions(+), 26 deletions(-) (limited to 'java') diff --git a/java/broker/src/main/java/org/apache/qpid/server/security/auth/database/PlainPasswordFilePrincipalDatabase.java b/java/broker/src/main/java/org/apache/qpid/server/security/auth/database/PlainPasswordFilePrincipalDatabase.java index 8665e579ba..cea4e90c31 100644 --- a/java/broker/src/main/java/org/apache/qpid/server/security/auth/database/PlainPasswordFilePrincipalDatabase.java +++ b/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) -- cgit v1.2.1