summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobert Gemmell <robbie@apache.org>2009-08-17 15:53:10 +0000
committerRobert Gemmell <robbie@apache.org>2009-08-17 15:53:10 +0000
commitc6838c9481abaa164f5e839c6f718c616437edf1 (patch)
treee3f21557ca7a0fb980b67ea10eef25a5d1880b3f
parentb49c3877b8c0060d56e7c0f875e71248418e7964 (diff)
downloadqpid-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.java39
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
{