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.");