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 | 1a2b687475a0dec4c6e1932f30f064538b0368e8 (patch) | |
| tree | dd10c679bcad6ae3ae8ffbc8fa3a3c65143e2f7b /java | |
| parent | 6f295e7dcde960d16daab818635c25558510e9c8 (diff) | |
| download | qpid-python-1a2b687475a0dec4c6e1932f30f064538b0368e8.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/qpid@805019 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'java')
| -rw-r--r-- | 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/java/broker/src/main/java/org/apache/qpid/server/security/access/management/AMQUserManagementMBean.java b/java/broker/src/main/java/org/apache/qpid/server/security/access/management/AMQUserManagementMBean.java index 25c3754462..b6d2c3ab67 100644 --- a/java/broker/src/main/java/org/apache/qpid/server/security/access/management/AMQUserManagementMBean.java +++ b/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 { |
