GUACAMOLE-1149: Merge correct regression in TOTP support if user accounts are not automatically created.
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 3f54be8..2f38ebe 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
@@ -133,7 +133,8 @@
// If auto account creation is enabled, add user to DB.
if (environment.autoCreateAbsentAccounts()) {
- userService.createObject(new PrivilegedModeledAuthenticatedUser(user.getCurrentUser()), user);
+ ModeledUser createdUser = userService.createObject(new PrivilegedModeledAuthenticatedUser(user.getCurrentUser()), user);
+ user.setModel(createdUser.getModel());
}
}
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 50b9e42..d22e909 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
@@ -260,7 +260,19 @@
ModeledUser object, UserModel model) throws GuacamoleException {
super.beforeUpdate(user, object, model);
-
+
+ // Refuse to update if the user is a skeleton and does not actually
+ // exist in the database (this will happen if the user is authenticated
+ // via a non-database authentication provider)
+ if (object.isSkeleton()) {
+ logger.info("Data cannot be stored for user \"{}\" as they do not "
+ + "have an account within the database. If this is "
+ + "unexpected, consider allowing automatic creation of "
+ + "user accounts.", object.getIdentifier());
+ throw new GuacamoleUnsupportedException("User does not exist "
+ + "within the database and cannot be updated.");
+ }
+
// Username must not be blank
if (model.getIdentifier() == null || model.getIdentifier().trim().isEmpty())
throw new GuacamoleClientException("The username must not be blank.");