You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by sc...@apache.org on 2022/08/03 17:31:12 UTC

[tomcat] branch main updated: Move logic to export MemoryUserDatabase to XML to be completely inside MemoryUserDatabase.save().

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-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org


Re: [tomcat] branch main updated: Move logic to export MemoryUserDatabase to XML to be completely inside MemoryUserDatabase.save().

Posted by Han Li <ao...@gmail.com>.

> 2022年8月4日 01:31,schultz@apache.org 写道:
> 
> 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)

Missing a </fix> tag.

Han.

>     </changelog>
>   </subsection>
>   <subsection name="Coyote">
> 
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
> For additional commands, e-mail: dev-help@tomcat.apache.org
> 


---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org