Blob Blame History Raw
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 11/25] [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();
-- 
1.7.10.4