You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by re...@apache.org on 2021/06/04 14:34:10 UTC

[tomcat] branch 10.0.x updated: Fix getPrincipal logic

This is an automated email from the ASF dual-hosted git repository.

remm pushed a commit to branch 10.0.x
in repository https://gitbox.apache.org/repos/asf/tomcat.git


The following commit(s) were added to refs/heads/10.0.x by this push:
     new 0425971  Fix getPrincipal logic
0425971 is described below

commit 0425971a438bc51d6bbced32a2c0c6de2a4879ee
Author: remm <re...@apache.org>
AuthorDate: Fri Jun 4 16:28:59 2021 +0200

    Fix getPrincipal logic
    
    Also improve tests.
---
 .../apache/catalina/realm/UserDatabaseRealm.java   | 27 +++++++++++-----------
 .../catalina/realm/TestGenericPrincipal.java       |  7 ------
 .../catalina/users/MemoryUserDatabaseTests.java    | 26 +++++++++++++++++++++
 3 files changed, 40 insertions(+), 20 deletions(-)

diff --git a/java/org/apache/catalina/realm/UserDatabaseRealm.java b/java/org/apache/catalina/realm/UserDatabaseRealm.java
index bb27099..6c5f474 100644
--- a/java/org/apache/catalina/realm/UserDatabaseRealm.java
+++ b/java/org/apache/catalina/realm/UserDatabaseRealm.java
@@ -148,7 +148,16 @@ public class UserDatabaseRealm extends RealmBase {
      */
     @Override
     protected Principal getPrincipal(String username) {
-        return new UserDatabasePrincipal(username);
+        UserDatabase database = getUserDatabase();
+        if (database == null) {
+            return null;
+        }
+        User user = database.findUser(username);
+        if (user == null) {
+            return null;
+        } else {
+            return new UserDatabasePrincipal(user);
+        }
     }
 
 
@@ -225,21 +234,13 @@ public class UserDatabaseRealm extends RealmBase {
         private static final long serialVersionUID = 1L;
         private final User user;
 
-        public UserDatabasePrincipal(String username) {
-            super(username);
-            UserDatabase database = getUserDatabase();
-            if (database == null) {
-                user = null;
-            } else {
-                user = database.findUser(username);
-            }
+        public UserDatabasePrincipal(User user) {
+            super(user.getName());
+            this.user = user;
         }
 
         @Override
         public String[] getRoles() {
-            if (user == null) {
-                return super.getRoles();
-            }
             Set<String> roles = new HashSet<>();
             Iterator<Role> uroles = user.getRoles();
             while (uroles.hasNext()) {
@@ -266,7 +267,7 @@ public class UserDatabaseRealm extends RealmBase {
                 return false;
             }
             UserDatabase database = getUserDatabase();
-            if (user == null || database == null) {
+            if (database == null) {
                 return super.hasRole(role);
             }
             Role dbrole = database.findRole(role);
diff --git a/test/org/apache/catalina/realm/TestGenericPrincipal.java b/test/org/apache/catalina/realm/TestGenericPrincipal.java
index b2ac92f..5a99415 100644
--- a/test/org/apache/catalina/realm/TestGenericPrincipal.java
+++ b/test/org/apache/catalina/realm/TestGenericPrincipal.java
@@ -56,13 +56,6 @@ public class TestGenericPrincipal {
         doTest(gpIn);
     }
 
-    @Test
-    public void testSerialize04() throws ClassNotFoundException, IOException {
-        UserDatabaseRealm realm = new UserDatabaseRealm();
-        GenericPrincipal gpIn = realm.new UserDatabasePrincipal(USER);
-        doTest(gpIn);
-    }
-
     private void doTest(GenericPrincipal gpIn)
             throws ClassNotFoundException, IOException {
         GenericPrincipal gpOut = serializeAndDeserialize(gpIn);
diff --git a/test/org/apache/catalina/users/MemoryUserDatabaseTests.java b/test/org/apache/catalina/users/MemoryUserDatabaseTests.java
index 237e500..f8e168f 100644
--- a/test/org/apache/catalina/users/MemoryUserDatabaseTests.java
+++ b/test/org/apache/catalina/users/MemoryUserDatabaseTests.java
@@ -17,8 +17,12 @@
 package org.apache.catalina.users;
 
 import java.io.BufferedWriter;
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
 import java.io.File;
 import java.io.FileWriter;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
 import java.security.Principal;
 import java.util.Arrays;
 import java.util.HashSet;
@@ -30,6 +34,8 @@ import org.junit.BeforeClass;
 import org.junit.Test;
 
 import org.apache.catalina.User;
+import org.apache.catalina.realm.GenericPrincipal;
+import org.apache.catalina.realm.UserDatabaseRealm;
 
 public class MemoryUserDatabaseTests {
     private static File TEST_FILE = new File(System.getProperty("java.io.tmpdir"), "tomcat-users.xml");
@@ -180,6 +186,26 @@ public class MemoryUserDatabaseTests {
         assertPrincipalNames(new String[] { "testgroup", "othergroup"}, user.getGroups());
     }
 
+    @Test
+    public void testSerializePrincipal()
+        throws Exception {
+        UserDatabaseRealm realm = new UserDatabaseRealm();
+        User user = db.findUser("admin");
+        GenericPrincipal gpIn = realm.new UserDatabasePrincipal(user);
+        ByteArrayOutputStream bos = new ByteArrayOutputStream();
+        ObjectOutputStream oos = new ObjectOutputStream(bos);
+        oos.writeObject(gpIn);
+
+        byte[] data = bos.toByteArray();
+
+        ByteArrayInputStream bis = new ByteArrayInputStream(data);
+        ObjectInputStream ois = new ObjectInputStream(bis);
+        GenericPrincipal gpOut =  (GenericPrincipal) ois.readObject();
+
+        Assert.assertEquals("admin", gpOut.getName());
+        assertPrincipalNames(gpOut.getRoles(), user.getRoles());
+    }
+
     private void assertPrincipalNames(String[] expectedNames, Iterator<? extends Principal> i) {
         HashSet<String> names = new HashSet<>(Arrays.asList(expectedNames));
 

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