From 2888d6a3401d0d415079f3e6385c420ff998d0ac Mon Sep 17 00:00:00 2001 From: Virtually Nick Date: Fri, 19 Jun 2020 21:40:00 -0400 Subject: [PATCH] GUACAMOLE-708: Handle implicit permissions where no entity exists. --- .../JDBCAuthenticationProviderService.java | 2 +- .../base/ModeledDirectoryObjectService.java | 24 ++++++++++++------- .../guacamole/auth/jdbc/user/UserService.java | 10 ++++---- 3 files changed, 21 insertions(+), 15 deletions(-) diff --git a/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-base/src/main/java/org/apache/guacamole/auth/jdbc/JDBCAuthenticationProviderService.java b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-base/src/main/java/org/apache/guacamole/auth/jdbc/JDBCAuthenticationProviderService.java index a1883be2f..3f54be811 100644 --- a/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-base/src/main/java/org/apache/guacamole/auth/jdbc/JDBCAuthenticationProviderService.java +++ b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-base/src/main/java/org/apache/guacamole/auth/jdbc/JDBCAuthenticationProviderService.java @@ -132,7 +132,7 @@ public class JDBCAuthenticationProviderService implements AuthenticationProvider user = userService.retrieveSkeletonUser(authenticationProvider, authenticatedUser); // If auto account creation is enabled, add user to DB. - if(environment.autoCreateAbsentAccounts()) { + if (environment.autoCreateAbsentAccounts()) { userService.createObject(new PrivilegedModeledAuthenticatedUser(user.getCurrentUser()), user); } diff --git a/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-base/src/main/java/org/apache/guacamole/auth/jdbc/base/ModeledDirectoryObjectService.java b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-base/src/main/java/org/apache/guacamole/auth/jdbc/base/ModeledDirectoryObjectService.java index f8d0e8a8a..db86d35f9 100644 --- a/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-base/src/main/java/org/apache/guacamole/auth/jdbc/base/ModeledDirectoryObjectService.java +++ b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-base/src/main/java/org/apache/guacamole/auth/jdbc/base/ModeledDirectoryObjectService.java @@ -410,9 +410,9 @@ public abstract class ModeledDirectoryObjectService getImplicitPermissions(ModeledAuthenticatedUser user, ModelType model) { + // Get the user model and check for an entity ID. + UserModel userModel = user.getUser().getModel(); + Integer entityId = userModel.getEntityID(); + if (entityId == null) + return Collections.emptyList(); + // Build list of implicit permissions Collection implicitPermissions = - new ArrayList(IMPLICIT_OBJECT_PERMISSIONS.length); + new ArrayList<>(IMPLICIT_OBJECT_PERMISSIONS.length); - UserModel userModel = user.getUser().getModel(); + for (ObjectPermission.Type permission : IMPLICIT_OBJECT_PERMISSIONS) { // Create model which grants this permission to the current user ObjectPermissionModel permissionModel = new ObjectPermissionModel(); - permissionModel.setEntityID(userModel.getEntityID()); + permissionModel.setEntityID(entityId); permissionModel.setType(permission); permissionModel.setObjectIdentifier(model.getIdentifier()); @@ -445,7 +451,7 @@ public abstract class ModeledDirectoryObjectService implicitPermissions = getImplicitPermissions(user, model); + if (implicitPermissions != null && !implicitPermissions.isEmpty()) + getPermissionMapper().insert(implicitPermissions); // Add any arbitrary attributes if (model.hasArbitraryAttributes()) diff --git a/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-base/src/main/java/org/apache/guacamole/auth/jdbc/user/UserService.java b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-base/src/main/java/org/apache/guacamole/auth/jdbc/user/UserService.java index e284205b2..50b9e4295 100644 --- a/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-base/src/main/java/org/apache/guacamole/auth/jdbc/user/UserService.java +++ b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-base/src/main/java/org/apache/guacamole/auth/jdbc/user/UserService.java @@ -52,7 +52,6 @@ import org.apache.guacamole.net.auth.ActivityRecord; import org.apache.guacamole.net.auth.AuthenticatedUser; import org.apache.guacamole.net.auth.AuthenticationProvider; import org.apache.guacamole.net.auth.User; -import org.apache.guacamole.net.auth.UserContext; import org.apache.guacamole.net.auth.credentials.CredentialsInfo; import org.apache.guacamole.net.auth.permission.ObjectPermission; import org.apache.guacamole.net.auth.permission.ObjectPermissionSet; @@ -297,8 +296,9 @@ public class UserService extends ModeledDirectoryObjectService getImplicitPermissions(ModeledAuthenticatedUser user, UserModel model) { - // Get original set of implicit permissions - Collection implicitPermissions = super.getImplicitPermissions(user, model); + // Get original set of implicit permissions and make a copy + Collection implicitPermissions = + new ArrayList<>(super.getImplicitPermissions(user, model)); // Grant implicit permissions to the new user for (ObjectPermission.Type permissionType : IMPLICIT_USER_PERMISSIONS) { @@ -313,7 +313,7 @@ public class UserService extends ModeledDirectoryObjectService>>JDBC<<< Creating skeleton user {}", authenticatedUser.getIdentifier()); - // Set up an empty user model ModeledUser user = getObjectInstance(null, new UserModel(authenticatedUser.getIdentifier()));