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