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 <[email protected]>
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: [email protected]
For additional commands, e-mail: [email protected]