Index: MemoryUserDatabase.java
===================================================================
RCS file: /home/cvspublic/jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/users/MemoryUserDatabase.java,v
retrieving revision 1.2
diff -u -r1.2 MemoryUserDatabase.java
--- MemoryUserDatabase.java 14 Aug 2002 19:36:17 -0000 1.2
+++ MemoryUserDatabase.java 31 Dec 2003 13:43:29 -0000
@@ -93,7 +93,7 @@
*/
public class MemoryUserDatabase implements UserDatabase {
-
+
// ----------------------------------------------------------- Constructors
@@ -177,6 +177,11 @@
* user name.
*/
protected HashMap users = new HashMap();
+
+ /**
+ * database modified ?
+ */
+ private boolean modified = false;
// ------------------------------------------------------------- Properties
@@ -287,6 +292,7 @@
synchronized (groups) {
groups.put(group.getGroupname(), group);
}
+ modified = true;
return (group);
}
@@ -304,6 +310,7 @@
synchronized (roles) {
roles.put(role.getRolename(), role);
}
+ modified = true;
return (role);
}
@@ -323,6 +330,7 @@
synchronized (users) {
users.put(user.getUsername(), user);
}
+ modified = true;
return (user);
}
@@ -426,6 +434,7 @@
}
}
+ modified = false;
}
@@ -445,6 +454,7 @@
}
groups.remove(group.getGroupname());
}
+ modified = true;
}
@@ -469,6 +479,7 @@
}
roles.remove(role.getRolename());
}
+ modified = true;
}
@@ -483,6 +494,7 @@
synchronized (users) {
users.remove(user.getUsername());
}
+ modified = true;
}
@@ -494,92 +506,94 @@
* @exception Exception if any exception is thrown during saving
*/
public void save() throws Exception {
-
- // Write out contents to a temporary file
- File fileNew = new File(pathnameNew);
- if (!fileNew.isAbsolute()) {
- fileNew =
- new File(System.getProperty("catalina.base"), pathnameNew);
- }
- PrintWriter writer = null;
- try {
-
- // Configure our PrintWriter
- FileOutputStream fos = new FileOutputStream(fileNew);
- OutputStreamWriter osw = new OutputStreamWriter(fos, "UTF8");
- writer = new PrintWriter(osw);
-
- // Print the file prolog
- writer.println("");
- writer.println("");
-
- // Print entries for each defined role, group, and user
- Iterator values = null;
- values = getRoles();
- while (values.hasNext()) {
- writer.print(" ");
- writer.println(values.next());
- }
- values = getGroups();
- while (values.hasNext()) {
- writer.print(" ");
- writer.println(values.next());
- }
- values = getUsers();
- while (values.hasNext()) {
- writer.print(" ");
- writer.println(values.next());
- }
-
- // Print the file epilog
- writer.println("");
-
- // Check for errors that occurred while printing
- if (writer.checkError()) {
- writer.close();
- fileNew.delete();
- throw new IOException
- (sm.getString("memoryUserDatabase.writeException",
- fileNew.getAbsolutePath()));
- }
- writer.close();
- } catch (IOException e) {
- if (writer != null) {
- writer.close();
- }
- fileNew.delete();
- throw e;
- }
-
- // Perform the required renames to permanently save this file
- File fileOld = new File(pathnameNew);
- if (!fileOld.isAbsolute()) {
- fileOld =
- new File(System.getProperty("catalina.base"), pathnameOld);
- }
- fileOld.delete();
- File fileOrig = new File(pathname);
- if (!fileOrig.isAbsolute()) {
- fileOrig =
- new File(System.getProperty("catalina.base"), pathname);
- }
- if (fileOrig.exists()) {
- fileOld.delete();
- if (!fileOrig.renameTo(fileOld)) {
- throw new IOException
- (sm.getString("memoryUserDatabase.renameOld",
- fileOld.getAbsolutePath()));
- }
- }
- if (!fileNew.renameTo(fileOrig)) {
- if (fileOld.exists()) {
- fileOld.renameTo(fileOrig);
- }
- throw new IOException
- (sm.getString("memoryUserDatabase.renameNew",
- fileOrig.getAbsolutePath()));
- }
- fileOld.delete();
+ if (modified){
+ // Write out contents to a temporary file
+ File fileNew = new File(pathnameNew);
+ if (!fileNew.isAbsolute()) {
+ fileNew =
+ new File(System.getProperty("catalina.base"), pathnameNew);
+ }
+ PrintWriter writer = null;
+ try {
+
+ // Configure our PrintWriter
+ FileOutputStream fos = new FileOutputStream(fileNew);
+ OutputStreamWriter osw = new OutputStreamWriter(fos, "UTF8");
+ writer = new PrintWriter(osw);
+
+ // Print the file prolog
+ writer.println("");
+ writer.println("");
+
+ // Print entries for each defined role, group, and user
+ Iterator values = null;
+ values = getRoles();
+ while (values.hasNext()) {
+ writer.print(" ");
+ writer.println(values.next());
+ }
+ values = getGroups();
+ while (values.hasNext()) {
+ writer.print(" ");
+ writer.println(values.next());
+ }
+ values = getUsers();
+ while (values.hasNext()) {
+ writer.print(" ");
+ writer.println(values.next());
+ }
+
+ // Print the file epilog
+ writer.println("");
+
+ // Check for errors that occurred while printing
+ if (writer.checkError()) {
+ writer.close();
+ fileNew.delete();
+ throw new IOException
+ (sm.getString("memoryUserDatabase.writeException",
+ fileNew.getAbsolutePath()));
+ }
+ writer.close();
+ } catch (IOException e) {
+ if (writer != null) {
+ writer.close();
+ }
+ fileNew.delete();
+ throw e;
+ }
+
+ // Perform the required renames to permanently save this file
+ File fileOld = new File(pathnameNew);
+ if (!fileOld.isAbsolute()) {
+ fileOld =
+ new File(System.getProperty("catalina.base"), pathnameOld);
+ }
+ fileOld.delete();
+ File fileOrig = new File(pathname);
+ if (!fileOrig.isAbsolute()) {
+ fileOrig =
+ new File(System.getProperty("catalina.base"), pathname);
+ }
+ if (fileOrig.exists()) {
+ fileOld.delete();
+ if (!fileOrig.renameTo(fileOld)) {
+ throw new IOException
+ (sm.getString("memoryUserDatabase.renameOld",
+ fileOld.getAbsolutePath()));
+ }
+ }
+ if (!fileNew.renameTo(fileOrig)) {
+ if (fileOld.exists()) {
+ fileOld.renameTo(fileOrig);
+ }
+ throw new IOException
+ (sm.getString("memoryUserDatabase.renameNew",
+ fileOrig.getAbsolutePath()));
+ }
+ fileOld.delete();
+ modified = false;
+ }
}