diff options
author | Robert Gemmell <robbie@apache.org> | 2009-08-17 15:53:10 +0000 |
---|---|---|
committer | Robert Gemmell <robbie@apache.org> | 2009-08-17 15:53:10 +0000 |
commit | c6838c9481abaa164f5e839c6f718c616437edf1 (patch) | |
tree | e3f21557ca7a0fb980b67ea10eef25a5d1880b3f | |
parent | b49c3877b8c0060d56e7c0f875e71248418e7964 (diff) | |
download | qpid-python-c6838c9481abaa164f5e839c6f718c616437edf1.tar.gz |
QPID-2042: update the save process for the access rights file. Check if the rename/move succeeds, and if not attempt a copy instead
git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk@805019 13f79535-47bb-0310-9956-ffa450edef68
-rw-r--r-- | qpid/java/broker/src/main/java/org/apache/qpid/server/security/access/management/AMQUserManagementMBean.java | 39 |
1 files changed, 34 insertions, 5 deletions
diff --git a/qpid/java/broker/src/main/java/org/apache/qpid/server/security/access/management/AMQUserManagementMBean.java b/qpid/java/broker/src/main/java/org/apache/qpid/server/security/access/management/AMQUserManagementMBean.java index 25c3754462..b6d2c3ab67 100644 --- a/qpid/java/broker/src/main/java/org/apache/qpid/server/security/access/management/AMQUserManagementMBean.java +++ b/qpid/java/broker/src/main/java/org/apache/qpid/server/security/access/management/AMQUserManagementMBean.java @@ -27,6 +27,7 @@ import org.apache.qpid.server.management.AMQManagedObject; import org.apache.qpid.server.management.MBeanInvocationHandlerImpl; import org.apache.qpid.server.security.auth.database.PrincipalDatabase; import org.apache.qpid.server.security.auth.sasl.UsernamePrincipal; +import org.apache.qpid.util.FileUtils; import org.apache.log4j.Logger; import org.apache.commons.configuration.ConfigurationException; @@ -439,16 +440,44 @@ public class AMQUserManagementMBean extends AMQManagedObject implements UserMana // Create temporary file File tmp = File.createTempFile(_accessFile.getName(), ".tmp"); + tmp.deleteOnExit(); FileOutputStream output = new FileOutputStream(tmp); _accessRights.store(output, "Generated by AMQUserManagementMBean Console : Last edited by user:" + getCurrentJMXUser()); output.close(); - // Rename new file to main file - tmp.renameTo(_accessFile); - - // delete tmp - tmp.delete(); + // Swap temp file to main rights file. + File old = new File(_accessFile.getAbsoluteFile() + ".old"); + if (old.exists()) + { + old.delete(); + } + + try + { + if(!_accessFile.renameTo(old)) + { + FileUtils.copyCheckedEx(_accessFile, old); + } + } + catch (IOException e) + { + _logger.warn("Could not backup the existing management rights file: " +e); + throw new IOException("Could not backup the existing management rights file: " +e); + } + + try + { + if(!tmp.renameTo(_accessFile)) + { + FileUtils.copyCheckedEx(tmp, _accessFile); + } + } + catch (IOException e) + { + _logger.warn("Could not copy the new management rights file into place: " +e); + throw new IOException("Could not copy the new management rights file into place" +e); + } } finally { |