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; + } }