From e4eb19be3408a137d08942feddd569f8cf70ce73 Mon Sep 17 00:00:00 2001 From: Marek Goldmann <mgoldman@redhat.com> Date: Tue, 17 Apr 2012 13:56:43 +0200 Subject: [PATCH] [AS7-4536] add-user.sh mangles permissions of mgmt-users.properties --- .../management/security/PropertiesFileLoader.java | 42 +++++++++++++--------- 1 file changed, 25 insertions(+), 17 deletions(-) diff --git a/domain-management/src/main/java/org/jboss/as/domain/management/security/PropertiesFileLoader.java b/domain-management/src/main/java/org/jboss/as/domain/management/security/PropertiesFileLoader.java index 38737cb..9c4bad9 100644 --- a/domain-management/src/main/java/org/jboss/as/domain/management/security/PropertiesFileLoader.java +++ b/domain-management/src/main/java/org/jboss/as/domain/management/security/PropertiesFileLoader.java @@ -38,7 +38,9 @@ import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.nio.charset.Charset; +import java.util.ArrayList; import java.util.Arrays; +import java.util.List; import java.util.Properties; import static org.jboss.as.domain.management.DomainManagementLogger.ROOT_LOGGER; @@ -122,28 +124,36 @@ public abstract class PropertiesFileLoader { return properties; } + /** + * Saves changes in properties file. It reads the property file into memory, + * modifies it and saves it back to the file. + * + * @throws IOException + */ public synchronized void persistProperties() throws IOException { Properties toSave = (Properties) properties.clone(); - File backup = new File(propertiesFile.getCanonicalPath() + ".bak"); - if (backup.exists()) { - if (backup.delete() == false) { - throw new IllegalStateException("Unable to delete backup properties file."); - } - } + List<String> content = new ArrayList<String>(); + FileReader fileReader = new FileReader(propertiesFile); + BufferedReader bufferedFileReader = new BufferedReader(fileReader); - if (propertiesFile.renameTo(backup) == false) { - throw new IllegalStateException("Unable to backup properties file."); + // Read the properties file into memory + // Shouldn't be so bad - it's a small file + try { + String line = null; + int i = 0; + while ((line = bufferedFileReader.readLine()) != null) { + content.add(line); + } + } finally { + safeClose(bufferedFileReader); + safeClose(fileReader); } - FileReader fr = new FileReader(backup); - BufferedReader br = new BufferedReader(fr); - - BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(propertiesFile),"UTF8")); + BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(propertiesFile), "UTF8")); try { - String line; - while ((line = br.readLine()) != null) { + for (String line : content) { String trimmed = line.trim(); if (trimmed.startsWith("#")) { bw.append(line); @@ -172,12 +182,9 @@ public abstract class PropertiesFileLoader { } } finally { safeClose(bw); - safeClose(br); - safeClose(fr); } } - public static String escapeString(String name, char[] escapeArray) { Arrays.sort(escapeArray); for(int i = 0; i < name.length(); ++i) { @@ -198,6 +205,7 @@ public abstract class PropertiesFileLoader { } return name; } + private void safeClose(final Closeable c) { try { c.close();