From b6e88d33b3967b42020aa8dbc8429f41f2a0afb8 Mon Sep 17 00:00:00 2001 From: Nick Couchman Date: Mon, 14 Aug 2017 22:14:15 -0400 Subject: [PATCH 01/24] GUACAMOLE-363: Initial commit of SQLServer authentication module for JDBC. --- .../guacamole-auth-jdbc-sqlserver/.gitignore | 2 + .../guacamole-auth-jdbc-sqlserver/pom.xml | 128 ++++++++ .../schema/001-create-schema.sql | Bin 0 -> 35118 bytes .../schema/002-create-admin-user.sql | 43 +++ .../SQLServerAuthenticationProvider.java | 50 +++ ...SQLServerAuthenticationProviderModule.java | 91 ++++++ .../auth/sqlserver/SQLServerEnvironment.java | 306 ++++++++++++++++++ .../SQLServerGuacamoleProperties.java | 200 ++++++++++++ .../sqlserver/SQLServerInjectorProvider.java | 49 +++ .../sqlserver/SQLServerPasswordPolicy.java | 194 +++++++++++ ...SQLServerSharedAuthenticationProvider.java | 50 +++ .../auth/sqlserver/package-info.java | 23 ++ .../src/main/resources/guac-manifest.json | 28 ++ .../auth/jdbc/connection/ConnectionMapper.xml | 235 ++++++++++++++ .../connection/ConnectionParameterMapper.xml | 68 ++++ .../connection/ConnectionRecordMapper.xml | 216 +++++++++++++ .../connectiongroup/ConnectionGroupMapper.xml | 232 +++++++++++++ .../ConnectionGroupPermissionMapper.xml | 130 ++++++++ .../permission/ConnectionPermissionMapper.xml | 130 ++++++++ .../SharingProfilePermissionMapper.xml | 130 ++++++++ .../permission/SystemPermissionMapper.xml | 101 ++++++ .../jdbc/permission/UserPermissionMapper.xml | 137 ++++++++ .../sharingprofile/SharingProfileMapper.xml | 126 ++++++++ .../SharingProfileParameterMapper.xml | 68 ++++ .../auth/jdbc/user/PasswordRecordMapper.xml | 79 +++++ .../guacamole/auth/jdbc/user/UserMapper.xml | 216 +++++++++++++ extensions/guacamole-auth-jdbc/pom.xml | 1 + 27 files changed, 3033 insertions(+) create mode 100644 extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/.gitignore create mode 100644 extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/pom.xml create mode 100644 extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/schema/001-create-schema.sql create mode 100644 extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/schema/002-create-admin-user.sql create mode 100644 extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/java/org/apache/guacamole/auth/sqlserver/SQLServerAuthenticationProvider.java create mode 100644 extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/java/org/apache/guacamole/auth/sqlserver/SQLServerAuthenticationProviderModule.java create mode 100644 extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/java/org/apache/guacamole/auth/sqlserver/SQLServerEnvironment.java create mode 100644 extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/java/org/apache/guacamole/auth/sqlserver/SQLServerGuacamoleProperties.java create mode 100644 extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/java/org/apache/guacamole/auth/sqlserver/SQLServerInjectorProvider.java create mode 100644 extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/java/org/apache/guacamole/auth/sqlserver/SQLServerPasswordPolicy.java create mode 100644 extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/java/org/apache/guacamole/auth/sqlserver/SQLServerSharedAuthenticationProvider.java create mode 100644 extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/java/org/apache/guacamole/auth/sqlserver/package-info.java create mode 100644 extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/resources/guac-manifest.json create mode 100644 extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/resources/org/apache/guacamole/auth/jdbc/connection/ConnectionMapper.xml create mode 100644 extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/resources/org/apache/guacamole/auth/jdbc/connection/ConnectionParameterMapper.xml create mode 100644 extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/resources/org/apache/guacamole/auth/jdbc/connection/ConnectionRecordMapper.xml create mode 100644 extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/resources/org/apache/guacamole/auth/jdbc/connectiongroup/ConnectionGroupMapper.xml create mode 100644 extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/resources/org/apache/guacamole/auth/jdbc/permission/ConnectionGroupPermissionMapper.xml create mode 100644 extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/resources/org/apache/guacamole/auth/jdbc/permission/ConnectionPermissionMapper.xml create mode 100644 extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/resources/org/apache/guacamole/auth/jdbc/permission/SharingProfilePermissionMapper.xml create mode 100644 extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/resources/org/apache/guacamole/auth/jdbc/permission/SystemPermissionMapper.xml create mode 100644 extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/resources/org/apache/guacamole/auth/jdbc/permission/UserPermissionMapper.xml create mode 100644 extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/resources/org/apache/guacamole/auth/jdbc/sharingprofile/SharingProfileMapper.xml create mode 100644 extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/resources/org/apache/guacamole/auth/jdbc/sharingprofile/SharingProfileParameterMapper.xml create mode 100644 extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/resources/org/apache/guacamole/auth/jdbc/user/PasswordRecordMapper.xml create mode 100644 extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/resources/org/apache/guacamole/auth/jdbc/user/UserMapper.xml diff --git a/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/.gitignore b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/.gitignore new file mode 100644 index 000000000..42f4a1a64 --- /dev/null +++ b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/.gitignore @@ -0,0 +1,2 @@ +target/ +*~ diff --git a/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/pom.xml b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/pom.xml new file mode 100644 index 000000000..82776f7d0 --- /dev/null +++ b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/pom.xml @@ -0,0 +1,128 @@ + + + + + 4.0.0 + org.apache.guacamole + guacamole-auth-jdbc-sqlserver + jar + guacamole-auth-jdbc-sqlserver + http://guacamole.incubator.apache.org/ + + + UTF-8 + + + + org.apache.guacamole + guacamole-auth-jdbc + 0.9.13-incubating + ../../ + + + + + + + + org.apache.maven.plugins + maven-compiler-plugin + 3.3 + + 1.6 + 1.6 + + -Xlint:all + -Werror + + true + + + + + + org.apache.maven.plugins + maven-dependency-plugin + 2.10 + + + unpack-dependencies + prepare-package + + unpack-dependencies + + + runtime + ${project.build.directory}/classes + + + + + + + + org.apache.rat + apache-rat-plugin + 0.12 + + + + **/*.json + + + + + + + validate + validate + + check + + + + + + + + + + + + + + org.apache.guacamole + guacamole-ext + provided + + + + + org.apache.guacamole + guacamole-auth-jdbc-base + 0.9.13-incubating + + + + + diff --git a/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/schema/001-create-schema.sql b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/schema/001-create-schema.sql new file mode 100644 index 0000000000000000000000000000000000000000..df95800ec6f91545eac5bdafd9d1a8d8e2bf31ed GIT binary patch literal 35118 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 literal 0 HcmV?d00001 diff --git a/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/schema/002-create-admin-user.sql b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/schema/002-create-admin-user.sql new file mode 100644 index 000000000..08cce3f07 --- /dev/null +++ b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/schema/002-create-admin-user.sql @@ -0,0 +1,43 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +INSERT INTO [guacamole].[user] (username, password_hash, password_salt, password_date) +VALUES ('guacadmin', 0xCA458A7D494E3BE824F5E1E175A1556C0F8EEF2C2D7DF3633BEC4A29C4411960, +0xCA458A7D494E3BE824F5E1E175A1556C0F8EEF2C2D7DF3633BEC4A29C4411960, getdate()); + +INSERT INTO [guacamole].[system_permission] +SELECT user_id, permission +FROM ( + SELECT 'guacadmin' AS username, 'CREATE_CONNECTION' AS permission + UNION SELECT 'guacadmin' AS username, 'CREATE_CONNECTION_GROUP' AS permission + UNION SELECT 'guacadmin' AS username, 'CREATE_SHARING_PROFILE' AS permission + UNION SELECT 'guacadmin' AS username, 'CREATE_USER' AS permission + UNION SELECT 'guacadmin' AS username, 'ADMINISTER' AS permission) + permissions + JOIN [guacamole].[user] ON permissions.username = [guacamole].[user].[username]; + +INSERT INTO [guacamole].[user_permission] +SELECT [guacamole].[user].[user_id], [affected].[user_id], permission +FROM ( + SELECT 'guacadmin' AS username, 'guacadmin' AS affected_username, 'READ' AS permission + UNION SELECT 'guacadmin' AS username, 'guacadmin' AS affected_username, 'UPDATE' AS permission + UNION SELECT 'guacadmin' AS username, 'guacadmin' AS affected_username, 'ADMINISTER' AS permission) + permissions + JOIN [guacamole].[user] ON permissions.username = [guacamole].[user].[username] + JOIN [guacamole].[user] affected ON permissions.affected_username = affected.username; diff --git a/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/java/org/apache/guacamole/auth/sqlserver/SQLServerAuthenticationProvider.java b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/java/org/apache/guacamole/auth/sqlserver/SQLServerAuthenticationProvider.java new file mode 100644 index 000000000..ef5d61d90 --- /dev/null +++ b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/java/org/apache/guacamole/auth/sqlserver/SQLServerAuthenticationProvider.java @@ -0,0 +1,50 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +package org.apache.guacamole.auth.sqlserver; + +import org.apache.guacamole.GuacamoleException; +import org.apache.guacamole.auth.jdbc.InjectedAuthenticationProvider; +import org.apache.guacamole.auth.jdbc.JDBCAuthenticationProviderService; + +/** + * Provides a SQLServer-based implementation of the AuthenticationProvider + * functionality. + */ +public class SQLServerAuthenticationProvider extends InjectedAuthenticationProvider { + + /** + * Creates a new SQLServerAuthenticationProvider that reads and writes + * authentication data to a SQLServer database defined by properties in + * guacamole.properties. + * + * @throws GuacamoleException + * If a required property is missing, or an error occurs while parsing + * a property. + */ + public SQLServerAuthenticationProvider() throws GuacamoleException { + super(new SQLServerInjectorProvider(), JDBCAuthenticationProviderService.class); + } + + @Override + public String getIdentifier() { + return "sqlserver"; + } + +} diff --git a/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/java/org/apache/guacamole/auth/sqlserver/SQLServerAuthenticationProviderModule.java b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/java/org/apache/guacamole/auth/sqlserver/SQLServerAuthenticationProviderModule.java new file mode 100644 index 000000000..ebb1a0678 --- /dev/null +++ b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/java/org/apache/guacamole/auth/sqlserver/SQLServerAuthenticationProviderModule.java @@ -0,0 +1,91 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +package org.apache.guacamole.auth.sqlserver; + +import com.google.inject.Binder; +import com.google.inject.Module; +import com.google.inject.name.Names; +import java.util.Properties; +import org.apache.guacamole.GuacamoleException; +import org.mybatis.guice.datasource.helper.JdbcHelper; + +/** + * Guice module which configures SQLServer-specific injections. + */ +public class SQLServerAuthenticationProviderModule implements Module { + + /** + * MyBatis-specific configuration properties. + */ + private final Properties myBatisProperties = new Properties(); + + /** + * SQLServer-specific driver configuration properties. + */ + private final Properties driverProperties = new Properties(); + + /** + * Creates a new SQLServer authentication provider module that configures + * driver and MyBatis properties using the given environment. + * + * @param environment + * The environment to use when configuring MyBatis and the underlying + * JDBC driver. + * + * @throws GuacamoleException + * If a required property is missing, or an error occurs while parsing + * a property. + */ + public SQLServerAuthenticationProviderModule(SQLServerEnvironment environment) + throws GuacamoleException { + + // Set the SQLServer-specific properties for MyBatis. + myBatisProperties.setProperty("mybatis.environment.id", "guacamole"); + myBatisProperties.setProperty("JDBC.host", environment.getSQLServerHostname()); + myBatisProperties.setProperty("JDBC.port", String.valueOf(environment.getSQLServerPort())); + myBatisProperties.setProperty("JDBC.schema", environment.getSQLServerDatabase()); + myBatisProperties.setProperty("JDBC.username", environment.getSQLServerUsername()); + myBatisProperties.setProperty("JDBC.password", environment.getSQLServerPassword()); + myBatisProperties.setProperty("JDBC.autoCommit", "false"); + myBatisProperties.setProperty("mybatis.pooled.pingEnabled", "true"); + myBatisProperties.setProperty("mybatis.pooled.pingQuery", "SELECT 1"); + + // Use UTF-8 in database + driverProperties.setProperty("characterEncoding", "UTF-8"); + + } + + @Override + public void configure(Binder binder) { + + // Bind SQLServer-specific properties + JdbcHelper.SQL_Server_2005_MS_Driver.configure(binder); + + // Bind MyBatis properties + Names.bindProperties(binder, myBatisProperties); + + // Bind JDBC driver properties + binder.bind(Properties.class) + .annotatedWith(Names.named("JDBC.driverProperties")) + .toInstance(driverProperties); + + } + +} diff --git a/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/java/org/apache/guacamole/auth/sqlserver/SQLServerEnvironment.java b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/java/org/apache/guacamole/auth/sqlserver/SQLServerEnvironment.java new file mode 100644 index 000000000..67d882719 --- /dev/null +++ b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/java/org/apache/guacamole/auth/sqlserver/SQLServerEnvironment.java @@ -0,0 +1,306 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +package org.apache.guacamole.auth.sqlserver; + +import org.apache.guacamole.GuacamoleException; +import org.apache.guacamole.auth.jdbc.JDBCEnvironment; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.apache.guacamole.auth.jdbc.security.PasswordPolicy; + +/** + * A SQLServer-specific implementation of JDBCEnvironment provides database + * properties specifically for SQLServer. + */ +public class SQLServerEnvironment extends JDBCEnvironment { + + /** + * Logger for this class. + */ + private static final Logger logger = LoggerFactory.getLogger(SQLServerEnvironment.class); + + /** + * The default host to connect to, if SQLSERVER_HOSTNAME is not specified. + */ + private static final String DEFAULT_HOSTNAME = "localhost"; + + /** + * The default port to connect to, if SQLSERVER_PORT is not specified. + */ + private static final int DEFAULT_PORT = 1433; + + /** + * Whether a database user account is required by default for authentication + * to succeed. + */ + private static final boolean DEFAULT_USER_REQUIRED = true; + + /** + * The default value for the maximum number of connections to be + * allowed to the Guacamole server overall. + */ + private final int DEFAULT_ABSOLUTE_MAX_CONNECTIONS = 0; + + /** + * The default value for the default maximum number of connections to be + * allowed per user to any one connection. Note that, as long as the + * legacy "disallow duplicate" and "disallow simultaneous" properties are + * still supported, these cannot be constants, as the legacy properties + * dictate the values that should be used in the absence of the correct + * properties. + */ + private int DEFAULT_MAX_CONNECTIONS_PER_USER = 1; + + /** + * The default value for the default maximum number of connections to be + * allowed per user to any one connection group. Note that, as long as the + * legacy "disallow duplicate" and "disallow simultaneous" properties are + * still supported, these cannot be constants, as the legacy properties + * dictate the values that should be used in the absence of the correct + * properties. + */ + private int DEFAULT_MAX_GROUP_CONNECTIONS_PER_USER = 1; + + /** + * The default value for the default maximum number of connections to be + * allowed to any one connection. Note that, as long as the legacy + * "disallow duplicate" and "disallow simultaneous" properties are still + * supported, these cannot be constants, as the legacy properties dictate + * the values that should be used in the absence of the correct properties. + */ + private int DEFAULT_MAX_CONNECTIONS = 0; + + /** + * The default value for the default maximum number of connections to be + * allowed to any one connection group. Note that, as long as the legacy + * "disallow duplicate" and "disallow simultaneous" properties are still + * supported, these cannot be constants, as the legacy properties dictate + * the values that should be used in the absence of the correct properties. + */ + private int DEFAULT_MAX_GROUP_CONNECTIONS = 0; + + /** + * Constructs a new SQLServerEnvironment, providing access to SQLServer-specific + * configuration options. + * + * @throws GuacamoleException + * If an error occurs while setting up the underlying JDBCEnvironment + * or while parsing legacy SQLServer configuration options. + */ + public SQLServerEnvironment() throws GuacamoleException { + + // Init underlying JDBC environment + super(); + + // Read legacy concurrency-related property + Boolean disallowSimultaneous = getProperty(SQLServerGuacamoleProperties.SQLSERVER_DISALLOW_SIMULTANEOUS_CONNECTIONS); + Boolean disallowDuplicate = getProperty(SQLServerGuacamoleProperties.SQLSERVER_DISALLOW_DUPLICATE_CONNECTIONS); + + // Legacy "simultaneous" property dictates only the maximum number of + // connections per connection + if (disallowSimultaneous != null) { + + // Translate legacy property + if (disallowSimultaneous) { + DEFAULT_MAX_CONNECTIONS = 1; + DEFAULT_MAX_GROUP_CONNECTIONS = 0; + } + else { + DEFAULT_MAX_CONNECTIONS = 0; + DEFAULT_MAX_GROUP_CONNECTIONS = 0; + } + + // Warn of deprecation + logger.warn("The \"{}\" property is deprecated. Use \"{}\" and \"{}\" instead.", + SQLServerGuacamoleProperties.SQLSERVER_DISALLOW_SIMULTANEOUS_CONNECTIONS.getName(), + SQLServerGuacamoleProperties.SQLSERVER_DEFAULT_MAX_CONNECTIONS.getName(), + SQLServerGuacamoleProperties.SQLSERVER_DEFAULT_MAX_GROUP_CONNECTIONS.getName()); + + // Inform of new equivalent + logger.info("To achieve the same result of setting \"{}\" to \"{}\", set \"{}\" to \"{}\" and \"{}\" to \"{}\".", + SQLServerGuacamoleProperties.SQLSERVER_DISALLOW_SIMULTANEOUS_CONNECTIONS.getName(), disallowSimultaneous, + SQLServerGuacamoleProperties.SQLSERVER_DEFAULT_MAX_CONNECTIONS.getName(), DEFAULT_MAX_CONNECTIONS, + SQLServerGuacamoleProperties.SQLSERVER_DEFAULT_MAX_GROUP_CONNECTIONS.getName(), DEFAULT_MAX_GROUP_CONNECTIONS); + + } + + // Legacy "duplicate" property dictates whether connections and groups + // may be used concurrently only by different users + if (disallowDuplicate != null) { + + // Translate legacy property + if (disallowDuplicate) { + DEFAULT_MAX_CONNECTIONS_PER_USER = 1; + DEFAULT_MAX_GROUP_CONNECTIONS_PER_USER = 1; + } + else { + DEFAULT_MAX_CONNECTIONS_PER_USER = 0; + DEFAULT_MAX_GROUP_CONNECTIONS_PER_USER = 0; + } + + // Warn of deprecation + logger.warn("The \"{}\" property is deprecated. Use \"{}\" and \"{}\" instead.", + SQLServerGuacamoleProperties.SQLSERVER_DISALLOW_DUPLICATE_CONNECTIONS.getName(), + SQLServerGuacamoleProperties.SQLSERVER_DEFAULT_MAX_CONNECTIONS_PER_USER.getName(), + SQLServerGuacamoleProperties.SQLSERVER_DEFAULT_MAX_GROUP_CONNECTIONS.getName()); + + // Inform of new equivalent + logger.info("To achieve the same result of setting \"{}\" to \"{}\", set \"{}\" to \"{}\" and \"{}\" to \"{}\".", + SQLServerGuacamoleProperties.SQLSERVER_DISALLOW_DUPLICATE_CONNECTIONS.getName(), disallowDuplicate, + SQLServerGuacamoleProperties.SQLSERVER_DEFAULT_MAX_CONNECTIONS_PER_USER.getName(), DEFAULT_MAX_CONNECTIONS_PER_USER, + SQLServerGuacamoleProperties.SQLSERVER_DEFAULT_MAX_GROUP_CONNECTIONS_PER_USER.getName(), DEFAULT_MAX_GROUP_CONNECTIONS_PER_USER); + + } + + } + + @Override + public boolean isUserRequired() throws GuacamoleException { + return getProperty( + SQLServerGuacamoleProperties.SQLSERVER_USER_REQUIRED, + DEFAULT_USER_REQUIRED + ); + } + + @Override + public int getAbsoluteMaxConnections() throws GuacamoleException { + return getProperty(SQLServerGuacamoleProperties.SQLSERVER_ABSOLUTE_MAX_CONNECTIONS, + DEFAULT_ABSOLUTE_MAX_CONNECTIONS + ); + } + + @Override + public int getDefaultMaxConnections() throws GuacamoleException { + return getProperty( + SQLServerGuacamoleProperties.SQLSERVER_DEFAULT_MAX_CONNECTIONS, + DEFAULT_MAX_CONNECTIONS + ); + } + + @Override + public int getDefaultMaxGroupConnections() throws GuacamoleException { + return getProperty( + SQLServerGuacamoleProperties.SQLSERVER_DEFAULT_MAX_GROUP_CONNECTIONS, + DEFAULT_MAX_GROUP_CONNECTIONS + ); + } + + @Override + public int getDefaultMaxConnectionsPerUser() throws GuacamoleException { + return getProperty( + SQLServerGuacamoleProperties.SQLSERVER_DEFAULT_MAX_CONNECTIONS_PER_USER, + DEFAULT_MAX_CONNECTIONS_PER_USER + ); + } + + @Override + public int getDefaultMaxGroupConnectionsPerUser() throws GuacamoleException { + return getProperty( + SQLServerGuacamoleProperties.SQLSERVER_DEFAULT_MAX_GROUP_CONNECTIONS_PER_USER, + DEFAULT_MAX_GROUP_CONNECTIONS_PER_USER + ); + } + + @Override + public PasswordPolicy getPasswordPolicy() { + return new SQLServerPasswordPolicy(this); + } + + /** + * Returns the hostname of the SQLServer server hosting the Guacamole + * authentication tables. If unspecified, this will be "localhost". + * + * @return + * The URL of the SQLServer server. + * + * @throws GuacamoleException + * If an error occurs while retrieving the property value. + */ + public String getSQLServerHostname() throws GuacamoleException { + return getProperty( + SQLServerGuacamoleProperties.SQLSERVER_HOSTNAME, + DEFAULT_HOSTNAME + ); + } + + /** + * Returns the port number of the SQLServer server hosting the Guacamole + * authentication tables. If unspecified, this will be the default + * SQLServer port of 5432. + * + * @return + * The port number of the SQLServer server. + * + * @throws GuacamoleException + * If an error occurs while retrieving the property value. + */ + public int getSQLServerPort() throws GuacamoleException { + return getProperty( + SQLServerGuacamoleProperties.SQLSERVER_PORT, + DEFAULT_PORT + ); + } + + /** + * Returns the name of the SQLServer database containing the Guacamole + * authentication tables. + * + * @return + * The name of the SQLServer database. + * + * @throws GuacamoleException + * If an error occurs while retrieving the property value, or if the + * value was not set, as this property is required. + */ + public String getSQLServerDatabase() throws GuacamoleException { + return getRequiredProperty(SQLServerGuacamoleProperties.SQLSERVER_DATABASE); + } + + /** + * Returns the username that should be used when authenticating with the + * SQLServer database containing the Guacamole authentication tables. + * + * @return + * The username for the SQLServer database. + * + * @throws GuacamoleException + * If an error occurs while retrieving the property value, or if the + * value was not set, as this property is required. + */ + public String getSQLServerUsername() throws GuacamoleException { + return getRequiredProperty(SQLServerGuacamoleProperties.SQLSERVER_USERNAME); + } + + /** + * Returns the password that should be used when authenticating with the + * SQLServer database containing the Guacamole authentication tables. + * + * @return + * The password for the SQLServer database. + * + * @throws GuacamoleException + * If an error occurs while retrieving the property value, or if the + * value was not set, as this property is required. + */ + public String getSQLServerPassword() throws GuacamoleException { + return getRequiredProperty(SQLServerGuacamoleProperties.SQLSERVER_PASSWORD); + } + +} diff --git a/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/java/org/apache/guacamole/auth/sqlserver/SQLServerGuacamoleProperties.java b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/java/org/apache/guacamole/auth/sqlserver/SQLServerGuacamoleProperties.java new file mode 100644 index 000000000..e45f50268 --- /dev/null +++ b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/java/org/apache/guacamole/auth/sqlserver/SQLServerGuacamoleProperties.java @@ -0,0 +1,200 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +package org.apache.guacamole.auth.sqlserver; + +import org.apache.guacamole.properties.BooleanGuacamoleProperty; +import org.apache.guacamole.properties.IntegerGuacamoleProperty; +import org.apache.guacamole.properties.StringGuacamoleProperty; + +/** + * Properties used by the SQLServer Authentication plugin. + */ +public class SQLServerGuacamoleProperties { + + /** + * This class should not be instantiated. + */ + private SQLServerGuacamoleProperties() {} + + /** + * The URL of the SQLServer server hosting the Guacamole authentication tables. + */ + public static final StringGuacamoleProperty SQLSERVER_HOSTNAME = + new StringGuacamoleProperty() { + + @Override + public String getName() { return "sqlserver-hostname"; } + + }; + + /** + * The port of the SQLServer server hosting the Guacamole authentication + * tables. + */ + public static final IntegerGuacamoleProperty SQLSERVER_PORT = + new IntegerGuacamoleProperty() { + + @Override + public String getName() { return "sqlserver-port"; } + + }; + + /** + * The name of the SQLServer database containing the Guacamole + * authentication tables. + */ + public static final StringGuacamoleProperty SQLSERVER_DATABASE = + new StringGuacamoleProperty() { + + @Override + public String getName() { return "sqlserver-database"; } + + }; + + /** + * The username used to authenticate to the SQLServer database containing + * the Guacamole authentication tables. + */ + public static final StringGuacamoleProperty SQLSERVER_USERNAME = + new StringGuacamoleProperty() { + + @Override + public String getName() { return "sqlserver-username"; } + + }; + + /** + * The password used to authenticate to the SQLServer database containing + * the Guacamole authentication tables. + */ + public static final StringGuacamoleProperty SQLSERVER_PASSWORD = + new StringGuacamoleProperty() { + + @Override + public String getName() { return "sqlserver-password"; } + + }; + + /** + * Whether a user account within the database is required for authentication + * to succeed, even if the user has been authenticated via another + * authentication provider. + */ + public static final BooleanGuacamoleProperty + SQLSERVER_USER_REQUIRED = new BooleanGuacamoleProperty() { + + @Override + public String getName() { return "sqlserver-user-required"; } + + }; + + /** + * Whether or not multiple users accessing the same connection at the same + * time should be disallowed. + */ + public static final BooleanGuacamoleProperty + SQLSERVER_DISALLOW_SIMULTANEOUS_CONNECTIONS = + new BooleanGuacamoleProperty() { + + @Override + public String getName() { return "sqlserver-disallow-simultaneous-connections"; } + + }; + + /** + * Whether or not the same user accessing the same connection or connection + * group at the same time should be disallowed. + */ + public static final BooleanGuacamoleProperty + SQLSERVER_DISALLOW_DUPLICATE_CONNECTIONS = + new BooleanGuacamoleProperty() { + + @Override + public String getName() { return "sqlserver-disallow-duplicate-connections"; } + + }; + + /** + * The maximum number of concurrent connections to allow overall. Zero + * denotes unlimited. + */ + public static final IntegerGuacamoleProperty + SQLSERVER_ABSOLUTE_MAX_CONNECTIONS = + new IntegerGuacamoleProperty() { + + @Override + public String getName() { return "sqlserver-absolute-max-connections"; } + + }; + + /** + * The maximum number of concurrent connections to allow to any one + * connection. Zero denotes unlimited. + */ + public static final IntegerGuacamoleProperty + SQLSERVER_DEFAULT_MAX_CONNECTIONS = + new IntegerGuacamoleProperty() { + + @Override + public String getName() { return "sqlserver-default-max-connections"; } + + }; + + /** + * The maximum number of concurrent connections to allow to any one + * connection group. Zero denotes unlimited. + */ + public static final IntegerGuacamoleProperty + SQLSERVER_DEFAULT_MAX_GROUP_CONNECTIONS = + new IntegerGuacamoleProperty() { + + @Override + public String getName() { return "sqlserver-default-max-group-connections"; } + + }; + + /** + * The maximum number of concurrent connections to allow to any one + * connection by an individual user. Zero denotes unlimited. + */ + public static final IntegerGuacamoleProperty + SQLSERVER_DEFAULT_MAX_CONNECTIONS_PER_USER = + new IntegerGuacamoleProperty() { + + @Override + public String getName() { return "sqlserver-default-max-connections-per-user"; } + + }; + + /** + * The maximum number of concurrent connections to allow to any one + * connection group by an individual user. Zero denotes + * unlimited. + */ + public static final IntegerGuacamoleProperty + SQLSERVER_DEFAULT_MAX_GROUP_CONNECTIONS_PER_USER = + new IntegerGuacamoleProperty() { + + @Override + public String getName() { return "sqlserver-default-max-group-connections-per-user"; } + + }; + +} diff --git a/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/java/org/apache/guacamole/auth/sqlserver/SQLServerInjectorProvider.java b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/java/org/apache/guacamole/auth/sqlserver/SQLServerInjectorProvider.java new file mode 100644 index 000000000..32d12f6e2 --- /dev/null +++ b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/java/org/apache/guacamole/auth/sqlserver/SQLServerInjectorProvider.java @@ -0,0 +1,49 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +package org.apache.guacamole.auth.sqlserver; + +import com.google.inject.Guice; +import com.google.inject.Injector; +import org.apache.guacamole.GuacamoleException; +import org.apache.guacamole.auth.jdbc.JDBCAuthenticationProviderModule; +import org.apache.guacamole.auth.jdbc.JDBCInjectorProvider; + +/** + * JDBCInjectorProvider implementation which configures Guice injections for + * connecting to a SQLServer database based on SQLServer-specific options + * provided via guacamole.properties. + */ +public class SQLServerInjectorProvider extends JDBCInjectorProvider { + + @Override + protected Injector create() throws GuacamoleException { + + // Get local environment + SQLServerEnvironment environment = new SQLServerEnvironment(); + + // Set up Guice injector + return Guice.createInjector( + new JDBCAuthenticationProviderModule(environment), + new SQLServerAuthenticationProviderModule(environment) + ); + + } + +} diff --git a/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/java/org/apache/guacamole/auth/sqlserver/SQLServerPasswordPolicy.java b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/java/org/apache/guacamole/auth/sqlserver/SQLServerPasswordPolicy.java new file mode 100644 index 000000000..f30b180bb --- /dev/null +++ b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/java/org/apache/guacamole/auth/sqlserver/SQLServerPasswordPolicy.java @@ -0,0 +1,194 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +package org.apache.guacamole.auth.sqlserver; + +import org.apache.guacamole.GuacamoleException; +import org.apache.guacamole.auth.jdbc.JDBCEnvironment; +import org.apache.guacamole.auth.jdbc.security.PasswordPolicy; +import org.apache.guacamole.properties.BooleanGuacamoleProperty; +import org.apache.guacamole.properties.IntegerGuacamoleProperty; + +/** + * PasswordPolicy implementation which reads the details of the policy from + * SQLServer-specific properties in guacamole.properties. + */ +public class SQLServerPasswordPolicy implements PasswordPolicy { + + /** + * The property which specifies the minimum length required of all user + * passwords. By default, this will be zero. + */ + private static final IntegerGuacamoleProperty MIN_LENGTH = + new IntegerGuacamoleProperty() { + + @Override + public String getName() { return "sqlserver-user-password-min-length"; } + + }; + + /** + * The property which specifies the minimum number of days which must + * elapse before a user may reset their password. If set to zero, the + * default, then this restriction does not apply. + */ + private static final IntegerGuacamoleProperty MIN_AGE = + new IntegerGuacamoleProperty() { + + @Override + public String getName() { return "sqlserver-user-password-min-age"; } + + }; + + /** + * The property which specifies the maximum number of days which may + * elapse before a user is required to reset their password. If set to zero, + * the default, then this restriction does not apply. + */ + private static final IntegerGuacamoleProperty MAX_AGE = + new IntegerGuacamoleProperty() { + + @Override + public String getName() { return "sqlserver-user-password-max-age"; } + + }; + + /** + * The property which specifies the number of previous passwords remembered + * for each user. If set to zero, the default, then this restriction does + * not apply. + */ + private static final IntegerGuacamoleProperty HISTORY_SIZE = + new IntegerGuacamoleProperty() { + + @Override + public String getName() { return "sqlserver-user-password-history-size"; } + + }; + + /** + * The property which specifies whether all user passwords must have at + * least one lowercase character and one uppercase character. By default, + * no such restriction is imposed. + */ + private static final BooleanGuacamoleProperty REQUIRE_MULTIPLE_CASE = + new BooleanGuacamoleProperty() { + + @Override + public String getName() { return "sqlserver-user-password-require-multiple-case"; } + + }; + + /** + * The property which specifies whether all user passwords must have at + * least one numeric character (digit). By default, no such restriction is + * imposed. + */ + private static final BooleanGuacamoleProperty REQUIRE_DIGIT = + new BooleanGuacamoleProperty() { + + @Override + public String getName() { return "sqlserver-user-password-require-digit"; } + + }; + + /** + * The property which specifies whether all user passwords must have at + * least one non-alphanumeric character (symbol). By default, no such + * restriction is imposed. + */ + private static final BooleanGuacamoleProperty REQUIRE_SYMBOL = + new BooleanGuacamoleProperty() { + + @Override + public String getName() { return "sqlserver-user-password-require-symbol"; } + + }; + + /** + * The property which specifies whether users are prohibited from including + * their own username in their password. By default, no such restriction is + * imposed. + */ + private static final BooleanGuacamoleProperty PROHIBIT_USERNAME = + new BooleanGuacamoleProperty() { + + @Override + public String getName() { return "sqlserver-user-password-prohibit-username"; } + + }; + + /** + * The Guacamole server environment. + */ + private final JDBCEnvironment environment; + + /** + * Creates a new SQLServerPasswordPolicy which reads the details of the + * policy from the properties exposed by the given environment. + * + * @param environment + * The environment from which password policy properties should be + * read. + */ + public SQLServerPasswordPolicy(JDBCEnvironment environment) { + this.environment = environment; + } + + @Override + public int getMinimumLength() throws GuacamoleException { + return environment.getProperty(MIN_LENGTH, 0); + } + + @Override + public int getMinimumAge() throws GuacamoleException { + return environment.getProperty(MIN_AGE, 0); + } + + @Override + public int getMaximumAge() throws GuacamoleException { + return environment.getProperty(MAX_AGE, 0); + } + + @Override + public int getHistorySize() throws GuacamoleException { + return environment.getProperty(HISTORY_SIZE, 0); + } + + @Override + public boolean isMultipleCaseRequired() throws GuacamoleException { + return environment.getProperty(REQUIRE_MULTIPLE_CASE, false); + } + + @Override + public boolean isNumericRequired() throws GuacamoleException { + return environment.getProperty(REQUIRE_DIGIT, false); + } + + @Override + public boolean isNonAlphanumericRequired() throws GuacamoleException { + return environment.getProperty(REQUIRE_SYMBOL, false); + } + + @Override + public boolean isUsernameProhibited() throws GuacamoleException { + return environment.getProperty(PROHIBIT_USERNAME, false); + } + +} diff --git a/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/java/org/apache/guacamole/auth/sqlserver/SQLServerSharedAuthenticationProvider.java b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/java/org/apache/guacamole/auth/sqlserver/SQLServerSharedAuthenticationProvider.java new file mode 100644 index 000000000..0a3c8d31f --- /dev/null +++ b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/java/org/apache/guacamole/auth/sqlserver/SQLServerSharedAuthenticationProvider.java @@ -0,0 +1,50 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +package org.apache.guacamole.auth.sqlserver; + +import org.apache.guacamole.GuacamoleException; +import org.apache.guacamole.auth.jdbc.InjectedAuthenticationProvider; +import org.apache.guacamole.auth.jdbc.sharing.SharedAuthenticationProviderService; + +/** + * Provides a implementation of AuthenticationProvider which interacts with the + * SQLServer AuthenticationProvider, accepting share keys as credentials and + * providing access to the shared connections. + */ +public class SQLServerSharedAuthenticationProvider extends InjectedAuthenticationProvider { + + /** + * Creates a new SQLServerSharedAuthenticationProvider that provides access + * to shared connections exposed by the SQLServerAuthenticationProvider. + * + * @throws GuacamoleException + * If a required property is missing, or an error occurs while parsing + * a property. + */ + public SQLServerSharedAuthenticationProvider() throws GuacamoleException { + super(new SQLServerInjectorProvider(), SharedAuthenticationProviderService.class); + } + + @Override + public String getIdentifier() { + return "sqlserver-shared"; + } + +} diff --git a/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/java/org/apache/guacamole/auth/sqlserver/package-info.java b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/java/org/apache/guacamole/auth/sqlserver/package-info.java new file mode 100644 index 000000000..7bbe1b2e3 --- /dev/null +++ b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/java/org/apache/guacamole/auth/sqlserver/package-info.java @@ -0,0 +1,23 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +/** + * The SQLServer authentication provider. + */ +package org.apache.guacamole.auth.sqlserver; diff --git a/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/resources/guac-manifest.json b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/resources/guac-manifest.json new file mode 100644 index 000000000..ee61ab578 --- /dev/null +++ b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/resources/guac-manifest.json @@ -0,0 +1,28 @@ +{ + + "guacamoleVersion" : "0.9.13-incubating", + + "name" : "SQLServer Authentication", + "namespace" : "guac-sqlserver", + + "authProviders" : [ + "org.apache.guacamole.auth.sqlserver.SQLServerAuthenticationProvider", + "org.apache.guacamole.auth.sqlserver.SQLServerSharedAuthenticationProvider" + ], + + "css" : [ + "styles/jdbc.css" + ], + + "html" : [ + "html/shared-connection.html" + ], + + "translations" : [ + "translations/en.json", + "translations/fr.json", + "translations/ru.json" + ] + +} + diff --git a/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/resources/org/apache/guacamole/auth/jdbc/connection/ConnectionMapper.xml b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/resources/org/apache/guacamole/auth/jdbc/connection/ConnectionMapper.xml new file mode 100644 index 000000000..24008fcc4 --- /dev/null +++ b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/resources/org/apache/guacamole/auth/jdbc/connection/ConnectionMapper.xml @@ -0,0 +1,235 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + DELETE FROM [guacamole].[connection] + WHERE connection_id = #{identifier,jdbcType=INTEGER} + + + + + + INSERT INTO [guacamole].[connection] ( + connection_name, + parent_id, + protocol, + max_connections, + max_connections_per_user, + proxy_hostname, + proxy_port, + proxy_encryption_method, + connection_weight, + failover_only + ) + VALUES ( + #{object.name,jdbcType=VARCHAR}, + #{object.parentIdentifier,jdbcType=INTEGER}, + #{object.protocol,jdbcType=VARCHAR}, + #{object.maxConnections,jdbcType=INTEGER}, + #{object.maxConnectionsPerUser,jdbcType=INTEGER}, + #{object.proxyHostname,jdbcType=VARCHAR}, + #{object.proxyPort,jdbcType=INTEGER}, + #{object.proxyEncryptionMethod,jdbcType=VARCHAR}, + #{object.connectionWeight,jdbcType=INTEGER}, + #{object.failoverOnly,jdbcType=INTEGER} + ) + + + + + + UPDATE [guacamole].[connection] + SET connection_name = #{object.name,jdbcType=VARCHAR}, + parent_id = #{object.parentIdentifier,jdbcType=INTEGER}, + protocol = #{object.protocol,jdbcType=VARCHAR}, + max_connections = #{object.maxConnections,jdbcType=INTEGER}, + max_connections_per_user = #{object.maxConnectionsPerUser,jdbcType=INTEGER}, + proxy_hostname = #{object.proxyHostname,jdbcType=VARCHAR}, + proxy_port = #{object.proxyPort,jdbcType=INTEGER}, + proxy_encryption_method = #{object.proxyEncryptionMethod,jdbcType=VARCHAR}, + connection_weight = #{object.connectionWeight,jdbcType=INTEGER}, + failover_only = #{object.failoverOnly,jdbcType=INTEGER} + WHERE connection_id = #{object.objectID,jdbcType=INTEGER} + + + diff --git a/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/resources/org/apache/guacamole/auth/jdbc/connection/ConnectionParameterMapper.xml b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/resources/org/apache/guacamole/auth/jdbc/connection/ConnectionParameterMapper.xml new file mode 100644 index 000000000..de1ab97c1 --- /dev/null +++ b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/resources/org/apache/guacamole/auth/jdbc/connection/ConnectionParameterMapper.xml @@ -0,0 +1,68 @@ + + + + + + + + + + + + + + + + + + + + DELETE FROM [guacamole].[connection_parameter] + WHERE connection_id = #{identifier,jdbcType=INTEGER} + + + + + + INSERT INTO [guacamole].[connection_parameter] ( + connection_id, + parameter_name, + parameter_value + ) + VALUES + + (#{parameter.connectionIdentifier,jdbcType=INTEGER}, + #{parameter.name,jdbcType=VARCHAR}, + #{parameter.value,jdbcType=VARCHAR}) + + + + + + diff --git a/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/resources/org/apache/guacamole/auth/jdbc/connection/ConnectionRecordMapper.xml b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/resources/org/apache/guacamole/auth/jdbc/connection/ConnectionRecordMapper.xml new file mode 100644 index 000000000..ec077db7f --- /dev/null +++ b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/resources/org/apache/guacamole/auth/jdbc/connection/ConnectionRecordMapper.xml @@ -0,0 +1,216 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + INSERT INTO [guacamole].[connection_history] ( + connection_id, + connection_name, + remote_host, + sharing_profile_id, + sharing_profile_name, + user_id, + username, + start_date, + end_date + ) + VALUES ( + #{record.connectionIdentifier,jdbcType=INTEGER}, + #{record.connectionName,jdbcType=VARCHAR}, + #{record.remoteHost,jdbcType=VARCHAR}, + #{record.sharingProfileIdentifier,jdbcType=INTEGER}, + #{record.sharingProfileName,jdbcType=VARCHAR}, + (SELECT user_id FROM [guacamole].[user] + WHERE username = #{record.username,jdbcType=VARCHAR}), + #{record.username,jdbcType=VARCHAR}, + #{record.startDate,jdbcType=TIMESTAMP}, + #{record.endDate,jdbcType=TIMESTAMP} + ) + + + + + + + + + + diff --git a/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/resources/org/apache/guacamole/auth/jdbc/connectiongroup/ConnectionGroupMapper.xml b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/resources/org/apache/guacamole/auth/jdbc/connectiongroup/ConnectionGroupMapper.xml new file mode 100644 index 000000000..47a3e63d5 --- /dev/null +++ b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/resources/org/apache/guacamole/auth/jdbc/connectiongroup/ConnectionGroupMapper.xml @@ -0,0 +1,232 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + DELETE FROM [guacamole].[connection_group] + WHERE connection_group_id = #{identifier,jdbcType=INTEGER} + + + + + + INSERT INTO [guacamole].[connection_group] ( + connection_group_name, + parent_id, + type, + max_connections, + max_connections_per_user, + enable_session_affinity + ) + VALUES ( + #{object.name,jdbcType=VARCHAR}, + #{object.parentIdentifier,jdbcType=INTEGER}, + #{object.type,jdbcType=VARCHAR}, + #{object.maxConnections,jdbcType=INTEGER}, + #{object.maxConnectionsPerUser,jdbcType=INTEGER}, + #{object.sessionAffinityEnabled,jdbcType=INTEGER} + ) + + + + + + UPDATE [guacamole].[connection_group] + SET connection_group_name = #{object.name,jdbcType=VARCHAR}, + parent_id = #{object.parentIdentifier,jdbcType=INTEGER}, + type = #{object.type,jdbcType=VARCHAR}, + max_connections = #{object.maxConnections,jdbcType=INTEGER}, + max_connections_per_user = #{object.maxConnectionsPerUser,jdbcType=INTEGER}, + enable_session_affinity = #{object.sessionAffinityEnabled,jdbcType=INTEGER} + WHERE connection_group_id = #{object.objectID,jdbcType=INTEGER} + + + diff --git a/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/resources/org/apache/guacamole/auth/jdbc/permission/ConnectionGroupPermissionMapper.xml b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/resources/org/apache/guacamole/auth/jdbc/permission/ConnectionGroupPermissionMapper.xml new file mode 100644 index 000000000..2890ab31d --- /dev/null +++ b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/resources/org/apache/guacamole/auth/jdbc/permission/ConnectionGroupPermissionMapper.xml @@ -0,0 +1,130 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + DELETE FROM [guacamole].[connection_group_permission] + WHERE (user_id, permission, connection_group_id) IN + + (#{permission.userID,jdbcType=INTEGER}, + #{permission.type,jdbcType=VARCHAR}, + #{permission.objectIdentifier,jdbcType=INTEGER}) + + + + + + + + INSERT INTO [guacamole].[connection_group_permission] ( + user_id, + permission, + connection_group_id + ) + SELECT DISTINCT + permissions.user_id, + permissions.permission, + permissions.connection_group_id + FROM + + SELECT #{permission.userID,jdbcType=INTEGER} AS user_id, + #{permission.type,jdbcType=VARCHAR} AS permission, + #{permission.objectIdentifier,jdbcType=INTEGER} AS connection_group_id + + AS permissions + WHERE (user_id, permission, connection_group_id) NOT IN ( + SELECT + [guacamole].[connection_group_permission].user_id, + [guacamole].[connection_group_permission].permission, + [guacamole].[connection_group_permission].connection_group_id + FROM [guacamole].[connection_group_permission] + ); + + + + diff --git a/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/resources/org/apache/guacamole/auth/jdbc/permission/ConnectionPermissionMapper.xml b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/resources/org/apache/guacamole/auth/jdbc/permission/ConnectionPermissionMapper.xml new file mode 100644 index 000000000..8ea85bc3c --- /dev/null +++ b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/resources/org/apache/guacamole/auth/jdbc/permission/ConnectionPermissionMapper.xml @@ -0,0 +1,130 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + DELETE FROM [guacamole].[connection_permission] + WHERE (user_id, permission, connection_id) IN + + (#{permission.userID,jdbcType=INTEGER}, + #{permission.type,jdbcType=VARCHAR}, + #{permission.objectIdentifier,jdbcType=INTEGER}) + + + + + + + + INSERT INTO [guacamole].[connection_permission] ( + user_id, + permission, + connection_id + ) + SELECT DISTINCT + permissions.user_id, + permissions.permission, + permissions.connection_id + FROM + + SELECT #{permission.userID,jdbcType=INTEGER} AS user_id, + #{permission.type,jdbcType=VARCHAR} AS permission, + #{permission.objectIdentifier,jdbcType=INTEGER} AS connection_id + + AS permissions + WHERE (user_id, permission, connection_id) NOT IN ( + SELECT + [guacamole].[connection_permission].user_id, + [guacamole].[connection_permission].permission, + [guacamole].[connection_permission].connection_id + FROM [guacamole].[connection_permission] + ); + + + + diff --git a/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/resources/org/apache/guacamole/auth/jdbc/permission/SharingProfilePermissionMapper.xml b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/resources/org/apache/guacamole/auth/jdbc/permission/SharingProfilePermissionMapper.xml new file mode 100644 index 000000000..cb706b8d4 --- /dev/null +++ b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/resources/org/apache/guacamole/auth/jdbc/permission/SharingProfilePermissionMapper.xml @@ -0,0 +1,130 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + DELETE FROM [guacamole].[sharing_profile_permission] + WHERE (user_id, permission, sharing_profile_id) IN + + (#{permission.userID,jdbcType=INTEGER}, + #{permission.type,jdbcType=VARCHAR}, + #{permission.objectIdentifier,jdbcType=INTEGER}) + + + + + + + + INSERT INTO [guacamole].[sharing_profile_permission] ( + user_id, + permission, + sharing_profile_id + ) + SELECT DISTINCT + permissions.user_id, + permissions.permission, + permissions.sharing_profile_id + FROM + + SELECT #{permission.userID,jdbcType=INTEGER} AS user_id, + #{permission.type,jdbcType=VARCHAR} AS permission, + #{permission.objectIdentifier,jdbcType=INTEGER} AS sharing_profile_id + + AS permissions + WHERE (user_id, permission, sharing_profile_id) NOT IN ( + SELECT + [guacamole].[sharing_profile_permission].user_id, + [guacamole].[sharing_profile_permission].permission, + [guacamole].[sharing_profile_permission].sharing_profile_id + FROM [guacamole].[sharing_profile_permission] + ); + + + + diff --git a/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/resources/org/apache/guacamole/auth/jdbc/permission/SystemPermissionMapper.xml b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/resources/org/apache/guacamole/auth/jdbc/permission/SystemPermissionMapper.xml new file mode 100644 index 000000000..d9e622b69 --- /dev/null +++ b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/resources/org/apache/guacamole/auth/jdbc/permission/SystemPermissionMapper.xml @@ -0,0 +1,101 @@ + + + + + + + + + + + + + + + + + + + + + + + + DELETE FROM [guacamole].[system_permission] + WHERE (user_id, permission) IN + + (#{permission.userID,jdbcType=INTEGER}, + #{permission.type,jdbcType=VARCHAR}) + + + + + + + + INSERT INTO [guacamole].[system_permission] ( + user_id, + permission + ) + SELECT DISTINCT + permissions.user_id, + permissions.permission + FROM + + SELECT #{permission.userID,jdbcType=INTEGER} AS user_id, + #{permission.type,jdbcType=VARCHAR} AS permission + + AS permissions + WHERE (user_id, permission) NOT IN ( + SELECT + [guacamole].[system_permission].user_id, + [guacamole].[system_permission].permission + FROM [guacamole].[system_permission] + ); + + + + diff --git a/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/resources/org/apache/guacamole/auth/jdbc/permission/UserPermissionMapper.xml b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/resources/org/apache/guacamole/auth/jdbc/permission/UserPermissionMapper.xml new file mode 100644 index 000000000..595c3263d --- /dev/null +++ b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/resources/org/apache/guacamole/auth/jdbc/permission/UserPermissionMapper.xml @@ -0,0 +1,137 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + DELETE FROM [guacamole].[user_permission] + USING [guacamole].[user] affected + WHERE + [guacamole].[user_permission].affected_user_id = affected.user_id + AND ([guacamole].[user_permission].user_id, permission, affected.username) IN + + (#{permission.userID,jdbcType=INTEGER}, + #{permission.type,jdbcType=VARCHAR}, + #{permission.objectIdentifier,jdbcType=INTEGER}) + + + + + + + + INSERT INTO [guacamole].[user_permission] ( + user_id, + permission, + affected_user_id + ) + SELECT DISTINCT + permissions.user_id, + permissions.permission, + [guacamole].[user].user_id + FROM + + SELECT #{permission.userID,jdbcType=INTEGER} AS user_id, + #{permission.type,jdbcType=VARCHAR} AS permission, + #{permission.objectIdentifier,jdbcType=INTEGER} AS username + + AS permissions + JOIN [guacamole].[user] ON [guacamole].[user].username = permissions.username + WHERE (permissions.user_id, permissions.permission, [guacamole].[user].user_id) NOT IN ( + SELECT + [guacamole].[user_permission].user_id, + [guacamole].[user_permission].permission, + [guacamole].[user_permission].affected_user_id + FROM [guacamole].[user_permission] + ); + + + + diff --git a/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/resources/org/apache/guacamole/auth/jdbc/sharingprofile/SharingProfileMapper.xml b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/resources/org/apache/guacamole/auth/jdbc/sharingprofile/SharingProfileMapper.xml new file mode 100644 index 000000000..9d7d45abd --- /dev/null +++ b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/resources/org/apache/guacamole/auth/jdbc/sharingprofile/SharingProfileMapper.xml @@ -0,0 +1,126 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + DELETE FROM [guacamole].[sharing_profile] + WHERE sharing_profile_id = #{identifier,jdbcType=INTEGER} + + + + + + INSERT INTO [guacamole].[sharing_profile] ( + sharing_profile_name, + primary_connection_id + ) + VALUES ( + #{object.name,jdbcType=VARCHAR}, + #{object.parentIdentifier,jdbcType=INTEGER} + ) + + + + + + UPDATE [guacamole].[sharing_profile] + SET sharing_profile_name = #{object.name,jdbcType=VARCHAR}, + primary_connection_id = #{object.parentIdentifier,jdbcType=INTEGER} + WHERE sharing_profile_id = #{object.objectID,jdbcType=INTEGER} + + + diff --git a/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/resources/org/apache/guacamole/auth/jdbc/sharingprofile/SharingProfileParameterMapper.xml b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/resources/org/apache/guacamole/auth/jdbc/sharingprofile/SharingProfileParameterMapper.xml new file mode 100644 index 000000000..8835350b7 --- /dev/null +++ b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/resources/org/apache/guacamole/auth/jdbc/sharingprofile/SharingProfileParameterMapper.xml @@ -0,0 +1,68 @@ + + + + + + + + + + + + + + + + + + + + DELETE FROM [guacamole].[sharing_profile_parameter] + WHERE sharing_profile_id = #{identifier,jdbcType=INTEGER} + + + + + + INSERT INTO [guacamole].[sharing_profile_parameter] ( + sharing_profile_id, + parameter_name, + parameter_value + ) + VALUES + + (#{parameter.sharingProfileIdentifier,jdbcType=INTEGER} + #{parameter.name,jdbcType=VARCHAR}, + #{parameter.value,jdbcType=VARCHAR}) + + + + + + diff --git a/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/resources/org/apache/guacamole/auth/jdbc/user/PasswordRecordMapper.xml b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/resources/org/apache/guacamole/auth/jdbc/user/PasswordRecordMapper.xml new file mode 100644 index 000000000..9ad67a6f3 --- /dev/null +++ b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/resources/org/apache/guacamole/auth/jdbc/user/PasswordRecordMapper.xml @@ -0,0 +1,79 @@ + + + + + + + + + + + + + + + + + + + + + + INSERT INTO [guacamole].[user_password_history] ( + user_id, + password_hash, + password_salt, + password_date + ) + VALUES ( + #{record.userID,jdbcType=INTEGER}, + #{record.passwordHash,jdbcType=BINARY}, + #{record.passwordSalt,jdbcType=BINARY}, + #{record.passwordDate,jdbcType=TIMESTAMP} + ); + + DELETE FROM [guacamole].[user_password_history] + WHERE password_history_id IN ( + SELECT password_history_id + FROM [guacamole].[user_password_history] + WHERE user_id = #{record.userID,jdbcType=INTEGER} + ORDER BY password_date DESC + OFFSET #{maxHistorySize} + ); + + + + diff --git a/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/resources/org/apache/guacamole/auth/jdbc/user/UserMapper.xml b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/resources/org/apache/guacamole/auth/jdbc/user/UserMapper.xml new file mode 100644 index 000000000..a4ceea79e --- /dev/null +++ b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/resources/org/apache/guacamole/auth/jdbc/user/UserMapper.xml @@ -0,0 +1,216 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + DELETE FROM [guacamole].[user] + WHERE username = #{identifier,jdbcType=VARCHAR} + + + + + + INSERT INTO [guacamole].[user] ( + username, + password_hash, + password_salt, + password_date, + disabled, + expired, + access_window_start, + access_window_end, + valid_from, + valid_until, + timezone, + full_name, + email_address, + organization, + organizational_role + ) + VALUES ( + #{object.identifier,jdbcType=VARCHAR}, + #{object.passwordHash,jdbcType=BINARY}, + #{object.passwordSalt,jdbcType=BINARY}, + #{object.passwordDate,jdbcType=TIMESTAMP}, + #{object.disabled,jdbcType=INTEGER}, + #{object.expired,jdbcType=INTEGER}, + #{object.accessWindowStart,jdbcType=TIME}, + #{object.accessWindowEnd,jdbcType=TIME}, + #{object.validFrom,jdbcType=DATE}, + #{object.validUntil,jdbcType=DATE}, + #{object.timeZone,jdbcType=VARCHAR}, + #{object.fullName,jdbcType=VARCHAR}, + #{object.emailAddress,jdbcType=VARCHAR}, + #{object.organization,jdbcType=VARCHAR}, + #{object.organizationalRole,jdbcType=VARCHAR} + ) + + + + + + UPDATE [guacamole].[user] + SET password_hash = #{object.passwordHash,jdbcType=BINARY}, + password_salt = #{object.passwordSalt,jdbcType=BINARY}, + password_date = #{object.passwordDate,jdbcType=TIMESTAMP}, + disabled = #{object.disabled,jdbcType=INTEGER}, + expired = #{object.expired,jdbcType=INTEGER}, + access_window_start = #{object.accessWindowStart,jdbcType=TIME}, + access_window_end = #{object.accessWindowEnd,jdbcType=TIME}, + valid_from = #{object.validFrom,jdbcType=DATE}, + valid_until = #{object.validUntil,jdbcType=DATE}, + timezone = #{object.timeZone,jdbcType=VARCHAR}, + full_name = #{object.fullName,jdbcType=VARCHAR}, + email_address = #{object.emailAddress,jdbcType=VARCHAR}, + organization = #{object.organization,jdbcType=VARCHAR}, + organizational_role = #{object.organizationalRole,jdbcType=VARCHAR} + WHERE user_id = #{object.objectID,jdbcType=VARCHAR} + + + diff --git a/extensions/guacamole-auth-jdbc/pom.xml b/extensions/guacamole-auth-jdbc/pom.xml index 2a5ef5b2b..7869c8650 100644 --- a/extensions/guacamole-auth-jdbc/pom.xml +++ b/extensions/guacamole-auth-jdbc/pom.xml @@ -70,6 +70,7 @@ modules/guacamole-auth-jdbc-mysql modules/guacamole-auth-jdbc-postgresql + modules/guacamole-auth-jdbc-sqlserver From 75f51f2244ac537c70c24283586b35975abfb663 Mon Sep 17 00:00:00 2001 From: Nick Couchman Date: Tue, 15 Aug 2017 14:28:20 -0400 Subject: [PATCH 02/24] GUACAMOLE-363: Fix up JDBC maps for proper SQL Server syntax. --- .../connection/ConnectionRecordMapper.xml | 8 ++------ .../ConnectionGroupPermissionMapper.xml | 10 ++++------ .../permission/ConnectionPermissionMapper.xml | 20 +++++++++---------- .../SharingProfilePermissionMapper.xml | 20 +++++++++---------- .../permission/SystemPermissionMapper.xml | 16 +++++++-------- .../jdbc/permission/UserPermissionMapper.xml | 10 ++++------ .../SharingProfileParameterMapper.xml | 2 +- 7 files changed, 36 insertions(+), 50 deletions(-) diff --git a/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/resources/org/apache/guacamole/auth/jdbc/connection/ConnectionRecordMapper.xml b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/resources/org/apache/guacamole/auth/jdbc/connection/ConnectionRecordMapper.xml index ec077db7f..2b873bb9a 100644 --- a/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/resources/org/apache/guacamole/auth/jdbc/connection/ConnectionRecordMapper.xml +++ b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/resources/org/apache/guacamole/auth/jdbc/connection/ConnectionRecordMapper.xml @@ -90,7 +90,7 @@ diff --git a/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/resources/org/apache/guacamole/auth/jdbc/permission/ConnectionGroupPermissionMapper.xml b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/resources/org/apache/guacamole/auth/jdbc/permission/ConnectionGroupPermissionMapper.xml index 2890ab31d..a7998880a 100644 --- a/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/resources/org/apache/guacamole/auth/jdbc/permission/ConnectionGroupPermissionMapper.xml +++ b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/resources/org/apache/guacamole/auth/jdbc/permission/ConnectionGroupPermissionMapper.xml @@ -117,12 +117,10 @@ #{permission.objectIdentifier,jdbcType=INTEGER} AS connection_group_id AS permissions - WHERE (user_id, permission, connection_group_id) NOT IN ( - SELECT - [guacamole].[connection_group_permission].user_id, - [guacamole].[connection_group_permission].permission, - [guacamole].[connection_group_permission].connection_group_id - FROM [guacamole].[connection_group_permission] + WHERE NOT EXISTS (SELECT 1 FROM [guacamole].[connection_group_permission] + WHERE [guacamole].[connection_group_permission].user_id = permissions.user_id AND + [guacamole].[connection_group_permission].permission = permissions.permission AND + [guacamole].[connection_group_permission].connection_group_id = permissions.connection_group_id ); diff --git a/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/resources/org/apache/guacamole/auth/jdbc/permission/ConnectionPermissionMapper.xml b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/resources/org/apache/guacamole/auth/jdbc/permission/ConnectionPermissionMapper.xml index 8ea85bc3c..08e875ccb 100644 --- a/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/resources/org/apache/guacamole/auth/jdbc/permission/ConnectionPermissionMapper.xml +++ b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/resources/org/apache/guacamole/auth/jdbc/permission/ConnectionPermissionMapper.xml @@ -87,12 +87,12 @@ DELETE FROM [guacamole].[connection_permission] - WHERE (user_id, permission, connection_id) IN + WHERE - (#{permission.userID,jdbcType=INTEGER}, - #{permission.type,jdbcType=VARCHAR}, - #{permission.objectIdentifier,jdbcType=INTEGER}) + open="(" separator=" OR " close=")"> + (user_id = #{permission.userID,jdbcType=INTEGER} AND + permission = #{permission.type,jdbcType=VARCHAR} AND + connection_id = #{permission.objectIdentifier,jdbcType=INTEGER}) @@ -117,12 +117,10 @@ #{permission.objectIdentifier,jdbcType=INTEGER} AS connection_id AS permissions - WHERE (user_id, permission, connection_id) NOT IN ( - SELECT - [guacamole].[connection_permission].user_id, - [guacamole].[connection_permission].permission, - [guacamole].[connection_permission].connection_id - FROM [guacamole].[connection_permission] + WHERE NOT EXISTS ( SELECT 1 FROM [guacamole].[connection_permission] + WHERE [guacamole].[connection_permission].user_id = permissions.user_id AND + [guacamole].[connection_permission].permission = permissions.permission AND + [guacamole].[connection_permission].connection_id = permissions.connection_id ); diff --git a/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/resources/org/apache/guacamole/auth/jdbc/permission/SharingProfilePermissionMapper.xml b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/resources/org/apache/guacamole/auth/jdbc/permission/SharingProfilePermissionMapper.xml index cb706b8d4..354dfb594 100644 --- a/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/resources/org/apache/guacamole/auth/jdbc/permission/SharingProfilePermissionMapper.xml +++ b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/resources/org/apache/guacamole/auth/jdbc/permission/SharingProfilePermissionMapper.xml @@ -87,12 +87,12 @@ DELETE FROM [guacamole].[sharing_profile_permission] - WHERE (user_id, permission, sharing_profile_id) IN + WHERE - (#{permission.userID,jdbcType=INTEGER}, - #{permission.type,jdbcType=VARCHAR}, - #{permission.objectIdentifier,jdbcType=INTEGER}) + open="(" separator=" OR " close=")"> + (user_id = #{permission.userID,jdbcType=INTEGER} AND + permission = #{permission.type,jdbcType=VARCHAR} AND + sharing_profile_id = #{permission.objectIdentifier,jdbcType=INTEGER}) @@ -117,12 +117,10 @@ #{permission.objectIdentifier,jdbcType=INTEGER} AS sharing_profile_id AS permissions - WHERE (user_id, permission, sharing_profile_id) NOT IN ( - SELECT - [guacamole].[sharing_profile_permission].user_id, - [guacamole].[sharing_profile_permission].permission, - [guacamole].[sharing_profile_permission].sharing_profile_id - FROM [guacamole].[sharing_profile_permission] + WHERE NOT EXISTS (SELECT 1 FROM [guacamole].[sharing_profile_permission] + WHERE [guacamole].[sharing_profile_permission].user_id = permissions.user_id + AND [guacamole].[sharing_profile_permission].permission = permissions.permission + AND [guacamole].[sharing_profile_permission].sharing_profile_id = permissions.sharing_profile_id ); diff --git a/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/resources/org/apache/guacamole/auth/jdbc/permission/SystemPermissionMapper.xml b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/resources/org/apache/guacamole/auth/jdbc/permission/SystemPermissionMapper.xml index d9e622b69..048877922 100644 --- a/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/resources/org/apache/guacamole/auth/jdbc/permission/SystemPermissionMapper.xml +++ b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/resources/org/apache/guacamole/auth/jdbc/permission/SystemPermissionMapper.xml @@ -63,11 +63,11 @@ DELETE FROM [guacamole].[system_permission] - WHERE (user_id, permission) IN + WHERE - (#{permission.userID,jdbcType=INTEGER}, - #{permission.type,jdbcType=VARCHAR}) + open="(" separator=" OR " close=")"> + (user_id = #{permission.userID,jdbcType=INTEGER} + AND permission = #{permission.type,jdbcType=VARCHAR}) @@ -89,11 +89,9 @@ #{permission.type,jdbcType=VARCHAR} AS permission AS permissions - WHERE (user_id, permission) NOT IN ( - SELECT - [guacamole].[system_permission].user_id, - [guacamole].[system_permission].permission - FROM [guacamole].[system_permission] + WHERE NOT EXISTS (SELECT 1 FROM [guacamole].[system_permission] + WHERE [guacamole].[system_permission].user_id = permissions.user_id + AND [guacamole].[system_permission].permission = permissions.permission ); diff --git a/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/resources/org/apache/guacamole/auth/jdbc/permission/UserPermissionMapper.xml b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/resources/org/apache/guacamole/auth/jdbc/permission/UserPermissionMapper.xml index 595c3263d..606719dcf 100644 --- a/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/resources/org/apache/guacamole/auth/jdbc/permission/UserPermissionMapper.xml +++ b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/resources/org/apache/guacamole/auth/jdbc/permission/UserPermissionMapper.xml @@ -124,12 +124,10 @@ AS permissions JOIN [guacamole].[user] ON [guacamole].[user].username = permissions.username - WHERE (permissions.user_id, permissions.permission, [guacamole].[user].user_id) NOT IN ( - SELECT - [guacamole].[user_permission].user_id, - [guacamole].[user_permission].permission, - [guacamole].[user_permission].affected_user_id - FROM [guacamole].[user_permission] + WHERE NOT EXISTS (SELECT 1 FROM [guacamole].[user_permission] + WHERE [guacamole].[user_permission].user_id = permissions.user_id + AND [guacamole].[user_permission].permission = permissions.permission + AND [guacamole].[user_permission].affected_user_id = [guacamole].[user].user_id ); diff --git a/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/resources/org/apache/guacamole/auth/jdbc/sharingprofile/SharingProfileParameterMapper.xml b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/resources/org/apache/guacamole/auth/jdbc/sharingprofile/SharingProfileParameterMapper.xml index 8835350b7..8f4a3fa10 100644 --- a/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/resources/org/apache/guacamole/auth/jdbc/sharingprofile/SharingProfileParameterMapper.xml +++ b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/resources/org/apache/guacamole/auth/jdbc/sharingprofile/SharingProfileParameterMapper.xml @@ -57,7 +57,7 @@ ) VALUES - (#{parameter.sharingProfileIdentifier,jdbcType=INTEGER} + (#{parameter.sharingProfileIdentifier,jdbcType=INTEGER}, #{parameter.name,jdbcType=VARCHAR}, #{parameter.value,jdbcType=VARCHAR}) From 63c541b1ff8b0333340005a78703210f05767f70 Mon Sep 17 00:00:00 2001 From: Nick Couchman Date: Tue, 15 Aug 2017 17:03:25 -0400 Subject: [PATCH 03/24] GUACAMOLE-363: Fix style, order, and batching in SQL Server schema scripts. --- .../schema/001-create-schema.sql | Bin 35118 -> 37808 bytes .../schema/002-create-admin-user.sql | 58 +++++++----------- 2 files changed, 21 insertions(+), 37 deletions(-) diff --git a/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/schema/001-create-schema.sql b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/schema/001-create-schema.sql index df95800ec6f91545eac5bdafd9d1a8d8e2bf31ed..166e14f3e96eb2b4456759034e531e2740543ed8 100644 GIT binary patch literal 37808 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 literal 35118 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 diff --git a/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/schema/002-create-admin-user.sql b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/schema/002-create-admin-user.sql index 08cce3f07..947c5ac2f 100644 --- a/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/schema/002-create-admin-user.sql +++ b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/schema/002-create-admin-user.sql @@ -1,43 +1,27 @@ /** - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. + * Create the default admin user account and set up full privileges. */ - -INSERT INTO [guacamole].[user] (username, password_hash, password_salt, password_date) -VALUES ('guacadmin', 0xCA458A7D494E3BE824F5E1E175A1556C0F8EEF2C2D7DF3633BEC4A29C4411960, -0xCA458A7D494E3BE824F5E1E175A1556C0F8EEF2C2D7DF3633BEC4A29C4411960, getdate()); - -INSERT INTO [guacamole].[system_permission] -SELECT user_id, permission -FROM ( - SELECT 'guacadmin' AS username, 'CREATE_CONNECTION' AS permission - UNION SELECT 'guacadmin' AS username, 'CREATE_CONNECTION_GROUP' AS permission - UNION SELECT 'guacadmin' AS username, 'CREATE_SHARING_PROFILE' AS permission - UNION SELECT 'guacadmin' AS username, 'CREATE_USER' AS permission - UNION SELECT 'guacadmin' AS username, 'ADMINISTER' AS permission) - permissions - JOIN [guacamole].[user] ON permissions.username = [guacamole].[user].[username]; +INSERT INTO [guacamole].[user] (username, password_hash, password_date) +VALUES ('guacadmin', HASHBYTES('SHA2_256', 'guacadmin'), getdate()); INSERT INTO [guacamole].[user_permission] SELECT [guacamole].[user].[user_id], [affected].[user_id], permission FROM ( - SELECT 'guacadmin' AS username, 'guacadmin' AS affected_username, 'READ' AS permission - UNION SELECT 'guacadmin' AS username, 'guacadmin' AS affected_username, 'UPDATE' AS permission - UNION SELECT 'guacadmin' AS username, 'guacadmin' AS affected_username, 'ADMINISTER' AS permission) - permissions - JOIN [guacamole].[user] ON permissions.username = [guacamole].[user].[username] - JOIN [guacamole].[user] affected ON permissions.affected_username = affected.username; + SELECT 'guacadmin' AS username, 'guacadmin' AS affected_username, 'READ' AS permission + UNION SELECT 'guacadmin' AS username, 'guacadmin' AS affected_username, 'UPDATE' AS permission + UNION SELECT 'guacadmin' AS username, 'guacadmin' AS affected_username, 'ADMINISTER' AS permission) + permissions + JOIN [guacamole].[user] ON permissions.username = [guacamole].[user].[username] + JOIN [guacamole].[user] affected ON permissions.affected_username = affected.username; + +INSERT INTO [guacamole].[system_permission] +SELECT user_id, permission +FROM ( + SELECT 'guacadmin' AS username, 'CREATE_CONNECTION' AS permission + UNION SELECT 'guacadmin' AS username, 'CREATE_CONNECTION_GROUP' AS permission + UNION SELECT 'guacadmin' AS username, 'CREATE_SHARING_PROFILE' AS permission + UNION SELECT 'guacadmin' AS username, 'CREATE_USER' AS permission + UNION SELECT 'guacadmin' AS username, 'ADMINISTER' AS permission) + permissions + JOIN [guacamole].[user] ON permissions.username = [guacamole].[user].[username]; +GO \ No newline at end of file From 60d615274181f28de54bd7e00a3eb2d14f9a43eb Mon Sep 17 00:00:00 2001 From: Nick Couchman Date: Tue, 15 Aug 2017 19:56:00 -0400 Subject: [PATCH 04/24] GUACAMOLE-363: Fix encoding of SQL file --- .../schema/001-create-schema.sql | Bin 37808 -> 18903 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/schema/001-create-schema.sql b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/schema/001-create-schema.sql index 166e14f3e96eb2b4456759034e531e2740543ed8..83299a1e6ae281908943791b2e3cf5661046201b 100644 GIT binary patch literal 18903 zcmeHPZExE+68_u(`49YNr^szLz1zL}QsA_7A%JO-Ssex(=_{ZVVtHbHkgb*vU&VDNEfRhz3QI* zc*4B#jCq%%(eY93d+f~K?P{Nj+tsfB`d025S7o#NMH0v1B8MgE-=@jkmgT`UuJb%e z!;B^AZ4gJl2lzf%vmjow>tG$kizvQjTs|w;@6??!$D0m)9ORUZz2hT%^smeD%(Q+UT(d4iRGq zpgsY8`S11i7{C^YZe#Y}@FC;yT~DUGSIQ0GjKG1+W=RY8an}KJ^gb}B-)BsouYo#W znh6|$ufStCfn8~t7bBgx1DH^+=T4h^LPv4M^fL|3>^meen!N|Ie@Dc3a*sWY>%?{~ zwgvZiw>#$#-*tX*Mvm753hA)%gq2UnlXJ%#{u>tV*mFjmlY=vgC<7_7a*S^LkPjRi)utBmUY zcyc1lFv-$T2kExAxOoQ~jZsjW8Gx8to=F5IR` zo-C5}PGSSWFAx4UNr83*1IwHy-ma1?S8V#}45JZ=euZopFVcrCk3lwJzDkhTYXbgT zQ-x5b&H^IR%BqqJ?*Z*s+9BNp(K`7I+?>SgM-Z-&YF{;w7iZmuU5fC%5oTOc`hq)uzKk+VcaREbdc)s`U$#+dehpIsd6Iu0#mnU0 z&+>qC74NG1_a>nC1j=NO2Km%{wk@Zf|U|RL^ z|LddLZJI91cRIk#p!@}KHFD8S1ZAa0ajAHiL5VfUS+HIw_vnsB5S}OO8mdvyOt@rF zf{kyX*tvoHDB41EIQ~ON=EUSGJSWes0hj7of^Qma0Bz;WtWF9ftQ1Q_4ve7GL%KAC zpN%a^RQTw=q1~yJdWb*7!rhs16Rq808bq-~N1AaO#A=s>b+Lz(d0;gastBu40u!eO ztOv91^j)#8idW(sp?+mVD>4>iz}G%(9gs+IGUTvOqs>bMElbtaV-B$dNLX_HAE`WtU{umK1ZAZ>uMai&8PZ;e5{hF6i!yN4w+%p$(ZDJ>RjvQZ z5rfU#-)2xVhq|(L%@~glCEry(w?q`3suis06wTNoN!P%zJ5hcPOp#2hoYw{{I(d2E zI&>kpcFptOg4Qr(3C&Gl5(-;lYR~FFFhr~P7^4-8hG!UK0BaCaGJnT{Yqb&kb%gk=k zA(o7C^`(+#dR0B=Q@shcTS&#|iP94xme#%st$5yQhA2tdEL308fFP*8c_ZJKX;hWO zQYD#^)RWwv_GG+~FI6KDU?jDJ78eLrO@LipUs#A?A^!YnD;-KMMMI#8BH9yjpmv-}Xq*iE*y`?17)*C_l##yqlU)(R$+vOhG z;b#;>C@12$M-G&>wvASc-C6~Hapw%y5y!C|nZZ$oBVnmmCteM5CC$(kqdKaWqukR1+w1x7PD*+ob z#?b~Oq$}^cHI9VoZjvIy-Fa`>V&nK;SO81?@ByY`th5mAC}6jH?AU;|vo8%({o=M` zV`>P{o2KJgd4bw(S%IKxVz@erP||@4YD^5lNkL`_n(IALXm7UEmLF&fPfQQAJ8ARm z%MMJJP<{{h8@FV&RR^+~_b)kA4Ok(LdCI@uq677iHges=F)f5(Zbd&kG)FM&zi2)% zo83kSW~~-B;NRj%p|^UiQAHyRmhM>XGU&g;5nQ7Jru@Z}&ZHNm#xp zj83w0hUu|K^O9@e#_CJ>OHX=alf@)Usm<35KUE+%DFG)%nrY9$8Fn^C#&OV z;|f(;9`$3oA=Pu5hHE+`8#B-5S1zhL)2> z1Ro78*?p9+xNaJPCQEMWkFUz=;(`823hkgO;xEVJ%Uoge?^5t)CEBbn?utT5<;7?I z{7OrodLLLYsMbB-GL>pQX~(8oRXw3nsMo6gfhbjdW?;m9t;KE7uT>}$uJiH#041&+ Ap#T5? literal 37808 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 From 70c33efc4abbf9e9581b760eb90785b7f0271650 Mon Sep 17 00:00:00 2001 From: Nick Couchman Date: Sat, 26 Aug 2017 18:00:32 -0400 Subject: [PATCH 05/24] GUACAMOLE-363: Add license to SQL schema files. --- .../schema/001-create-schema.sql | 21 ++++++++++++++++++- .../schema/002-create-admin-user.sql | 21 ++++++++++++++++++- 2 files changed, 40 insertions(+), 2 deletions(-) diff --git a/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/schema/001-create-schema.sql b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/schema/001-create-schema.sql index 83299a1e6..759e78d5e 100644 --- a/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/schema/001-create-schema.sql +++ b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/schema/001-create-schema.sql @@ -1,3 +1,22 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + /** * Create the guacamole schema. */ @@ -541,4 +560,4 @@ ALTER TABLE [guacamole].[user_password_history] ON DELETE CASCADE ALTER TABLE [guacamole].[user_password_history] CHECK CONSTRAINT [FK_user_password_history_user] -GO \ No newline at end of file +GO diff --git a/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/schema/002-create-admin-user.sql b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/schema/002-create-admin-user.sql index 947c5ac2f..f71d2837d 100644 --- a/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/schema/002-create-admin-user.sql +++ b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/schema/002-create-admin-user.sql @@ -1,3 +1,22 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + /** * Create the default admin user account and set up full privileges. */ @@ -24,4 +43,4 @@ FROM ( UNION SELECT 'guacadmin' AS username, 'ADMINISTER' AS permission) permissions JOIN [guacamole].[user] ON permissions.username = [guacamole].[user].[username]; -GO \ No newline at end of file +GO From c803be5c7a847bebc55790cc9d37ac0da8a24445 Mon Sep 17 00:00:00 2001 From: Nick Couchman Date: Sat, 26 Aug 2017 21:07:58 -0400 Subject: [PATCH 06/24] GUACAMOLE-363: Make table names standard in schema creation scripts. --- .../schema/001-create-schema.sql | 283 +++++++++--------- .../schema/002-create-admin-user.sql | 12 +- 2 files changed, 148 insertions(+), 147 deletions(-) diff --git a/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/schema/001-create-schema.sql b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/schema/001-create-schema.sql index 759e78d5e..44e498e3f 100644 --- a/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/schema/001-create-schema.sql +++ b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/schema/001-create-schema.sql @@ -22,10 +22,11 @@ */ CREATE SCHEMA [guacamole] GO + /** * List for permission data type. */ -CREATE RULE [guacamole].[permission_list] +CREATE RULE [guacamole].[guacamole_permission_list] AS @list IN ('READ','UPDATE','DELETE','ADMINISTER') GO @@ -33,7 +34,7 @@ GO /** * List for system permission data type. */ -CREATE RULE [guacamole].[system_permission_list] +CREATE RULE [guacamole].[guacamole_system_permission_list] AS @list IN ('CREATE_CONNECTION', 'CREATE_CONNECTION_GROUP', @@ -45,12 +46,12 @@ GO /** * The permission data type. */ -CREATE TYPE [guacamole].[permission] FROM [nvarchar](10) NOT NULL +CREATE TYPE [guacamole].[guacamole_permission] FROM [nvarchar](10) NOT NULL /** * The system permission data type. */ -CREATE TYPE [guacamole].[system_permission] FROM [nvarchar](32) NOT NULL +CREATE TYPE [guacamole].[guacamole_system_permission] FROM [nvarchar](32) NOT NULL GO /** @@ -58,7 +59,7 @@ GO */ SET ANSI_NULLS ON SET QUOTED_IDENTIFIER ON -CREATE TABLE [guacamole].[connection_group]( +CREATE TABLE [guacamole].[guacamole_connection_group]( [connection_group_id] [int] IDENTITY(1,1) NOT NULL, [parent_id] [int] NULL, [connection_group_name] [nvarchar](128) NOT NULL, @@ -67,7 +68,7 @@ CREATE TABLE [guacamole].[connection_group]( [max_connections_per_user] [int] NULL, [enable_session_affinity] [bit] NOT NULL, - CONSTRAINT [PK_connection_group] PRIMARY KEY CLUSTERED + CONSTRAINT [PK_guacmaole_connection_group] PRIMARY KEY CLUSTERED ([connection_group_id] ASC) WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, @@ -80,24 +81,24 @@ CREATE TABLE [guacamole].[connection_group]( /** * Foreign keys for connection_group table. */ -ALTER TABLE [guacamole].[connection_group] - WITH CHECK ADD CONSTRAINT [FK_connection_group_connection_group] FOREIGN KEY([parent_id]) - REFERENCES [guacamole].[connection_group] ([connection_group_id]) -ALTER TABLE [guacamole].[connection_group] - CHECK CONSTRAINT [FK_connection_group_connection_group] -ALTER TABLE [guacamole].[connection_group] - WITH CHECK ADD CONSTRAINT [CK_connection_group_type] +ALTER TABLE [guacamole].[guacamole_connection_group] + WITH CHECK ADD CONSTRAINT [FK_guacamole_connection_group_connection_group_id] FOREIGN KEY([parent_id]) + REFERENCES [guacamole].[guacamole_connection_group] ([connection_group_id]) +ALTER TABLE [guacamole].[guacamole_connection_group] + CHECK CONSTRAINT [FK_guacamole_connection_group_connection_group_id] +ALTER TABLE [guacamole].[guacamole_connection_group] + WITH CHECK ADD CONSTRAINT [CK_guacamole_connection_group_type] CHECK (([type]='BALANCING' OR [type]='ORGANIZATIONAL')) -ALTER TABLE [guacamole].[connection_group] - CHECK CONSTRAINT [CK_connection_group_type] +ALTER TABLE [guacamole].[guacamole_connection_group] + CHECK CONSTRAINT [CK_guacamole_connection_group_type] /** * Default values for connection_group table. */ -ALTER TABLE [guacamole].[connection_group] - ADD CONSTRAINT [DF_connection_group_type] DEFAULT (N'ORGANIZATIONAL') FOR [type] -ALTER TABLE [guacamole].[connection_group] - ADD CONSTRAINT [DF_connection_group_enable_session_affinity] DEFAULT ((0)) FOR [enable_session_affinity] +ALTER TABLE [guacamole].[guacamole_connection_group] + ADD CONSTRAINT [DF_guacamole_connection_group_type] DEFAULT (N'ORGANIZATIONAL') FOR [type] +ALTER TABLE [guacamole].[guacamole_connection_group] + ADD CONSTRAINT [DF_guacamole_connection_group_enable_session_affinity] DEFAULT ((0)) FOR [enable_session_affinity] GO /** @@ -105,7 +106,7 @@ GO */ SET ANSI_NULLS ON SET QUOTED_IDENTIFIER ON -CREATE TABLE [guacamole].[connection]( +CREATE TABLE [guacamole].[guacamole_connection]( [connection_id] [int] IDENTITY(1,1) NOT NULL, [connection_name] [nvarchar](128) NOT NULL, [parent_id] [int] NULL, @@ -118,7 +119,7 @@ CREATE TABLE [guacamole].[connection]( [connection_weight] [int] NULL, [failover_only] [bit] NOT NULL, - CONSTRAINT [PK_connection] PRIMARY KEY CLUSTERED + CONSTRAINT [PK_guacamole_connection] PRIMARY KEY CLUSTERED ([connection_id] ASC) WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, @@ -128,18 +129,18 @@ CREATE TABLE [guacamole].[connection]( ON [PRIMARY] ) ON [PRIMARY] -ALTER TABLE [guacamole].[connection] - WITH CHECK ADD CONSTRAINT [FK_connection_connection_group] FOREIGN KEY([parent_id]) -REFERENCES [guacamole].[connection_group] ([connection_group_id]) -ALTER TABLE [guacamole].[connection] - CHECK CONSTRAINT [FK_connection_connection_group] -ALTER TABLE [guacamole].[connection] +ALTER TABLE [guacamole].[guacamole_connection] + WITH CHECK ADD CONSTRAINT [FK_guacamole_connection_connection_group] FOREIGN KEY([parent_id]) +REFERENCES [guacamole].[guacamole_connection_group] ([connection_group_id]) +ALTER TABLE [guacamole].[guacamole_connection] + CHECK CONSTRAINT [FK_guacamole_connection_connection_group] +ALTER TABLE [guacamole].[guacamole_connection] WITH CHECK ADD CONSTRAINT [CK_proxy_encryption_method] CHECK (([proxy_encryption_method]='SSL' OR [proxy_encryption_method]='NONE')) -ALTER TABLE [guacamole].[connection] +ALTER TABLE [guacamole].[guacamole_connection] CHECK CONSTRAINT [CK_proxy_encryption_method] -ALTER TABLE [guacamole].[connection] - ADD CONSTRAINT [DF_connection_failover_only] DEFAULT ((0)) FOR [failover_only] +ALTER TABLE [guacamole].[guacamole_connection] + ADD CONSTRAINT [DF_guacamole_connection_failover_only] DEFAULT ((0)) FOR [failover_only] GO /** @@ -147,7 +148,7 @@ GO */ SET ANSI_NULLS ON SET QUOTED_IDENTIFIER ON -CREATE TABLE [guacamole].[user]( +CREATE TABLE [guacamole].[guacamole_user]( [user_id] [int] IDENTITY(1,1) NOT NULL, [username] [nvarchar](128) NOT NULL, [password_hash] [binary](32) NOT NULL, @@ -165,7 +166,7 @@ CREATE TABLE [guacamole].[user]( [organization] [nvarchar](256) NULL, [organizational_role] [nvarchar](256) NULL, - CONSTRAINT [PK_user] PRIMARY KEY CLUSTERED + CONSTRAINT [PK_guacamole_user] PRIMARY KEY CLUSTERED ([user_id] ASC) WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, @@ -178,10 +179,10 @@ CREATE TABLE [guacamole].[user]( /** * Defaults for user table */ -ALTER TABLE [guacamole].[user] - ADD CONSTRAINT [DF_user_disabled] DEFAULT ((0)) FOR [disabled] -ALTER TABLE [guacamole].[user] - ADD CONSTRAINT [DF_user_expired] DEFAULT ((0)) FOR [expired] +ALTER TABLE [guacamole].[guacamole_user] + ADD CONSTRAINT [DF_guacamole_user_disabled] DEFAULT ((0)) FOR [disabled] +ALTER TABLE [guacamole].[guacamole_user] + ADD CONSTRAINT [DF_guacamole_user_expired] DEFAULT ((0)) FOR [expired] GO /** @@ -190,12 +191,12 @@ GO */ SET ANSI_NULLS ON SET QUOTED_IDENTIFIER ON -CREATE TABLE [guacamole].[sharing_profile]( +CREATE TABLE [guacamole].[guacamole_sharing_profile]( [sharing_profile_id] [int] IDENTITY(1,1) NOT NULL, [sharing_profile_name] [nvarchar](128) NOT NULL, [primary_connection_id] [int] NOT NULL, - CONSTRAINT [PK_sharing_profile] PRIMARY KEY CLUSTERED + CONSTRAINT [PK_guacamole_sharing_profile] PRIMARY KEY CLUSTERED ([sharing_profile_id] ASC) WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, @@ -208,13 +209,13 @@ CREATE TABLE [guacamole].[sharing_profile]( /** * Foreign keys for sharing_profile table. */ -ALTER TABLE [guacamole].[sharing_profile] - WITH CHECK ADD CONSTRAINT [FK_sharing_profile_connection] FOREIGN KEY([primary_connection_id]) - REFERENCES [guacamole].[connection] ([connection_id]) +ALTER TABLE [guacamole].[guacamole_sharing_profile] + WITH CHECK ADD CONSTRAINT [FK_guacamole_sharing_profile_connection] FOREIGN KEY([primary_connection_id]) + REFERENCES [guacamole].[guacamole_connection] ([connection_id]) ON UPDATE CASCADE ON DELETE CASCADE -ALTER TABLE [guacamole].[sharing_profile] - CHECK CONSTRAINT [FK_sharing_profile_connection] +ALTER TABLE [guacamole].[guacamole_sharing_profile] + CHECK CONSTRAINT [FK_guacamole_sharing_profile_connection] GO /** @@ -223,12 +224,12 @@ GO */ SET ANSI_NULLS ON SET QUOTED_IDENTIFIER ON -CREATE TABLE [guacamole].[connection_parameter]( +CREATE TABLE [guacamole].[guacamole_connection_parameter]( [connection_id] [int] NOT NULL, [parameter_name] [nvarchar](128) NOT NULL, [parameter_value] [nvarchar](max) NOT NULL, - CONSTRAINT [PK_connection_parameter] PRIMARY KEY CLUSTERED + CONSTRAINT [PK_guacamole_connection_parameter] PRIMARY KEY CLUSTERED ([connection_id] ASC, [parameter_name] ASC) WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, @@ -241,13 +242,13 @@ CREATE TABLE [guacamole].[connection_parameter]( /** * Foreign keys for the connection_parameter table. */ -ALTER TABLE [guacamole].[connection_parameter] - WITH CHECK ADD CONSTRAINT [FK_connection_parameter_connection] FOREIGN KEY([connection_id]) - REFERENCES [guacamole].[connection] ([connection_id]) +ALTER TABLE [guacamole].[guacamole_connection_parameter] + WITH CHECK ADD CONSTRAINT [FK_guacamole_connection_parameter_connection] FOREIGN KEY([connection_id]) + REFERENCES [guacamole].[guacamole_connection] ([connection_id]) ON UPDATE CASCADE ON DELETE CASCADE -ALTER TABLE [guacamole].[connection_parameter] - CHECK CONSTRAINT [FK_connection_parameter_connection] +ALTER TABLE [guacamole].[guacamole_connection_parameter] + CHECK CONSTRAINT [FK_guacamole_connection_parameter_connection] GO /** @@ -256,12 +257,12 @@ GO */ SET ANSI_NULLS ON SET QUOTED_IDENTIFIER ON -CREATE TABLE [guacamole].[sharing_profile_parameter]( +CREATE TABLE [guacamole].[guacamole_sharing_profile_parameter]( [sharing_profile_id] [int] NOT NULL, [parameter_name] [nvarchar](128) NOT NULL, [parameter_value] [nvarchar](max) NOT NULL, - CONSTRAINT [PK_sharing_profile_parameter] PRIMARY KEY CLUSTERED + CONSTRAINT [PK_guacamole_sharing_profile_parameter] PRIMARY KEY CLUSTERED ([sharing_profile_id] ASC, [parameter_name] ASC) WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, @@ -275,13 +276,13 @@ CREATE TABLE [guacamole].[sharing_profile_parameter]( * Foreign keys for the sharing_profile_parameter * table. */ -ALTER TABLE [guacamole].[sharing_profile_parameter] - WITH CHECK ADD CONSTRAINT [FK_sharing_profile_parameter_sharing_profile] FOREIGN KEY([sharing_profile_id]) - REFERENCES [guacamole].[sharing_profile] ([sharing_profile_id]) +ALTER TABLE [guacamole].[guacamole_sharing_profile_parameter] + WITH CHECK ADD CONSTRAINT [FK_guacamole_sharing_profile_parameter_sharing_profile] FOREIGN KEY([sharing_profile_id]) + REFERENCES [guacamole].[guacamole_sharing_profile] ([sharing_profile_id]) ON UPDATE CASCADE ON DELETE CASCADE -ALTER TABLE [guacamole].[sharing_profile_parameter] - CHECK CONSTRAINT [FK_sharing_profile_parameter_sharing_profile] +ALTER TABLE [guacamole].[guacamole_sharing_profile_parameter] + CHECK CONSTRAINT [FK_guacamole_sharing_profile_parameter_sharing_profile] GO /** @@ -290,12 +291,12 @@ GO */ SET ANSI_NULLS ON SET QUOTED_IDENTIFIER ON -CREATE TABLE [guacamole].[connection_permission]( +CREATE TABLE [guacamole].[guacamole_connection_permission]( [user_id] [int] NOT NULL, [connection_id] [int] NOT NULL, - [permission] [guacamole].[permission] NOT NULL, + [permission] [guacamole].[guacamole_permission] NOT NULL, - CONSTRAINT [PK_connection_permission] PRIMARY KEY CLUSTERED + CONSTRAINT [PK_guacamole_connection_permission] PRIMARY KEY CLUSTERED ([user_id] ASC, [connection_id] ASC, [permission] ASC) WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, @@ -308,20 +309,20 @@ CREATE TABLE [guacamole].[connection_permission]( /** * Foreign keys for the connection_permission table. */ -ALTER TABLE [guacamole].[connection_permission] - WITH CHECK ADD CONSTRAINT [FK_connection_permission_connection1] FOREIGN KEY([connection_id]) - REFERENCES [guacamole].[connection] ([connection_id]) +ALTER TABLE [guacamole].[guacamole_connection_permission] + WITH CHECK ADD CONSTRAINT [FK_guacamole_connection_permission_connection1] FOREIGN KEY([connection_id]) + REFERENCES [guacamole].[guacamole_connection] ([connection_id]) ON UPDATE CASCADE ON DELETE CASCADE -ALTER TABLE [guacamole].[connection_permission] - CHECK CONSTRAINT [FK_connection_permission_connection1] -ALTER TABLE [guacamole].[connection_permission] - WITH CHECK ADD CONSTRAINT [FK_connection_permission_user1] FOREIGN KEY([user_id]) - REFERENCES [guacamole].[user] ([user_id]) +ALTER TABLE [guacamole].[guacamole_connection_permission] + CHECK CONSTRAINT [FK_guacamole_connection_permission_connection1] +ALTER TABLE [guacamole].[guacamole_connection_permission] + WITH CHECK ADD CONSTRAINT [FK_guacamole_connection_permission_user1] FOREIGN KEY([user_id]) + REFERENCES [guacamole].[guacamole_user] ([user_id]) ON UPDATE CASCADE ON DELETE CASCADE -ALTER TABLE [guacamole].[connection_permission] - CHECK CONSTRAINT [FK_connection_permission_user1] +ALTER TABLE [guacamole].[guacamole_connection_permission] + CHECK CONSTRAINT [FK_guacamole_connection_permission_user1] GO /** @@ -330,12 +331,12 @@ GO */ SET ANSI_NULLS ON SET QUOTED_IDENTIFIER ON -CREATE TABLE [guacamole].[connection_group_permission]( +CREATE TABLE [guacamole].[guacamole_connection_group_permission]( [user_id] [int] NOT NULL, [connection_group_id] [int] NOT NULL, - [permission] [guacamole].[permission] NOT NULL, + [permission] [guacamole].[guacamole_permission] NOT NULL, - CONSTRAINT [PK_connection_group_permission] PRIMARY KEY CLUSTERED + CONSTRAINT [PK_guacamole_connection_group_permission] PRIMARY KEY CLUSTERED ([user_id] ASC, [connection_group_id] ASC, [permission] ASC) WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, @@ -348,20 +349,20 @@ CREATE TABLE [guacamole].[connection_group_permission]( /** * Foreign keys for the connection_group_permission table. */ -ALTER TABLE [guacamole].[connection_group_permission] - WITH CHECK ADD CONSTRAINT [FK_connection_group_permission_connection_group] FOREIGN KEY([connection_group_id]) - REFERENCES [guacamole].[connection_group] ([connection_group_id]) +ALTER TABLE [guacamole].[guacamole_connection_group_permission] + WITH CHECK ADD CONSTRAINT [FK_guacamole_connection_group_permission_connection_group] FOREIGN KEY([connection_group_id]) + REFERENCES [guacamole].[guacamole_connection_group] ([connection_group_id]) ON UPDATE CASCADE ON DELETE CASCADE -ALTER TABLE [guacamole].[connection_group_permission] - CHECK CONSTRAINT [FK_connection_group_permission_connection_group] -ALTER TABLE [guacamole].[connection_group_permission] - WITH CHECK ADD CONSTRAINT [FK_connection_group_permission_user] FOREIGN KEY([user_id]) - REFERENCES [guacamole].[user] ([user_id]) +ALTER TABLE [guacamole].[guacamole_connection_group_permission] + CHECK CONSTRAINT [FK_guacamole_connection_group_permission_connection_group] +ALTER TABLE [guacamole].[guacamole_connection_group_permission] + WITH CHECK ADD CONSTRAINT [FK_guacamole_connection_group_permission_user] FOREIGN KEY([user_id]) + REFERENCES [guacamole].[guacamole_user] ([user_id]) ON UPDATE CASCADE ON DELETE CASCADE -ALTER TABLE [guacamole].[connection_group_permission] - CHECK CONSTRAINT [FK_connection_group_permission_user] +ALTER TABLE [guacamole].[guacamole_connection_group_permission] + CHECK CONSTRAINT [FK_guacamole_connection_group_permission_user] GO /** @@ -370,12 +371,12 @@ GO */ SET ANSI_NULLS ON SET QUOTED_IDENTIFIER ON -CREATE TABLE [guacamole].[sharing_profile_permission]( +CREATE TABLE [guacamole].[guacamole_sharing_profile_permission]( [user_id] [int] NOT NULL, [sharing_profile_id] [int] NOT NULL, - [permission] [guacamole].[permission] NOT NULL, + [permission] [guacamole].[guacamole_permission] NOT NULL, - CONSTRAINT [PK_sharing_profile_permission] PRIMARY KEY CLUSTERED + CONSTRAINT [PK_guacamole_sharing_profile_permission] PRIMARY KEY CLUSTERED ([user_id] ASC, [sharing_profile_id] ASC, [permission] ASC) WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, @@ -388,20 +389,20 @@ CREATE TABLE [guacamole].[sharing_profile_permission]( /** * Foreign keys for the sharing_profile_permission table. */ -ALTER TABLE [guacamole].[sharing_profile_permission] - WITH CHECK ADD CONSTRAINT [FK_sharing_profile_permission_sharing_profile] FOREIGN KEY([sharing_profile_id]) - REFERENCES [guacamole].[sharing_profile] ([sharing_profile_id]) +ALTER TABLE [guacamole].[guacamole_sharing_profile_permission] + WITH CHECK ADD CONSTRAINT [FK_guacamole_sharing_profile_permission_sharing_profile] FOREIGN KEY([sharing_profile_id]) + REFERENCES [guacamole].[guacamole_sharing_profile] ([sharing_profile_id]) ON UPDATE CASCADE ON DELETE CASCADE -ALTER TABLE [guacamole].[sharing_profile_permission] - CHECK CONSTRAINT [FK_sharing_profile_permission_sharing_profile] -ALTER TABLE [guacamole].[sharing_profile_permission] - WITH CHECK ADD CONSTRAINT [FK_sharing_profile_permission_user] FOREIGN KEY([user_id]) - REFERENCES [guacamole].[user] ([user_id]) +ALTER TABLE [guacamole].[guacamole_sharing_profile_permission] + CHECK CONSTRAINT [FK_guacamole_sharing_profile_permission_sharing_profile] +ALTER TABLE [guacamole].[guacamole_sharing_profile_permission] + WITH CHECK ADD CONSTRAINT [FK_guacamole_sharing_profile_permission_user] FOREIGN KEY([user_id]) + REFERENCES [guacamole].[guacamole_user] ([user_id]) ON UPDATE CASCADE ON DELETE CASCADE -ALTER TABLE [guacamole].[sharing_profile_permission] - CHECK CONSTRAINT [FK_sharing_profile_permission_user] +ALTER TABLE [guacamole].[guacamole_sharing_profile_permission] + CHECK CONSTRAINT [FK_guacamole_sharing_profile_permission_user] GO /** @@ -410,11 +411,11 @@ GO */ SET ANSI_NULLS ON SET QUOTED_IDENTIFIER ON -CREATE TABLE [guacamole].[system_permission]( +CREATE TABLE [guacamole].[guacamole_system_permission]( [user_id] [int] NOT NULL, - [permission] [guacamole].[system_permission] NOT NULL, + [permission] [guacamole].[guacamole_system_permission] NOT NULL, - CONSTRAINT [PK_system_permission] PRIMARY KEY CLUSTERED + CONSTRAINT [PK_guacamole_system_permission] PRIMARY KEY CLUSTERED ([user_id] ASC, [permission] ASC) WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, @@ -427,13 +428,13 @@ CREATE TABLE [guacamole].[system_permission]( /** * Foreign keys for system_permission table. */ -ALTER TABLE [guacamole].[system_permission] - WITH CHECK ADD CONSTRAINT [FK_system_permission_user] FOREIGN KEY([user_id]) - REFERENCES [guacamole].[user] ([user_id]) +ALTER TABLE [guacamole].[guacamole_system_permission] + WITH CHECK ADD CONSTRAINT [FK_guacamole_system_permission_user] FOREIGN KEY([user_id]) + REFERENCES [guacamole].[guacamole_user] ([user_id]) ON UPDATE CASCADE ON DELETE CASCADE -ALTER TABLE [guacamole].[system_permission] - CHECK CONSTRAINT [FK_system_permission_user] +ALTER TABLE [guacamole].[guacamole_system_permission] + CHECK CONSTRAINT [FK_guacamole_system_permission_user] GO /** @@ -442,12 +443,12 @@ GO */ SET ANSI_NULLS ON SET QUOTED_IDENTIFIER ON -CREATE TABLE [guacamole].[user_permission]( +CREATE TABLE [guacamole].[guacamole_user_permission]( [user_id] [int] NOT NULL, [affected_user_id] [int] NOT NULL, - [permission] [guacamole].[permission] NOT NULL, + [permission] [guacamole].[guacamole_permission] NOT NULL, - CONSTRAINT [PK_user_permission] PRIMARY KEY CLUSTERED + CONSTRAINT [PK_guacamole_user_permission] PRIMARY KEY CLUSTERED ([user_id] ASC, [affected_user_id] ASC, [permission] ASC) WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, @@ -460,18 +461,18 @@ CREATE TABLE [guacamole].[user_permission]( /** * Foreign keys for user_permission table. */ -ALTER TABLE [guacamole].[user_permission] - WITH CHECK ADD CONSTRAINT [FK_user_permission_user] FOREIGN KEY([user_id]) - REFERENCES [guacamole].[user] ([user_id]) +ALTER TABLE [guacamole].[guacamole_user_permission] + WITH CHECK ADD CONSTRAINT [FK_guacamole_user_permission_user] FOREIGN KEY([user_id]) + REFERENCES [guacamole].[guacamole_user] ([user_id]) ON UPDATE CASCADE ON DELETE CASCADE -ALTER TABLE [guacamole].[user_permission] - CHECK CONSTRAINT [FK_user_permission_user] -ALTER TABLE [guacamole].[user_permission] - WITH CHECK ADD CONSTRAINT [FK_user_permission_user1] FOREIGN KEY([affected_user_id]) - REFERENCES [guacamole].[user] ([user_id]) -ALTER TABLE [guacamole].[user_permission] - CHECK CONSTRAINT [FK_user_permission_user1] +ALTER TABLE [guacamole].[guacamole_user_permission] + CHECK CONSTRAINT [FK_guacamole_user_permission_user] +ALTER TABLE [guacamole].[guacamole_user_permission] + WITH CHECK ADD CONSTRAINT [FK_guacamole_user_permission_user1] FOREIGN KEY([affected_user_id]) + REFERENCES [guacamole].[guacamole_user] ([user_id]) +ALTER TABLE [guacamole].[guacamole_user_permission] + CHECK CONSTRAINT [FK_guacamole_user_permission_user1] GO /** @@ -480,7 +481,7 @@ GO */ SET ANSI_NULLS ON SET QUOTED_IDENTIFIER ON -CREATE TABLE [guacamole].[connection_history]( +CREATE TABLE [guacamole].[guacamole_connection_history]( [history_id] [int] IDENTITY(1,1) NOT NULL, [user_id] [int] NULL, [username] [nvarchar](128) NOT NULL, @@ -492,7 +493,7 @@ CREATE TABLE [guacamole].[connection_history]( [start_date] [datetime] NOT NULL, [end_date] [datetime] NULL, - CONSTRAINT [PK_connection_history] PRIMARY KEY CLUSTERED + CONSTRAINT [PK_guacamole_connection_history] PRIMARY KEY CLUSTERED ([history_id] ASC) WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, @@ -505,25 +506,25 @@ CREATE TABLE [guacamole].[connection_history]( /** * Foreign keys for connection_history table */ -ALTER TABLE [guacamole].[connection_history] - WITH CHECK ADD CONSTRAINT [FK_connection_history_connection] FOREIGN KEY([connection_id]) - REFERENCES [guacamole].[connection] ([connection_id]) +ALTER TABLE [guacamole].[guacamole_connection_history] + WITH CHECK ADD CONSTRAINT [FK_guacamole_connection_history_connection] FOREIGN KEY([connection_id]) + REFERENCES [guacamole].[guacamole_connection] ([connection_id]) ON UPDATE CASCADE ON DELETE SET NULL -ALTER TABLE [guacamole].[connection_history] - CHECK CONSTRAINT [FK_connection_history_connection] -ALTER TABLE [guacamole].[connection_history] - WITH CHECK ADD CONSTRAINT [FK_connection_history_sharing_profile] FOREIGN KEY([sharing_profile_id]) - REFERENCES [guacamole].[sharing_profile] ([sharing_profile_id]) -ALTER TABLE [guacamole].[connection_history] - CHECK CONSTRAINT [FK_connection_history_sharing_profile] -ALTER TABLE [guacamole].[connection_history] - WITH CHECK ADD CONSTRAINT [FK_connection_history_user] FOREIGN KEY([user_id]) - REFERENCES [guacamole].[user] ([user_id]) +ALTER TABLE [guacamole].[guacamole_connection_history] + CHECK CONSTRAINT [FK_guacamole_connection_history_connection] +ALTER TABLE [guacamole].[guacamole_connection_history] + WITH CHECK ADD CONSTRAINT [FK_guacamole_connection_history_sharing_profile] FOREIGN KEY([sharing_profile_id]) + REFERENCES [guacamole].[guacamole_sharing_profile] ([sharing_profile_id]) +ALTER TABLE [guacamole].[guacamole_connection_history] + CHECK CONSTRAINT [FK_guacamole_connection_history_sharing_profile] +ALTER TABLE [guacamole].[guacamole_connection_history] + WITH CHECK ADD CONSTRAINT [FK_guacamole_connection_history_user] FOREIGN KEY([user_id]) + REFERENCES [guacamole].[guacamole_user] ([user_id]) ON UPDATE CASCADE ON DELETE SET NULL -ALTER TABLE [guacamole].[connection_history] - CHECK CONSTRAINT [FK_connection_history_user] +ALTER TABLE [guacamole].[guacamole_connection_history] + CHECK CONSTRAINT [FK_guacamole_connection_history_user] GO /** @@ -533,14 +534,14 @@ GO */ SET ANSI_NULLS ON SET QUOTED_IDENTIFIER ON -CREATE TABLE [guacamole].[user_password_history]( +CREATE TABLE [guacamole].[guacamole_user_password_history]( [password_history_id] [int] IDENTITY(1,1) NOT NULL, [user_id] [int] NOT NULL, [password_hash] [binary](32) NOT NULL, [password_salt] [binary](32) NULL, [password_date] [datetime] NOT NULL, - CONSTRAINT [PK_user_password_history] PRIMARY KEY CLUSTERED + CONSTRAINT [PK_guacamole_user_password_history] PRIMARY KEY CLUSTERED ([password_history_id] ASC) WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, @@ -553,11 +554,11 @@ CREATE TABLE [guacamole].[user_password_history]( /** * Foreign keys for user_password_history table */ -ALTER TABLE [guacamole].[user_password_history] - WITH CHECK ADD CONSTRAINT [FK_user_password_history_user] FOREIGN KEY([user_id]) - REFERENCES [guacamole].[user] ([user_id]) +ALTER TABLE [guacamole].[guacamole_user_password_history] + WITH CHECK ADD CONSTRAINT [FK_guacamole_user_password_history_user] FOREIGN KEY([user_id]) + REFERENCES [guacamole].[guacamole_user] ([user_id]) ON UPDATE CASCADE ON DELETE CASCADE -ALTER TABLE [guacamole].[user_password_history] - CHECK CONSTRAINT [FK_user_password_history_user] +ALTER TABLE [guacamole].[guacamole_user_password_history] + CHECK CONSTRAINT [FK_guacamole_user_password_history_user] GO diff --git a/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/schema/002-create-admin-user.sql b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/schema/002-create-admin-user.sql index f71d2837d..fa807b26f 100644 --- a/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/schema/002-create-admin-user.sql +++ b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/schema/002-create-admin-user.sql @@ -20,18 +20,18 @@ /** * Create the default admin user account and set up full privileges. */ -INSERT INTO [guacamole].[user] (username, password_hash, password_date) +INSERT INTO [guacamole].[guacamole_user] (username, password_hash, password_date) VALUES ('guacadmin', HASHBYTES('SHA2_256', 'guacadmin'), getdate()); -INSERT INTO [guacamole].[user_permission] -SELECT [guacamole].[user].[user_id], [affected].[user_id], permission +INSERT INTO [guacamole].[guacamole_user_permission] +SELECT [guacamole].[guacamole_user].[user_id], [affected].[user_id], permission FROM ( SELECT 'guacadmin' AS username, 'guacadmin' AS affected_username, 'READ' AS permission UNION SELECT 'guacadmin' AS username, 'guacadmin' AS affected_username, 'UPDATE' AS permission UNION SELECT 'guacadmin' AS username, 'guacadmin' AS affected_username, 'ADMINISTER' AS permission) permissions - JOIN [guacamole].[user] ON permissions.username = [guacamole].[user].[username] - JOIN [guacamole].[user] affected ON permissions.affected_username = affected.username; + JOIN [guacamole].[guacamole_user] ON permissions.username = [guacamole].[guacamole_user].[username] + JOIN [guacamole].[guacamole_user] affected ON permissions.affected_username = affected.username; INSERT INTO [guacamole].[system_permission] SELECT user_id, permission @@ -42,5 +42,5 @@ FROM ( UNION SELECT 'guacadmin' AS username, 'CREATE_USER' AS permission UNION SELECT 'guacadmin' AS username, 'ADMINISTER' AS permission) permissions - JOIN [guacamole].[user] ON permissions.username = [guacamole].[user].[username]; + JOIN [guacamole].[guacamole_user] ON permissions.username = [guacamole].[guacamole_user].[username]; GO From 66c4b86b0aeb3550fe39489b57d8862d51486b8e Mon Sep 17 00:00:00 2001 From: Nick Couchman Date: Sun, 27 Aug 2017 16:08:33 -0400 Subject: [PATCH 07/24] GUACAMOLE-363: Standardize table names with other JDBC modules; switch back to dbo schema for now. --- .../schema/001-create-schema.sql | 172 +++++++++--------- .../schema/002-create-admin-user.sql | 14 +- .../auth/jdbc/connection/ConnectionMapper.xml | 38 ++-- .../connection/ConnectionParameterMapper.xml | 6 +- .../connection/ConnectionRecordMapper.xml | 110 +++++------ .../connectiongroup/ConnectionGroupMapper.xml | 46 ++--- .../ConnectionGroupPermissionMapper.xml | 30 +-- .../permission/ConnectionPermissionMapper.xml | 30 +-- .../SharingProfilePermissionMapper.xml | 30 +-- .../permission/SystemPermissionMapper.xml | 26 +-- .../jdbc/permission/UserPermissionMapper.xml | 52 +++--- .../sharingprofile/SharingProfileMapper.xml | 24 +-- .../SharingProfileParameterMapper.xml | 6 +- .../auth/jdbc/user/PasswordRecordMapper.xml | 22 +-- .../guacamole/auth/jdbc/user/UserMapper.xml | 26 +-- 15 files changed, 316 insertions(+), 316 deletions(-) diff --git a/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/schema/001-create-schema.sql b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/schema/001-create-schema.sql index 44e498e3f..92525dd02 100644 --- a/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/schema/001-create-schema.sql +++ b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/schema/001-create-schema.sql @@ -20,13 +20,13 @@ /** * Create the guacamole schema. */ -CREATE SCHEMA [guacamole] +CREATE SCHEMA [dbo] GO /** * List for permission data type. */ -CREATE RULE [guacamole].[guacamole_permission_list] +CREATE RULE [dbo].[guacamole_permission_list] AS @list IN ('READ','UPDATE','DELETE','ADMINISTER') GO @@ -34,7 +34,7 @@ GO /** * List for system permission data type. */ -CREATE RULE [guacamole].[guacamole_system_permission_list] +CREATE RULE [dbo].[guacamole_system_permission_list] AS @list IN ('CREATE_CONNECTION', 'CREATE_CONNECTION_GROUP', @@ -46,12 +46,12 @@ GO /** * The permission data type. */ -CREATE TYPE [guacamole].[guacamole_permission] FROM [nvarchar](10) NOT NULL +CREATE TYPE [dbo].[guacamole_permission] FROM [nvarchar](10) NOT NULL /** * The system permission data type. */ -CREATE TYPE [guacamole].[guacamole_system_permission] FROM [nvarchar](32) NOT NULL +CREATE TYPE [dbo].[guacamole_system_permission] FROM [nvarchar](32) NOT NULL GO /** @@ -59,7 +59,7 @@ GO */ SET ANSI_NULLS ON SET QUOTED_IDENTIFIER ON -CREATE TABLE [guacamole].[guacamole_connection_group]( +CREATE TABLE [dbo].[guacamole_connection_group]( [connection_group_id] [int] IDENTITY(1,1) NOT NULL, [parent_id] [int] NULL, [connection_group_name] [nvarchar](128) NOT NULL, @@ -81,23 +81,23 @@ CREATE TABLE [guacamole].[guacamole_connection_group]( /** * Foreign keys for connection_group table. */ -ALTER TABLE [guacamole].[guacamole_connection_group] +ALTER TABLE [dbo].[guacamole_connection_group] WITH CHECK ADD CONSTRAINT [FK_guacamole_connection_group_connection_group_id] FOREIGN KEY([parent_id]) - REFERENCES [guacamole].[guacamole_connection_group] ([connection_group_id]) -ALTER TABLE [guacamole].[guacamole_connection_group] + REFERENCES [dbo].[guacamole_connection_group] ([connection_group_id]) +ALTER TABLE [dbo].[guacamole_connection_group] CHECK CONSTRAINT [FK_guacamole_connection_group_connection_group_id] -ALTER TABLE [guacamole].[guacamole_connection_group] +ALTER TABLE [dbo].[guacamole_connection_group] WITH CHECK ADD CONSTRAINT [CK_guacamole_connection_group_type] CHECK (([type]='BALANCING' OR [type]='ORGANIZATIONAL')) -ALTER TABLE [guacamole].[guacamole_connection_group] +ALTER TABLE [dbo].[guacamole_connection_group] CHECK CONSTRAINT [CK_guacamole_connection_group_type] /** * Default values for connection_group table. */ -ALTER TABLE [guacamole].[guacamole_connection_group] +ALTER TABLE [dbo].[guacamole_connection_group] ADD CONSTRAINT [DF_guacamole_connection_group_type] DEFAULT (N'ORGANIZATIONAL') FOR [type] -ALTER TABLE [guacamole].[guacamole_connection_group] +ALTER TABLE [dbo].[guacamole_connection_group] ADD CONSTRAINT [DF_guacamole_connection_group_enable_session_affinity] DEFAULT ((0)) FOR [enable_session_affinity] GO @@ -106,7 +106,7 @@ GO */ SET ANSI_NULLS ON SET QUOTED_IDENTIFIER ON -CREATE TABLE [guacamole].[guacamole_connection]( +CREATE TABLE [dbo].[guacamole_connection]( [connection_id] [int] IDENTITY(1,1) NOT NULL, [connection_name] [nvarchar](128) NOT NULL, [parent_id] [int] NULL, @@ -129,17 +129,17 @@ CREATE TABLE [guacamole].[guacamole_connection]( ON [PRIMARY] ) ON [PRIMARY] -ALTER TABLE [guacamole].[guacamole_connection] +ALTER TABLE [dbo].[guacamole_connection] WITH CHECK ADD CONSTRAINT [FK_guacamole_connection_connection_group] FOREIGN KEY([parent_id]) -REFERENCES [guacamole].[guacamole_connection_group] ([connection_group_id]) -ALTER TABLE [guacamole].[guacamole_connection] +REFERENCES [dbo].[guacamole_connection_group] ([connection_group_id]) +ALTER TABLE [dbo].[guacamole_connection] CHECK CONSTRAINT [FK_guacamole_connection_connection_group] -ALTER TABLE [guacamole].[guacamole_connection] +ALTER TABLE [dbo].[guacamole_connection] WITH CHECK ADD CONSTRAINT [CK_proxy_encryption_method] CHECK (([proxy_encryption_method]='SSL' OR [proxy_encryption_method]='NONE')) -ALTER TABLE [guacamole].[guacamole_connection] +ALTER TABLE [dbo].[guacamole_connection] CHECK CONSTRAINT [CK_proxy_encryption_method] -ALTER TABLE [guacamole].[guacamole_connection] +ALTER TABLE [dbo].[guacamole_connection] ADD CONSTRAINT [DF_guacamole_connection_failover_only] DEFAULT ((0)) FOR [failover_only] GO @@ -148,7 +148,7 @@ GO */ SET ANSI_NULLS ON SET QUOTED_IDENTIFIER ON -CREATE TABLE [guacamole].[guacamole_user]( +CREATE TABLE [dbo].[guacamole_user]( [user_id] [int] IDENTITY(1,1) NOT NULL, [username] [nvarchar](128) NOT NULL, [password_hash] [binary](32) NOT NULL, @@ -179,9 +179,9 @@ CREATE TABLE [guacamole].[guacamole_user]( /** * Defaults for user table */ -ALTER TABLE [guacamole].[guacamole_user] +ALTER TABLE [dbo].[guacamole_user] ADD CONSTRAINT [DF_guacamole_user_disabled] DEFAULT ((0)) FOR [disabled] -ALTER TABLE [guacamole].[guacamole_user] +ALTER TABLE [dbo].[guacamole_user] ADD CONSTRAINT [DF_guacamole_user_expired] DEFAULT ((0)) FOR [expired] GO @@ -191,7 +191,7 @@ GO */ SET ANSI_NULLS ON SET QUOTED_IDENTIFIER ON -CREATE TABLE [guacamole].[guacamole_sharing_profile]( +CREATE TABLE [dbo].[guacamole_sharing_profile]( [sharing_profile_id] [int] IDENTITY(1,1) NOT NULL, [sharing_profile_name] [nvarchar](128) NOT NULL, [primary_connection_id] [int] NOT NULL, @@ -209,12 +209,12 @@ CREATE TABLE [guacamole].[guacamole_sharing_profile]( /** * Foreign keys for sharing_profile table. */ -ALTER TABLE [guacamole].[guacamole_sharing_profile] +ALTER TABLE [dbo].[guacamole_sharing_profile] WITH CHECK ADD CONSTRAINT [FK_guacamole_sharing_profile_connection] FOREIGN KEY([primary_connection_id]) - REFERENCES [guacamole].[guacamole_connection] ([connection_id]) + REFERENCES [dbo].[guacamole_connection] ([connection_id]) ON UPDATE CASCADE ON DELETE CASCADE -ALTER TABLE [guacamole].[guacamole_sharing_profile] +ALTER TABLE [dbo].[guacamole_sharing_profile] CHECK CONSTRAINT [FK_guacamole_sharing_profile_connection] GO @@ -224,7 +224,7 @@ GO */ SET ANSI_NULLS ON SET QUOTED_IDENTIFIER ON -CREATE TABLE [guacamole].[guacamole_connection_parameter]( +CREATE TABLE [dbo].[guacamole_connection_parameter]( [connection_id] [int] NOT NULL, [parameter_name] [nvarchar](128) NOT NULL, [parameter_value] [nvarchar](max) NOT NULL, @@ -242,12 +242,12 @@ CREATE TABLE [guacamole].[guacamole_connection_parameter]( /** * Foreign keys for the connection_parameter table. */ -ALTER TABLE [guacamole].[guacamole_connection_parameter] +ALTER TABLE [dbo].[guacamole_connection_parameter] WITH CHECK ADD CONSTRAINT [FK_guacamole_connection_parameter_connection] FOREIGN KEY([connection_id]) - REFERENCES [guacamole].[guacamole_connection] ([connection_id]) + REFERENCES [dbo].[guacamole_connection] ([connection_id]) ON UPDATE CASCADE ON DELETE CASCADE -ALTER TABLE [guacamole].[guacamole_connection_parameter] +ALTER TABLE [dbo].[guacamole_connection_parameter] CHECK CONSTRAINT [FK_guacamole_connection_parameter_connection] GO @@ -257,7 +257,7 @@ GO */ SET ANSI_NULLS ON SET QUOTED_IDENTIFIER ON -CREATE TABLE [guacamole].[guacamole_sharing_profile_parameter]( +CREATE TABLE [dbo].[guacamole_sharing_profile_parameter]( [sharing_profile_id] [int] NOT NULL, [parameter_name] [nvarchar](128) NOT NULL, [parameter_value] [nvarchar](max) NOT NULL, @@ -276,12 +276,12 @@ CREATE TABLE [guacamole].[guacamole_sharing_profile_parameter]( * Foreign keys for the sharing_profile_parameter * table. */ -ALTER TABLE [guacamole].[guacamole_sharing_profile_parameter] +ALTER TABLE [dbo].[guacamole_sharing_profile_parameter] WITH CHECK ADD CONSTRAINT [FK_guacamole_sharing_profile_parameter_sharing_profile] FOREIGN KEY([sharing_profile_id]) - REFERENCES [guacamole].[guacamole_sharing_profile] ([sharing_profile_id]) + REFERENCES [dbo].[guacamole_sharing_profile] ([sharing_profile_id]) ON UPDATE CASCADE ON DELETE CASCADE -ALTER TABLE [guacamole].[guacamole_sharing_profile_parameter] +ALTER TABLE [dbo].[guacamole_sharing_profile_parameter] CHECK CONSTRAINT [FK_guacamole_sharing_profile_parameter_sharing_profile] GO @@ -291,10 +291,10 @@ GO */ SET ANSI_NULLS ON SET QUOTED_IDENTIFIER ON -CREATE TABLE [guacamole].[guacamole_connection_permission]( +CREATE TABLE [dbo].[guacamole_connection_permission]( [user_id] [int] NOT NULL, [connection_id] [int] NOT NULL, - [permission] [guacamole].[guacamole_permission] NOT NULL, + [permission] [dbo].[guacamole_permission] NOT NULL, CONSTRAINT [PK_guacamole_connection_permission] PRIMARY KEY CLUSTERED ([user_id] ASC, [connection_id] ASC, [permission] ASC) @@ -309,19 +309,19 @@ CREATE TABLE [guacamole].[guacamole_connection_permission]( /** * Foreign keys for the connection_permission table. */ -ALTER TABLE [guacamole].[guacamole_connection_permission] +ALTER TABLE [dbo].[guacamole_connection_permission] WITH CHECK ADD CONSTRAINT [FK_guacamole_connection_permission_connection1] FOREIGN KEY([connection_id]) - REFERENCES [guacamole].[guacamole_connection] ([connection_id]) + REFERENCES [dbo].[guacamole_connection] ([connection_id]) ON UPDATE CASCADE ON DELETE CASCADE -ALTER TABLE [guacamole].[guacamole_connection_permission] +ALTER TABLE [dbo].[guacamole_connection_permission] CHECK CONSTRAINT [FK_guacamole_connection_permission_connection1] -ALTER TABLE [guacamole].[guacamole_connection_permission] +ALTER TABLE [dbo].[guacamole_connection_permission] WITH CHECK ADD CONSTRAINT [FK_guacamole_connection_permission_user1] FOREIGN KEY([user_id]) - REFERENCES [guacamole].[guacamole_user] ([user_id]) + REFERENCES [dbo].[guacamole_user] ([user_id]) ON UPDATE CASCADE ON DELETE CASCADE -ALTER TABLE [guacamole].[guacamole_connection_permission] +ALTER TABLE [dbo].[guacamole_connection_permission] CHECK CONSTRAINT [FK_guacamole_connection_permission_user1] GO @@ -331,10 +331,10 @@ GO */ SET ANSI_NULLS ON SET QUOTED_IDENTIFIER ON -CREATE TABLE [guacamole].[guacamole_connection_group_permission]( +CREATE TABLE [dbo].[guacamole_connection_group_permission]( [user_id] [int] NOT NULL, [connection_group_id] [int] NOT NULL, - [permission] [guacamole].[guacamole_permission] NOT NULL, + [permission] [dbo].[guacamole_permission] NOT NULL, CONSTRAINT [PK_guacamole_connection_group_permission] PRIMARY KEY CLUSTERED ([user_id] ASC, [connection_group_id] ASC, [permission] ASC) @@ -349,19 +349,19 @@ CREATE TABLE [guacamole].[guacamole_connection_group_permission]( /** * Foreign keys for the connection_group_permission table. */ -ALTER TABLE [guacamole].[guacamole_connection_group_permission] +ALTER TABLE [dbo].[guacamole_connection_group_permission] WITH CHECK ADD CONSTRAINT [FK_guacamole_connection_group_permission_connection_group] FOREIGN KEY([connection_group_id]) - REFERENCES [guacamole].[guacamole_connection_group] ([connection_group_id]) + REFERENCES [dbo].[guacamole_connection_group] ([connection_group_id]) ON UPDATE CASCADE ON DELETE CASCADE -ALTER TABLE [guacamole].[guacamole_connection_group_permission] +ALTER TABLE [dbo].[guacamole_connection_group_permission] CHECK CONSTRAINT [FK_guacamole_connection_group_permission_connection_group] -ALTER TABLE [guacamole].[guacamole_connection_group_permission] +ALTER TABLE [dbo].[guacamole_connection_group_permission] WITH CHECK ADD CONSTRAINT [FK_guacamole_connection_group_permission_user] FOREIGN KEY([user_id]) - REFERENCES [guacamole].[guacamole_user] ([user_id]) + REFERENCES [dbo].[guacamole_user] ([user_id]) ON UPDATE CASCADE ON DELETE CASCADE -ALTER TABLE [guacamole].[guacamole_connection_group_permission] +ALTER TABLE [dbo].[guacamole_connection_group_permission] CHECK CONSTRAINT [FK_guacamole_connection_group_permission_user] GO @@ -371,10 +371,10 @@ GO */ SET ANSI_NULLS ON SET QUOTED_IDENTIFIER ON -CREATE TABLE [guacamole].[guacamole_sharing_profile_permission]( +CREATE TABLE [dbo].[guacamole_sharing_profile_permission]( [user_id] [int] NOT NULL, [sharing_profile_id] [int] NOT NULL, - [permission] [guacamole].[guacamole_permission] NOT NULL, + [permission] [dbo].[guacamole_permission] NOT NULL, CONSTRAINT [PK_guacamole_sharing_profile_permission] PRIMARY KEY CLUSTERED ([user_id] ASC, [sharing_profile_id] ASC, [permission] ASC) @@ -389,19 +389,19 @@ CREATE TABLE [guacamole].[guacamole_sharing_profile_permission]( /** * Foreign keys for the sharing_profile_permission table. */ -ALTER TABLE [guacamole].[guacamole_sharing_profile_permission] +ALTER TABLE [dbo].[guacamole_sharing_profile_permission] WITH CHECK ADD CONSTRAINT [FK_guacamole_sharing_profile_permission_sharing_profile] FOREIGN KEY([sharing_profile_id]) - REFERENCES [guacamole].[guacamole_sharing_profile] ([sharing_profile_id]) + REFERENCES [dbo].[guacamole_sharing_profile] ([sharing_profile_id]) ON UPDATE CASCADE ON DELETE CASCADE -ALTER TABLE [guacamole].[guacamole_sharing_profile_permission] +ALTER TABLE [dbo].[guacamole_sharing_profile_permission] CHECK CONSTRAINT [FK_guacamole_sharing_profile_permission_sharing_profile] -ALTER TABLE [guacamole].[guacamole_sharing_profile_permission] +ALTER TABLE [dbo].[guacamole_sharing_profile_permission] WITH CHECK ADD CONSTRAINT [FK_guacamole_sharing_profile_permission_user] FOREIGN KEY([user_id]) - REFERENCES [guacamole].[guacamole_user] ([user_id]) + REFERENCES [dbo].[guacamole_user] ([user_id]) ON UPDATE CASCADE ON DELETE CASCADE -ALTER TABLE [guacamole].[guacamole_sharing_profile_permission] +ALTER TABLE [dbo].[guacamole_sharing_profile_permission] CHECK CONSTRAINT [FK_guacamole_sharing_profile_permission_user] GO @@ -411,9 +411,9 @@ GO */ SET ANSI_NULLS ON SET QUOTED_IDENTIFIER ON -CREATE TABLE [guacamole].[guacamole_system_permission]( +CREATE TABLE [dbo].[guacamole_system_permission]( [user_id] [int] NOT NULL, - [permission] [guacamole].[guacamole_system_permission] NOT NULL, + [permission] [dbo].[guacamole_system_permission] NOT NULL, CONSTRAINT [PK_guacamole_system_permission] PRIMARY KEY CLUSTERED ([user_id] ASC, [permission] ASC) @@ -428,12 +428,12 @@ CREATE TABLE [guacamole].[guacamole_system_permission]( /** * Foreign keys for system_permission table. */ -ALTER TABLE [guacamole].[guacamole_system_permission] +ALTER TABLE [dbo].[guacamole_system_permission] WITH CHECK ADD CONSTRAINT [FK_guacamole_system_permission_user] FOREIGN KEY([user_id]) - REFERENCES [guacamole].[guacamole_user] ([user_id]) + REFERENCES [dbo].[guacamole_user] ([user_id]) ON UPDATE CASCADE ON DELETE CASCADE -ALTER TABLE [guacamole].[guacamole_system_permission] +ALTER TABLE [dbo].[guacamole_system_permission] CHECK CONSTRAINT [FK_guacamole_system_permission_user] GO @@ -443,10 +443,10 @@ GO */ SET ANSI_NULLS ON SET QUOTED_IDENTIFIER ON -CREATE TABLE [guacamole].[guacamole_user_permission]( +CREATE TABLE [dbo].[guacamole_user_permission]( [user_id] [int] NOT NULL, [affected_user_id] [int] NOT NULL, - [permission] [guacamole].[guacamole_permission] NOT NULL, + [permission] [dbo].[guacamole_permission] NOT NULL, CONSTRAINT [PK_guacamole_user_permission] PRIMARY KEY CLUSTERED ([user_id] ASC, [affected_user_id] ASC, [permission] ASC) @@ -461,17 +461,17 @@ CREATE TABLE [guacamole].[guacamole_user_permission]( /** * Foreign keys for user_permission table. */ -ALTER TABLE [guacamole].[guacamole_user_permission] +ALTER TABLE [dbo].[guacamole_user_permission] WITH CHECK ADD CONSTRAINT [FK_guacamole_user_permission_user] FOREIGN KEY([user_id]) - REFERENCES [guacamole].[guacamole_user] ([user_id]) + REFERENCES [dbo].[guacamole_user] ([user_id]) ON UPDATE CASCADE ON DELETE CASCADE -ALTER TABLE [guacamole].[guacamole_user_permission] +ALTER TABLE [dbo].[guacamole_user_permission] CHECK CONSTRAINT [FK_guacamole_user_permission_user] -ALTER TABLE [guacamole].[guacamole_user_permission] +ALTER TABLE [dbo].[guacamole_user_permission] WITH CHECK ADD CONSTRAINT [FK_guacamole_user_permission_user1] FOREIGN KEY([affected_user_id]) - REFERENCES [guacamole].[guacamole_user] ([user_id]) -ALTER TABLE [guacamole].[guacamole_user_permission] + REFERENCES [dbo].[guacamole_user] ([user_id]) +ALTER TABLE [dbo].[guacamole_user_permission] CHECK CONSTRAINT [FK_guacamole_user_permission_user1] GO @@ -481,7 +481,7 @@ GO */ SET ANSI_NULLS ON SET QUOTED_IDENTIFIER ON -CREATE TABLE [guacamole].[guacamole_connection_history]( +CREATE TABLE [dbo].[guacamole_connection_history]( [history_id] [int] IDENTITY(1,1) NOT NULL, [user_id] [int] NULL, [username] [nvarchar](128) NOT NULL, @@ -506,24 +506,24 @@ CREATE TABLE [guacamole].[guacamole_connection_history]( /** * Foreign keys for connection_history table */ -ALTER TABLE [guacamole].[guacamole_connection_history] +ALTER TABLE [dbo].[guacamole_connection_history] WITH CHECK ADD CONSTRAINT [FK_guacamole_connection_history_connection] FOREIGN KEY([connection_id]) - REFERENCES [guacamole].[guacamole_connection] ([connection_id]) + REFERENCES [dbo].[guacamole_connection] ([connection_id]) ON UPDATE CASCADE ON DELETE SET NULL -ALTER TABLE [guacamole].[guacamole_connection_history] +ALTER TABLE [dbo].[guacamole_connection_history] CHECK CONSTRAINT [FK_guacamole_connection_history_connection] -ALTER TABLE [guacamole].[guacamole_connection_history] +ALTER TABLE [dbo].[guacamole_connection_history] WITH CHECK ADD CONSTRAINT [FK_guacamole_connection_history_sharing_profile] FOREIGN KEY([sharing_profile_id]) - REFERENCES [guacamole].[guacamole_sharing_profile] ([sharing_profile_id]) -ALTER TABLE [guacamole].[guacamole_connection_history] + REFERENCES [dbo].[guacamole_sharing_profile] ([sharing_profile_id]) +ALTER TABLE [dbo].[guacamole_connection_history] CHECK CONSTRAINT [FK_guacamole_connection_history_sharing_profile] -ALTER TABLE [guacamole].[guacamole_connection_history] +ALTER TABLE [dbo].[guacamole_connection_history] WITH CHECK ADD CONSTRAINT [FK_guacamole_connection_history_user] FOREIGN KEY([user_id]) - REFERENCES [guacamole].[guacamole_user] ([user_id]) + REFERENCES [dbo].[guacamole_user] ([user_id]) ON UPDATE CASCADE ON DELETE SET NULL -ALTER TABLE [guacamole].[guacamole_connection_history] +ALTER TABLE [dbo].[guacamole_connection_history] CHECK CONSTRAINT [FK_guacamole_connection_history_user] GO @@ -534,7 +534,7 @@ GO */ SET ANSI_NULLS ON SET QUOTED_IDENTIFIER ON -CREATE TABLE [guacamole].[guacamole_user_password_history]( +CREATE TABLE [dbo].[guacamole_user_password_history]( [password_history_id] [int] IDENTITY(1,1) NOT NULL, [user_id] [int] NOT NULL, [password_hash] [binary](32) NOT NULL, @@ -554,11 +554,11 @@ CREATE TABLE [guacamole].[guacamole_user_password_history]( /** * Foreign keys for user_password_history table */ -ALTER TABLE [guacamole].[guacamole_user_password_history] +ALTER TABLE [dbo].[guacamole_user_password_history] WITH CHECK ADD CONSTRAINT [FK_guacamole_user_password_history_user] FOREIGN KEY([user_id]) - REFERENCES [guacamole].[guacamole_user] ([user_id]) + REFERENCES [dbo].[guacamole_user] ([user_id]) ON UPDATE CASCADE ON DELETE CASCADE -ALTER TABLE [guacamole].[guacamole_user_password_history] +ALTER TABLE [dbo].[guacamole_user_password_history] CHECK CONSTRAINT [FK_guacamole_user_password_history_user] GO diff --git a/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/schema/002-create-admin-user.sql b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/schema/002-create-admin-user.sql index fa807b26f..408d7cafd 100644 --- a/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/schema/002-create-admin-user.sql +++ b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/schema/002-create-admin-user.sql @@ -20,20 +20,20 @@ /** * Create the default admin user account and set up full privileges. */ -INSERT INTO [guacamole].[guacamole_user] (username, password_hash, password_date) +INSERT INTO [dbo].[guacamole_user] (username, password_hash, password_date) VALUES ('guacadmin', HASHBYTES('SHA2_256', 'guacadmin'), getdate()); -INSERT INTO [guacamole].[guacamole_user_permission] -SELECT [guacamole].[guacamole_user].[user_id], [affected].[user_id], permission +INSERT INTO [dbo].[guacamole_user_permission] +SELECT [dbo].[guacamole_user].[user_id], [affected].[user_id], permission FROM ( SELECT 'guacadmin' AS username, 'guacadmin' AS affected_username, 'READ' AS permission UNION SELECT 'guacadmin' AS username, 'guacadmin' AS affected_username, 'UPDATE' AS permission UNION SELECT 'guacadmin' AS username, 'guacadmin' AS affected_username, 'ADMINISTER' AS permission) permissions - JOIN [guacamole].[guacamole_user] ON permissions.username = [guacamole].[guacamole_user].[username] - JOIN [guacamole].[guacamole_user] affected ON permissions.affected_username = affected.username; + JOIN [dbo].[guacamole_user] ON permissions.username = [dbo].[guacamole_user].[username] + JOIN [dbo].[guacamole_user] affected ON permissions.affected_username = affected.username; -INSERT INTO [guacamole].[system_permission] +INSERT INTO [dbo].[system_permission] SELECT user_id, permission FROM ( SELECT 'guacadmin' AS username, 'CREATE_CONNECTION' AS permission @@ -42,5 +42,5 @@ FROM ( UNION SELECT 'guacadmin' AS username, 'CREATE_USER' AS permission UNION SELECT 'guacadmin' AS username, 'ADMINISTER' AS permission) permissions - JOIN [guacamole].[guacamole_user] ON permissions.username = [guacamole].[guacamole_user].[username]; + JOIN [dbo].[guacamole_user] ON permissions.username = [dbo].[guacamole_user].[username]; GO diff --git a/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/resources/org/apache/guacamole/auth/jdbc/connection/ConnectionMapper.xml b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/resources/org/apache/guacamole/auth/jdbc/connection/ConnectionMapper.xml index 24008fcc4..c62ca6f36 100644 --- a/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/resources/org/apache/guacamole/auth/jdbc/connection/ConnectionMapper.xml +++ b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/resources/org/apache/guacamole/auth/jdbc/connection/ConnectionMapper.xml @@ -51,13 +51,13 @@ SELECT connection_id - FROM [guacamole].[connection] + FROM [dbo].[guacamole_connection] WHERE parent_id = #{parentIdentifier,jdbcType=INTEGER} parent_id IS NULL @@ -74,9 +74,9 @@ - DELETE FROM [guacamole].[connection_parameter] + DELETE FROM [dbo].[guacamole_connection_parameter] WHERE connection_id = #{identifier,jdbcType=INTEGER} - INSERT INTO [guacamole].[connection_parameter] ( + INSERT INTO [dbo].[guacamole_connection_parameter] ( connection_id, parameter_name, parameter_value diff --git a/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/resources/org/apache/guacamole/auth/jdbc/connection/ConnectionRecordMapper.xml b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/resources/org/apache/guacamole/auth/jdbc/connection/ConnectionRecordMapper.xml index 2b873bb9a..648d16f60 100644 --- a/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/resources/org/apache/guacamole/auth/jdbc/connection/ConnectionRecordMapper.xml +++ b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/resources/org/apache/guacamole/auth/jdbc/connection/ConnectionRecordMapper.xml @@ -40,28 +40,28 @@ - INSERT INTO [guacamole].[connection_history] ( + INSERT INTO [dbo].[guacamole_connection_history] ( connection_id, connection_name, remote_host, @@ -78,7 +78,7 @@ #{record.remoteHost,jdbcType=VARCHAR}, #{record.sharingProfileIdentifier,jdbcType=INTEGER}, #{record.sharingProfileName,jdbcType=VARCHAR}, - (SELECT user_id FROM [guacamole].[user] + (SELECT user_id FROM [dbo].[guacamole_user] WHERE username = #{record.username,jdbcType=VARCHAR}), #{record.username,jdbcType=VARCHAR}, #{record.startDate,jdbcType=TIMESTAMP}, @@ -91,31 +91,31 @@ SELECT TOP (#{limit,jdbcType=INTEGER}) - [guacamole].[connection_history].connection_id, - [guacamole].[connection_history].connection_name, - [guacamole].[connection_history].remote_host, - [guacamole].[connection_history].sharing_profile_id, - [guacamole].[connection_history].sharing_profile_name, - [guacamole].[connection_history].user_id, - [guacamole].[connection_history].username, - [guacamole].[connection_history].start_date, - [guacamole].[connection_history].end_date - FROM [guacamole].[connection_history] - LEFT JOIN [guacamole].[connection] ON [guacamole].[connection_history].connection_id = [guacamole].[connection].connection_id - LEFT JOIN [guacamole].[user] ON [guacamole].[connection_history].user_id = [guacamole].[user].user_id + [dbo].[guacamole_connection_history].connection_id, + [dbo].[guacamole_connection_history].connection_name, + [dbo].[guacamole_connection_history].remote_host, + [dbo].[guacamole_connection_history].sharing_profile_id, + [dbo].[guacamole_connection_history].sharing_profile_name, + [dbo].[guacamole_connection_history].user_id, + [dbo].[guacamole_connection_history].username, + [dbo].[guacamole_connection_history].start_date, + [dbo].[guacamole_connection_history].end_date + FROM [dbo].[guacamole_connection_history] + LEFT JOIN [dbo].[guacamole_connection] ON [dbo].[guacamole_connection_history].connection_id = [dbo].[guacamole_connection].connection_id + LEFT JOIN [dbo].[guacamole_user] ON [dbo].[guacamole_connection_history].user_id = [dbo].[guacamole_user].user_id - JOIN [guacamole].[connection_permission] ON - [guacamole].[connection_history].connection_id = [guacamole].[connection_permission].connection_id - AND [guacamole].[connection_permission].user_id = #{user.objectID,jdbcType=INTEGER} - AND [guacamole].[connection_permission].permission = 'READ' + JOIN [dbo].[guacamole_connection_permission] ON + [dbo].[guacamole_connection_history].connection_id = [dbo].[guacamole_connection_permission].connection_id + AND [dbo].[guacamole_connection_permission].user_id = #{user.objectID,jdbcType=INTEGER} + AND [dbo].[guacamole_connection_permission].permission = 'READ' - JOIN [guacamole].[user_permission] ON - [guacamole].[connection_history].user_id = [guacamole].[user_permission].affected_user_id - AND [guacamole].[user_permission].user_id = #{user.objectID,jdbcType=INTEGER} - AND [guacamole].[user_permission].permission = 'READ' + JOIN [dbo].[guacamole_user_permission] ON + [dbo].[guacamole_connection_history].user_id = [dbo].[guacamole_user_permission].affected_user_id + AND [dbo].[guacamole_user_permission].user_id = #{user.objectID,jdbcType=INTEGER} + AND [dbo].[guacamole_user_permission].permission = 'READ' ( - [guacamole].[connection_history].user_id IN ( + [dbo].[guacamole_connection_history].user_id IN ( SELECT user_id - FROM [guacamole].[user] + FROM [dbo].[guacamole_user] WHERE POSITION(#{term.term,jdbcType=VARCHAR} IN username) > 0 ) - OR [guacamole].[connection_history].connection_id IN ( + OR [dbo].[guacamole_connection_history].connection_id IN ( SELECT connection_id - FROM [guacamole].[connection] + FROM [dbo].[guacamole_connection] WHERE POSITION(#{term.term,jdbcType=VARCHAR} IN connection_name) > 0 ) @@ -201,7 +201,7 @@ - [guacamole].[connection_history].start_date + [dbo].[guacamole_connection_history].start_date 1 DESC diff --git a/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/resources/org/apache/guacamole/auth/jdbc/connectiongroup/ConnectionGroupMapper.xml b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/resources/org/apache/guacamole/auth/jdbc/connectiongroup/ConnectionGroupMapper.xml index 47a3e63d5..d1f97a738 100644 --- a/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/resources/org/apache/guacamole/auth/jdbc/connectiongroup/ConnectionGroupMapper.xml +++ b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/resources/org/apache/guacamole/auth/jdbc/connectiongroup/ConnectionGroupMapper.xml @@ -53,13 +53,13 @@ SELECT connection_group_id - FROM [guacamole].[connection_group] + FROM [dbo].[guacamole_connection_group] WHERE parent_id = #{parentIdentifier,jdbcType=INTEGER} parent_id IS NULL @@ -76,9 +76,9 @@ SELECT - [guacamole].[connection_group_permission].user_id, + [dbo].[guacamole_connection_group_permission].user_id, username, permission, connection_group_id - FROM [guacamole].[connection_group_permission] - JOIN [guacamole].[user] ON [guacamole].[connection_group_permission].user_id = [guacamole].[user].user_id - WHERE [guacamole].[connection_group_permission].user_id = #{user.objectID,jdbcType=INTEGER} + FROM [dbo].[guacamole_connection_group_permission] + JOIN [dbo].[guacamole_user] ON [dbo].[guacamole_connection_group_permission].user_id = [dbo].[guacamole_user].user_id + WHERE [dbo].[guacamole_connection_group_permission].user_id = #{user.objectID,jdbcType=INTEGER} @@ -50,14 +50,14 @@ SELECT DISTINCT connection_group_id - FROM [guacamole].[connection_group_permission] + FROM [dbo].[guacamole_connection_group_permission] WHERE user_id = #{user.objectID,jdbcType=INTEGER} AND connection_group_id IN @@ -86,7 +86,7 @@ - DELETE FROM [guacamole].[connection_group_permission] + DELETE FROM [dbo].[guacamole_connection_group_permission] WHERE (user_id, permission, connection_group_id) IN @@ -100,7 +100,7 @@ - INSERT INTO [guacamole].[connection_group_permission] ( + INSERT INTO [dbo].[guacamole_connection_group_permission] ( user_id, permission, connection_group_id @@ -117,10 +117,10 @@ #{permission.objectIdentifier,jdbcType=INTEGER} AS connection_group_id AS permissions - WHERE NOT EXISTS (SELECT 1 FROM [guacamole].[connection_group_permission] - WHERE [guacamole].[connection_group_permission].user_id = permissions.user_id AND - [guacamole].[connection_group_permission].permission = permissions.permission AND - [guacamole].[connection_group_permission].connection_group_id = permissions.connection_group_id + WHERE NOT EXISTS (SELECT 1 FROM [dbo].[guacamole_connection_group_permission] + WHERE [dbo].[guacamole_connection_group_permission].user_id = permissions.user_id AND + [dbo].[guacamole_connection_group_permission].permission = permissions.permission AND + [dbo].[guacamole_connection_group_permission].connection_group_id = permissions.connection_group_id ); diff --git a/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/resources/org/apache/guacamole/auth/jdbc/permission/ConnectionPermissionMapper.xml b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/resources/org/apache/guacamole/auth/jdbc/permission/ConnectionPermissionMapper.xml index 08e875ccb..fa25f637e 100644 --- a/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/resources/org/apache/guacamole/auth/jdbc/permission/ConnectionPermissionMapper.xml +++ b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/resources/org/apache/guacamole/auth/jdbc/permission/ConnectionPermissionMapper.xml @@ -36,13 +36,13 @@ @@ -50,14 +50,14 @@ SELECT DISTINCT connection_id - FROM [guacamole].[connection_permission] + FROM [dbo].[guacamole_connection_permission] WHERE user_id = #{user.objectID,jdbcType=INTEGER} AND connection_id IN @@ -86,7 +86,7 @@ - DELETE FROM [guacamole].[connection_permission] + DELETE FROM [dbo].[guacamole_connection_permission] WHERE @@ -100,7 +100,7 @@ - INSERT INTO [guacamole].[connection_permission] ( + INSERT INTO [dbo].[guacamole_connection_permission] ( user_id, permission, connection_id @@ -117,10 +117,10 @@ #{permission.objectIdentifier,jdbcType=INTEGER} AS connection_id AS permissions - WHERE NOT EXISTS ( SELECT 1 FROM [guacamole].[connection_permission] - WHERE [guacamole].[connection_permission].user_id = permissions.user_id AND - [guacamole].[connection_permission].permission = permissions.permission AND - [guacamole].[connection_permission].connection_id = permissions.connection_id + WHERE NOT EXISTS ( SELECT 1 FROM [dbo].[guacamole_connection_permission] + WHERE [dbo].[guacamole_connection_permission].user_id = permissions.user_id AND + [dbo].[guacamole_connection_permission].permission = permissions.permission AND + [dbo].[guacamole_connection_permission].connection_id = permissions.connection_id ); diff --git a/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/resources/org/apache/guacamole/auth/jdbc/permission/SharingProfilePermissionMapper.xml b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/resources/org/apache/guacamole/auth/jdbc/permission/SharingProfilePermissionMapper.xml index 354dfb594..40e9907c4 100644 --- a/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/resources/org/apache/guacamole/auth/jdbc/permission/SharingProfilePermissionMapper.xml +++ b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/resources/org/apache/guacamole/auth/jdbc/permission/SharingProfilePermissionMapper.xml @@ -36,13 +36,13 @@ @@ -50,14 +50,14 @@ SELECT DISTINCT sharing_profile_id - FROM [guacamole].[sharing_profile_permission] + FROM [dbo].[guacamole_sharing_profile_permission] WHERE user_id = #{user.objectID,jdbcType=INTEGER} AND sharing_profile_id IN @@ -86,7 +86,7 @@ - DELETE FROM [guacamole].[sharing_profile_permission] + DELETE FROM [dbo].[guacamole_sharing_profile_permission] WHERE @@ -100,7 +100,7 @@ - INSERT INTO [guacamole].[sharing_profile_permission] ( + INSERT INTO [dbo].[guacamole_sharing_profile_permission] ( user_id, permission, sharing_profile_id @@ -117,10 +117,10 @@ #{permission.objectIdentifier,jdbcType=INTEGER} AS sharing_profile_id AS permissions - WHERE NOT EXISTS (SELECT 1 FROM [guacamole].[sharing_profile_permission] - WHERE [guacamole].[sharing_profile_permission].user_id = permissions.user_id - AND [guacamole].[sharing_profile_permission].permission = permissions.permission - AND [guacamole].[sharing_profile_permission].sharing_profile_id = permissions.sharing_profile_id + WHERE NOT EXISTS (SELECT 1 FROM [dbo].[guacamole_sharing_profile_permission] + WHERE [dbo].[guacamole_sharing_profile_permission].user_id = permissions.user_id + AND [dbo].[guacamole_sharing_profile_permission].permission = permissions.permission + AND [dbo].[guacamole_sharing_profile_permission].sharing_profile_id = permissions.sharing_profile_id ); diff --git a/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/resources/org/apache/guacamole/auth/jdbc/permission/SystemPermissionMapper.xml b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/resources/org/apache/guacamole/auth/jdbc/permission/SystemPermissionMapper.xml index 048877922..d33dd3b65 100644 --- a/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/resources/org/apache/guacamole/auth/jdbc/permission/SystemPermissionMapper.xml +++ b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/resources/org/apache/guacamole/auth/jdbc/permission/SystemPermissionMapper.xml @@ -35,12 +35,12 @@ @@ -48,13 +48,13 @@ @@ -62,7 +62,7 @@ - DELETE FROM [guacamole].[system_permission] + DELETE FROM [dbo].[guacamole_system_permission] WHERE @@ -75,7 +75,7 @@ - INSERT INTO [guacamole].[system_permission] ( + INSERT INTO [dbo].[guacamole_system_permission] ( user_id, permission ) @@ -89,9 +89,9 @@ #{permission.type,jdbcType=VARCHAR} AS permission AS permissions - WHERE NOT EXISTS (SELECT 1 FROM [guacamole].[system_permission] - WHERE [guacamole].[system_permission].user_id = permissions.user_id - AND [guacamole].[system_permission].permission = permissions.permission + WHERE NOT EXISTS (SELECT 1 FROM [dbo].[guacamole_system_permission] + WHERE [dbo].[guacamole_system_permission].user_id = permissions.user_id + AND [dbo].[guacamole_system_permission].permission = permissions.permission ); diff --git a/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/resources/org/apache/guacamole/auth/jdbc/permission/UserPermissionMapper.xml b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/resources/org/apache/guacamole/auth/jdbc/permission/UserPermissionMapper.xml index 606719dcf..a2d416fe6 100644 --- a/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/resources/org/apache/guacamole/auth/jdbc/permission/UserPermissionMapper.xml +++ b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/resources/org/apache/guacamole/auth/jdbc/permission/UserPermissionMapper.xml @@ -36,14 +36,14 @@ @@ -51,15 +51,15 @@ SELECT DISTINCT username - FROM [guacamole].[user_permission] - JOIN [guacamole].[user] ON [guacamole].[user_permission].affected_user_id = [guacamole].[user].user_id + FROM [dbo].[guacamole_user_permission] + JOIN [dbo].[guacamole_user] ON [dbo].[guacamole_user_permission].affected_user_id = [dbo].[guacamole_user].user_id WHERE - [guacamole].[user_permission].user_id = #{user.objectID,jdbcType=INTEGER} + [dbo].[guacamole_user_permission].user_id = #{user.objectID,jdbcType=INTEGER} AND username IN @@ -89,11 +89,11 @@ - DELETE FROM [guacamole].[user_permission] - USING [guacamole].[user] affected + DELETE FROM [dbo].[guacamole_user_permission] + USING [dbo].[guacamole_user] affected WHERE - [guacamole].[user_permission].affected_user_id = affected.user_id - AND ([guacamole].[user_permission].user_id, permission, affected.username) IN + [dbo].[guacamole_user_permission].affected_user_id = affected.user_id + AND ([dbo].[guacamole_user_permission].user_id, permission, affected.username) IN (#{permission.userID,jdbcType=INTEGER}, @@ -106,7 +106,7 @@ - INSERT INTO [guacamole].[user_permission] ( + INSERT INTO [dbo].[guacamole_user_permission] ( user_id, permission, affected_user_id @@ -114,7 +114,7 @@ SELECT DISTINCT permissions.user_id, permissions.permission, - [guacamole].[user].user_id + [dbo].[guacamole_user].user_id FROM @@ -123,11 +123,11 @@ #{permission.objectIdentifier,jdbcType=INTEGER} AS username AS permissions - JOIN [guacamole].[user] ON [guacamole].[user].username = permissions.username - WHERE NOT EXISTS (SELECT 1 FROM [guacamole].[user_permission] - WHERE [guacamole].[user_permission].user_id = permissions.user_id - AND [guacamole].[user_permission].permission = permissions.permission - AND [guacamole].[user_permission].affected_user_id = [guacamole].[user].user_id + JOIN [dbo].[guacamole_user] ON [dbo].[guacamole_user].username = permissions.username + WHERE NOT EXISTS (SELECT 1 FROM [dbo].[guacamole_user_permission] + WHERE [dbo].[guacamole_user_permission].user_id = permissions.user_id + AND [dbo].[guacamole_user_permission].permission = permissions.permission + AND [dbo].[guacamole_user_permission].affected_user_id = [dbo].[guacamole_user].user_id ); diff --git a/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/resources/org/apache/guacamole/auth/jdbc/sharingprofile/SharingProfileMapper.xml b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/resources/org/apache/guacamole/auth/jdbc/sharingprofile/SharingProfileMapper.xml index 9d7d45abd..d3b5c10e4 100644 --- a/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/resources/org/apache/guacamole/auth/jdbc/sharingprofile/SharingProfileMapper.xml +++ b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/resources/org/apache/guacamole/auth/jdbc/sharingprofile/SharingProfileMapper.xml @@ -33,13 +33,13 @@ SELECT - [guacamole].[sharing_profile].sharing_profile_id, - [guacamole].[sharing_profile].sharing_profile_name, + [dbo].[guacamole_sharing_profile].sharing_profile_id, + [dbo].[guacamole_sharing_profile].sharing_profile_name, primary_connection_id - FROM [guacamole].[sharing_profile] - JOIN [guacamole].[sharing_profile_permission] ON [guacamole].[sharing_profile_permission].sharing_profile_id = [guacamole].[sharing_profile].sharing_profile_id - WHERE [guacamole].[sharing_profile].sharing_profile_id IN + FROM [dbo].[guacamole_sharing_profile] + JOIN [dbo].[guacamole_sharing_profile_permission] ON [dbo].[guacamole_sharing_profile_permission].sharing_profile_id = [dbo].[guacamole_sharing_profile].sharing_profile_id + WHERE [dbo].[guacamole_sharing_profile].sharing_profile_id IN #{identifier,jdbcType=INTEGER} @@ -87,7 +87,7 @@ sharing_profile_id, sharing_profile_name, primary_connection_id - FROM [guacamole].[sharing_profile] + FROM [dbo].[guacamole_sharing_profile] WHERE primary_connection_id = #{parentIdentifier,jdbcType=INTEGER} AND sharing_profile_name = #{name,jdbcType=VARCHAR} @@ -96,7 +96,7 @@ - DELETE FROM [guacamole].[sharing_profile] + DELETE FROM [dbo].[guacamole_sharing_profile] WHERE sharing_profile_id = #{identifier,jdbcType=INTEGER} @@ -104,7 +104,7 @@ - INSERT INTO [guacamole].[sharing_profile] ( + INSERT INTO [dbo].[guacamole_sharing_profile] ( sharing_profile_name, primary_connection_id ) @@ -117,7 +117,7 @@ - UPDATE [guacamole].[sharing_profile] + UPDATE [dbo].[guacamole_sharing_profile] SET sharing_profile_name = #{object.name,jdbcType=VARCHAR}, primary_connection_id = #{object.parentIdentifier,jdbcType=INTEGER} WHERE sharing_profile_id = #{object.objectID,jdbcType=INTEGER} diff --git a/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/resources/org/apache/guacamole/auth/jdbc/sharingprofile/SharingProfileParameterMapper.xml b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/resources/org/apache/guacamole/auth/jdbc/sharingprofile/SharingProfileParameterMapper.xml index 8f4a3fa10..c90227678 100644 --- a/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/resources/org/apache/guacamole/auth/jdbc/sharingprofile/SharingProfileParameterMapper.xml +++ b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/resources/org/apache/guacamole/auth/jdbc/sharingprofile/SharingProfileParameterMapper.xml @@ -36,21 +36,21 @@ sharing_profile_id, parameter_name, parameter_value - FROM [guacamole].[sharing_profile_parameter] + FROM [dbo].[guacamole_sharing_profile_parameter] WHERE sharing_profile_id = #{identifier,jdbcType=INTEGER} - DELETE FROM [guacamole].[sharing_profile_parameter] + DELETE FROM [dbo].[guacamole_sharing_profile_parameter] WHERE sharing_profile_id = #{identifier,jdbcType=INTEGER} - INSERT INTO [guacamole].[sharing_profile_parameter] ( + INSERT INTO [dbo].[guacamole_sharing_profile_parameter] ( sharing_profile_id, parameter_name, parameter_value diff --git a/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/resources/org/apache/guacamole/auth/jdbc/user/PasswordRecordMapper.xml b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/resources/org/apache/guacamole/auth/jdbc/user/PasswordRecordMapper.xml index 9ad67a6f3..a9f44e637 100644 --- a/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/resources/org/apache/guacamole/auth/jdbc/user/PasswordRecordMapper.xml +++ b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/resources/org/apache/guacamole/auth/jdbc/user/PasswordRecordMapper.xml @@ -35,16 +35,16 @@ @@ -52,7 +52,7 @@ - INSERT INTO [guacamole].[user_password_history] ( + INSERT INTO [dbo].[guacamole_user_password_history] ( user_id, password_hash, password_salt, @@ -65,10 +65,10 @@ #{record.passwordDate,jdbcType=TIMESTAMP} ); - DELETE FROM [guacamole].[user_password_history] + DELETE FROM [dbo].[guacamole_user_password_history] WHERE password_history_id IN ( SELECT password_history_id - FROM [guacamole].[user_password_history] + FROM [dbo].[guacamole_user_password_history] WHERE user_id = #{record.userID,jdbcType=INTEGER} ORDER BY password_date DESC OFFSET #{maxHistorySize} diff --git a/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/resources/org/apache/guacamole/auth/jdbc/user/UserMapper.xml b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/resources/org/apache/guacamole/auth/jdbc/user/UserMapper.xml index a4ceea79e..465ef2060 100644 --- a/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/resources/org/apache/guacamole/auth/jdbc/user/UserMapper.xml +++ b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/resources/org/apache/guacamole/auth/jdbc/user/UserMapper.xml @@ -46,16 +46,16 @@ @@ -79,7 +79,7 @@ email_address, organization, organizational_role - FROM [guacamole].[user] + FROM [dbo].[guacamole_user] WHERE username IN @@ -92,7 +92,7 @@ @@ -140,7 +140,7 @@ email_address, organization, organizational_role - FROM [guacamole].[user] + FROM [dbo].[guacamole_user] WHERE username = #{username,jdbcType=VARCHAR} @@ -148,7 +148,7 @@ - DELETE FROM [guacamole].[user] + DELETE FROM [dbo].[guacamole_user] WHERE username = #{identifier,jdbcType=VARCHAR} @@ -156,7 +156,7 @@ - INSERT INTO [guacamole].[user] ( + INSERT INTO [dbo].[guacamole_user] ( username, password_hash, password_salt, @@ -195,7 +195,7 @@ - UPDATE [guacamole].[user] + UPDATE [dbo].[guacamole_user] SET password_hash = #{object.passwordHash,jdbcType=BINARY}, password_salt = #{object.passwordSalt,jdbcType=BINARY}, password_date = #{object.passwordDate,jdbcType=TIMESTAMP}, From 9d38306e30795bcf41e91b5c7b5a1069f6839d8d Mon Sep 17 00:00:00 2001 From: Nick Couchman Date: Sun, 27 Aug 2017 16:32:35 -0400 Subject: [PATCH 08/24] GUACAMOLE-363: Minor fixes in schema files. --- .../schema/001-create-schema.sql | 6 ------ .../schema/002-create-admin-user.sql | 2 +- 2 files changed, 1 insertion(+), 7 deletions(-) diff --git a/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/schema/001-create-schema.sql b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/schema/001-create-schema.sql index 92525dd02..95382efdc 100644 --- a/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/schema/001-create-schema.sql +++ b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/schema/001-create-schema.sql @@ -17,12 +17,6 @@ * under the License. */ -/** - * Create the guacamole schema. - */ -CREATE SCHEMA [dbo] -GO - /** * List for permission data type. */ diff --git a/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/schema/002-create-admin-user.sql b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/schema/002-create-admin-user.sql index 408d7cafd..c6e6d9b6a 100644 --- a/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/schema/002-create-admin-user.sql +++ b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/schema/002-create-admin-user.sql @@ -33,7 +33,7 @@ FROM ( JOIN [dbo].[guacamole_user] ON permissions.username = [dbo].[guacamole_user].[username] JOIN [dbo].[guacamole_user] affected ON permissions.affected_username = affected.username; -INSERT INTO [dbo].[system_permission] +INSERT INTO [dbo].[guacamole_system_permission] SELECT user_id, permission FROM ( SELECT 'guacadmin' AS username, 'CREATE_CONNECTION' AS permission From 2eb48895bf988a72049e581e7c3f889cc893d4b3 Mon Sep 17 00:00:00 2001 From: Nick Couchman Date: Tue, 29 Aug 2017 21:15:29 -0400 Subject: [PATCH 09/24] GUACAMOLE-363: Add semicolons to SQL code to make it ANSI SQL standard. --- .../schema/001-create-schema.sql | 208 +++++++++--------- .../schema/002-create-admin-user.sql | 2 +- 2 files changed, 105 insertions(+), 105 deletions(-) diff --git a/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/schema/001-create-schema.sql b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/schema/001-create-schema.sql index 95382efdc..80e47c156 100644 --- a/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/schema/001-create-schema.sql +++ b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/schema/001-create-schema.sql @@ -22,8 +22,8 @@ */ CREATE RULE [dbo].[guacamole_permission_list] AS - @list IN ('READ','UPDATE','DELETE','ADMINISTER') -GO + @list IN ('READ','UPDATE','DELETE','ADMINISTER'); +GO; /** * List for system permission data type. @@ -34,25 +34,25 @@ CREATE RULE [dbo].[guacamole_system_permission_list] 'CREATE_CONNECTION_GROUP', 'CREATE_SHARING_PROFILE', 'CREATE_USER', - 'ADMINISTER') -GO + 'ADMINISTER'); +GO; /** * The permission data type. */ -CREATE TYPE [dbo].[guacamole_permission] FROM [nvarchar](10) NOT NULL +CREATE TYPE [dbo].[guacamole_permission] FROM [nvarchar](10) NOT NULL; /** * The system permission data type. */ -CREATE TYPE [dbo].[guacamole_system_permission] FROM [nvarchar](32) NOT NULL -GO +CREATE TYPE [dbo].[guacamole_system_permission] FROM [nvarchar](32) NOT NULL; +GO; /** * The connection_group table stores organizational and balancing groups. */ -SET ANSI_NULLS ON -SET QUOTED_IDENTIFIER ON +SET ANSI_NULLS ON; +SET QUOTED_IDENTIFIER ON; CREATE TABLE [dbo].[guacamole_connection_group]( [connection_group_id] [int] IDENTITY(1,1) NOT NULL, [parent_id] [int] NULL, @@ -70,36 +70,36 @@ CREATE TABLE [dbo].[guacamole_connection_group]( ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] -) ON [PRIMARY] +) ON [PRIMARY]; /** * Foreign keys for connection_group table. */ ALTER TABLE [dbo].[guacamole_connection_group] WITH CHECK ADD CONSTRAINT [FK_guacamole_connection_group_connection_group_id] FOREIGN KEY([parent_id]) - REFERENCES [dbo].[guacamole_connection_group] ([connection_group_id]) + REFERENCES [dbo].[guacamole_connection_group] ([connection_group_id]); ALTER TABLE [dbo].[guacamole_connection_group] - CHECK CONSTRAINT [FK_guacamole_connection_group_connection_group_id] + CHECK CONSTRAINT [FK_guacamole_connection_group_connection_group_id]; ALTER TABLE [dbo].[guacamole_connection_group] WITH CHECK ADD CONSTRAINT [CK_guacamole_connection_group_type] - CHECK (([type]='BALANCING' OR [type]='ORGANIZATIONAL')) + CHECK (([type]='BALANCING' OR [type]='ORGANIZATIONAL')); ALTER TABLE [dbo].[guacamole_connection_group] - CHECK CONSTRAINT [CK_guacamole_connection_group_type] + CHECK CONSTRAINT [CK_guacamole_connection_group_type]; /** * Default values for connection_group table. */ ALTER TABLE [dbo].[guacamole_connection_group] - ADD CONSTRAINT [DF_guacamole_connection_group_type] DEFAULT (N'ORGANIZATIONAL') FOR [type] + ADD CONSTRAINT [DF_guacamole_connection_group_type] DEFAULT (N'ORGANIZATIONAL') FOR [type]; ALTER TABLE [dbo].[guacamole_connection_group] - ADD CONSTRAINT [DF_guacamole_connection_group_enable_session_affinity] DEFAULT ((0)) FOR [enable_session_affinity] -GO + ADD CONSTRAINT [DF_guacamole_connection_group_enable_session_affinity] DEFAULT ((0)) FOR [enable_session_affinity]; +GO; /** * The connection table, for storing connections and attributes. */ -SET ANSI_NULLS ON -SET QUOTED_IDENTIFIER ON +SET ANSI_NULLS ON; +SET QUOTED_IDENTIFIER ON; CREATE TABLE [dbo].[guacamole_connection]( [connection_id] [int] IDENTITY(1,1) NOT NULL, [connection_name] [nvarchar](128) NOT NULL, @@ -121,27 +121,27 @@ CREATE TABLE [dbo].[guacamole_connection]( ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] -) ON [PRIMARY] +) ON [PRIMARY]; ALTER TABLE [dbo].[guacamole_connection] WITH CHECK ADD CONSTRAINT [FK_guacamole_connection_connection_group] FOREIGN KEY([parent_id]) -REFERENCES [dbo].[guacamole_connection_group] ([connection_group_id]) + REFERENCES [dbo].[guacamole_connection_group] ([connection_group_id]); ALTER TABLE [dbo].[guacamole_connection] - CHECK CONSTRAINT [FK_guacamole_connection_connection_group] + CHECK CONSTRAINT [FK_guacamole_connection_connection_group]; ALTER TABLE [dbo].[guacamole_connection] WITH CHECK ADD CONSTRAINT [CK_proxy_encryption_method] - CHECK (([proxy_encryption_method]='SSL' OR [proxy_encryption_method]='NONE')) + CHECK (([proxy_encryption_method]='SSL' OR [proxy_encryption_method]='NONE')); ALTER TABLE [dbo].[guacamole_connection] - CHECK CONSTRAINT [CK_proxy_encryption_method] + CHECK CONSTRAINT [CK_proxy_encryption_method]; ALTER TABLE [dbo].[guacamole_connection] - ADD CONSTRAINT [DF_guacamole_connection_failover_only] DEFAULT ((0)) FOR [failover_only] -GO + ADD CONSTRAINT [DF_guacamole_connection_failover_only] DEFAULT ((0)) FOR [failover_only]; +GO; /** * The user table stores user accounts, passwords, and properties. */ -SET ANSI_NULLS ON -SET QUOTED_IDENTIFIER ON +SET ANSI_NULLS ON; +SET QUOTED_IDENTIFIER ON; CREATE TABLE [dbo].[guacamole_user]( [user_id] [int] IDENTITY(1,1) NOT NULL, [username] [nvarchar](128) NOT NULL, @@ -168,23 +168,23 @@ CREATE TABLE [dbo].[guacamole_user]( ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] -) ON [PRIMARY] +) ON [PRIMARY]; /** * Defaults for user table */ ALTER TABLE [dbo].[guacamole_user] - ADD CONSTRAINT [DF_guacamole_user_disabled] DEFAULT ((0)) FOR [disabled] + ADD CONSTRAINT [DF_guacamole_user_disabled] DEFAULT ((0)) FOR [disabled]; ALTER TABLE [dbo].[guacamole_user] - ADD CONSTRAINT [DF_guacamole_user_expired] DEFAULT ((0)) FOR [expired] -GO + ADD CONSTRAINT [DF_guacamole_user_expired] DEFAULT ((0)) FOR [expired]; +GO; /** * The sharing_profile table stores profiles that allow * connections to be shared amongst multiple users. */ -SET ANSI_NULLS ON -SET QUOTED_IDENTIFIER ON +SET ANSI_NULLS ON; +SET QUOTED_IDENTIFIER ON; CREATE TABLE [dbo].[guacamole_sharing_profile]( [sharing_profile_id] [int] IDENTITY(1,1) NOT NULL, [sharing_profile_name] [nvarchar](128) NOT NULL, @@ -198,7 +198,7 @@ CREATE TABLE [dbo].[guacamole_sharing_profile]( ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] -) ON [PRIMARY] +) ON [PRIMARY]; /** * Foreign keys for sharing_profile table. @@ -207,17 +207,17 @@ ALTER TABLE [dbo].[guacamole_sharing_profile] WITH CHECK ADD CONSTRAINT [FK_guacamole_sharing_profile_connection] FOREIGN KEY([primary_connection_id]) REFERENCES [dbo].[guacamole_connection] ([connection_id]) ON UPDATE CASCADE - ON DELETE CASCADE + ON DELETE CASCADE; ALTER TABLE [dbo].[guacamole_sharing_profile] - CHECK CONSTRAINT [FK_guacamole_sharing_profile_connection] -GO + CHECK CONSTRAINT [FK_guacamole_sharing_profile_connection]; +GO; /** * The connection_parameter table stores parameters for * connection objects. */ -SET ANSI_NULLS ON -SET QUOTED_IDENTIFIER ON +SET ANSI_NULLS ON; +SET QUOTED_IDENTIFIER ON; CREATE TABLE [dbo].[guacamole_connection_parameter]( [connection_id] [int] NOT NULL, [parameter_name] [nvarchar](128) NOT NULL, @@ -231,7 +231,7 @@ CREATE TABLE [dbo].[guacamole_connection_parameter]( ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] -) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY] +) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]; /** * Foreign keys for the connection_parameter table. @@ -240,17 +240,17 @@ ALTER TABLE [dbo].[guacamole_connection_parameter] WITH CHECK ADD CONSTRAINT [FK_guacamole_connection_parameter_connection] FOREIGN KEY([connection_id]) REFERENCES [dbo].[guacamole_connection] ([connection_id]) ON UPDATE CASCADE - ON DELETE CASCADE + ON DELETE CASCADE; ALTER TABLE [dbo].[guacamole_connection_parameter] - CHECK CONSTRAINT [FK_guacamole_connection_parameter_connection] -GO + CHECK CONSTRAINT [FK_guacamole_connection_parameter_connection]; +GO; /** * The sharing_profile_parameter table stores parameters * for sharing_profile objects. */ -SET ANSI_NULLS ON -SET QUOTED_IDENTIFIER ON +SET ANSI_NULLS ON; +SET QUOTED_IDENTIFIER ON; CREATE TABLE [dbo].[guacamole_sharing_profile_parameter]( [sharing_profile_id] [int] NOT NULL, [parameter_name] [nvarchar](128) NOT NULL, @@ -264,7 +264,7 @@ CREATE TABLE [dbo].[guacamole_sharing_profile_parameter]( ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] -) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY] +) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]; /** * Foreign keys for the sharing_profile_parameter @@ -274,17 +274,17 @@ ALTER TABLE [dbo].[guacamole_sharing_profile_parameter] WITH CHECK ADD CONSTRAINT [FK_guacamole_sharing_profile_parameter_sharing_profile] FOREIGN KEY([sharing_profile_id]) REFERENCES [dbo].[guacamole_sharing_profile] ([sharing_profile_id]) ON UPDATE CASCADE - ON DELETE CASCADE + ON DELETE CASCADE; ALTER TABLE [dbo].[guacamole_sharing_profile_parameter] - CHECK CONSTRAINT [FK_guacamole_sharing_profile_parameter_sharing_profile] -GO + CHECK CONSTRAINT [FK_guacamole_sharing_profile_parameter_sharing_profile]; +GO; /** * The connection_permission table stores permission * mappings for connection objects. */ -SET ANSI_NULLS ON -SET QUOTED_IDENTIFIER ON +SET ANSI_NULLS ON; +SET QUOTED_IDENTIFIER ON; CREATE TABLE [dbo].[guacamole_connection_permission]( [user_id] [int] NOT NULL, [connection_id] [int] NOT NULL, @@ -298,7 +298,7 @@ CREATE TABLE [dbo].[guacamole_connection_permission]( ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] -) ON [PRIMARY] +) ON [PRIMARY]; /** * Foreign keys for the connection_permission table. @@ -307,24 +307,24 @@ ALTER TABLE [dbo].[guacamole_connection_permission] WITH CHECK ADD CONSTRAINT [FK_guacamole_connection_permission_connection1] FOREIGN KEY([connection_id]) REFERENCES [dbo].[guacamole_connection] ([connection_id]) ON UPDATE CASCADE - ON DELETE CASCADE + ON DELETE CASCADE; ALTER TABLE [dbo].[guacamole_connection_permission] - CHECK CONSTRAINT [FK_guacamole_connection_permission_connection1] + CHECK CONSTRAINT [FK_guacamole_connection_permission_connection1]; ALTER TABLE [dbo].[guacamole_connection_permission] WITH CHECK ADD CONSTRAINT [FK_guacamole_connection_permission_user1] FOREIGN KEY([user_id]) REFERENCES [dbo].[guacamole_user] ([user_id]) ON UPDATE CASCADE - ON DELETE CASCADE + ON DELETE CASCADE; ALTER TABLE [dbo].[guacamole_connection_permission] - CHECK CONSTRAINT [FK_guacamole_connection_permission_user1] -GO + CHECK CONSTRAINT [FK_guacamole_connection_permission_user1]; +GO; /** * The connection_group_permission table stores permission mappings for * connection_group objects. */ -SET ANSI_NULLS ON -SET QUOTED_IDENTIFIER ON +SET ANSI_NULLS ON; +SET QUOTED_IDENTIFIER ON; CREATE TABLE [dbo].[guacamole_connection_group_permission]( [user_id] [int] NOT NULL, [connection_group_id] [int] NOT NULL, @@ -338,7 +338,7 @@ CREATE TABLE [dbo].[guacamole_connection_group_permission]( ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] -) ON [PRIMARY] +) ON [PRIMARY]; /** * Foreign keys for the connection_group_permission table. @@ -347,24 +347,24 @@ ALTER TABLE [dbo].[guacamole_connection_group_permission] WITH CHECK ADD CONSTRAINT [FK_guacamole_connection_group_permission_connection_group] FOREIGN KEY([connection_group_id]) REFERENCES [dbo].[guacamole_connection_group] ([connection_group_id]) ON UPDATE CASCADE - ON DELETE CASCADE + ON DELETE CASCADE; ALTER TABLE [dbo].[guacamole_connection_group_permission] - CHECK CONSTRAINT [FK_guacamole_connection_group_permission_connection_group] + CHECK CONSTRAINT [FK_guacamole_connection_group_permission_connection_group]; ALTER TABLE [dbo].[guacamole_connection_group_permission] WITH CHECK ADD CONSTRAINT [FK_guacamole_connection_group_permission_user] FOREIGN KEY([user_id]) REFERENCES [dbo].[guacamole_user] ([user_id]) ON UPDATE CASCADE - ON DELETE CASCADE + ON DELETE CASCADE; ALTER TABLE [dbo].[guacamole_connection_group_permission] - CHECK CONSTRAINT [FK_guacamole_connection_group_permission_user] -GO + CHECK CONSTRAINT [FK_guacamole_connection_group_permission_user]; +GO; /** * The sharing_profile_permission table stores permission * mappings for sharing_profile objects. */ -SET ANSI_NULLS ON -SET QUOTED_IDENTIFIER ON +SET ANSI_NULLS ON; +SET QUOTED_IDENTIFIER ON; CREATE TABLE [dbo].[guacamole_sharing_profile_permission]( [user_id] [int] NOT NULL, [sharing_profile_id] [int] NOT NULL, @@ -378,7 +378,7 @@ CREATE TABLE [dbo].[guacamole_sharing_profile_permission]( ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] -) ON [PRIMARY] +) ON [PRIMARY]; /** * Foreign keys for the sharing_profile_permission table. @@ -387,24 +387,24 @@ ALTER TABLE [dbo].[guacamole_sharing_profile_permission] WITH CHECK ADD CONSTRAINT [FK_guacamole_sharing_profile_permission_sharing_profile] FOREIGN KEY([sharing_profile_id]) REFERENCES [dbo].[guacamole_sharing_profile] ([sharing_profile_id]) ON UPDATE CASCADE - ON DELETE CASCADE + ON DELETE CASCADE; ALTER TABLE [dbo].[guacamole_sharing_profile_permission] - CHECK CONSTRAINT [FK_guacamole_sharing_profile_permission_sharing_profile] + CHECK CONSTRAINT [FK_guacamole_sharing_profile_permission_sharing_profile]; ALTER TABLE [dbo].[guacamole_sharing_profile_permission] WITH CHECK ADD CONSTRAINT [FK_guacamole_sharing_profile_permission_user] FOREIGN KEY([user_id]) REFERENCES [dbo].[guacamole_user] ([user_id]) ON UPDATE CASCADE - ON DELETE CASCADE + ON DELETE CASCADE; ALTER TABLE [dbo].[guacamole_sharing_profile_permission] - CHECK CONSTRAINT [FK_guacamole_sharing_profile_permission_user] -GO + CHECK CONSTRAINT [FK_guacamole_sharing_profile_permission_user]; +GO; /** * The system_permission table stores permission mappings * for system-level operations. */ -SET ANSI_NULLS ON -SET QUOTED_IDENTIFIER ON +SET ANSI_NULLS ON; +SET QUOTED_IDENTIFIER ON; CREATE TABLE [dbo].[guacamole_system_permission]( [user_id] [int] NOT NULL, [permission] [dbo].[guacamole_system_permission] NOT NULL, @@ -417,7 +417,7 @@ CREATE TABLE [dbo].[guacamole_system_permission]( ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] -) ON [PRIMARY] +) ON [PRIMARY]; /** * Foreign keys for system_permission table. @@ -426,17 +426,17 @@ ALTER TABLE [dbo].[guacamole_system_permission] WITH CHECK ADD CONSTRAINT [FK_guacamole_system_permission_user] FOREIGN KEY([user_id]) REFERENCES [dbo].[guacamole_user] ([user_id]) ON UPDATE CASCADE - ON DELETE CASCADE + ON DELETE CASCADE; ALTER TABLE [dbo].[guacamole_system_permission] - CHECK CONSTRAINT [FK_guacamole_system_permission_user] -GO + CHECK CONSTRAINT [FK_guacamole_system_permission_user]; +GO; /** * The user_permission table stores permission mappings * for users to other users. */ -SET ANSI_NULLS ON -SET QUOTED_IDENTIFIER ON +SET ANSI_NULLS ON; +SET QUOTED_IDENTIFIER ON; CREATE TABLE [dbo].[guacamole_user_permission]( [user_id] [int] NOT NULL, [affected_user_id] [int] NOT NULL, @@ -450,7 +450,7 @@ CREATE TABLE [dbo].[guacamole_user_permission]( ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] -) ON [PRIMARY] +) ON [PRIMARY]; /** * Foreign keys for user_permission table. @@ -459,22 +459,22 @@ ALTER TABLE [dbo].[guacamole_user_permission] WITH CHECK ADD CONSTRAINT [FK_guacamole_user_permission_user] FOREIGN KEY([user_id]) REFERENCES [dbo].[guacamole_user] ([user_id]) ON UPDATE CASCADE - ON DELETE CASCADE + ON DELETE CASCADE; ALTER TABLE [dbo].[guacamole_user_permission] - CHECK CONSTRAINT [FK_guacamole_user_permission_user] + CHECK CONSTRAINT [FK_guacamole_user_permission_user]; ALTER TABLE [dbo].[guacamole_user_permission] WITH CHECK ADD CONSTRAINT [FK_guacamole_user_permission_user1] FOREIGN KEY([affected_user_id]) - REFERENCES [dbo].[guacamole_user] ([user_id]) + REFERENCES [dbo].[guacamole_user] ([user_id]); ALTER TABLE [dbo].[guacamole_user_permission] - CHECK CONSTRAINT [FK_guacamole_user_permission_user1] -GO + CHECK CONSTRAINT [FK_guacamole_user_permission_user1]; +GO; /** * The connection_history table stores records for historical * connections. */ -SET ANSI_NULLS ON -SET QUOTED_IDENTIFIER ON +SET ANSI_NULLS ON; +SET QUOTED_IDENTIFIER ON; CREATE TABLE [dbo].[guacamole_connection_history]( [history_id] [int] IDENTITY(1,1) NOT NULL, [user_id] [int] NULL, @@ -495,7 +495,7 @@ CREATE TABLE [dbo].[guacamole_connection_history]( ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] -) ON [PRIMARY] +) ON [PRIMARY]; /** * Foreign keys for connection_history table @@ -504,30 +504,30 @@ ALTER TABLE [dbo].[guacamole_connection_history] WITH CHECK ADD CONSTRAINT [FK_guacamole_connection_history_connection] FOREIGN KEY([connection_id]) REFERENCES [dbo].[guacamole_connection] ([connection_id]) ON UPDATE CASCADE - ON DELETE SET NULL + ON DELETE SET NULL; ALTER TABLE [dbo].[guacamole_connection_history] - CHECK CONSTRAINT [FK_guacamole_connection_history_connection] + CHECK CONSTRAINT [FK_guacamole_connection_history_connection]; ALTER TABLE [dbo].[guacamole_connection_history] WITH CHECK ADD CONSTRAINT [FK_guacamole_connection_history_sharing_profile] FOREIGN KEY([sharing_profile_id]) - REFERENCES [dbo].[guacamole_sharing_profile] ([sharing_profile_id]) + REFERENCES [dbo].[guacamole_sharing_profile] ([sharing_profile_id]); ALTER TABLE [dbo].[guacamole_connection_history] - CHECK CONSTRAINT [FK_guacamole_connection_history_sharing_profile] + CHECK CONSTRAINT [FK_guacamole_connection_history_sharing_profile]; ALTER TABLE [dbo].[guacamole_connection_history] WITH CHECK ADD CONSTRAINT [FK_guacamole_connection_history_user] FOREIGN KEY([user_id]) REFERENCES [dbo].[guacamole_user] ([user_id]) ON UPDATE CASCADE - ON DELETE SET NULL + ON DELETE SET NULL; ALTER TABLE [dbo].[guacamole_connection_history] - CHECK CONSTRAINT [FK_guacamole_connection_history_user] -GO + CHECK CONSTRAINT [FK_guacamole_connection_history_user]; +GO; /** * The user_password_history table stores password history * for users, allowing for enforcing rules associated with * reuse of passwords. */ -SET ANSI_NULLS ON -SET QUOTED_IDENTIFIER ON +SET ANSI_NULLS ON; +SET QUOTED_IDENTIFIER ON; CREATE TABLE [dbo].[guacamole_user_password_history]( [password_history_id] [int] IDENTITY(1,1) NOT NULL, [user_id] [int] NOT NULL, @@ -543,7 +543,7 @@ CREATE TABLE [dbo].[guacamole_user_password_history]( ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] -) ON [PRIMARY] +) ON [PRIMARY]; /** * Foreign keys for user_password_history table @@ -552,7 +552,7 @@ ALTER TABLE [dbo].[guacamole_user_password_history] WITH CHECK ADD CONSTRAINT [FK_guacamole_user_password_history_user] FOREIGN KEY([user_id]) REFERENCES [dbo].[guacamole_user] ([user_id]) ON UPDATE CASCADE - ON DELETE CASCADE + ON DELETE CASCADE; ALTER TABLE [dbo].[guacamole_user_password_history] - CHECK CONSTRAINT [FK_guacamole_user_password_history_user] -GO + CHECK CONSTRAINT [FK_guacamole_user_password_history_user]; +GO; diff --git a/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/schema/002-create-admin-user.sql b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/schema/002-create-admin-user.sql index c6e6d9b6a..f7d5b4539 100644 --- a/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/schema/002-create-admin-user.sql +++ b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/schema/002-create-admin-user.sql @@ -43,4 +43,4 @@ FROM ( UNION SELECT 'guacadmin' AS username, 'ADMINISTER' AS permission) permissions JOIN [dbo].[guacamole_user] ON permissions.username = [dbo].[guacamole_user].[username]; -GO +GO; From d6d7c3768fb5945033627907c691c896c915bc51 Mon Sep 17 00:00:00 2001 From: Nick Couchman Date: Tue, 29 Aug 2017 21:41:00 -0400 Subject: [PATCH 10/24] GUACAMOLE-363: Allow use of alternate JTDS driver. --- ...SQLServerAuthenticationProviderModule.java | 13 +++++++++++- .../auth/sqlserver/SQLServerEnvironment.java | 20 ++++++++++++++++++- .../SQLServerGuacamoleProperties.java | 11 ++++++++++ 3 files changed, 42 insertions(+), 2 deletions(-) diff --git a/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/java/org/apache/guacamole/auth/sqlserver/SQLServerAuthenticationProviderModule.java b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/java/org/apache/guacamole/auth/sqlserver/SQLServerAuthenticationProviderModule.java index ebb1a0678..d936f140d 100644 --- a/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/java/org/apache/guacamole/auth/sqlserver/SQLServerAuthenticationProviderModule.java +++ b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/java/org/apache/guacamole/auth/sqlserver/SQLServerAuthenticationProviderModule.java @@ -40,6 +40,11 @@ public class SQLServerAuthenticationProviderModule implements Module { * SQLServer-specific driver configuration properties. */ private final Properties driverProperties = new Properties(); + + /** + * Whether or not to use JTDS Driver + */ + private Boolean useJTDSDriver = false; /** * Creates a new SQLServer authentication provider module that configures @@ -70,13 +75,19 @@ public class SQLServerAuthenticationProviderModule implements Module { // Use UTF-8 in database driverProperties.setProperty("characterEncoding", "UTF-8"); + // Capture whether or not to use the JTDS driver. + this.useJTDSDriver = environment.getSQLServerJTDSDriver(); + } @Override public void configure(Binder binder) { // Bind SQLServer-specific properties - JdbcHelper.SQL_Server_2005_MS_Driver.configure(binder); + if (this.useJTDSDriver) + JdbcHelper.SQL_Server_jTDS.configure(binder); + else + JdbcHelper.SQL_Server_2005_MS_Driver.configure(binder); // Bind MyBatis properties Names.bindProperties(binder, myBatisProperties); diff --git a/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/java/org/apache/guacamole/auth/sqlserver/SQLServerEnvironment.java b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/java/org/apache/guacamole/auth/sqlserver/SQLServerEnvironment.java index 67d882719..4d24dd36b 100644 --- a/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/java/org/apache/guacamole/auth/sqlserver/SQLServerEnvironment.java +++ b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/java/org/apache/guacamole/auth/sqlserver/SQLServerEnvironment.java @@ -272,7 +272,7 @@ public class SQLServerEnvironment extends JDBCEnvironment { public String getSQLServerDatabase() throws GuacamoleException { return getRequiredProperty(SQLServerGuacamoleProperties.SQLSERVER_DATABASE); } - + /** * Returns the username that should be used when authenticating with the * SQLServer database containing the Guacamole authentication tables. @@ -302,5 +302,23 @@ public class SQLServerEnvironment extends JDBCEnvironment { public String getSQLServerPassword() throws GuacamoleException { return getRequiredProperty(SQLServerGuacamoleProperties.SQLSERVER_PASSWORD); } + + /** + * Returns whether or not to use the SourceForge JTDS driver for more + * generic JTDS connections instead of the Microsoft-provided JDBC driver. + * + * @return + * True if the JTDS driver should be used; false by default. + * + * @throws GuacamoleException + * If an error occurs while retrieving the property value, or if the + * value was not set, as this property is required. + */ + public Boolean getSQLServerJTDSDriver() throws GuacamoleException { + return getProperty( + SQLServerGuacamoleProperties.SQLSERVER_JTDS_DRIVER, + false + ); + } } diff --git a/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/java/org/apache/guacamole/auth/sqlserver/SQLServerGuacamoleProperties.java b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/java/org/apache/guacamole/auth/sqlserver/SQLServerGuacamoleProperties.java index e45f50268..d04d9a13c 100644 --- a/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/java/org/apache/guacamole/auth/sqlserver/SQLServerGuacamoleProperties.java +++ b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/java/org/apache/guacamole/auth/sqlserver/SQLServerGuacamoleProperties.java @@ -197,4 +197,15 @@ public class SQLServerGuacamoleProperties { }; + /** + * Whether or not to use the JTDS driver for SQL Server connections. + */ + public static final BooleanGuacamoleProperty + SQLSERVER_JTDS_DRIVER = new BooleanGuacamoleProperty() { + + @Override + public String getName() { return "sqlserver-use-jtds-driver"; } + + }; + } From b72dba6b033a0da3c6bd8db248b848313dfe8fe9 Mon Sep 17 00:00:00 2001 From: Nick Couchman Date: Thu, 7 Sep 2017 16:07:59 -0400 Subject: [PATCH 11/24] GUACAMOLE-363: Update so that any of the available TDS-compatible drivers can be used. --- ...SQLServerAuthenticationProviderModule.java | 15 ++++--- .../auth/sqlserver/SQLServerEnvironment.java | 39 +++++++++++++++++-- .../SQLServerGuacamoleProperties.java | 6 +-- 3 files changed, 49 insertions(+), 11 deletions(-) diff --git a/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/java/org/apache/guacamole/auth/sqlserver/SQLServerAuthenticationProviderModule.java b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/java/org/apache/guacamole/auth/sqlserver/SQLServerAuthenticationProviderModule.java index d936f140d..22c543403 100644 --- a/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/java/org/apache/guacamole/auth/sqlserver/SQLServerAuthenticationProviderModule.java +++ b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/java/org/apache/guacamole/auth/sqlserver/SQLServerAuthenticationProviderModule.java @@ -44,8 +44,8 @@ public class SQLServerAuthenticationProviderModule implements Module { /** * Whether or not to use JTDS Driver */ - private Boolean useJTDSDriver = false; - + private String sqlServerDriver; + /** * Creates a new SQLServer authentication provider module that configures * driver and MyBatis properties using the given environment. @@ -75,8 +75,8 @@ public class SQLServerAuthenticationProviderModule implements Module { // Use UTF-8 in database driverProperties.setProperty("characterEncoding", "UTF-8"); - // Capture whether or not to use the JTDS driver. - this.useJTDSDriver = environment.getSQLServerJTDSDriver(); + // Capture which driver to use for the connection. + this.sqlServerDriver = environment.getSQLServerDriver(); } @@ -84,8 +84,13 @@ public class SQLServerAuthenticationProviderModule implements Module { public void configure(Binder binder) { // Bind SQLServer-specific properties - if (this.useJTDSDriver) + // Look at the property to choose the correct driver. + if (sqlServerDriver.equals(SQLServerEnvironment.SQLSERVER_DRIVER_JTDS)) JdbcHelper.SQL_Server_jTDS.configure(binder); + else if(sqlServerDriver.equals(SQLServerEnvironment.SQLSERVER_DRIVER_DATADIRECT)) + JdbcHelper.SQL_Server_DataDirect.configure(binder); + else if(sqlServerDriver.equals(SQLServerEnvironment.SQLSERVER_DRIVER_MS)) + JdbcHelper.SQL_Server_MS_Driver.configure(binder); else JdbcHelper.SQL_Server_2005_MS_Driver.configure(binder); diff --git a/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/java/org/apache/guacamole/auth/sqlserver/SQLServerEnvironment.java b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/java/org/apache/guacamole/auth/sqlserver/SQLServerEnvironment.java index 4d24dd36b..2110b0c7d 100644 --- a/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/java/org/apache/guacamole/auth/sqlserver/SQLServerEnvironment.java +++ b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/java/org/apache/guacamole/auth/sqlserver/SQLServerEnvironment.java @@ -96,6 +96,30 @@ public class SQLServerEnvironment extends JDBCEnvironment { */ private int DEFAULT_MAX_GROUP_CONNECTIONS = 0; + /** + * The value for the sqlserver-driver property that triggers the use of + * the open source JTDS driver. + */ + public final static String SQLSERVER_DRIVER_JTDS = "jtds"; + + /** + * The value for the sqlserver-driver property that triggers the use of + * the DataDirect JDBC driver. + */ + public final static String SQLSERVER_DRIVER_DATADIRECT = "datadirect"; + + /** + * The value for the sqlserver-driver property that triggers the use of + * the older Microsoft JDBC driver. + */ + public final static String SQLSERVER_DRIVER_MS = "microsoft"; + + /** + * The value for the sqlserver-driver property that triggers the use of + * the Microsoft JDBC driver. This is the default. + */ + public final static String SQLSERVER_DRIVER_MS_2005 = "microsoft2005"; + /** * Constructs a new SQLServerEnvironment, providing access to SQLServer-specific * configuration options. @@ -169,6 +193,15 @@ public class SQLServerEnvironment extends JDBCEnvironment { } + // Check driver property is one of the acceptable values. + String driver = getProperty(SQLServerGuacamoleProperties.SQLSERVER_DRIVER); + if (!(driver.equals(SQLSERVER_DRIVER_JTDS) || + driver.equals(SQLSERVER_DRIVER_DATADIRECT) || + driver.equals(SQLSERVER_DRIVER_MS) || + driver.equals(SQLSERVER_DRIVER_MS_2005))) + logger.warn("{} property has been set to an invalid value. The default Microsoft 2005 driver will be used.", + SQLServerGuacamoleProperties.SQLSERVER_DRIVER.getName()); + } @Override @@ -314,10 +347,10 @@ public class SQLServerEnvironment extends JDBCEnvironment { * If an error occurs while retrieving the property value, or if the * value was not set, as this property is required. */ - public Boolean getSQLServerJTDSDriver() throws GuacamoleException { + public String getSQLServerDriver() throws GuacamoleException { return getProperty( - SQLServerGuacamoleProperties.SQLSERVER_JTDS_DRIVER, - false + SQLServerGuacamoleProperties.SQLSERVER_DRIVER, + SQLSERVER_DRIVER_MS_2005 ); } diff --git a/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/java/org/apache/guacamole/auth/sqlserver/SQLServerGuacamoleProperties.java b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/java/org/apache/guacamole/auth/sqlserver/SQLServerGuacamoleProperties.java index d04d9a13c..9d9b3864b 100644 --- a/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/java/org/apache/guacamole/auth/sqlserver/SQLServerGuacamoleProperties.java +++ b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/java/org/apache/guacamole/auth/sqlserver/SQLServerGuacamoleProperties.java @@ -200,11 +200,11 @@ public class SQLServerGuacamoleProperties { /** * Whether or not to use the JTDS driver for SQL Server connections. */ - public static final BooleanGuacamoleProperty - SQLSERVER_JTDS_DRIVER = new BooleanGuacamoleProperty() { + public static final StringGuacamoleProperty + SQLSERVER_DRIVER = new StringGuacamoleProperty() { @Override - public String getName() { return "sqlserver-use-jtds-driver"; } + public String getName() { return "sqlserver-driver"; } }; From 73301901ec8b2a856f9c8066fd759db41216d66c Mon Sep 17 00:00:00 2001 From: Nick Couchman Date: Thu, 7 Sep 2017 22:30:01 -0400 Subject: [PATCH 12/24] GUACAMOLE-363: Remove explicit schema, relying on account default schema. --- .../schema/001-create-schema.sql | 170 +++++++++--------- .../schema/002-create-admin-user.sql | 14 +- .../auth/jdbc/connection/ConnectionMapper.xml | 38 ++-- .../connection/ConnectionParameterMapper.xml | 6 +- .../connection/ConnectionRecordMapper.xml | 110 ++++++------ .../connectiongroup/ConnectionGroupMapper.xml | 46 ++--- .../ConnectionGroupPermissionMapper.xml | 30 ++-- .../permission/ConnectionPermissionMapper.xml | 30 ++-- .../SharingProfilePermissionMapper.xml | 30 ++-- .../permission/SystemPermissionMapper.xml | 26 +-- .../jdbc/permission/UserPermissionMapper.xml | 52 +++--- .../sharingprofile/SharingProfileMapper.xml | 24 +-- .../SharingProfileParameterMapper.xml | 6 +- .../auth/jdbc/user/PasswordRecordMapper.xml | 22 +-- .../guacamole/auth/jdbc/user/UserMapper.xml | 26 +-- 15 files changed, 315 insertions(+), 315 deletions(-) diff --git a/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/schema/001-create-schema.sql b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/schema/001-create-schema.sql index 80e47c156..1a1e32471 100644 --- a/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/schema/001-create-schema.sql +++ b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/schema/001-create-schema.sql @@ -20,7 +20,7 @@ /** * List for permission data type. */ -CREATE RULE [dbo].[guacamole_permission_list] +CREATE RULE [guacamole_permission_list] AS @list IN ('READ','UPDATE','DELETE','ADMINISTER'); GO; @@ -28,7 +28,7 @@ GO; /** * List for system permission data type. */ -CREATE RULE [dbo].[guacamole_system_permission_list] +CREATE RULE [guacamole_system_permission_list] AS @list IN ('CREATE_CONNECTION', 'CREATE_CONNECTION_GROUP', @@ -40,12 +40,12 @@ GO; /** * The permission data type. */ -CREATE TYPE [dbo].[guacamole_permission] FROM [nvarchar](10) NOT NULL; +CREATE TYPE [guacamole_permission] FROM [nvarchar](10) NOT NULL; /** * The system permission data type. */ -CREATE TYPE [dbo].[guacamole_system_permission] FROM [nvarchar](32) NOT NULL; +CREATE TYPE [guacamole_system_permission] FROM [nvarchar](32) NOT NULL; GO; /** @@ -53,7 +53,7 @@ GO; */ SET ANSI_NULLS ON; SET QUOTED_IDENTIFIER ON; -CREATE TABLE [dbo].[guacamole_connection_group]( +CREATE TABLE [guacamole_connection_group]( [connection_group_id] [int] IDENTITY(1,1) NOT NULL, [parent_id] [int] NULL, [connection_group_name] [nvarchar](128) NOT NULL, @@ -75,23 +75,23 @@ CREATE TABLE [dbo].[guacamole_connection_group]( /** * Foreign keys for connection_group table. */ -ALTER TABLE [dbo].[guacamole_connection_group] +ALTER TABLE [guacamole_connection_group] WITH CHECK ADD CONSTRAINT [FK_guacamole_connection_group_connection_group_id] FOREIGN KEY([parent_id]) - REFERENCES [dbo].[guacamole_connection_group] ([connection_group_id]); -ALTER TABLE [dbo].[guacamole_connection_group] + REFERENCES [guacamole_connection_group] ([connection_group_id]); +ALTER TABLE [guacamole_connection_group] CHECK CONSTRAINT [FK_guacamole_connection_group_connection_group_id]; -ALTER TABLE [dbo].[guacamole_connection_group] +ALTER TABLE [guacamole_connection_group] WITH CHECK ADD CONSTRAINT [CK_guacamole_connection_group_type] CHECK (([type]='BALANCING' OR [type]='ORGANIZATIONAL')); -ALTER TABLE [dbo].[guacamole_connection_group] +ALTER TABLE [guacamole_connection_group] CHECK CONSTRAINT [CK_guacamole_connection_group_type]; /** * Default values for connection_group table. */ -ALTER TABLE [dbo].[guacamole_connection_group] +ALTER TABLE [guacamole_connection_group] ADD CONSTRAINT [DF_guacamole_connection_group_type] DEFAULT (N'ORGANIZATIONAL') FOR [type]; -ALTER TABLE [dbo].[guacamole_connection_group] +ALTER TABLE [guacamole_connection_group] ADD CONSTRAINT [DF_guacamole_connection_group_enable_session_affinity] DEFAULT ((0)) FOR [enable_session_affinity]; GO; @@ -100,7 +100,7 @@ GO; */ SET ANSI_NULLS ON; SET QUOTED_IDENTIFIER ON; -CREATE TABLE [dbo].[guacamole_connection]( +CREATE TABLE [guacamole_connection]( [connection_id] [int] IDENTITY(1,1) NOT NULL, [connection_name] [nvarchar](128) NOT NULL, [parent_id] [int] NULL, @@ -123,17 +123,17 @@ CREATE TABLE [dbo].[guacamole_connection]( ON [PRIMARY] ) ON [PRIMARY]; -ALTER TABLE [dbo].[guacamole_connection] +ALTER TABLE [guacamole_connection] WITH CHECK ADD CONSTRAINT [FK_guacamole_connection_connection_group] FOREIGN KEY([parent_id]) - REFERENCES [dbo].[guacamole_connection_group] ([connection_group_id]); -ALTER TABLE [dbo].[guacamole_connection] + REFERENCES [guacamole_connection_group] ([connection_group_id]); +ALTER TABLE [guacamole_connection] CHECK CONSTRAINT [FK_guacamole_connection_connection_group]; -ALTER TABLE [dbo].[guacamole_connection] +ALTER TABLE [guacamole_connection] WITH CHECK ADD CONSTRAINT [CK_proxy_encryption_method] CHECK (([proxy_encryption_method]='SSL' OR [proxy_encryption_method]='NONE')); -ALTER TABLE [dbo].[guacamole_connection] +ALTER TABLE [guacamole_connection] CHECK CONSTRAINT [CK_proxy_encryption_method]; -ALTER TABLE [dbo].[guacamole_connection] +ALTER TABLE [guacamole_connection] ADD CONSTRAINT [DF_guacamole_connection_failover_only] DEFAULT ((0)) FOR [failover_only]; GO; @@ -142,7 +142,7 @@ GO; */ SET ANSI_NULLS ON; SET QUOTED_IDENTIFIER ON; -CREATE TABLE [dbo].[guacamole_user]( +CREATE TABLE [guacamole_user]( [user_id] [int] IDENTITY(1,1) NOT NULL, [username] [nvarchar](128) NOT NULL, [password_hash] [binary](32) NOT NULL, @@ -173,9 +173,9 @@ CREATE TABLE [dbo].[guacamole_user]( /** * Defaults for user table */ -ALTER TABLE [dbo].[guacamole_user] +ALTER TABLE [guacamole_user] ADD CONSTRAINT [DF_guacamole_user_disabled] DEFAULT ((0)) FOR [disabled]; -ALTER TABLE [dbo].[guacamole_user] +ALTER TABLE [guacamole_user] ADD CONSTRAINT [DF_guacamole_user_expired] DEFAULT ((0)) FOR [expired]; GO; @@ -185,7 +185,7 @@ GO; */ SET ANSI_NULLS ON; SET QUOTED_IDENTIFIER ON; -CREATE TABLE [dbo].[guacamole_sharing_profile]( +CREATE TABLE [guacamole_sharing_profile]( [sharing_profile_id] [int] IDENTITY(1,1) NOT NULL, [sharing_profile_name] [nvarchar](128) NOT NULL, [primary_connection_id] [int] NOT NULL, @@ -203,12 +203,12 @@ CREATE TABLE [dbo].[guacamole_sharing_profile]( /** * Foreign keys for sharing_profile table. */ -ALTER TABLE [dbo].[guacamole_sharing_profile] +ALTER TABLE [guacamole_sharing_profile] WITH CHECK ADD CONSTRAINT [FK_guacamole_sharing_profile_connection] FOREIGN KEY([primary_connection_id]) - REFERENCES [dbo].[guacamole_connection] ([connection_id]) + REFERENCES [guacamole_connection] ([connection_id]) ON UPDATE CASCADE ON DELETE CASCADE; -ALTER TABLE [dbo].[guacamole_sharing_profile] +ALTER TABLE [guacamole_sharing_profile] CHECK CONSTRAINT [FK_guacamole_sharing_profile_connection]; GO; @@ -218,7 +218,7 @@ GO; */ SET ANSI_NULLS ON; SET QUOTED_IDENTIFIER ON; -CREATE TABLE [dbo].[guacamole_connection_parameter]( +CREATE TABLE [guacamole_connection_parameter]( [connection_id] [int] NOT NULL, [parameter_name] [nvarchar](128) NOT NULL, [parameter_value] [nvarchar](max) NOT NULL, @@ -236,12 +236,12 @@ CREATE TABLE [dbo].[guacamole_connection_parameter]( /** * Foreign keys for the connection_parameter table. */ -ALTER TABLE [dbo].[guacamole_connection_parameter] +ALTER TABLE [guacamole_connection_parameter] WITH CHECK ADD CONSTRAINT [FK_guacamole_connection_parameter_connection] FOREIGN KEY([connection_id]) - REFERENCES [dbo].[guacamole_connection] ([connection_id]) + REFERENCES [guacamole_connection] ([connection_id]) ON UPDATE CASCADE ON DELETE CASCADE; -ALTER TABLE [dbo].[guacamole_connection_parameter] +ALTER TABLE [guacamole_connection_parameter] CHECK CONSTRAINT [FK_guacamole_connection_parameter_connection]; GO; @@ -251,7 +251,7 @@ GO; */ SET ANSI_NULLS ON; SET QUOTED_IDENTIFIER ON; -CREATE TABLE [dbo].[guacamole_sharing_profile_parameter]( +CREATE TABLE [guacamole_sharing_profile_parameter]( [sharing_profile_id] [int] NOT NULL, [parameter_name] [nvarchar](128) NOT NULL, [parameter_value] [nvarchar](max) NOT NULL, @@ -270,12 +270,12 @@ CREATE TABLE [dbo].[guacamole_sharing_profile_parameter]( * Foreign keys for the sharing_profile_parameter * table. */ -ALTER TABLE [dbo].[guacamole_sharing_profile_parameter] +ALTER TABLE [guacamole_sharing_profile_parameter] WITH CHECK ADD CONSTRAINT [FK_guacamole_sharing_profile_parameter_sharing_profile] FOREIGN KEY([sharing_profile_id]) - REFERENCES [dbo].[guacamole_sharing_profile] ([sharing_profile_id]) + REFERENCES [guacamole_sharing_profile] ([sharing_profile_id]) ON UPDATE CASCADE ON DELETE CASCADE; -ALTER TABLE [dbo].[guacamole_sharing_profile_parameter] +ALTER TABLE [guacamole_sharing_profile_parameter] CHECK CONSTRAINT [FK_guacamole_sharing_profile_parameter_sharing_profile]; GO; @@ -285,10 +285,10 @@ GO; */ SET ANSI_NULLS ON; SET QUOTED_IDENTIFIER ON; -CREATE TABLE [dbo].[guacamole_connection_permission]( +CREATE TABLE [guacamole_connection_permission]( [user_id] [int] NOT NULL, [connection_id] [int] NOT NULL, - [permission] [dbo].[guacamole_permission] NOT NULL, + [permission] [guacamole_permission] NOT NULL, CONSTRAINT [PK_guacamole_connection_permission] PRIMARY KEY CLUSTERED ([user_id] ASC, [connection_id] ASC, [permission] ASC) @@ -303,19 +303,19 @@ CREATE TABLE [dbo].[guacamole_connection_permission]( /** * Foreign keys for the connection_permission table. */ -ALTER TABLE [dbo].[guacamole_connection_permission] +ALTER TABLE [guacamole_connection_permission] WITH CHECK ADD CONSTRAINT [FK_guacamole_connection_permission_connection1] FOREIGN KEY([connection_id]) - REFERENCES [dbo].[guacamole_connection] ([connection_id]) + REFERENCES [guacamole_connection] ([connection_id]) ON UPDATE CASCADE ON DELETE CASCADE; -ALTER TABLE [dbo].[guacamole_connection_permission] +ALTER TABLE [guacamole_connection_permission] CHECK CONSTRAINT [FK_guacamole_connection_permission_connection1]; -ALTER TABLE [dbo].[guacamole_connection_permission] +ALTER TABLE [guacamole_connection_permission] WITH CHECK ADD CONSTRAINT [FK_guacamole_connection_permission_user1] FOREIGN KEY([user_id]) - REFERENCES [dbo].[guacamole_user] ([user_id]) + REFERENCES [guacamole_user] ([user_id]) ON UPDATE CASCADE ON DELETE CASCADE; -ALTER TABLE [dbo].[guacamole_connection_permission] +ALTER TABLE [guacamole_connection_permission] CHECK CONSTRAINT [FK_guacamole_connection_permission_user1]; GO; @@ -325,10 +325,10 @@ GO; */ SET ANSI_NULLS ON; SET QUOTED_IDENTIFIER ON; -CREATE TABLE [dbo].[guacamole_connection_group_permission]( +CREATE TABLE [guacamole_connection_group_permission]( [user_id] [int] NOT NULL, [connection_group_id] [int] NOT NULL, - [permission] [dbo].[guacamole_permission] NOT NULL, + [permission] [guacamole_permission] NOT NULL, CONSTRAINT [PK_guacamole_connection_group_permission] PRIMARY KEY CLUSTERED ([user_id] ASC, [connection_group_id] ASC, [permission] ASC) @@ -343,19 +343,19 @@ CREATE TABLE [dbo].[guacamole_connection_group_permission]( /** * Foreign keys for the connection_group_permission table. */ -ALTER TABLE [dbo].[guacamole_connection_group_permission] +ALTER TABLE [guacamole_connection_group_permission] WITH CHECK ADD CONSTRAINT [FK_guacamole_connection_group_permission_connection_group] FOREIGN KEY([connection_group_id]) - REFERENCES [dbo].[guacamole_connection_group] ([connection_group_id]) + REFERENCES [guacamole_connection_group] ([connection_group_id]) ON UPDATE CASCADE ON DELETE CASCADE; -ALTER TABLE [dbo].[guacamole_connection_group_permission] +ALTER TABLE [guacamole_connection_group_permission] CHECK CONSTRAINT [FK_guacamole_connection_group_permission_connection_group]; -ALTER TABLE [dbo].[guacamole_connection_group_permission] +ALTER TABLE [guacamole_connection_group_permission] WITH CHECK ADD CONSTRAINT [FK_guacamole_connection_group_permission_user] FOREIGN KEY([user_id]) - REFERENCES [dbo].[guacamole_user] ([user_id]) + REFERENCES [guacamole_user] ([user_id]) ON UPDATE CASCADE ON DELETE CASCADE; -ALTER TABLE [dbo].[guacamole_connection_group_permission] +ALTER TABLE [guacamole_connection_group_permission] CHECK CONSTRAINT [FK_guacamole_connection_group_permission_user]; GO; @@ -365,10 +365,10 @@ GO; */ SET ANSI_NULLS ON; SET QUOTED_IDENTIFIER ON; -CREATE TABLE [dbo].[guacamole_sharing_profile_permission]( +CREATE TABLE [guacamole_sharing_profile_permission]( [user_id] [int] NOT NULL, [sharing_profile_id] [int] NOT NULL, - [permission] [dbo].[guacamole_permission] NOT NULL, + [permission] [guacamole_permission] NOT NULL, CONSTRAINT [PK_guacamole_sharing_profile_permission] PRIMARY KEY CLUSTERED ([user_id] ASC, [sharing_profile_id] ASC, [permission] ASC) @@ -383,19 +383,19 @@ CREATE TABLE [dbo].[guacamole_sharing_profile_permission]( /** * Foreign keys for the sharing_profile_permission table. */ -ALTER TABLE [dbo].[guacamole_sharing_profile_permission] +ALTER TABLE [guacamole_sharing_profile_permission] WITH CHECK ADD CONSTRAINT [FK_guacamole_sharing_profile_permission_sharing_profile] FOREIGN KEY([sharing_profile_id]) - REFERENCES [dbo].[guacamole_sharing_profile] ([sharing_profile_id]) + REFERENCES [guacamole_sharing_profile] ([sharing_profile_id]) ON UPDATE CASCADE ON DELETE CASCADE; -ALTER TABLE [dbo].[guacamole_sharing_profile_permission] +ALTER TABLE [guacamole_sharing_profile_permission] CHECK CONSTRAINT [FK_guacamole_sharing_profile_permission_sharing_profile]; -ALTER TABLE [dbo].[guacamole_sharing_profile_permission] +ALTER TABLE [guacamole_sharing_profile_permission] WITH CHECK ADD CONSTRAINT [FK_guacamole_sharing_profile_permission_user] FOREIGN KEY([user_id]) - REFERENCES [dbo].[guacamole_user] ([user_id]) + REFERENCES [guacamole_user] ([user_id]) ON UPDATE CASCADE ON DELETE CASCADE; -ALTER TABLE [dbo].[guacamole_sharing_profile_permission] +ALTER TABLE [guacamole_sharing_profile_permission] CHECK CONSTRAINT [FK_guacamole_sharing_profile_permission_user]; GO; @@ -405,9 +405,9 @@ GO; */ SET ANSI_NULLS ON; SET QUOTED_IDENTIFIER ON; -CREATE TABLE [dbo].[guacamole_system_permission]( +CREATE TABLE [guacamole_system_permission]( [user_id] [int] NOT NULL, - [permission] [dbo].[guacamole_system_permission] NOT NULL, + [permission] [guacamole_system_permission] NOT NULL, CONSTRAINT [PK_guacamole_system_permission] PRIMARY KEY CLUSTERED ([user_id] ASC, [permission] ASC) @@ -422,12 +422,12 @@ CREATE TABLE [dbo].[guacamole_system_permission]( /** * Foreign keys for system_permission table. */ -ALTER TABLE [dbo].[guacamole_system_permission] +ALTER TABLE [guacamole_system_permission] WITH CHECK ADD CONSTRAINT [FK_guacamole_system_permission_user] FOREIGN KEY([user_id]) - REFERENCES [dbo].[guacamole_user] ([user_id]) + REFERENCES [guacamole_user] ([user_id]) ON UPDATE CASCADE ON DELETE CASCADE; -ALTER TABLE [dbo].[guacamole_system_permission] +ALTER TABLE [guacamole_system_permission] CHECK CONSTRAINT [FK_guacamole_system_permission_user]; GO; @@ -437,10 +437,10 @@ GO; */ SET ANSI_NULLS ON; SET QUOTED_IDENTIFIER ON; -CREATE TABLE [dbo].[guacamole_user_permission]( +CREATE TABLE [guacamole_user_permission]( [user_id] [int] NOT NULL, [affected_user_id] [int] NOT NULL, - [permission] [dbo].[guacamole_permission] NOT NULL, + [permission] [guacamole_permission] NOT NULL, CONSTRAINT [PK_guacamole_user_permission] PRIMARY KEY CLUSTERED ([user_id] ASC, [affected_user_id] ASC, [permission] ASC) @@ -455,17 +455,17 @@ CREATE TABLE [dbo].[guacamole_user_permission]( /** * Foreign keys for user_permission table. */ -ALTER TABLE [dbo].[guacamole_user_permission] +ALTER TABLE [guacamole_user_permission] WITH CHECK ADD CONSTRAINT [FK_guacamole_user_permission_user] FOREIGN KEY([user_id]) - REFERENCES [dbo].[guacamole_user] ([user_id]) + REFERENCES [guacamole_user] ([user_id]) ON UPDATE CASCADE ON DELETE CASCADE; -ALTER TABLE [dbo].[guacamole_user_permission] +ALTER TABLE [guacamole_user_permission] CHECK CONSTRAINT [FK_guacamole_user_permission_user]; -ALTER TABLE [dbo].[guacamole_user_permission] +ALTER TABLE [guacamole_user_permission] WITH CHECK ADD CONSTRAINT [FK_guacamole_user_permission_user1] FOREIGN KEY([affected_user_id]) - REFERENCES [dbo].[guacamole_user] ([user_id]); -ALTER TABLE [dbo].[guacamole_user_permission] + REFERENCES [guacamole_user] ([user_id]); +ALTER TABLE [guacamole_user_permission] CHECK CONSTRAINT [FK_guacamole_user_permission_user1]; GO; @@ -475,7 +475,7 @@ GO; */ SET ANSI_NULLS ON; SET QUOTED_IDENTIFIER ON; -CREATE TABLE [dbo].[guacamole_connection_history]( +CREATE TABLE [guacamole_connection_history]( [history_id] [int] IDENTITY(1,1) NOT NULL, [user_id] [int] NULL, [username] [nvarchar](128) NOT NULL, @@ -500,24 +500,24 @@ CREATE TABLE [dbo].[guacamole_connection_history]( /** * Foreign keys for connection_history table */ -ALTER TABLE [dbo].[guacamole_connection_history] +ALTER TABLE [guacamole_connection_history] WITH CHECK ADD CONSTRAINT [FK_guacamole_connection_history_connection] FOREIGN KEY([connection_id]) - REFERENCES [dbo].[guacamole_connection] ([connection_id]) + REFERENCES [guacamole_connection] ([connection_id]) ON UPDATE CASCADE ON DELETE SET NULL; -ALTER TABLE [dbo].[guacamole_connection_history] +ALTER TABLE [guacamole_connection_history] CHECK CONSTRAINT [FK_guacamole_connection_history_connection]; -ALTER TABLE [dbo].[guacamole_connection_history] +ALTER TABLE [guacamole_connection_history] WITH CHECK ADD CONSTRAINT [FK_guacamole_connection_history_sharing_profile] FOREIGN KEY([sharing_profile_id]) - REFERENCES [dbo].[guacamole_sharing_profile] ([sharing_profile_id]); -ALTER TABLE [dbo].[guacamole_connection_history] + REFERENCES [guacamole_sharing_profile] ([sharing_profile_id]); +ALTER TABLE [guacamole_connection_history] CHECK CONSTRAINT [FK_guacamole_connection_history_sharing_profile]; -ALTER TABLE [dbo].[guacamole_connection_history] +ALTER TABLE [guacamole_connection_history] WITH CHECK ADD CONSTRAINT [FK_guacamole_connection_history_user] FOREIGN KEY([user_id]) - REFERENCES [dbo].[guacamole_user] ([user_id]) + REFERENCES [guacamole_user] ([user_id]) ON UPDATE CASCADE ON DELETE SET NULL; -ALTER TABLE [dbo].[guacamole_connection_history] +ALTER TABLE [guacamole_connection_history] CHECK CONSTRAINT [FK_guacamole_connection_history_user]; GO; @@ -528,7 +528,7 @@ GO; */ SET ANSI_NULLS ON; SET QUOTED_IDENTIFIER ON; -CREATE TABLE [dbo].[guacamole_user_password_history]( +CREATE TABLE [guacamole_user_password_history]( [password_history_id] [int] IDENTITY(1,1) NOT NULL, [user_id] [int] NOT NULL, [password_hash] [binary](32) NOT NULL, @@ -548,11 +548,11 @@ CREATE TABLE [dbo].[guacamole_user_password_history]( /** * Foreign keys for user_password_history table */ -ALTER TABLE [dbo].[guacamole_user_password_history] +ALTER TABLE [guacamole_user_password_history] WITH CHECK ADD CONSTRAINT [FK_guacamole_user_password_history_user] FOREIGN KEY([user_id]) - REFERENCES [dbo].[guacamole_user] ([user_id]) + REFERENCES [guacamole_user] ([user_id]) ON UPDATE CASCADE ON DELETE CASCADE; -ALTER TABLE [dbo].[guacamole_user_password_history] +ALTER TABLE [guacamole_user_password_history] CHECK CONSTRAINT [FK_guacamole_user_password_history_user]; GO; diff --git a/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/schema/002-create-admin-user.sql b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/schema/002-create-admin-user.sql index f7d5b4539..d348b61ae 100644 --- a/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/schema/002-create-admin-user.sql +++ b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/schema/002-create-admin-user.sql @@ -20,20 +20,20 @@ /** * Create the default admin user account and set up full privileges. */ -INSERT INTO [dbo].[guacamole_user] (username, password_hash, password_date) +INSERT INTO [guacamole_user] (username, password_hash, password_date) VALUES ('guacadmin', HASHBYTES('SHA2_256', 'guacadmin'), getdate()); -INSERT INTO [dbo].[guacamole_user_permission] -SELECT [dbo].[guacamole_user].[user_id], [affected].[user_id], permission +INSERT INTO [guacamole_user_permission] +SELECT [guacamole_user].[user_id], [affected].[user_id], permission FROM ( SELECT 'guacadmin' AS username, 'guacadmin' AS affected_username, 'READ' AS permission UNION SELECT 'guacadmin' AS username, 'guacadmin' AS affected_username, 'UPDATE' AS permission UNION SELECT 'guacadmin' AS username, 'guacadmin' AS affected_username, 'ADMINISTER' AS permission) permissions - JOIN [dbo].[guacamole_user] ON permissions.username = [dbo].[guacamole_user].[username] - JOIN [dbo].[guacamole_user] affected ON permissions.affected_username = affected.username; + JOIN [guacamole_user] ON permissions.username = [guacamole_user].[username] + JOIN [guacamole_user] affected ON permissions.affected_username = affected.username; -INSERT INTO [dbo].[guacamole_system_permission] +INSERT INTO [guacamole_system_permission] SELECT user_id, permission FROM ( SELECT 'guacadmin' AS username, 'CREATE_CONNECTION' AS permission @@ -42,5 +42,5 @@ FROM ( UNION SELECT 'guacadmin' AS username, 'CREATE_USER' AS permission UNION SELECT 'guacadmin' AS username, 'ADMINISTER' AS permission) permissions - JOIN [dbo].[guacamole_user] ON permissions.username = [dbo].[guacamole_user].[username]; + JOIN [guacamole_user] ON permissions.username = [guacamole_user].[username]; GO; diff --git a/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/resources/org/apache/guacamole/auth/jdbc/connection/ConnectionMapper.xml b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/resources/org/apache/guacamole/auth/jdbc/connection/ConnectionMapper.xml index c62ca6f36..3e6819f06 100644 --- a/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/resources/org/apache/guacamole/auth/jdbc/connection/ConnectionMapper.xml +++ b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/resources/org/apache/guacamole/auth/jdbc/connection/ConnectionMapper.xml @@ -51,13 +51,13 @@ SELECT connection_id - FROM [dbo].[guacamole_connection] + FROM [guacamole_connection] WHERE parent_id = #{parentIdentifier,jdbcType=INTEGER} parent_id IS NULL @@ -74,9 +74,9 @@ - DELETE FROM [dbo].[guacamole_connection_parameter] + DELETE FROM [guacamole_connection_parameter] WHERE connection_id = #{identifier,jdbcType=INTEGER} - INSERT INTO [dbo].[guacamole_connection_parameter] ( + INSERT INTO [guacamole_connection_parameter] ( connection_id, parameter_name, parameter_value diff --git a/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/resources/org/apache/guacamole/auth/jdbc/connection/ConnectionRecordMapper.xml b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/resources/org/apache/guacamole/auth/jdbc/connection/ConnectionRecordMapper.xml index 648d16f60..bca8139d2 100644 --- a/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/resources/org/apache/guacamole/auth/jdbc/connection/ConnectionRecordMapper.xml +++ b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/resources/org/apache/guacamole/auth/jdbc/connection/ConnectionRecordMapper.xml @@ -40,28 +40,28 @@ - INSERT INTO [dbo].[guacamole_connection_history] ( + INSERT INTO [guacamole_connection_history] ( connection_id, connection_name, remote_host, @@ -78,7 +78,7 @@ #{record.remoteHost,jdbcType=VARCHAR}, #{record.sharingProfileIdentifier,jdbcType=INTEGER}, #{record.sharingProfileName,jdbcType=VARCHAR}, - (SELECT user_id FROM [dbo].[guacamole_user] + (SELECT user_id FROM [guacamole_user] WHERE username = #{record.username,jdbcType=VARCHAR}), #{record.username,jdbcType=VARCHAR}, #{record.startDate,jdbcType=TIMESTAMP}, @@ -91,31 +91,31 @@ SELECT TOP (#{limit,jdbcType=INTEGER}) - [dbo].[guacamole_connection_history].connection_id, - [dbo].[guacamole_connection_history].connection_name, - [dbo].[guacamole_connection_history].remote_host, - [dbo].[guacamole_connection_history].sharing_profile_id, - [dbo].[guacamole_connection_history].sharing_profile_name, - [dbo].[guacamole_connection_history].user_id, - [dbo].[guacamole_connection_history].username, - [dbo].[guacamole_connection_history].start_date, - [dbo].[guacamole_connection_history].end_date - FROM [dbo].[guacamole_connection_history] - LEFT JOIN [dbo].[guacamole_connection] ON [dbo].[guacamole_connection_history].connection_id = [dbo].[guacamole_connection].connection_id - LEFT JOIN [dbo].[guacamole_user] ON [dbo].[guacamole_connection_history].user_id = [dbo].[guacamole_user].user_id + [guacamole_connection_history].connection_id, + [guacamole_connection_history].connection_name, + [guacamole_connection_history].remote_host, + [guacamole_connection_history].sharing_profile_id, + [guacamole_connection_history].sharing_profile_name, + [guacamole_connection_history].user_id, + [guacamole_connection_history].username, + [guacamole_connection_history].start_date, + [guacamole_connection_history].end_date + FROM [guacamole_connection_history] + LEFT JOIN [guacamole_connection] ON [guacamole_connection_history].connection_id = [guacamole_connection].connection_id + LEFT JOIN [guacamole_user] ON [guacamole_connection_history].user_id = [guacamole_user].user_id - JOIN [dbo].[guacamole_connection_permission] ON - [dbo].[guacamole_connection_history].connection_id = [dbo].[guacamole_connection_permission].connection_id - AND [dbo].[guacamole_connection_permission].user_id = #{user.objectID,jdbcType=INTEGER} - AND [dbo].[guacamole_connection_permission].permission = 'READ' + JOIN [guacamole_connection_permission] ON + [guacamole_connection_history].connection_id = [guacamole_connection_permission].connection_id + AND [guacamole_connection_permission].user_id = #{user.objectID,jdbcType=INTEGER} + AND [guacamole_connection_permission].permission = 'READ' - JOIN [dbo].[guacamole_user_permission] ON - [dbo].[guacamole_connection_history].user_id = [dbo].[guacamole_user_permission].affected_user_id - AND [dbo].[guacamole_user_permission].user_id = #{user.objectID,jdbcType=INTEGER} - AND [dbo].[guacamole_user_permission].permission = 'READ' + JOIN [guacamole_user_permission] ON + [guacamole_connection_history].user_id = [guacamole_user_permission].affected_user_id + AND [guacamole_user_permission].user_id = #{user.objectID,jdbcType=INTEGER} + AND [guacamole_user_permission].permission = 'READ' ( - [dbo].[guacamole_connection_history].user_id IN ( + [guacamole_connection_history].user_id IN ( SELECT user_id - FROM [dbo].[guacamole_user] + FROM [guacamole_user] WHERE POSITION(#{term.term,jdbcType=VARCHAR} IN username) > 0 ) - OR [dbo].[guacamole_connection_history].connection_id IN ( + OR [guacamole_connection_history].connection_id IN ( SELECT connection_id - FROM [dbo].[guacamole_connection] + FROM [guacamole_connection] WHERE POSITION(#{term.term,jdbcType=VARCHAR} IN connection_name) > 0 ) @@ -201,7 +201,7 @@ - [dbo].[guacamole_connection_history].start_date + [guacamole_connection_history].start_date 1 DESC diff --git a/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/resources/org/apache/guacamole/auth/jdbc/connectiongroup/ConnectionGroupMapper.xml b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/resources/org/apache/guacamole/auth/jdbc/connectiongroup/ConnectionGroupMapper.xml index d1f97a738..452c0a81e 100644 --- a/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/resources/org/apache/guacamole/auth/jdbc/connectiongroup/ConnectionGroupMapper.xml +++ b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/resources/org/apache/guacamole/auth/jdbc/connectiongroup/ConnectionGroupMapper.xml @@ -53,13 +53,13 @@ SELECT connection_group_id - FROM [dbo].[guacamole_connection_group] + FROM [guacamole_connection_group] WHERE parent_id = #{parentIdentifier,jdbcType=INTEGER} parent_id IS NULL @@ -76,9 +76,9 @@ SELECT - [dbo].[guacamole_connection_group_permission].user_id, + [guacamole_connection_group_permission].user_id, username, permission, connection_group_id - FROM [dbo].[guacamole_connection_group_permission] - JOIN [dbo].[guacamole_user] ON [dbo].[guacamole_connection_group_permission].user_id = [dbo].[guacamole_user].user_id - WHERE [dbo].[guacamole_connection_group_permission].user_id = #{user.objectID,jdbcType=INTEGER} + FROM [guacamole_connection_group_permission] + JOIN [guacamole_user] ON [guacamole_connection_group_permission].user_id = [guacamole_user].user_id + WHERE [guacamole_connection_group_permission].user_id = #{user.objectID,jdbcType=INTEGER} @@ -50,14 +50,14 @@ SELECT DISTINCT connection_group_id - FROM [dbo].[guacamole_connection_group_permission] + FROM [guacamole_connection_group_permission] WHERE user_id = #{user.objectID,jdbcType=INTEGER} AND connection_group_id IN @@ -86,7 +86,7 @@ - DELETE FROM [dbo].[guacamole_connection_group_permission] + DELETE FROM [guacamole_connection_group_permission] WHERE (user_id, permission, connection_group_id) IN @@ -100,7 +100,7 @@ - INSERT INTO [dbo].[guacamole_connection_group_permission] ( + INSERT INTO [guacamole_connection_group_permission] ( user_id, permission, connection_group_id @@ -117,10 +117,10 @@ #{permission.objectIdentifier,jdbcType=INTEGER} AS connection_group_id AS permissions - WHERE NOT EXISTS (SELECT 1 FROM [dbo].[guacamole_connection_group_permission] - WHERE [dbo].[guacamole_connection_group_permission].user_id = permissions.user_id AND - [dbo].[guacamole_connection_group_permission].permission = permissions.permission AND - [dbo].[guacamole_connection_group_permission].connection_group_id = permissions.connection_group_id + WHERE NOT EXISTS (SELECT 1 FROM [guacamole_connection_group_permission] + WHERE [guacamole_connection_group_permission].user_id = permissions.user_id AND + [guacamole_connection_group_permission].permission = permissions.permission AND + [guacamole_connection_group_permission].connection_group_id = permissions.connection_group_id ); diff --git a/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/resources/org/apache/guacamole/auth/jdbc/permission/ConnectionPermissionMapper.xml b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/resources/org/apache/guacamole/auth/jdbc/permission/ConnectionPermissionMapper.xml index fa25f637e..aaa555aee 100644 --- a/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/resources/org/apache/guacamole/auth/jdbc/permission/ConnectionPermissionMapper.xml +++ b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/resources/org/apache/guacamole/auth/jdbc/permission/ConnectionPermissionMapper.xml @@ -36,13 +36,13 @@ @@ -50,14 +50,14 @@ SELECT DISTINCT connection_id - FROM [dbo].[guacamole_connection_permission] + FROM [guacamole_connection_permission] WHERE user_id = #{user.objectID,jdbcType=INTEGER} AND connection_id IN @@ -86,7 +86,7 @@ - DELETE FROM [dbo].[guacamole_connection_permission] + DELETE FROM [guacamole_connection_permission] WHERE @@ -100,7 +100,7 @@ - INSERT INTO [dbo].[guacamole_connection_permission] ( + INSERT INTO [guacamole_connection_permission] ( user_id, permission, connection_id @@ -117,10 +117,10 @@ #{permission.objectIdentifier,jdbcType=INTEGER} AS connection_id AS permissions - WHERE NOT EXISTS ( SELECT 1 FROM [dbo].[guacamole_connection_permission] - WHERE [dbo].[guacamole_connection_permission].user_id = permissions.user_id AND - [dbo].[guacamole_connection_permission].permission = permissions.permission AND - [dbo].[guacamole_connection_permission].connection_id = permissions.connection_id + WHERE NOT EXISTS ( SELECT 1 FROM [guacamole_connection_permission] + WHERE [guacamole_connection_permission].user_id = permissions.user_id AND + [guacamole_connection_permission].permission = permissions.permission AND + [guacamole_connection_permission].connection_id = permissions.connection_id ); diff --git a/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/resources/org/apache/guacamole/auth/jdbc/permission/SharingProfilePermissionMapper.xml b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/resources/org/apache/guacamole/auth/jdbc/permission/SharingProfilePermissionMapper.xml index 40e9907c4..ab40d2ade 100644 --- a/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/resources/org/apache/guacamole/auth/jdbc/permission/SharingProfilePermissionMapper.xml +++ b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/resources/org/apache/guacamole/auth/jdbc/permission/SharingProfilePermissionMapper.xml @@ -36,13 +36,13 @@ @@ -50,14 +50,14 @@ SELECT DISTINCT sharing_profile_id - FROM [dbo].[guacamole_sharing_profile_permission] + FROM [guacamole_sharing_profile_permission] WHERE user_id = #{user.objectID,jdbcType=INTEGER} AND sharing_profile_id IN @@ -86,7 +86,7 @@ - DELETE FROM [dbo].[guacamole_sharing_profile_permission] + DELETE FROM [guacamole_sharing_profile_permission] WHERE @@ -100,7 +100,7 @@ - INSERT INTO [dbo].[guacamole_sharing_profile_permission] ( + INSERT INTO [guacamole_sharing_profile_permission] ( user_id, permission, sharing_profile_id @@ -117,10 +117,10 @@ #{permission.objectIdentifier,jdbcType=INTEGER} AS sharing_profile_id AS permissions - WHERE NOT EXISTS (SELECT 1 FROM [dbo].[guacamole_sharing_profile_permission] - WHERE [dbo].[guacamole_sharing_profile_permission].user_id = permissions.user_id - AND [dbo].[guacamole_sharing_profile_permission].permission = permissions.permission - AND [dbo].[guacamole_sharing_profile_permission].sharing_profile_id = permissions.sharing_profile_id + WHERE NOT EXISTS (SELECT 1 FROM [guacamole_sharing_profile_permission] + WHERE [guacamole_sharing_profile_permission].user_id = permissions.user_id + AND [guacamole_sharing_profile_permission].permission = permissions.permission + AND [guacamole_sharing_profile_permission].sharing_profile_id = permissions.sharing_profile_id ); diff --git a/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/resources/org/apache/guacamole/auth/jdbc/permission/SystemPermissionMapper.xml b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/resources/org/apache/guacamole/auth/jdbc/permission/SystemPermissionMapper.xml index d33dd3b65..663b94ec1 100644 --- a/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/resources/org/apache/guacamole/auth/jdbc/permission/SystemPermissionMapper.xml +++ b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/resources/org/apache/guacamole/auth/jdbc/permission/SystemPermissionMapper.xml @@ -35,12 +35,12 @@ @@ -48,13 +48,13 @@ @@ -62,7 +62,7 @@ - DELETE FROM [dbo].[guacamole_system_permission] + DELETE FROM [guacamole_system_permission] WHERE @@ -75,7 +75,7 @@ - INSERT INTO [dbo].[guacamole_system_permission] ( + INSERT INTO [guacamole_system_permission] ( user_id, permission ) @@ -89,9 +89,9 @@ #{permission.type,jdbcType=VARCHAR} AS permission AS permissions - WHERE NOT EXISTS (SELECT 1 FROM [dbo].[guacamole_system_permission] - WHERE [dbo].[guacamole_system_permission].user_id = permissions.user_id - AND [dbo].[guacamole_system_permission].permission = permissions.permission + WHERE NOT EXISTS (SELECT 1 FROM [guacamole_system_permission] + WHERE [guacamole_system_permission].user_id = permissions.user_id + AND [guacamole_system_permission].permission = permissions.permission ); diff --git a/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/resources/org/apache/guacamole/auth/jdbc/permission/UserPermissionMapper.xml b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/resources/org/apache/guacamole/auth/jdbc/permission/UserPermissionMapper.xml index a2d416fe6..453777d0c 100644 --- a/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/resources/org/apache/guacamole/auth/jdbc/permission/UserPermissionMapper.xml +++ b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/resources/org/apache/guacamole/auth/jdbc/permission/UserPermissionMapper.xml @@ -36,14 +36,14 @@ @@ -51,15 +51,15 @@ SELECT DISTINCT username - FROM [dbo].[guacamole_user_permission] - JOIN [dbo].[guacamole_user] ON [dbo].[guacamole_user_permission].affected_user_id = [dbo].[guacamole_user].user_id + FROM [guacamole_user_permission] + JOIN [guacamole_user] ON [guacamole_user_permission].affected_user_id = [guacamole_user].user_id WHERE - [dbo].[guacamole_user_permission].user_id = #{user.objectID,jdbcType=INTEGER} + [guacamole_user_permission].user_id = #{user.objectID,jdbcType=INTEGER} AND username IN @@ -89,11 +89,11 @@ - DELETE FROM [dbo].[guacamole_user_permission] - USING [dbo].[guacamole_user] affected + DELETE FROM [guacamole_user_permission] + USING [guacamole_user] affected WHERE - [dbo].[guacamole_user_permission].affected_user_id = affected.user_id - AND ([dbo].[guacamole_user_permission].user_id, permission, affected.username) IN + [guacamole_user_permission].affected_user_id = affected.user_id + AND ([guacamole_user_permission].user_id, permission, affected.username) IN (#{permission.userID,jdbcType=INTEGER}, @@ -106,7 +106,7 @@ - INSERT INTO [dbo].[guacamole_user_permission] ( + INSERT INTO [guacamole_user_permission] ( user_id, permission, affected_user_id @@ -114,7 +114,7 @@ SELECT DISTINCT permissions.user_id, permissions.permission, - [dbo].[guacamole_user].user_id + [guacamole_user].user_id FROM @@ -123,11 +123,11 @@ #{permission.objectIdentifier,jdbcType=INTEGER} AS username AS permissions - JOIN [dbo].[guacamole_user] ON [dbo].[guacamole_user].username = permissions.username - WHERE NOT EXISTS (SELECT 1 FROM [dbo].[guacamole_user_permission] - WHERE [dbo].[guacamole_user_permission].user_id = permissions.user_id - AND [dbo].[guacamole_user_permission].permission = permissions.permission - AND [dbo].[guacamole_user_permission].affected_user_id = [dbo].[guacamole_user].user_id + JOIN [guacamole_user] ON [guacamole_user].username = permissions.username + WHERE NOT EXISTS (SELECT 1 FROM [guacamole_user_permission] + WHERE [guacamole_user_permission].user_id = permissions.user_id + AND [guacamole_user_permission].permission = permissions.permission + AND [guacamole_user_permission].affected_user_id = [guacamole_user].user_id ); diff --git a/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/resources/org/apache/guacamole/auth/jdbc/sharingprofile/SharingProfileMapper.xml b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/resources/org/apache/guacamole/auth/jdbc/sharingprofile/SharingProfileMapper.xml index d3b5c10e4..3b4ba0980 100644 --- a/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/resources/org/apache/guacamole/auth/jdbc/sharingprofile/SharingProfileMapper.xml +++ b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/resources/org/apache/guacamole/auth/jdbc/sharingprofile/SharingProfileMapper.xml @@ -33,13 +33,13 @@ SELECT - [dbo].[guacamole_sharing_profile].sharing_profile_id, - [dbo].[guacamole_sharing_profile].sharing_profile_name, + [guacamole_sharing_profile].sharing_profile_id, + [guacamole_sharing_profile].sharing_profile_name, primary_connection_id - FROM [dbo].[guacamole_sharing_profile] - JOIN [dbo].[guacamole_sharing_profile_permission] ON [dbo].[guacamole_sharing_profile_permission].sharing_profile_id = [dbo].[guacamole_sharing_profile].sharing_profile_id - WHERE [dbo].[guacamole_sharing_profile].sharing_profile_id IN + FROM [guacamole_sharing_profile] + JOIN [guacamole_sharing_profile_permission] ON [guacamole_sharing_profile_permission].sharing_profile_id = [guacamole_sharing_profile].sharing_profile_id + WHERE [guacamole_sharing_profile].sharing_profile_id IN #{identifier,jdbcType=INTEGER} @@ -87,7 +87,7 @@ sharing_profile_id, sharing_profile_name, primary_connection_id - FROM [dbo].[guacamole_sharing_profile] + FROM [guacamole_sharing_profile] WHERE primary_connection_id = #{parentIdentifier,jdbcType=INTEGER} AND sharing_profile_name = #{name,jdbcType=VARCHAR} @@ -96,7 +96,7 @@ - DELETE FROM [dbo].[guacamole_sharing_profile] + DELETE FROM [guacamole_sharing_profile] WHERE sharing_profile_id = #{identifier,jdbcType=INTEGER} @@ -104,7 +104,7 @@ - INSERT INTO [dbo].[guacamole_sharing_profile] ( + INSERT INTO [guacamole_sharing_profile] ( sharing_profile_name, primary_connection_id ) @@ -117,7 +117,7 @@ - UPDATE [dbo].[guacamole_sharing_profile] + UPDATE [guacamole_sharing_profile] SET sharing_profile_name = #{object.name,jdbcType=VARCHAR}, primary_connection_id = #{object.parentIdentifier,jdbcType=INTEGER} WHERE sharing_profile_id = #{object.objectID,jdbcType=INTEGER} diff --git a/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/resources/org/apache/guacamole/auth/jdbc/sharingprofile/SharingProfileParameterMapper.xml b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/resources/org/apache/guacamole/auth/jdbc/sharingprofile/SharingProfileParameterMapper.xml index c90227678..a4327b4cd 100644 --- a/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/resources/org/apache/guacamole/auth/jdbc/sharingprofile/SharingProfileParameterMapper.xml +++ b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/resources/org/apache/guacamole/auth/jdbc/sharingprofile/SharingProfileParameterMapper.xml @@ -36,21 +36,21 @@ sharing_profile_id, parameter_name, parameter_value - FROM [dbo].[guacamole_sharing_profile_parameter] + FROM [guacamole_sharing_profile_parameter] WHERE sharing_profile_id = #{identifier,jdbcType=INTEGER} - DELETE FROM [dbo].[guacamole_sharing_profile_parameter] + DELETE FROM [guacamole_sharing_profile_parameter] WHERE sharing_profile_id = #{identifier,jdbcType=INTEGER} - INSERT INTO [dbo].[guacamole_sharing_profile_parameter] ( + INSERT INTO [guacamole_sharing_profile_parameter] ( sharing_profile_id, parameter_name, parameter_value diff --git a/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/resources/org/apache/guacamole/auth/jdbc/user/PasswordRecordMapper.xml b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/resources/org/apache/guacamole/auth/jdbc/user/PasswordRecordMapper.xml index a9f44e637..562a7471f 100644 --- a/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/resources/org/apache/guacamole/auth/jdbc/user/PasswordRecordMapper.xml +++ b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/resources/org/apache/guacamole/auth/jdbc/user/PasswordRecordMapper.xml @@ -35,16 +35,16 @@ @@ -52,7 +52,7 @@ - INSERT INTO [dbo].[guacamole_user_password_history] ( + INSERT INTO [guacamole_user_password_history] ( user_id, password_hash, password_salt, @@ -65,10 +65,10 @@ #{record.passwordDate,jdbcType=TIMESTAMP} ); - DELETE FROM [dbo].[guacamole_user_password_history] + DELETE FROM [guacamole_user_password_history] WHERE password_history_id IN ( SELECT password_history_id - FROM [dbo].[guacamole_user_password_history] + FROM [guacamole_user_password_history] WHERE user_id = #{record.userID,jdbcType=INTEGER} ORDER BY password_date DESC OFFSET #{maxHistorySize} diff --git a/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/resources/org/apache/guacamole/auth/jdbc/user/UserMapper.xml b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/resources/org/apache/guacamole/auth/jdbc/user/UserMapper.xml index 465ef2060..6df6cf26d 100644 --- a/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/resources/org/apache/guacamole/auth/jdbc/user/UserMapper.xml +++ b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/resources/org/apache/guacamole/auth/jdbc/user/UserMapper.xml @@ -46,16 +46,16 @@ @@ -79,7 +79,7 @@ email_address, organization, organizational_role - FROM [dbo].[guacamole_user] + FROM [guacamole_user] WHERE username IN @@ -92,7 +92,7 @@ @@ -140,7 +140,7 @@ email_address, organization, organizational_role - FROM [dbo].[guacamole_user] + FROM [guacamole_user] WHERE username = #{username,jdbcType=VARCHAR} @@ -148,7 +148,7 @@ - DELETE FROM [dbo].[guacamole_user] + DELETE FROM [guacamole_user] WHERE username = #{identifier,jdbcType=VARCHAR} @@ -156,7 +156,7 @@ - INSERT INTO [dbo].[guacamole_user] ( + INSERT INTO [guacamole_user] ( username, password_hash, password_salt, @@ -195,7 +195,7 @@ - UPDATE [dbo].[guacamole_user] + UPDATE [guacamole_user] SET password_hash = #{object.passwordHash,jdbcType=BINARY}, password_salt = #{object.passwordSalt,jdbcType=BINARY}, password_date = #{object.passwordDate,jdbcType=TIMESTAMP}, From 7755241322c82f4131785af3e48235be9e890010 Mon Sep 17 00:00:00 2001 From: Nick Couchman Date: Thu, 7 Sep 2017 22:31:37 -0400 Subject: [PATCH 13/24] GUACMOLE-363: Correct null pointer exception in String comparison; fix style issues. --- .../auth/sqlserver/SQLServerAuthenticationProviderModule.java | 4 ++-- .../apache/guacamole/auth/sqlserver/SQLServerEnvironment.java | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/java/org/apache/guacamole/auth/sqlserver/SQLServerAuthenticationProviderModule.java b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/java/org/apache/guacamole/auth/sqlserver/SQLServerAuthenticationProviderModule.java index 22c543403..f514e4198 100644 --- a/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/java/org/apache/guacamole/auth/sqlserver/SQLServerAuthenticationProviderModule.java +++ b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/java/org/apache/guacamole/auth/sqlserver/SQLServerAuthenticationProviderModule.java @@ -87,9 +87,9 @@ public class SQLServerAuthenticationProviderModule implements Module { // Look at the property to choose the correct driver. if (sqlServerDriver.equals(SQLServerEnvironment.SQLSERVER_DRIVER_JTDS)) JdbcHelper.SQL_Server_jTDS.configure(binder); - else if(sqlServerDriver.equals(SQLServerEnvironment.SQLSERVER_DRIVER_DATADIRECT)) + else if (sqlServerDriver.equals(SQLServerEnvironment.SQLSERVER_DRIVER_DATADIRECT)) JdbcHelper.SQL_Server_DataDirect.configure(binder); - else if(sqlServerDriver.equals(SQLServerEnvironment.SQLSERVER_DRIVER_MS)) + else if (sqlServerDriver.equals(SQLServerEnvironment.SQLSERVER_DRIVER_MS)) JdbcHelper.SQL_Server_MS_Driver.configure(binder); else JdbcHelper.SQL_Server_2005_MS_Driver.configure(binder); diff --git a/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/java/org/apache/guacamole/auth/sqlserver/SQLServerEnvironment.java b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/java/org/apache/guacamole/auth/sqlserver/SQLServerEnvironment.java index 2110b0c7d..4d3fabab7 100644 --- a/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/java/org/apache/guacamole/auth/sqlserver/SQLServerEnvironment.java +++ b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/java/org/apache/guacamole/auth/sqlserver/SQLServerEnvironment.java @@ -195,7 +195,7 @@ public class SQLServerEnvironment extends JDBCEnvironment { // Check driver property is one of the acceptable values. String driver = getProperty(SQLServerGuacamoleProperties.SQLSERVER_DRIVER); - if (!(driver.equals(SQLSERVER_DRIVER_JTDS) || + if (driver != null && !(driver.equals(SQLSERVER_DRIVER_JTDS) || driver.equals(SQLSERVER_DRIVER_DATADIRECT) || driver.equals(SQLSERVER_DRIVER_MS) || driver.equals(SQLSERVER_DRIVER_MS_2005))) From 74c055e76412797258b540a24cca8ca0bb1ee5df Mon Sep 17 00:00:00 2001 From: Nick Couchman Date: Tue, 12 Sep 2017 13:14:49 -0400 Subject: [PATCH 14/24] GUACAMOLE-363: Implement new SQLServerDriver data type and property to select the property SQL Server driver. --- ...SQLServerAuthenticationProviderModule.java | 33 +++-- .../auth/sqlserver/SQLServerDriver.java | 46 ++++++ .../sqlserver/SQLServerDriverProperty.java | 60 ++++++++ .../auth/sqlserver/SQLServerEnvironment.java | 133 ++---------------- .../SQLServerGuacamoleProperties.java | 6 +- 5 files changed, 145 insertions(+), 133 deletions(-) create mode 100644 extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/java/org/apache/guacamole/auth/sqlserver/SQLServerDriver.java create mode 100644 extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/java/org/apache/guacamole/auth/sqlserver/SQLServerDriverProperty.java diff --git a/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/java/org/apache/guacamole/auth/sqlserver/SQLServerAuthenticationProviderModule.java b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/java/org/apache/guacamole/auth/sqlserver/SQLServerAuthenticationProviderModule.java index f514e4198..ee0584b4f 100644 --- a/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/java/org/apache/guacamole/auth/sqlserver/SQLServerAuthenticationProviderModule.java +++ b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/java/org/apache/guacamole/auth/sqlserver/SQLServerAuthenticationProviderModule.java @@ -42,9 +42,9 @@ public class SQLServerAuthenticationProviderModule implements Module { private final Properties driverProperties = new Properties(); /** - * Whether or not to use JTDS Driver + * Which SQL Server driver should be used. */ - private String sqlServerDriver; + private SQLServerDriver sqlServerDriver; /** * Creates a new SQLServer authentication provider module that configures @@ -83,16 +83,25 @@ public class SQLServerAuthenticationProviderModule implements Module { @Override public void configure(Binder binder) { - // Bind SQLServer-specific properties - // Look at the property to choose the correct driver. - if (sqlServerDriver.equals(SQLServerEnvironment.SQLSERVER_DRIVER_JTDS)) - JdbcHelper.SQL_Server_jTDS.configure(binder); - else if (sqlServerDriver.equals(SQLServerEnvironment.SQLSERVER_DRIVER_DATADIRECT)) - JdbcHelper.SQL_Server_DataDirect.configure(binder); - else if (sqlServerDriver.equals(SQLServerEnvironment.SQLSERVER_DRIVER_MS)) - JdbcHelper.SQL_Server_MS_Driver.configure(binder); - else - JdbcHelper.SQL_Server_2005_MS_Driver.configure(binder); + // Bind SQLServer-specific properties with the configured driver. + switch(sqlServerDriver) { + case JTDS: + JdbcHelper.SQL_Server_jTDS.configure(binder); + break; + + case DATA_DIRECT: + JdbcHelper.SQL_Server_DataDirect.configure(binder); + break; + + case MICROSOFT_LEGACY: + JdbcHelper.SQL_Server_MS_Driver.configure(binder); + break; + + case MICROSOFT_2005: + default: + JdbcHelper.SQL_Server_2005_MS_Driver.configure(binder); + + } // Bind MyBatis properties Names.bindProperties(binder, myBatisProperties); diff --git a/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/java/org/apache/guacamole/auth/sqlserver/SQLServerDriver.java b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/java/org/apache/guacamole/auth/sqlserver/SQLServerDriver.java new file mode 100644 index 000000000..ec01d0668 --- /dev/null +++ b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/java/org/apache/guacamole/auth/sqlserver/SQLServerDriver.java @@ -0,0 +1,46 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +package org.apache.guacamole.auth.sqlserver; + +/** + * The possible SQL Server drivers to use when using a TDS-compatible database. + */ +public enum SQLServerDriver { + + /** + * The open source jTDS driver. + */ + JTDS, + + /** + * The Progress DataDirect driver. + */ + DATA_DIRECT, + + /** + * The Microsoft Legacy SQL Server driver. + */ + MICROSOFT_LEGACY, + + /** + * The Microsoft 2005 SQL Server driver. + */ + MICROSOFT_2005; +} diff --git a/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/java/org/apache/guacamole/auth/sqlserver/SQLServerDriverProperty.java b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/java/org/apache/guacamole/auth/sqlserver/SQLServerDriverProperty.java new file mode 100644 index 000000000..21a62721c --- /dev/null +++ b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/java/org/apache/guacamole/auth/sqlserver/SQLServerDriverProperty.java @@ -0,0 +1,60 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +package org.apache.guacamole.auth.sqlserver; + +import org.apache.guacamole.GuacamoleException; +import org.apache.guacamole.GuacamoleServerException; +import org.apache.guacamole.properties.GuacamoleProperty; + +/** + * A property whose value is a SQLServerDriver. The incoming string values of "jtds", "datadirect", + * "microsoft", and "microsoft2005" into the corresponding SQLServerDriver enum value. Any + * values that are not valid result in a parse error. + */ +public abstract class SQLServerDriverProperty implements GuacamoleProperty { + + @Override + public SQLServerDriver parseValue(String value) throws GuacamoleException { + + // If no value provided, return null. + if (value == null) + return null; + + // jTDS Driver + if (value.equals("jtds")) + return SQLServerDriver.JTDS; + + // Progress DataDirect Driver + if (value.equals("datadirect")) + return SQLServerDriver.DATA_DIRECT; + + // Microsoft Legacy Driver + if (value.equals("microsoft")) + return SQLServerDriver.MICROSOFT_LEGACY; + + // Microsoft 2005 Driver + if (value.equals("microsoft2005")) + return SQLServerDriver.MICROSOFT_2005; + + throw new GuacamoleServerException("SQLServer driver must be one of \"jtds\", \"datadirect\", \"microsoft\", \"microsoft2005\"."); + + } + +} diff --git a/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/java/org/apache/guacamole/auth/sqlserver/SQLServerEnvironment.java b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/java/org/apache/guacamole/auth/sqlserver/SQLServerEnvironment.java index 4d3fabab7..efd7ae106 100644 --- a/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/java/org/apache/guacamole/auth/sqlserver/SQLServerEnvironment.java +++ b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/java/org/apache/guacamole/auth/sqlserver/SQLServerEnvironment.java @@ -56,69 +56,36 @@ public class SQLServerEnvironment extends JDBCEnvironment { * The default value for the maximum number of connections to be * allowed to the Guacamole server overall. */ - private final int DEFAULT_ABSOLUTE_MAX_CONNECTIONS = 0; + private static final int DEFAULT_ABSOLUTE_MAX_CONNECTIONS = 0; /** * The default value for the default maximum number of connections to be - * allowed per user to any one connection. Note that, as long as the - * legacy "disallow duplicate" and "disallow simultaneous" properties are - * still supported, these cannot be constants, as the legacy properties - * dictate the values that should be used in the absence of the correct - * properties. + * allowed per user to any one connection. */ - private int DEFAULT_MAX_CONNECTIONS_PER_USER = 1; + private static final int DEFAULT_MAX_CONNECTIONS_PER_USER = 1; /** * The default value for the default maximum number of connections to be - * allowed per user to any one connection group. Note that, as long as the - * legacy "disallow duplicate" and "disallow simultaneous" properties are - * still supported, these cannot be constants, as the legacy properties - * dictate the values that should be used in the absence of the correct - * properties. + * allowed per user to any one connection group. */ - private int DEFAULT_MAX_GROUP_CONNECTIONS_PER_USER = 1; + private static final int DEFAULT_MAX_GROUP_CONNECTIONS_PER_USER = 1; /** * The default value for the default maximum number of connections to be - * allowed to any one connection. Note that, as long as the legacy - * "disallow duplicate" and "disallow simultaneous" properties are still - * supported, these cannot be constants, as the legacy properties dictate - * the values that should be used in the absence of the correct properties. + * allowed to any one connection. */ - private int DEFAULT_MAX_CONNECTIONS = 0; + private static final int DEFAULT_MAX_CONNECTIONS = 0; /** * The default value for the default maximum number of connections to be - * allowed to any one connection group. Note that, as long as the legacy - * "disallow duplicate" and "disallow simultaneous" properties are still - * supported, these cannot be constants, as the legacy properties dictate - * the values that should be used in the absence of the correct properties. + * allowed to any one connection group. */ - private int DEFAULT_MAX_GROUP_CONNECTIONS = 0; + private static final int DEFAULT_MAX_GROUP_CONNECTIONS = 0; /** - * The value for the sqlserver-driver property that triggers the use of - * the open source JTDS driver. + * The default SQLServer driver to use. */ - public final static String SQLSERVER_DRIVER_JTDS = "jtds"; - - /** - * The value for the sqlserver-driver property that triggers the use of - * the DataDirect JDBC driver. - */ - public final static String SQLSERVER_DRIVER_DATADIRECT = "datadirect"; - - /** - * The value for the sqlserver-driver property that triggers the use of - * the older Microsoft JDBC driver. - */ - public final static String SQLSERVER_DRIVER_MS = "microsoft"; - - /** - * The value for the sqlserver-driver property that triggers the use of - * the Microsoft JDBC driver. This is the default. - */ - public final static String SQLSERVER_DRIVER_MS_2005 = "microsoft2005"; + public static final SQLServerDriver SQLSERVER_DEFAULT_DRIVER = SQLServerDriver.MICROSOFT_2005; /** * Constructs a new SQLServerEnvironment, providing access to SQLServer-specific @@ -133,75 +100,6 @@ public class SQLServerEnvironment extends JDBCEnvironment { // Init underlying JDBC environment super(); - // Read legacy concurrency-related property - Boolean disallowSimultaneous = getProperty(SQLServerGuacamoleProperties.SQLSERVER_DISALLOW_SIMULTANEOUS_CONNECTIONS); - Boolean disallowDuplicate = getProperty(SQLServerGuacamoleProperties.SQLSERVER_DISALLOW_DUPLICATE_CONNECTIONS); - - // Legacy "simultaneous" property dictates only the maximum number of - // connections per connection - if (disallowSimultaneous != null) { - - // Translate legacy property - if (disallowSimultaneous) { - DEFAULT_MAX_CONNECTIONS = 1; - DEFAULT_MAX_GROUP_CONNECTIONS = 0; - } - else { - DEFAULT_MAX_CONNECTIONS = 0; - DEFAULT_MAX_GROUP_CONNECTIONS = 0; - } - - // Warn of deprecation - logger.warn("The \"{}\" property is deprecated. Use \"{}\" and \"{}\" instead.", - SQLServerGuacamoleProperties.SQLSERVER_DISALLOW_SIMULTANEOUS_CONNECTIONS.getName(), - SQLServerGuacamoleProperties.SQLSERVER_DEFAULT_MAX_CONNECTIONS.getName(), - SQLServerGuacamoleProperties.SQLSERVER_DEFAULT_MAX_GROUP_CONNECTIONS.getName()); - - // Inform of new equivalent - logger.info("To achieve the same result of setting \"{}\" to \"{}\", set \"{}\" to \"{}\" and \"{}\" to \"{}\".", - SQLServerGuacamoleProperties.SQLSERVER_DISALLOW_SIMULTANEOUS_CONNECTIONS.getName(), disallowSimultaneous, - SQLServerGuacamoleProperties.SQLSERVER_DEFAULT_MAX_CONNECTIONS.getName(), DEFAULT_MAX_CONNECTIONS, - SQLServerGuacamoleProperties.SQLSERVER_DEFAULT_MAX_GROUP_CONNECTIONS.getName(), DEFAULT_MAX_GROUP_CONNECTIONS); - - } - - // Legacy "duplicate" property dictates whether connections and groups - // may be used concurrently only by different users - if (disallowDuplicate != null) { - - // Translate legacy property - if (disallowDuplicate) { - DEFAULT_MAX_CONNECTIONS_PER_USER = 1; - DEFAULT_MAX_GROUP_CONNECTIONS_PER_USER = 1; - } - else { - DEFAULT_MAX_CONNECTIONS_PER_USER = 0; - DEFAULT_MAX_GROUP_CONNECTIONS_PER_USER = 0; - } - - // Warn of deprecation - logger.warn("The \"{}\" property is deprecated. Use \"{}\" and \"{}\" instead.", - SQLServerGuacamoleProperties.SQLSERVER_DISALLOW_DUPLICATE_CONNECTIONS.getName(), - SQLServerGuacamoleProperties.SQLSERVER_DEFAULT_MAX_CONNECTIONS_PER_USER.getName(), - SQLServerGuacamoleProperties.SQLSERVER_DEFAULT_MAX_GROUP_CONNECTIONS.getName()); - - // Inform of new equivalent - logger.info("To achieve the same result of setting \"{}\" to \"{}\", set \"{}\" to \"{}\" and \"{}\" to \"{}\".", - SQLServerGuacamoleProperties.SQLSERVER_DISALLOW_DUPLICATE_CONNECTIONS.getName(), disallowDuplicate, - SQLServerGuacamoleProperties.SQLSERVER_DEFAULT_MAX_CONNECTIONS_PER_USER.getName(), DEFAULT_MAX_CONNECTIONS_PER_USER, - SQLServerGuacamoleProperties.SQLSERVER_DEFAULT_MAX_GROUP_CONNECTIONS_PER_USER.getName(), DEFAULT_MAX_GROUP_CONNECTIONS_PER_USER); - - } - - // Check driver property is one of the acceptable values. - String driver = getProperty(SQLServerGuacamoleProperties.SQLSERVER_DRIVER); - if (driver != null && !(driver.equals(SQLSERVER_DRIVER_JTDS) || - driver.equals(SQLSERVER_DRIVER_DATADIRECT) || - driver.equals(SQLSERVER_DRIVER_MS) || - driver.equals(SQLSERVER_DRIVER_MS_2005))) - logger.warn("{} property has been set to an invalid value. The default Microsoft 2005 driver will be used.", - SQLServerGuacamoleProperties.SQLSERVER_DRIVER.getName()); - } @Override @@ -337,20 +235,19 @@ public class SQLServerEnvironment extends JDBCEnvironment { } /** - * Returns whether or not to use the SourceForge JTDS driver for more - * generic JTDS connections instead of the Microsoft-provided JDBC driver. + * Returns which JDBC driver should be used to make the SQLServer/TDS connection. * * @return - * True if the JTDS driver should be used; false by default. + * Which TDS-compatible JDBC driver should be used. * * @throws GuacamoleException * If an error occurs while retrieving the property value, or if the * value was not set, as this property is required. */ - public String getSQLServerDriver() throws GuacamoleException { + public SQLServerDriver getSQLServerDriver() throws GuacamoleException { return getProperty( SQLServerGuacamoleProperties.SQLSERVER_DRIVER, - SQLSERVER_DRIVER_MS_2005 + SQLSERVER_DEFAULT_DRIVER ); } diff --git a/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/java/org/apache/guacamole/auth/sqlserver/SQLServerGuacamoleProperties.java b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/java/org/apache/guacamole/auth/sqlserver/SQLServerGuacamoleProperties.java index 9d9b3864b..8aa02b383 100644 --- a/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/java/org/apache/guacamole/auth/sqlserver/SQLServerGuacamoleProperties.java +++ b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/java/org/apache/guacamole/auth/sqlserver/SQLServerGuacamoleProperties.java @@ -198,10 +198,10 @@ public class SQLServerGuacamoleProperties { }; /** - * Whether or not to use the JTDS driver for SQL Server connections. + * Which TDS-compatible JDBC driver should be used for the connection. */ - public static final StringGuacamoleProperty - SQLSERVER_DRIVER = new StringGuacamoleProperty() { + public static final SQLServerDriverProperty + SQLSERVER_DRIVER = new SQLServerDriverProperty() { @Override public String getName() { return "sqlserver-driver"; } From 82d1b142be887372069ff69397a858183711c61e Mon Sep 17 00:00:00 2001 From: Nick Couchman Date: Wed, 27 Sep 2017 08:54:43 -0400 Subject: [PATCH 15/24] GUACAMOLE-363: Add binding for permission list rules to data types. --- .../guacamole-auth-jdbc-sqlserver/schema/001-create-schema.sql | 2 ++ 1 file changed, 2 insertions(+) diff --git a/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/schema/001-create-schema.sql b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/schema/001-create-schema.sql index 1a1e32471..6c3cd7bda 100644 --- a/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/schema/001-create-schema.sql +++ b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/schema/001-create-schema.sql @@ -41,11 +41,13 @@ GO; * The permission data type. */ CREATE TYPE [guacamole_permission] FROM [nvarchar](10) NOT NULL; +EXEC sp_bindrule 'guacamole_permission_list','guacamole_permission'; /** * The system permission data type. */ CREATE TYPE [guacamole_system_permission] FROM [nvarchar](32) NOT NULL; +EXEC sp_bindrule 'guacamole_system_permission_list','guacamole_system_permission'; GO; /** From 7ecd3915c6a65a94c57b3d2c181501626e0595d7 Mon Sep 17 00:00:00 2001 From: Nick Couchman Date: Wed, 27 Sep 2017 08:56:28 -0400 Subject: [PATCH 16/24] GUACAMOLE-363: Switch to 4000 for nvarchar size instead of max. --- .../schema/001-create-schema.sql | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/schema/001-create-schema.sql b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/schema/001-create-schema.sql index 6c3cd7bda..5bb2f8a89 100644 --- a/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/schema/001-create-schema.sql +++ b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/schema/001-create-schema.sql @@ -223,7 +223,7 @@ SET QUOTED_IDENTIFIER ON; CREATE TABLE [guacamole_connection_parameter]( [connection_id] [int] NOT NULL, [parameter_name] [nvarchar](128) NOT NULL, - [parameter_value] [nvarchar](max) NOT NULL, + [parameter_value] [nvarchar](4000) NOT NULL, CONSTRAINT [PK_guacamole_connection_parameter] PRIMARY KEY CLUSTERED ([connection_id] ASC, [parameter_name] ASC) @@ -256,7 +256,7 @@ SET QUOTED_IDENTIFIER ON; CREATE TABLE [guacamole_sharing_profile_parameter]( [sharing_profile_id] [int] NOT NULL, [parameter_name] [nvarchar](128) NOT NULL, - [parameter_value] [nvarchar](max) NOT NULL, + [parameter_value] [nvarchar](4000) NOT NULL, CONSTRAINT [PK_guacamole_sharing_profile_parameter] PRIMARY KEY CLUSTERED ([sharing_profile_id] ASC, [parameter_name] ASC) From 0459181e802dd12d868630569a2a508796181487 Mon Sep 17 00:00:00 2001 From: Nick Couchman Date: Wed, 27 Sep 2017 09:05:56 -0400 Subject: [PATCH 17/24] GUACAMOLE-363: Change default driver case to throw an exception instead of default to SQL Server 2005 driver. --- .../sqlserver/SQLServerAuthenticationProviderModule.java | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/java/org/apache/guacamole/auth/sqlserver/SQLServerAuthenticationProviderModule.java b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/java/org/apache/guacamole/auth/sqlserver/SQLServerAuthenticationProviderModule.java index ee0584b4f..22cb47461 100644 --- a/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/java/org/apache/guacamole/auth/sqlserver/SQLServerAuthenticationProviderModule.java +++ b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/java/org/apache/guacamole/auth/sqlserver/SQLServerAuthenticationProviderModule.java @@ -22,6 +22,7 @@ package org.apache.guacamole.auth.sqlserver; import com.google.inject.Binder; import com.google.inject.Module; import com.google.inject.name.Names; +import java.lang.UnsupportedOperationException; import java.util.Properties; import org.apache.guacamole.GuacamoleException; import org.mybatis.guice.datasource.helper.JdbcHelper; @@ -98,9 +99,13 @@ public class SQLServerAuthenticationProviderModule implements Module { break; case MICROSOFT_2005: - default: JdbcHelper.SQL_Server_2005_MS_Driver.configure(binder); + break; + default: + throw new UnsupportedOperationException( + "A driver has been specified that is not supported by this module." + ); } // Bind MyBatis properties From 34711b7a92d439aae8af3e51dc295c7d9ae635bf Mon Sep 17 00:00:00 2001 From: Nick Couchman Date: Wed, 27 Sep 2017 09:22:30 -0400 Subject: [PATCH 18/24] GUACAMOLE-363: Make DEFAULT_USER_REQUIRED false. --- .../apache/guacamole/auth/sqlserver/SQLServerEnvironment.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/java/org/apache/guacamole/auth/sqlserver/SQLServerEnvironment.java b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/java/org/apache/guacamole/auth/sqlserver/SQLServerEnvironment.java index efd7ae106..20361e630 100644 --- a/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/java/org/apache/guacamole/auth/sqlserver/SQLServerEnvironment.java +++ b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/java/org/apache/guacamole/auth/sqlserver/SQLServerEnvironment.java @@ -50,7 +50,7 @@ public class SQLServerEnvironment extends JDBCEnvironment { * Whether a database user account is required by default for authentication * to succeed. */ - private static final boolean DEFAULT_USER_REQUIRED = true; + private static final boolean DEFAULT_USER_REQUIRED = false; /** * The default value for the maximum number of connections to be From 5ef7d116dec53f3842f51669af94f0fba6d9c6ee Mon Sep 17 00:00:00 2001 From: Nick Couchman Date: Wed, 27 Sep 2017 09:23:56 -0400 Subject: [PATCH 19/24] GUACAMOLE-363: Remove unused properties. --- .../SQLServerGuacamoleProperties.java | 26 ------------------- 1 file changed, 26 deletions(-) diff --git a/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/java/org/apache/guacamole/auth/sqlserver/SQLServerGuacamoleProperties.java b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/java/org/apache/guacamole/auth/sqlserver/SQLServerGuacamoleProperties.java index 8aa02b383..45635996f 100644 --- a/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/java/org/apache/guacamole/auth/sqlserver/SQLServerGuacamoleProperties.java +++ b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/java/org/apache/guacamole/auth/sqlserver/SQLServerGuacamoleProperties.java @@ -105,32 +105,6 @@ public class SQLServerGuacamoleProperties { }; - /** - * Whether or not multiple users accessing the same connection at the same - * time should be disallowed. - */ - public static final BooleanGuacamoleProperty - SQLSERVER_DISALLOW_SIMULTANEOUS_CONNECTIONS = - new BooleanGuacamoleProperty() { - - @Override - public String getName() { return "sqlserver-disallow-simultaneous-connections"; } - - }; - - /** - * Whether or not the same user accessing the same connection or connection - * group at the same time should be disallowed. - */ - public static final BooleanGuacamoleProperty - SQLSERVER_DISALLOW_DUPLICATE_CONNECTIONS = - new BooleanGuacamoleProperty() { - - @Override - public String getName() { return "sqlserver-disallow-duplicate-connections"; } - - }; - /** * The maximum number of concurrent connections to allow overall. Zero * denotes unlimited. From b4d2f8761aa5f49c13aa857a4370cfbf8a171679 Mon Sep 17 00:00:00 2001 From: Nick Couchman Date: Wed, 27 Sep 2017 09:38:43 -0400 Subject: [PATCH 20/24] GUACAMOLE-263: Change user creation to use hash values used by other modules. --- .../schema/002-create-admin-user.sql | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/schema/002-create-admin-user.sql b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/schema/002-create-admin-user.sql index d348b61ae..15944a28a 100644 --- a/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/schema/002-create-admin-user.sql +++ b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/schema/002-create-admin-user.sql @@ -20,8 +20,11 @@ /** * Create the default admin user account and set up full privileges. */ -INSERT INTO [guacamole_user] (username, password_hash, password_date) -VALUES ('guacadmin', HASHBYTES('SHA2_256', 'guacadmin'), getdate()); +INSERT INTO [guacamole_user] (username, password_hash, password_salt, password_date) +VALUES ('guacadmin', + 0xCA458A7D494E3BE824F5E1E175A1556C0F8EEF2C2D7DF3633BEC4A29C4411960, + 0xFE24ADC5E11E2B25288D1704ABE67A79E342ECC26064CE69C5B3177795A82264, + getdate()); INSERT INTO [guacamole_user_permission] SELECT [guacamole_user].[user_id], [affected].[user_id], permission From 57dab6e815f61306478dbf7e404491149292224f Mon Sep 17 00:00:00 2001 From: Nick Couchman Date: Wed, 27 Sep 2017 10:17:13 -0400 Subject: [PATCH 21/24] GUACAMOLE-363: Remove unnecessary parameters that are already using default values. --- .../schema/001-create-schema.sql | 143 +++--------------- 1 file changed, 25 insertions(+), 118 deletions(-) diff --git a/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/schema/001-create-schema.sql b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/schema/001-create-schema.sql index 5bb2f8a89..a52ad7f41 100644 --- a/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/schema/001-create-schema.sql +++ b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/schema/001-create-schema.sql @@ -17,6 +17,17 @@ * under the License. */ +/** + * Turn on ANSI_NULLS for the entire DB to make it ISO-compliant. + */ +ALTER DATABASE CURRENT SET ANSI_NULLS ON; +GO; + +/** + * Turn on QUOTED_IDENTIFIER for the entire DB. + */ +ALTER DATABASE CURRENT SET QUOTED_IDENTIFIER ON; + /** * List for permission data type. */ @@ -53,8 +64,6 @@ GO; /** * The connection_group table stores organizational and balancing groups. */ -SET ANSI_NULLS ON; -SET QUOTED_IDENTIFIER ON; CREATE TABLE [guacamole_connection_group]( [connection_group_id] [int] IDENTITY(1,1) NOT NULL, [parent_id] [int] NULL, @@ -65,13 +74,7 @@ CREATE TABLE [guacamole_connection_group]( [enable_session_affinity] [bit] NOT NULL, CONSTRAINT [PK_guacmaole_connection_group] PRIMARY KEY CLUSTERED - ([connection_group_id] ASC) - WITH (PAD_INDEX = OFF, - STATISTICS_NORECOMPUTE = OFF, - IGNORE_DUP_KEY = OFF, - ALLOW_ROW_LOCKS = ON, - ALLOW_PAGE_LOCKS = ON) - ON [PRIMARY] + ([connection_group_id] ASC) ON [PRIMARY] ) ON [PRIMARY]; /** @@ -100,8 +103,6 @@ GO; /** * The connection table, for storing connections and attributes. */ -SET ANSI_NULLS ON; -SET QUOTED_IDENTIFIER ON; CREATE TABLE [guacamole_connection]( [connection_id] [int] IDENTITY(1,1) NOT NULL, [connection_name] [nvarchar](128) NOT NULL, @@ -116,13 +117,7 @@ CREATE TABLE [guacamole_connection]( [failover_only] [bit] NOT NULL, CONSTRAINT [PK_guacamole_connection] PRIMARY KEY CLUSTERED - ([connection_id] ASC) - WITH (PAD_INDEX = OFF, - STATISTICS_NORECOMPUTE = OFF, - IGNORE_DUP_KEY = OFF, - ALLOW_ROW_LOCKS = ON, - ALLOW_PAGE_LOCKS = ON) - ON [PRIMARY] + ([connection_id] ASC) ON [PRIMARY] ) ON [PRIMARY]; ALTER TABLE [guacamole_connection] @@ -142,8 +137,6 @@ GO; /** * The user table stores user accounts, passwords, and properties. */ -SET ANSI_NULLS ON; -SET QUOTED_IDENTIFIER ON; CREATE TABLE [guacamole_user]( [user_id] [int] IDENTITY(1,1) NOT NULL, [username] [nvarchar](128) NOT NULL, @@ -163,13 +156,7 @@ CREATE TABLE [guacamole_user]( [organizational_role] [nvarchar](256) NULL, CONSTRAINT [PK_guacamole_user] PRIMARY KEY CLUSTERED - ([user_id] ASC) - WITH (PAD_INDEX = OFF, - STATISTICS_NORECOMPUTE = OFF, - IGNORE_DUP_KEY = OFF, - ALLOW_ROW_LOCKS = ON, - ALLOW_PAGE_LOCKS = ON) - ON [PRIMARY] + ([user_id] ASC) ON [PRIMARY] ) ON [PRIMARY]; /** @@ -185,21 +172,13 @@ GO; * The sharing_profile table stores profiles that allow * connections to be shared amongst multiple users. */ -SET ANSI_NULLS ON; -SET QUOTED_IDENTIFIER ON; CREATE TABLE [guacamole_sharing_profile]( [sharing_profile_id] [int] IDENTITY(1,1) NOT NULL, [sharing_profile_name] [nvarchar](128) NOT NULL, [primary_connection_id] [int] NOT NULL, CONSTRAINT [PK_guacamole_sharing_profile] PRIMARY KEY CLUSTERED - ([sharing_profile_id] ASC) - WITH (PAD_INDEX = OFF, - STATISTICS_NORECOMPUTE = OFF, - IGNORE_DUP_KEY = OFF, - ALLOW_ROW_LOCKS = ON, - ALLOW_PAGE_LOCKS = ON) - ON [PRIMARY] + ([sharing_profile_id] ASC) ON [PRIMARY] ) ON [PRIMARY]; /** @@ -218,21 +197,13 @@ GO; * The connection_parameter table stores parameters for * connection objects. */ -SET ANSI_NULLS ON; -SET QUOTED_IDENTIFIER ON; CREATE TABLE [guacamole_connection_parameter]( [connection_id] [int] NOT NULL, [parameter_name] [nvarchar](128) NOT NULL, [parameter_value] [nvarchar](4000) NOT NULL, CONSTRAINT [PK_guacamole_connection_parameter] PRIMARY KEY CLUSTERED - ([connection_id] ASC, [parameter_name] ASC) - WITH (PAD_INDEX = OFF, - STATISTICS_NORECOMPUTE = OFF, - IGNORE_DUP_KEY = OFF, - ALLOW_ROW_LOCKS = ON, - ALLOW_PAGE_LOCKS = ON) - ON [PRIMARY] + ([connection_id] ASC, [parameter_name] ASC) ON [PRIMARY] ) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]; /** @@ -251,21 +222,13 @@ GO; * The sharing_profile_parameter table stores parameters * for sharing_profile objects. */ -SET ANSI_NULLS ON; -SET QUOTED_IDENTIFIER ON; CREATE TABLE [guacamole_sharing_profile_parameter]( [sharing_profile_id] [int] NOT NULL, [parameter_name] [nvarchar](128) NOT NULL, [parameter_value] [nvarchar](4000) NOT NULL, CONSTRAINT [PK_guacamole_sharing_profile_parameter] PRIMARY KEY CLUSTERED - ([sharing_profile_id] ASC, [parameter_name] ASC) - WITH (PAD_INDEX = OFF, - STATISTICS_NORECOMPUTE = OFF, - IGNORE_DUP_KEY = OFF, - ALLOW_ROW_LOCKS = ON, - ALLOW_PAGE_LOCKS = ON) - ON [PRIMARY] + ([sharing_profile_id] ASC, [parameter_name] ASC) ON [PRIMARY] ) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]; /** @@ -285,21 +248,13 @@ GO; * The connection_permission table stores permission * mappings for connection objects. */ -SET ANSI_NULLS ON; -SET QUOTED_IDENTIFIER ON; CREATE TABLE [guacamole_connection_permission]( [user_id] [int] NOT NULL, [connection_id] [int] NOT NULL, [permission] [guacamole_permission] NOT NULL, CONSTRAINT [PK_guacamole_connection_permission] PRIMARY KEY CLUSTERED - ([user_id] ASC, [connection_id] ASC, [permission] ASC) - WITH (PAD_INDEX = OFF, - STATISTICS_NORECOMPUTE = OFF, - IGNORE_DUP_KEY = OFF, - ALLOW_ROW_LOCKS = ON, - ALLOW_PAGE_LOCKS = ON) - ON [PRIMARY] + ([user_id] ASC, [connection_id] ASC, [permission] ASC) ON [PRIMARY] ) ON [PRIMARY]; /** @@ -325,21 +280,13 @@ GO; * The connection_group_permission table stores permission mappings for * connection_group objects. */ -SET ANSI_NULLS ON; -SET QUOTED_IDENTIFIER ON; CREATE TABLE [guacamole_connection_group_permission]( [user_id] [int] NOT NULL, [connection_group_id] [int] NOT NULL, [permission] [guacamole_permission] NOT NULL, CONSTRAINT [PK_guacamole_connection_group_permission] PRIMARY KEY CLUSTERED - ([user_id] ASC, [connection_group_id] ASC, [permission] ASC) - WITH (PAD_INDEX = OFF, - STATISTICS_NORECOMPUTE = OFF, - IGNORE_DUP_KEY = OFF, - ALLOW_ROW_LOCKS = ON, - ALLOW_PAGE_LOCKS = ON) - ON [PRIMARY] + ([user_id] ASC, [connection_group_id] ASC, [permission] ASC) ON [PRIMARY] ) ON [PRIMARY]; /** @@ -365,21 +312,13 @@ GO; * The sharing_profile_permission table stores permission * mappings for sharing_profile objects. */ -SET ANSI_NULLS ON; -SET QUOTED_IDENTIFIER ON; CREATE TABLE [guacamole_sharing_profile_permission]( [user_id] [int] NOT NULL, [sharing_profile_id] [int] NOT NULL, [permission] [guacamole_permission] NOT NULL, CONSTRAINT [PK_guacamole_sharing_profile_permission] PRIMARY KEY CLUSTERED - ([user_id] ASC, [sharing_profile_id] ASC, [permission] ASC) - WITH (PAD_INDEX = OFF, - STATISTICS_NORECOMPUTE = OFF, - IGNORE_DUP_KEY = OFF, - ALLOW_ROW_LOCKS = ON, - ALLOW_PAGE_LOCKS = ON) - ON [PRIMARY] + ([user_id] ASC, [sharing_profile_id] ASC, [permission] ASC) ON [PRIMARY] ) ON [PRIMARY]; /** @@ -405,20 +344,12 @@ GO; * The system_permission table stores permission mappings * for system-level operations. */ -SET ANSI_NULLS ON; -SET QUOTED_IDENTIFIER ON; CREATE TABLE [guacamole_system_permission]( [user_id] [int] NOT NULL, [permission] [guacamole_system_permission] NOT NULL, CONSTRAINT [PK_guacamole_system_permission] PRIMARY KEY CLUSTERED - ([user_id] ASC, [permission] ASC) - WITH (PAD_INDEX = OFF, - STATISTICS_NORECOMPUTE = OFF, - IGNORE_DUP_KEY = OFF, - ALLOW_ROW_LOCKS = ON, - ALLOW_PAGE_LOCKS = ON) - ON [PRIMARY] + ([user_id] ASC, [permission] ASC) ON [PRIMARY] ) ON [PRIMARY]; /** @@ -437,21 +368,13 @@ GO; * The user_permission table stores permission mappings * for users to other users. */ -SET ANSI_NULLS ON; -SET QUOTED_IDENTIFIER ON; CREATE TABLE [guacamole_user_permission]( [user_id] [int] NOT NULL, [affected_user_id] [int] NOT NULL, [permission] [guacamole_permission] NOT NULL, CONSTRAINT [PK_guacamole_user_permission] PRIMARY KEY CLUSTERED - ([user_id] ASC, [affected_user_id] ASC, [permission] ASC) - WITH (PAD_INDEX = OFF, - STATISTICS_NORECOMPUTE = OFF, - IGNORE_DUP_KEY = OFF, - ALLOW_ROW_LOCKS = ON, - ALLOW_PAGE_LOCKS = ON) - ON [PRIMARY] + ([user_id] ASC, [affected_user_id] ASC, [permission] ASC) ON [PRIMARY] ) ON [PRIMARY]; /** @@ -475,8 +398,6 @@ GO; * The connection_history table stores records for historical * connections. */ -SET ANSI_NULLS ON; -SET QUOTED_IDENTIFIER ON; CREATE TABLE [guacamole_connection_history]( [history_id] [int] IDENTITY(1,1) NOT NULL, [user_id] [int] NULL, @@ -490,13 +411,7 @@ CREATE TABLE [guacamole_connection_history]( [end_date] [datetime] NULL, CONSTRAINT [PK_guacamole_connection_history] PRIMARY KEY CLUSTERED - ([history_id] ASC) - WITH (PAD_INDEX = OFF, - STATISTICS_NORECOMPUTE = OFF, - IGNORE_DUP_KEY = OFF, - ALLOW_ROW_LOCKS = ON, - ALLOW_PAGE_LOCKS = ON) - ON [PRIMARY] + ([history_id] ASC) ON [PRIMARY] ) ON [PRIMARY]; /** @@ -510,7 +425,7 @@ ALTER TABLE [guacamole_connection_history] ALTER TABLE [guacamole_connection_history] CHECK CONSTRAINT [FK_guacamole_connection_history_connection]; ALTER TABLE [guacamole_connection_history] - WITH CHECK ADD CONSTRAINT [FK_guacamole_connection_history_sharing_profile] FOREIGN KEY([sharing_profile_id]) + WITH CHECK ADD CONSTRAINT [FK_guacamole_connection_history_sharing_profile] FOREIGN KEY([sharing_profile_id]) REFERENCES [guacamole_sharing_profile] ([sharing_profile_id]); ALTER TABLE [guacamole_connection_history] CHECK CONSTRAINT [FK_guacamole_connection_history_sharing_profile]; @@ -528,8 +443,6 @@ GO; * for users, allowing for enforcing rules associated with * reuse of passwords. */ -SET ANSI_NULLS ON; -SET QUOTED_IDENTIFIER ON; CREATE TABLE [guacamole_user_password_history]( [password_history_id] [int] IDENTITY(1,1) NOT NULL, [user_id] [int] NOT NULL, @@ -538,13 +451,7 @@ CREATE TABLE [guacamole_user_password_history]( [password_date] [datetime] NOT NULL, CONSTRAINT [PK_guacamole_user_password_history] PRIMARY KEY CLUSTERED - ([password_history_id] ASC) - WITH (PAD_INDEX = OFF, - STATISTICS_NORECOMPUTE = OFF, - IGNORE_DUP_KEY = OFF, - ALLOW_ROW_LOCKS = ON, - ALLOW_PAGE_LOCKS = ON) - ON [PRIMARY] + ([password_history_id] ASC) ON [PRIMARY] ) ON [PRIMARY]; /** From e084f85d1804fede4576af9a8fc124e29959896f Mon Sep 17 00:00:00 2001 From: Nick Couchman Date: Thu, 28 Sep 2017 08:41:56 -0400 Subject: [PATCH 22/24] GUACAMOLE-363: Update ConnectionRecordMapper to new ActivityRecordSet class. --- .../guacamole/auth/jdbc/connection/ConnectionRecordMapper.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/resources/org/apache/guacamole/auth/jdbc/connection/ConnectionRecordMapper.xml b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/resources/org/apache/guacamole/auth/jdbc/connection/ConnectionRecordMapper.xml index bca8139d2..d7ae41c4b 100644 --- a/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/resources/org/apache/guacamole/auth/jdbc/connection/ConnectionRecordMapper.xml +++ b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/resources/org/apache/guacamole/auth/jdbc/connection/ConnectionRecordMapper.xml @@ -127,7 +127,7 @@ - + - + Date: Sat, 30 Sep 2017 16:45:48 -0400 Subject: [PATCH 23/24] GUACAMOLE-363: Clean up formatting on SQL schema file. --- .../schema/001-create-schema.sql | 132 +++++++++--------- 1 file changed, 66 insertions(+), 66 deletions(-) diff --git a/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/schema/001-create-schema.sql b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/schema/001-create-schema.sql index a52ad7f41..c64f6f971 100644 --- a/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/schema/001-create-schema.sql +++ b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/schema/001-create-schema.sql @@ -42,10 +42,10 @@ GO; CREATE RULE [guacamole_system_permission_list] AS @list IN ('CREATE_CONNECTION', - 'CREATE_CONNECTION_GROUP', - 'CREATE_SHARING_PROFILE', - 'CREATE_USER', - 'ADMINISTER'); + 'CREATE_CONNECTION_GROUP', + 'CREATE_SHARING_PROFILE', + 'CREATE_USER', + 'ADMINISTER'); GO; /** @@ -65,16 +65,16 @@ GO; * The connection_group table stores organizational and balancing groups. */ CREATE TABLE [guacamole_connection_group]( - [connection_group_id] [int] IDENTITY(1,1) NOT NULL, - [parent_id] [int] NULL, - [connection_group_name] [nvarchar](128) NOT NULL, - [type] [nvarchar](32) NOT NULL, - [max_connections] [int] NULL, + [connection_group_id] [int] IDENTITY(1,1) NOT NULL, + [parent_id] [int] NULL, + [connection_group_name] [nvarchar](128) NOT NULL, + [type] [nvarchar](32) NOT NULL, + [max_connections] [int] NULL, [max_connections_per_user] [int] NULL, - [enable_session_affinity] [bit] NOT NULL, + [enable_session_affinity] [bit] NOT NULL, CONSTRAINT [PK_guacmaole_connection_group] PRIMARY KEY CLUSTERED - ([connection_group_id] ASC) ON [PRIMARY] + ([connection_group_id] ASC) ON [PRIMARY] ) ON [PRIMARY]; /** @@ -82,7 +82,7 @@ CREATE TABLE [guacamole_connection_group]( */ ALTER TABLE [guacamole_connection_group] WITH CHECK ADD CONSTRAINT [FK_guacamole_connection_group_connection_group_id] FOREIGN KEY([parent_id]) - REFERENCES [guacamole_connection_group] ([connection_group_id]); + REFERENCES [guacamole_connection_group] ([connection_group_id]); ALTER TABLE [guacamole_connection_group] CHECK CONSTRAINT [FK_guacamole_connection_group_connection_group_id]; ALTER TABLE [guacamole_connection_group] @@ -104,17 +104,17 @@ GO; * The connection table, for storing connections and attributes. */ CREATE TABLE [guacamole_connection]( - [connection_id] [int] IDENTITY(1,1) NOT NULL, - [connection_name] [nvarchar](128) NOT NULL, - [parent_id] [int] NULL, - [protocol] [nvarchar](32) NOT NULL, - [proxy_port] [int] NULL, - [proxy_hostname] [nvarchar](512) NULL, - [proxy_encryption_method] [nvarchar](4) NULL, - [max_connections] [int] NULL, + [connection_id] [int] IDENTITY(1,1) NOT NULL, + [connection_name] [nvarchar](128) NOT NULL, + [parent_id] [int] NULL, + [protocol] [nvarchar](32) NOT NULL, + [proxy_port] [int] NULL, + [proxy_hostname] [nvarchar](512) NULL, + [proxy_encryption_method] [nvarchar](4) NULL, + [max_connections] [int] NULL, [max_connections_per_user] [int] NULL, - [connection_weight] [int] NULL, - [failover_only] [bit] NOT NULL, + [connection_weight] [int] NULL, + [failover_only] [bit] NOT NULL, CONSTRAINT [PK_guacamole_connection] PRIMARY KEY CLUSTERED ([connection_id] ASC) ON [PRIMARY] @@ -138,22 +138,22 @@ GO; * The user table stores user accounts, passwords, and properties. */ CREATE TABLE [guacamole_user]( - [user_id] [int] IDENTITY(1,1) NOT NULL, - [username] [nvarchar](128) NOT NULL, - [password_hash] [binary](32) NOT NULL, - [password_salt] [binary](32) NULL, - [password_date] [datetime] NOT NULL, - [disabled] [bit] NOT NULL, - [expired] [bit] NOT NULL, - [access_window_start] [time](7) NULL, - [access_window_end] [time](7) NULL, - [valid_from] [date] NULL, - [valid_until] [date] NULL, - [timezone] [nvarchar](64) NULL, - [full_name] [nvarchar](256) NULL, - [email_address] [nvarchar](256) NULL, - [organization] [nvarchar](256) NULL, - [organizational_role] [nvarchar](256) NULL, + [user_id] [int] IDENTITY(1,1) NOT NULL, + [username] [nvarchar](128) NOT NULL, + [password_hash] [binary](32) NOT NULL, + [password_salt] [binary](32) NULL, + [password_date] [datetime] NOT NULL, + [disabled] [bit] NOT NULL, + [expired] [bit] NOT NULL, + [access_window_start] [time](7) NULL, + [access_window_end] [time](7) NULL, + [valid_from] [date] NULL, + [valid_until] [date] NULL, + [timezone] [nvarchar](64) NULL, + [full_name] [nvarchar](256) NULL, + [email_address] [nvarchar](256) NULL, + [organization] [nvarchar](256) NULL, + [organizational_role] [nvarchar](256) NULL, CONSTRAINT [PK_guacamole_user] PRIMARY KEY CLUSTERED ([user_id] ASC) ON [PRIMARY] @@ -173,8 +173,8 @@ GO; * connections to be shared amongst multiple users. */ CREATE TABLE [guacamole_sharing_profile]( - [sharing_profile_id] [int] IDENTITY(1,1) NOT NULL, - [sharing_profile_name] [nvarchar](128) NOT NULL, + [sharing_profile_id] [int] IDENTITY(1,1) NOT NULL, + [sharing_profile_name] [nvarchar](128) NOT NULL, [primary_connection_id] [int] NOT NULL, CONSTRAINT [PK_guacamole_sharing_profile] PRIMARY KEY CLUSTERED @@ -198,8 +198,8 @@ GO; * connection objects. */ CREATE TABLE [guacamole_connection_parameter]( - [connection_id] [int] NOT NULL, - [parameter_name] [nvarchar](128) NOT NULL, + [connection_id] [int] NOT NULL, + [parameter_name] [nvarchar](128) NOT NULL, [parameter_value] [nvarchar](4000) NOT NULL, CONSTRAINT [PK_guacamole_connection_parameter] PRIMARY KEY CLUSTERED @@ -224,8 +224,8 @@ GO; */ CREATE TABLE [guacamole_sharing_profile_parameter]( [sharing_profile_id] [int] NOT NULL, - [parameter_name] [nvarchar](128) NOT NULL, - [parameter_value] [nvarchar](4000) NOT NULL, + [parameter_name] [nvarchar](128) NOT NULL, + [parameter_value] [nvarchar](4000) NOT NULL, CONSTRAINT [PK_guacamole_sharing_profile_parameter] PRIMARY KEY CLUSTERED ([sharing_profile_id] ASC, [parameter_name] ASC) ON [PRIMARY] @@ -249,9 +249,9 @@ GO; * mappings for connection objects. */ CREATE TABLE [guacamole_connection_permission]( - [user_id] [int] NOT NULL, + [user_id] [int] NOT NULL, [connection_id] [int] NOT NULL, - [permission] [guacamole_permission] NOT NULL, + [permission] [guacamole_permission] NOT NULL, CONSTRAINT [PK_guacamole_connection_permission] PRIMARY KEY CLUSTERED ([user_id] ASC, [connection_id] ASC, [permission] ASC) ON [PRIMARY] @@ -281,9 +281,9 @@ GO; * connection_group objects. */ CREATE TABLE [guacamole_connection_group_permission]( - [user_id] [int] NOT NULL, + [user_id] [int] NOT NULL, [connection_group_id] [int] NOT NULL, - [permission] [guacamole_permission] NOT NULL, + [permission] [guacamole_permission] NOT NULL, CONSTRAINT [PK_guacamole_connection_group_permission] PRIMARY KEY CLUSTERED ([user_id] ASC, [connection_group_id] ASC, [permission] ASC) ON [PRIMARY] @@ -313,9 +313,9 @@ GO; * mappings for sharing_profile objects. */ CREATE TABLE [guacamole_sharing_profile_permission]( - [user_id] [int] NOT NULL, + [user_id] [int] NOT NULL, [sharing_profile_id] [int] NOT NULL, - [permission] [guacamole_permission] NOT NULL, + [permission] [guacamole_permission] NOT NULL, CONSTRAINT [PK_guacamole_sharing_profile_permission] PRIMARY KEY CLUSTERED ([user_id] ASC, [sharing_profile_id] ASC, [permission] ASC) ON [PRIMARY] @@ -345,7 +345,7 @@ GO; * for system-level operations. */ CREATE TABLE [guacamole_system_permission]( - [user_id] [int] NOT NULL, + [user_id] [int] NOT NULL, [permission] [guacamole_system_permission] NOT NULL, CONSTRAINT [PK_guacamole_system_permission] PRIMARY KEY CLUSTERED @@ -369,9 +369,9 @@ GO; * for users to other users. */ CREATE TABLE [guacamole_user_permission]( - [user_id] [int] NOT NULL, + [user_id] [int] NOT NULL, [affected_user_id] [int] NOT NULL, - [permission] [guacamole_permission] NOT NULL, + [permission] [guacamole_permission] NOT NULL, CONSTRAINT [PK_guacamole_user_permission] PRIMARY KEY CLUSTERED ([user_id] ASC, [affected_user_id] ASC, [permission] ASC) ON [PRIMARY] @@ -399,16 +399,16 @@ GO; * connections. */ CREATE TABLE [guacamole_connection_history]( - [history_id] [int] IDENTITY(1,1) NOT NULL, - [user_id] [int] NULL, - [username] [nvarchar](128) NOT NULL, - [remote_host] [nvarchar](256) NULL, - [connection_id] [int] NULL, - [connection_name] [nvarchar](128) NOT NULL, - [sharing_profile_id] [int] NULL, + [history_id] [int] IDENTITY(1,1) NOT NULL, + [user_id] [int] NULL, + [username] [nvarchar](128) NOT NULL, + [remote_host] [nvarchar](256) NULL, + [connection_id] [int] NULL, + [connection_name] [nvarchar](128) NOT NULL, + [sharing_profile_id] [int] NULL, [sharing_profile_name] [nvarchar](128) NULL, - [start_date] [datetime] NOT NULL, - [end_date] [datetime] NULL, + [start_date] [datetime] NOT NULL, + [end_date] [datetime] NULL, CONSTRAINT [PK_guacamole_connection_history] PRIMARY KEY CLUSTERED ([history_id] ASC) ON [PRIMARY] @@ -445,10 +445,10 @@ GO; */ CREATE TABLE [guacamole_user_password_history]( [password_history_id] [int] IDENTITY(1,1) NOT NULL, - [user_id] [int] NOT NULL, - [password_hash] [binary](32) NOT NULL, - [password_salt] [binary](32) NULL, - [password_date] [datetime] NOT NULL, + [user_id] [int] NOT NULL, + [password_hash] [binary](32) NOT NULL, + [password_salt] [binary](32) NULL, + [password_date] [datetime] NOT NULL, CONSTRAINT [PK_guacamole_user_password_history] PRIMARY KEY CLUSTERED ([password_history_id] ASC) ON [PRIMARY] From 56bce8dbe73c049c0654ad54f59a38dfdce92fa3 Mon Sep 17 00:00:00 2001 From: Nick Couchman Date: Sat, 30 Sep 2017 16:49:49 -0400 Subject: [PATCH 24/24] GUACAMOLE-363: Add SQL Server components to JDBC dist. --- .../modules/guacamole-auth-jdbc-dist/pom.xml | 7 +++++++ .../guacamole-auth-jdbc-dist/project-assembly.xml | 14 ++++++++++++++ 2 files changed, 21 insertions(+) diff --git a/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-dist/pom.xml b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-dist/pom.xml index 7b51fa2b7..05f5572d4 100644 --- a/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-dist/pom.xml +++ b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-dist/pom.xml @@ -109,6 +109,13 @@ 0.9.13-incubating + + + org.apache.guacamole + guacamole-auth-jdbc-sqlserver + 0.9.13-incubating + + diff --git a/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-dist/project-assembly.xml b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-dist/project-assembly.xml index 523b3a05e..58c886ceb 100644 --- a/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-dist/project-assembly.xml +++ b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-dist/project-assembly.xml @@ -49,6 +49,14 @@ + + + sqlserver + + org.apache.guacamole:guacamole-auth-jdbc-sqlserver + + + @@ -72,6 +80,12 @@ ../guacamole-auth-jdbc-postgresql/schema + + + sqlserver/schema + ../guacamole-auth-jdbc-sqlserver/schema + +