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