This is an automated email from the ASF dual-hosted git repository. schultz pushed a commit to branch main in repository https://gitbox.apache.org/repos/asf/tomcat.git
The following commit(s) were added to refs/heads/main by this push: new 9adbac09bc Move logic to export MemoryUserDatabase to XML to be completely inside MemoryUserDatabase.save(). 9adbac09bc is described below commit 9adbac09bc30e150ddfa6f0303c1b42e0b3160e9 Author: Christopher Schultz <ch...@christopherschultz.net> AuthorDate: Wed Aug 3 13:30:18 2022 -0400 Move logic to export MemoryUserDatabase to XML to be completely inside MemoryUserDatabase.save(). Also deprecated and discontinue usage of MemoryUSer, MemoryRole, and MemoryGroup classes. --- java/org/apache/catalina/users/MemoryGroup.java | 2 + java/org/apache/catalina/users/MemoryRole.java | 2 + java/org/apache/catalina/users/MemoryUser.java | 2 + .../apache/catalina/users/MemoryUserDatabase.java | 72 +++++++++++++++++++--- webapps/docs/changelog.xml | 6 +- 5 files changed, 73 insertions(+), 11 deletions(-) diff --git a/java/org/apache/catalina/users/MemoryGroup.java b/java/org/apache/catalina/users/MemoryGroup.java index dfd02c4dcf..9de5b959f9 100644 --- a/java/org/apache/catalina/users/MemoryGroup.java +++ b/java/org/apache/catalina/users/MemoryGroup.java @@ -28,7 +28,9 @@ import org.apache.tomcat.util.security.Escape; * * @author Craig R. McClanahan * @since 4.1 + * @deprecated Use {@link GenericGroup} instead. */ +@Deprecated public class MemoryGroup extends GenericGroup<MemoryUserDatabase> { diff --git a/java/org/apache/catalina/users/MemoryRole.java b/java/org/apache/catalina/users/MemoryRole.java index 3f0f5855c7..08f6cec0bf 100644 --- a/java/org/apache/catalina/users/MemoryRole.java +++ b/java/org/apache/catalina/users/MemoryRole.java @@ -26,7 +26,9 @@ import org.apache.tomcat.util.security.Escape; * * @author Craig R. McClanahan * @since 4.1 + * @deprecated Use {@link GenericRole} instead. */ +@Deprecated public class MemoryRole extends GenericRole<MemoryUserDatabase> { diff --git a/java/org/apache/catalina/users/MemoryUser.java b/java/org/apache/catalina/users/MemoryUser.java index f271fb2b3f..4d241fe6f5 100644 --- a/java/org/apache/catalina/users/MemoryUser.java +++ b/java/org/apache/catalina/users/MemoryUser.java @@ -27,7 +27,9 @@ import org.apache.tomcat.util.security.Escape; * * @author Craig R. McClanahan * @since 4.1 + * @deprecated Use {@link GenericUser} instead. */ +@Deprecated public class MemoryUser extends GenericUser<MemoryUserDatabase> { diff --git a/java/org/apache/catalina/users/MemoryUserDatabase.java b/java/org/apache/catalina/users/MemoryUserDatabase.java index f8bad5cb6f..b0aff0fdf8 100644 --- a/java/org/apache/catalina/users/MemoryUserDatabase.java +++ b/java/org/apache/catalina/users/MemoryUserDatabase.java @@ -45,6 +45,7 @@ import org.apache.tomcat.util.digester.Digester; import org.apache.tomcat.util.file.ConfigFileLoader; import org.apache.tomcat.util.file.ConfigurationSource; import org.apache.tomcat.util.res.StringManager; +import org.apache.tomcat.util.security.Escape; import org.xml.sax.Attributes; /** @@ -295,7 +296,7 @@ public class MemoryUserDatabase implements UserDatabase { throw new IllegalArgumentException(msg); } - MemoryGroup group = new MemoryGroup(this, groupname, description); + Group group = new GenericGroup(this, groupname, description, null); readLock.lock(); try { groups.put(group.getGroupname(), group); @@ -320,7 +321,7 @@ public class MemoryUserDatabase implements UserDatabase { throw new IllegalArgumentException(msg); } - MemoryRole role = new MemoryRole(this, rolename, description); + Role role = new GenericRole(this, rolename, description); readLock.lock(); try { roles.put(role.getRolename(), role); @@ -347,7 +348,7 @@ public class MemoryUserDatabase implements UserDatabase { throw new IllegalArgumentException(msg); } - MemoryUser user = new MemoryUser(this, username, password, fullName); + User user = new GenericUser(this, username, password, fullName, null, null); readLock.lock(); try { users.put(user.getUsername(), user); @@ -582,19 +583,70 @@ public class MemoryUserDatabase implements UserDatabase { // Print entries for each defined role, group, and user Iterator<?> values = null; values = getRoles(); - while (values.hasNext()) { - writer.print(" "); - writer.println(values.next()); + while(values.hasNext()) { + Role role = (Role)values.next(); + writer.print(" <role rolename=\""); + writer.print(Escape.xml(role.getRolename())); + writer.print("\""); + if(null != role.getDescription()) { + writer.print(" description=\""); + writer.print(Escape.xml(role.getDescription())); + writer.print("\""); + } + writer.println("/>"); } values = getGroups(); while (values.hasNext()) { - writer.print(" "); - writer.println(values.next()); + Group group = (Group)values.next(); + writer.print(" <group groupname=\""); + writer.print(Escape.xml(group.getName())); + writer.print("\""); + if(null != group.getDescription()) { + writer.print(" description=\""); + writer.print(Escape.xml(group.getDescription())); + writer.print("\""); + } + writer.print(" roles=\""); + for(Iterator<Role> roles=group.getRoles(); roles.hasNext(); ) { + Role role = roles.next(); + writer.print(Escape.xml(role.getRolename())); + if(roles.hasNext()) { + writer.print(','); + } + } + writer.println("\"/>"); } + values = getUsers(); while (values.hasNext()) { - writer.print(" "); - writer.println(((MemoryUser) values.next()).toXml()); + User user = (User)values.next(); + writer.print(" <user username=\""); + writer.print(Escape.xml(user.getUsername())); + writer.print("\" password=\""); + writer.print(Escape.xml(user.getPassword())); + writer.print("\""); + if(null != user.getFullName()) { + writer.print(" fullName=\""); + writer.print(Escape.xml(user.getFullName())); + writer.print("\""); + } + writer.print(" groups=\""); + for(Iterator<Group> groups=user.getGroups(); groups.hasNext(); ) { + Group group = groups.next(); + writer.print(Escape.xml(group.getGroupname())); + if(groups.hasNext()) { + writer.print(','); + } + } + writer.print("\" roles=\""); + for(Iterator<Role> roles=user.getRoles(); roles.hasNext(); ) { + Role role = roles.next(); + writer.print(Escape.xml(role.getRolename())); + if(roles.hasNext()) { + writer.print(','); + } + } + writer.print("\"/>"); } // Print the file epilog diff --git a/webapps/docs/changelog.xml b/webapps/docs/changelog.xml index 6a4cf674d0..ad63870d7c 100644 --- a/webapps/docs/changelog.xml +++ b/webapps/docs/changelog.xml @@ -120,9 +120,13 @@ specifiers are case insensitive. (markt) </fix> <fix> - Propertly-escape role and group information when writing + Properly-escape role and group information when writing MemoryUserDatabase to an XML file. (schultz) </fix> + <fix> + Move control of XML-export logic from individual support classes into + MemoryUserDatabase.save(). Deprecate and discontinue use of MemoryUser, + MemoryRole, and MemoryGroup classes. (schultz) </changelog> </subsection> <subsection name="Coyote"> --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org