diff --git a/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/resources/org/apache/guacamole/auth/jdbc/base/EntityMapper.xml b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/resources/org/apache/guacamole/auth/jdbc/base/EntityMapper.xml
new file mode 100644
index 000000000..f61463a82
--- /dev/null
+++ b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/resources/org/apache/guacamole/auth/jdbc/base/EntityMapper.xml
@@ -0,0 +1,123 @@
+
+
+
+
+
+
+
+
+
+ (
+ ${column} = ${entityID}
+
+ OR ${column} IN (
+ SELECT [guacamole_entity].entity_id
+ FROM [guacamole_entity]
+ JOIN [guacamole_user_group] ON [guacamole_user_group].entity_id = [guacamole_entity].entity_id
+ WHERE
+ type = 'USER_GROUP'
+ AND name IN
+
+ #{effectiveGroup,jdbcType=VARCHAR}
+
+ AND disabled = 0
+ )
+
+ )
+
+
+
+
+
+
+
+
+ INSERT INTO [guacamole_entity] (
+ name,
+ type
+ )
+ VALUES (
+ #{entity.identifier,jdbcType=VARCHAR},
+ #{entity.entityType,jdbcType=VARCHAR}
+ )
+
+
+
+
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 fb617578b..54cb575c0 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
@@ -68,7 +68,11 @@
SELECT connection_id
FROM [guacamole_connection_permission]
WHERE
- user_id = #{user.objectID,jdbcType=INTEGER}
+
+
+
+
+
AND permission = 'READ'
@@ -89,7 +93,11 @@
WHERE
parent_id = #{parentIdentifier,jdbcType=INTEGER}
parent_id IS NULL
- AND user_id = #{user.objectID,jdbcType=INTEGER}
+ AND
+
+
+
+
AND permission = 'READ'
@@ -170,7 +178,11 @@
open="(" separator="," close=")">
#{identifier,jdbcType=INTEGER}
- AND [guacamole_connection_permission].user_id = #{user.objectID,jdbcType=INTEGER}
+ AND
+
+
+
+
AND permission = 'READ';
SELECT primary_connection_id, [guacamole_sharing_profile].sharing_profile_id
@@ -181,7 +193,11 @@
open="(" separator="," close=")">
#{identifier,jdbcType=INTEGER}
- AND user_id = #{user.objectID,jdbcType=INTEGER}
+ AND
+
+
+
+
AND permission = 'READ';
SELECT
@@ -195,7 +211,11 @@
open="(" separator="," close=")">
#{identifier,jdbcType=INTEGER}
- AND user_id = #{user.objectID,jdbcType=INTEGER}
+ AND
+
+
+
+
AND permission = 'READ';
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 d7ae41c4b..2abf1ae35 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
@@ -79,7 +79,10 @@
#{record.sharingProfileIdentifier,jdbcType=INTEGER},
#{record.sharingProfileName,jdbcType=VARCHAR},
(SELECT user_id FROM [guacamole_user]
- WHERE username = #{record.username,jdbcType=VARCHAR}),
+ JOIN [guacamole_entity] ON [guacamole_user].entity_id = [guacamole_entity].entity_id
+ WHERE
+ [guacamole_entity].name = #{record.username,jdbcType=VARCHAR}
+ AND [guacamole_entity].type = 'USER'),
#{record.username,jdbcType=VARCHAR},
#{record.startDate,jdbcType=TIMESTAMP},
#{record.endDate,jdbcType=TIMESTAMP}
@@ -161,13 +164,21 @@
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
+
+
+
+
AND [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
+
+
+
+
AND [guacamole_user_permission].permission = 'READ'
@@ -178,7 +189,10 @@
[guacamole_connection_history].user_id IN (
SELECT user_id
FROM [guacamole_user]
- WHERE POSITION(#{term.term,jdbcType=VARCHAR} IN username) > 0
+ JOIN [guacamole_entity] ON [guacamole_user].entity_id = [guacamole_entity].entity_id
+ WHERE
+ POSITION(#{term.term,jdbcType=VARCHAR} IN [guacamole_entity].name) > 0
+ AND [guacamole_entity].type = 'USER'
)
OR [guacamole_connection_history].connection_id IN (
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 f75943ee4..32c1d1348 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
@@ -69,7 +69,11 @@
SELECT connection_group_id
FROM [guacamole_connection_group_permission]
WHERE
- user_id = #{user.objectID,jdbcType=INTEGER}
+
+
+
+
+
AND permission = 'READ'
@@ -90,7 +94,11 @@
WHERE
parent_id = #{parentIdentifier,jdbcType=INTEGER}
parent_id IS NULL
- AND user_id = #{user.objectID,jdbcType=INTEGER}
+ AND
+
+
+
+
AND permission = 'READ'
@@ -161,7 +169,11 @@
open="(" separator="," close=")">
#{identifier,jdbcType=INTEGER}
- AND user_id = #{user.objectID,jdbcType=INTEGER}
+ AND
+
+
+
+
AND permission = 'READ';
SELECT parent_id, [guacamole_connection_group].connection_group_id
@@ -172,7 +184,11 @@
open="(" separator="," close=")">
#{identifier,jdbcType=INTEGER}
- AND user_id = #{user.objectID,jdbcType=INTEGER}
+ AND
+
+
+
+
AND permission = 'READ';
SELECT parent_id, [guacamole_connection].connection_id
@@ -183,7 +199,11 @@
open="(" separator="," close=")">
#{identifier,jdbcType=INTEGER}
- AND user_id = #{user.objectID,jdbcType=INTEGER}
+ AND
+
+
+
+
AND permission = 'READ';
SELECT
@@ -197,7 +217,11 @@
open="(" separator="," close=")">
#{identifier,jdbcType=INTEGER}
- AND user_id = #{user.objectID,jdbcType=INTEGER}
+ AND
+
+
+
+
AND permission = 'READ';
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 3cc0988c2..b89186887 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
@@ -25,24 +25,26 @@
-
-
+
-
+
@@ -50,26 +52,32 @@
-
+
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 20d2cfb06..21fd986b1 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
@@ -41,8 +41,9 @@
[guacamole_user_password_history].password_date
FROM [guacamole_user_password_history]
JOIN [guacamole_user] ON [guacamole_user_password_history].user_id = [guacamole_user].user_id
+ JOIN [guacamole_entity] ON [guacamole_user].entity_id = [guacamole_entity].entity_id
WHERE
- [guacamole_user].username = #{username,jdbcType=VARCHAR}
+ [guacamole_entity].name = #{username,jdbcType=VARCHAR}
ORDER BY
[guacamole_user_password_history].password_date DESC
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 177ab939a..7d70950af 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
@@ -28,7 +28,8 @@
-
+
+
@@ -57,17 +58,24 @@
- SELECT username
- FROM [guacamole_user]
+ SELECT name
+ FROM [guacamole_entity]
+ WHERE [guacamole_entity].type = 'USER'
- SELECT username
+ SELECT [guacamole_entity].name
FROM [guacamole_user]
+ JOIN [guacamole_entity] ON [guacamole_user].entity_id = [guacamole_entity].entity_id
JOIN [guacamole_user_permission] ON affected_user_id = [guacamole_user].user_id
WHERE
- [guacamole_user_permission].user_id = #{user.objectID,jdbcType=INTEGER}
+
+
+
+
+
+ AND [guacamole_entity].type = 'USER'
AND permission = 'READ'
@@ -77,7 +85,8 @@
SELECT
[guacamole_user].user_id,
- [guacamole_user].username,
+ [guacamole_entity].entity_id,
+ [guacamole_entity].name,
password_hash,
password_salt,
password_date,
@@ -98,11 +107,13 @@
WHERE [guacamole_user_history].user_id = [guacamole_user].user_id
) AS last_active
FROM [guacamole_user]
- WHERE [guacamole_user].username IN
+ JOIN [guacamole_entity] ON [guacamole_user].entity_id = [guacamole_entity].entity_id
+ WHERE [guacamole_entity].name IN
#{identifier,jdbcType=VARCHAR}
- ;
+
+ AND [guacamole_entity].type = 'USER';
SELECT
[guacamole_user_attribute].user_id,
@@ -110,11 +121,13 @@
[guacamole_user_attribute].attribute_value
FROM [guacamole_user_attribute]
JOIN [guacamole_user] ON [guacamole_user].user_id = [guacamole_user_attribute].user_id
- WHERE username IN
+ JOIN [guacamole_entity] ON [guacamole_user].entity_id = [guacamole_entity].entity_id
+ WHERE [guacamole_entity].name IN
- #{identifier,jdbcType=INTEGER}
- ;
+ #{identifier,jdbcType=VARCHAR}
+
+ AND [guacamole_entity].type = 'USER';
@@ -124,7 +137,8 @@
SELECT
[guacamole_user].user_id,
- [guacamole_user].username,
+ [guacamole_entity].entity_id,
+ [guacamole_entity].name,
password_hash,
password_salt,
password_date,
@@ -145,13 +159,19 @@
WHERE [guacamole_user_history].user_id = [guacamole_user].user_id
) AS last_active
FROM [guacamole_user]
+ JOIN [guacamole_entity] ON [guacamole_user].entity_id = [guacamole_entity].entity_id
JOIN [guacamole_user_permission] ON affected_user_id = [guacamole_user].user_id
- WHERE [guacamole_user].username IN
+ WHERE [guacamole_entity].name IN
#{identifier,jdbcType=VARCHAR}
- AND [guacamole_user_permission].user_id = #{user.objectID,jdbcType=INTEGER}
+ AND [guacamole_entity].type = 'USER'
+ AND
+
+
+
+
AND permission = 'READ';
SELECT
@@ -160,13 +180,19 @@
[guacamole_user_attribute].attribute_value
FROM [guacamole_user_attribute]
JOIN [guacamole_user] ON [guacamole_user].user_id = [guacamole_user_attribute].user_id
+ JOIN [guacamole_entity] ON [guacamole_user].entity_id = [guacamole_entity].entity_id
JOIN [guacamole_user_permission] ON affected_user_id = [guacamole_user].user_id
- WHERE username IN
+ WHERE [guacamole_entity].name IN
- #{identifier,jdbcType=INTEGER}
+ #{identifier,jdbcType=VARCHAR}
- AND [guacamole_user_permission].user_id = #{user.objectID,jdbcType=INTEGER}
+ AND [guacamole_entity].type = 'USER'
+ AND
+
+
+
+
AND permission = 'READ';
@@ -176,8 +202,9 @@
resultSets="users,arbitraryAttributes">
SELECT
- user_id,
- username,
+ [guacamole_user].user_id,
+ [guacamole_entity].entity_id,
+ [guacamole_entity].name,
password_hash,
password_salt,
password_date,
@@ -198,8 +225,10 @@
WHERE [guacamole_user_history].user_id = [guacamole_user].user_id
) AS last_active
FROM [guacamole_user]
+ JOIN [guacamole_entity] ON [guacamole_user].entity_id = [guacamole_entity].entity_id
WHERE
- [guacamole_user].username = #{username,jdbcType=VARCHAR};
+ [guacamole_entity].name = #{username,jdbcType=VARCHAR}
+ AND [guacamole_entity].type = 'USER';
SELECT
[guacamole_user_attribute].user_id,
@@ -207,14 +236,19 @@
[guacamole_user_attribute].attribute_value
FROM [guacamole_user_attribute]
JOIN [guacamole_user] ON [guacamole_user].user_id = [guacamole_user_attribute].user_id
- WHERE username = #{username,jdbcType=VARCHAR};
+ JOIN [guacamole_entity] ON [guacamole_user].entity_id = [guacamole_entity].entity_id
+ WHERE
+ [guacamole_entity].name = #{username,jdbcType=VARCHAR}
+ AND [guacamole_entity].type = 'USER'
- DELETE FROM [guacamole_user]
- WHERE username = #{identifier,jdbcType=VARCHAR}
+ DELETE FROM [guacamole_entity]
+ WHERE
+ name = #{identifier,jdbcType=VARCHAR}
+ AND type = 'USER'
@@ -222,7 +256,7 @@
parameterType="org.apache.guacamole.auth.jdbc.user.UserModel">
INSERT INTO [guacamole_user] (
- username,
+ entity_id,
password_hash,
password_salt,
password_date,
@@ -239,7 +273,7 @@
organizational_role
)
VALUES (
- #{object.identifier,jdbcType=VARCHAR},
+ #{object.entityID,jdbcType=VARCHAR},
#{object.passwordHash,jdbcType=BINARY},
#{object.passwordSalt,jdbcType=BINARY},
#{object.passwordDate,jdbcType=TIMESTAMP},
diff --git a/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/resources/org/apache/guacamole/auth/jdbc/user/UserParentUserGroupMapper.xml b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/resources/org/apache/guacamole/auth/jdbc/user/UserParentUserGroupMapper.xml
new file mode 100644
index 000000000..e6eccba96
--- /dev/null
+++ b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/resources/org/apache/guacamole/auth/jdbc/user/UserParentUserGroupMapper.xml
@@ -0,0 +1,96 @@
+
+
+
+
+
+
+
+
+
+ SELECT name
+ FROM [guacamole_user_group_member]
+ JOIN [guacamole_user_group] ON [guacamole_user_group_member].user_group_id = [guacamole_user_group].user_group_id
+ JOIN [guacamole_entity] ON [guacamole_entity].entity_id = [guacamole_user_group].entity_id
+ WHERE
+ [guacamole_user_group_member].member_entity_id = #{parent.entityID,jdbcType=INTEGER}
+ AND [guacamole_entity].type = 'USER_GROUP'
+
+
+
+
+ SELECT [guacamole_entity].name
+ FROM [guacamole_user_group_member]
+ JOIN [guacamole_user_group] ON [guacamole_user_group_member].user_group_id = [guacamole_user_group].user_group_id
+ JOIN [guacamole_entity] ON [guacamole_entity].entity_id = [guacamole_user_group].entity_id
+ JOIN [guacamole_user_group_permission] ON affected_user_group_id = [guacamole_user_group].user_group_id
+ WHERE
+
+
+
+
+
+ AND [guacamole_user_group_member].member_entity_id = #{parent.entityID,jdbcType=INTEGER}
+ AND [guacamole_entity].type = 'USER_GROUP'
+ AND permission = 'READ'
+
+
+
+
+ DELETE [guacamole_user_group_member]
+ FROM [guacamole_user_group_member]
+ JOIN [guacamole_user_group] ON [guacamole_user_group].user_group_id = [guacamole_user_group_member].user_group_id
+ JOIN [guacamole_entity] ON [guacamole_entity].entity_id = [guacamole_user_group].entity_id
+ WHERE
+ member_entity_id = #{parent.entityID,jdbcType=INTEGER}
+ AND [guacamole_entity].type = 'USER_GROUP'
+ AND [guacamole_entity].name IN
+
+ #{identifier,jdbcType=VARCHAR}
+
+
+
+
+
+ INSERT INTO [guacamole_user_group_member] (
+ user_group_id,
+ member_entity_id
+ )
+ SELECT DISTINCT
+ [guacamole_user_group].user_group_id,
+ #{parent.entityID,jdbcType=INTEGER}
+ FROM [guacamole_user_group]
+ JOIN [guacamole_entity] ON [guacamole_user_group].entity_id = [guacamole_entity].entity_id
+ WHERE
+ [guacamole_entity].name IN
+
+ #{identifier,jdbcType=VARCHAR}
+
+ AND [guacamole_entity].type = 'USER_GROUP'
+ AND [guacamole_user_group].user_group_id NOT IN (
+ SELECT [guacamole_user_group_member].user_group_id
+ FROM [guacamole_user_group_member]
+ WHERE [guacamole_user_group_member].member_entity_id = #{parent.entityID,jdbcType=INTEGER}
+ )
+
+
+
diff --git a/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/resources/org/apache/guacamole/auth/jdbc/user/UserRecordMapper.xml b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/resources/org/apache/guacamole/auth/jdbc/user/UserRecordMapper.xml
index 22a0cc75f..4d4a3cc69 100644
--- a/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/resources/org/apache/guacamole/auth/jdbc/user/UserRecordMapper.xml
+++ b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/resources/org/apache/guacamole/auth/jdbc/user/UserRecordMapper.xml
@@ -44,8 +44,9 @@
[guacamole_user_history].end_date
FROM [guacamole_user_history]
JOIN [guacamole_user] ON [guacamole_user_history].user_id = [guacamole_user].user_id
+ JOIN [guacamole_entity] ON [guacamole_user].entity_id = [guacamole_entity].entity_id
WHERE
- [guacamole_user].username = #{username,jdbcType=VARCHAR}
+ [guacamole_entity].name = #{username,jdbcType=VARCHAR}
ORDER BY
[guacamole_user_history].start_date DESC,
[guacamole_user_history].end_date DESC
@@ -66,7 +67,10 @@
VALUES (
#{record.remoteHost,jdbcType=VARCHAR},
(SELECT user_id FROM [guacamole_user]
- WHERE username = #{record.username,jdbcType=VARCHAR}),
+ JOIN [guacamole_entity] ON [guacamole_user].entity_id = [guacamole_entity].entity_id
+ WHERE
+ [guacamole_entity].name = #{record.username,jdbcType=VARCHAR}
+ AND [guacamole_entity].type = 'USER'),
#{record.username,jdbcType=VARCHAR},
#{record.startDate,jdbcType=TIMESTAMP},
#{record.endDate,jdbcType=TIMESTAMP}
@@ -79,7 +83,10 @@
UPDATE [guacamole_user_history]
SET remote_host = #{record.remoteHost,jdbcType=VARCHAR},
user_id = (SELECT user_id FROM [guacamole_user]
- WHERE username = #{record.username,jdbcType=VARCHAR}),
+ JOIN [guacamole_entity] ON [guacamole_user].entity_id = [guacamole_entity].entity_id
+ WHERE
+ [guacamole_entity].name = #{record.username,jdbcType=VARCHAR}
+ AND [guacamole_entity].type = 'USER'),
username = #{record.username,jdbcType=VARCHAR},
start_date = #{record.startDate,jdbcType=TIMESTAMP},
end_date = #{record.endDate,jdbcType=TIMESTAMP}
@@ -105,7 +112,10 @@
[guacamole_user_history].user_id IN (
SELECT user_id
FROM [guacamole_user]
- WHERE POSITION(#{term.term,jdbcType=VARCHAR} IN username) > 0
+ JOIN [guacamole_entity] ON [guacamole_user].entity_id = [guacamole_entity].entity_id
+ WHERE
+ POSITION(#{term.term,jdbcType=VARCHAR} IN [guacamole_entity].name) > 0
+ AND [guacamole_entity].type = 'USER'),
)
@@ -144,7 +154,11 @@
JOIN [guacamole_user_permission] ON
[guacamole_user_history].user_id = [guacamole_user_permission].affected_user_id
- AND [guacamole_user_permission].user_id = #{user.objectID,jdbcType=INTEGER}
+ AND
+
+
+
+
AND [guacamole_user_permission].permission = 'READ'
@@ -155,7 +169,10 @@
[guacamole_user_history].user_id IN (
SELECT user_id
FROM [guacamole_user]
- WHERE POSITION(#{term.term,jdbcType=VARCHAR} IN username) > 0
+ JOIN [guacamole_entity] ON [guacamole_user].entity_id = [guacamole_entity].entity_id
+ WHERE
+ POSITION(#{term.term,jdbcType=VARCHAR} IN [guacamole_entity].name) > 0
+ AND [guacamole_entity].type = 'USER'
)
diff --git a/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/resources/org/apache/guacamole/auth/jdbc/usergroup/UserGroupMapper.xml b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/resources/org/apache/guacamole/auth/jdbc/usergroup/UserGroupMapper.xml
new file mode 100644
index 000000000..aed0247be
--- /dev/null
+++ b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/resources/org/apache/guacamole/auth/jdbc/usergroup/UserGroupMapper.xml
@@ -0,0 +1,229 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SELECT name
+ FROM [guacamole_entity]
+ WHERE [guacamole_entity].type = 'USER_GROUP'
+
+
+
+
+ SELECT [guacamole_entity].name
+ FROM [guacamole_user_group]
+ JOIN [guacamole_entity] ON [guacamole_user_group].entity_id = [guacamole_entity].entity_id
+ JOIN [guacamole_user_group_permission] ON affected_user_group_id = [guacamole_user_group].user_group_id
+ WHERE
+
+
+
+
+
+ AND [guacamole_entity].type = 'USER_GROUP'
+ AND permission = 'READ'
+
+
+
+
+
+ SELECT
+ [guacamole_user_group].user_group_id,
+ [guacamole_entity].entity_id,
+ [guacamole_entity].name,
+ disabled
+ FROM [guacamole_user_group]
+ JOIN [guacamole_entity] ON [guacamole_user_group].entity_id = [guacamole_entity].entity_id
+ WHERE [guacamole_entity].name IN
+
+ #{identifier,jdbcType=VARCHAR}
+
+ AND [guacamole_entity].type = 'USER_GROUP';
+
+ SELECT
+ [guacamole_user_group_attribute].user_group_id,
+ [guacamole_user_group_attribute].attribute_name,
+ [guacamole_user_group_attribute].attribute_value
+ FROM [guacamole_user_group_attribute]
+ JOIN [guacamole_user_group] ON [guacamole_user_group].user_group_id = [guacamole_user_group_attribute].user_group_id
+ JOIN [guacamole_entity] ON [guacamole_user_group].entity_id = [guacamole_entity].entity_id
+ WHERE [guacamole_entity].name IN
+
+ #{identifier,jdbcType=VARCHAR}
+
+ AND [guacamole_entity].type = 'USER_GROUP';
+
+
+
+
+
+
+ SELECT
+ [guacamole_user_group].user_group_id,
+ [guacamole_entity].entity_id,
+ [guacamole_entity].name,
+ disabled
+ FROM [guacamole_user_group]
+ JOIN [guacamole_entity] ON [guacamole_user_group].entity_id = [guacamole_entity].entity_id
+ JOIN [guacamole_user_group_permission] ON affected_user_group_id = [guacamole_user_group].user_group_id
+ WHERE [guacamole_entity].name IN
+
+ #{identifier,jdbcType=VARCHAR}
+
+ AND [guacamole_entity].type = 'USER_GROUP'
+ AND
+
+
+
+
+ AND permission = 'READ';
+
+ SELECT
+ [guacamole_user_group_attribute].user_group_id,
+ [guacamole_user_group_attribute].attribute_name,
+ [guacamole_user_group_attribute].attribute_value
+ FROM [guacamole_user_group_attribute]
+ JOIN [guacamole_user_group] ON [guacamole_user_group].user_group_id = [guacamole_user_group_attribute].user_group_id
+ JOIN [guacamole_entity] ON [guacamole_user_group].entity_id = [guacamole_entity].entity_id
+ JOIN [guacamole_user_group_permission] ON affected_user_group_id = [guacamole_user_group].user_group_id
+ WHERE [guacamole_entity].name IN
+
+ #{identifier,jdbcType=VARCHAR}
+
+ AND [guacamole_entity].type = 'USER_GROUP'
+ AND
+
+
+
+
+ AND permission = 'READ';
+
+
+
+
+
+
+ SELECT
+ [guacamole_user_group].user_group_id,
+ [guacamole_entity].entity_id,
+ [guacamole_entity].name,
+ disabled
+ FROM [guacamole_user_group]
+ JOIN [guacamole_entity] ON [guacamole_user_group].entity_id = [guacamole_entity].entity_id
+ WHERE
+ [guacamole_entity].name = #{name,jdbcType=VARCHAR}
+ AND [guacamole_entity].type = 'USER_GROUP';
+
+ SELECT
+ [guacamole_user_group_attribute].user_group_id,
+ [guacamole_user_group_attribute].attribute_name,
+ [guacamole_user_group_attribute].attribute_value
+ FROM [guacamole_user_group_attribute]
+ JOIN [guacamole_user_group] ON [guacamole_user_group].user_group_id = [guacamole_user_group_attribute].user_group_id
+ JOIN [guacamole_entity] ON [guacamole_user_group].entity_id = [guacamole_entity].entity_id
+ WHERE
+ [guacamole_entity].name = #{name,jdbcType=VARCHAR}
+ AND [guacamole_entity].type = 'USER_GROUP'
+
+
+
+
+
+ DELETE FROM [guacamole_entity]
+ WHERE
+ name = #{identifier,jdbcType=VARCHAR}
+ AND type = 'USER_GROUP'
+
+
+
+
+
+ INSERT INTO [guacamole_user_group] (
+ entity_id,
+ disabled
+ )
+ VALUES (
+ #{object.entityID,jdbcType=VARCHAR},
+ #{object.disabled,jdbcType=BOOLEAN}
+ )
+
+
+
+
+
+ UPDATE [guacamole_user_group]
+ SET disabled = #{object.disabled,jdbcType=BOOLEAN}
+ WHERE user_group_id = #{object.objectID,jdbcType=VARCHAR}
+
+
+
+
+ DELETE FROM [guacamole_user_group_attribute]
+ WHERE user_group_id = #{object.objectID,jdbcType=INTEGER}
+
+
+
+
+ INSERT INTO [guacamole_user_group_attribute] (
+ user_group_id,
+ attribute_name,
+ attribute_value
+ )
+ VALUES
+
+ (#{object.objectID,jdbcType=INTEGER},
+ #{attribute.name,jdbcType=VARCHAR},
+ #{attribute.value,jdbcType=VARCHAR})
+
+
+
+
diff --git a/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/resources/org/apache/guacamole/auth/jdbc/usergroup/UserGroupMemberUserGroupMapper.xml b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/resources/org/apache/guacamole/auth/jdbc/usergroup/UserGroupMemberUserGroupMapper.xml
new file mode 100644
index 000000000..2092f24e9
--- /dev/null
+++ b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/resources/org/apache/guacamole/auth/jdbc/usergroup/UserGroupMemberUserGroupMapper.xml
@@ -0,0 +1,93 @@
+
+
+
+
+
+
+
+
+
+ SELECT name
+ FROM [guacamole_user_group_member]
+ JOIN [guacamole_entity] ON [guacamole_entity].entity_id = [guacamole_user_group_member].member_entity_id
+ WHERE
+ [guacamole_user_group_member].user_group_id = #{parent.objectID,jdbcType=INTEGER}
+ AND [guacamole_entity].type = 'USER_GROUP'
+
+
+
+
+ SELECT [guacamole_entity].name
+ FROM [guacamole_user_group_member]
+ JOIN [guacamole_entity] ON [guacamole_entity].entity_id = [guacamole_user_group_member].member_entity_id
+ JOIN [guacamole_user_group] ON [guacamole_user_group].entity_id = [guacamole_entity].entity_id
+ JOIN [guacamole_user_group_permission] ON affected_user_group_id = [guacamole_user_group].user_group_id
+ WHERE
+
+
+
+
+
+ AND [guacamole_user_group_member].user_group_id = #{parent.objectID,jdbcType=INTEGER}
+ AND [guacamole_entity].type = 'USER_GROUP'
+ AND permission = 'READ'
+
+
+
+
+ DELETE [guacamole_user_group_member]
+ FROM [guacamole_user_group_member]
+ JOIN [guacamole_entity] ON [guacamole_entity].entity_id = member_entity_id
+ WHERE
+ user_group_id = #{parent.objectID,jdbcType=INTEGER}
+ AND [guacamole_entity].type = 'USER_GROUP'
+ AND [guacamole_entity].name IN
+
+ #{identifier,jdbcType=VARCHAR}
+
+
+
+
+
+ INSERT INTO [guacamole_user_group_member] (
+ user_group_id,
+ member_entity_id
+ )
+ SELECT DISTINCT
+ #{parent.objectID,jdbcType=INTEGER},
+ [guacamole_entity].entity_id
+ FROM [guacamole_entity]
+ WHERE
+ [guacamole_entity].name IN
+
+ #{identifier}
+
+ AND [guacamole_entity].type = 'USER_GROUP'
+ AND [guacamole_entity].entity_id NOT IN (
+ SELECT [guacamole_user_group_member].member_entity_id
+ FROM [guacamole_user_group_member]
+ WHERE [guacamole_user_group_member].user_group_id = #{parent.objectID,jdbcType=INTEGER}
+ )
+
+
+
diff --git a/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/resources/org/apache/guacamole/auth/jdbc/usergroup/UserGroupMemberUserMapper.xml b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/resources/org/apache/guacamole/auth/jdbc/usergroup/UserGroupMemberUserMapper.xml
new file mode 100644
index 000000000..2c91c92c2
--- /dev/null
+++ b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/resources/org/apache/guacamole/auth/jdbc/usergroup/UserGroupMemberUserMapper.xml
@@ -0,0 +1,93 @@
+
+
+
+
+
+
+
+
+
+ SELECT name
+ FROM [guacamole_user_group_member]
+ JOIN [guacamole_entity] ON [guacamole_entity].entity_id = [guacamole_user_group_member].member_entity_id
+ WHERE
+ [guacamole_user_group_member].user_group_id = #{parent.objectID,jdbcType=INTEGER}
+ AND [guacamole_entity].type = 'USER'
+
+
+
+
+ SELECT [guacamole_entity].name
+ FROM [guacamole_user_group_member]
+ JOIN [guacamole_entity] ON [guacamole_entity].entity_id = [guacamole_user_group_member].member_entity_id
+ JOIN [guacamole_user] ON [guacamole_user].entity_id = [guacamole_entity].entity_id
+ JOIN [guacamole_user_permission] ON affected_user_id = [guacamole_user].user_id
+ WHERE
+
+
+
+
+
+ AND [guacamole_user_group_member].user_group_id = #{parent.objectID,jdbcType=INTEGER}
+ AND [guacamole_entity].type = 'USER'
+ AND permission = 'READ'
+
+
+
+
+ DELETE [guacamole_user_group_member]
+ FROM [guacamole_user_group_member]
+ JOIN [guacamole_entity] ON [guacamole_entity].entity_id = member_entity_id
+ WHERE
+ user_group_id = #{parent.objectID,jdbcType=INTEGER}
+ AND [guacamole_entity].type = 'USER'
+ AND [guacamole_entity].name IN
+
+ #{identifier,jdbcType=VARCHAR}
+
+
+
+
+
+ INSERT INTO [guacamole_user_group_member] (
+ user_group_id,
+ member_entity_id
+ )
+ SELECT DISTINCT
+ #{parent.objectID,jdbcType=INTEGER},
+ [guacamole_entity].entity_id
+ FROM [guacamole_entity]
+ WHERE
+ [guacamole_entity].name IN
+
+ #{identifier}
+
+ AND [guacamole_entity].type = 'USER'
+ AND [guacamole_entity].entity_id NOT IN (
+ SELECT [guacamole_user_group_member].member_entity_id
+ FROM [guacamole_user_group_member]
+ WHERE [guacamole_user_group_member].user_group_id = #{parent.objectID,jdbcType=INTEGER}
+ )
+
+
+
diff --git a/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/resources/org/apache/guacamole/auth/jdbc/usergroup/UserGroupParentUserGroupMapper.xml b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/resources/org/apache/guacamole/auth/jdbc/usergroup/UserGroupParentUserGroupMapper.xml
new file mode 100644
index 000000000..0ea9252e7
--- /dev/null
+++ b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/resources/org/apache/guacamole/auth/jdbc/usergroup/UserGroupParentUserGroupMapper.xml
@@ -0,0 +1,96 @@
+
+
+
+
+
+
+
+
+
+ SELECT name
+ FROM [guacamole_user_group_member]
+ JOIN [guacamole_user_group] ON [guacamole_user_group_member].user_group_id = [guacamole_user_group].user_group_id
+ JOIN [guacamole_entity] ON [guacamole_entity].entity_id = [guacamole_user_group].entity_id
+ WHERE
+ [guacamole_user_group_member].member_entity_id = #{parent.entityID,jdbcType=INTEGER}
+ AND [guacamole_entity].type = 'USER_GROUP'
+
+
+
+
+ SELECT [guacamole_entity].name
+ FROM [guacamole_user_group_member]
+ JOIN [guacamole_user_group] ON [guacamole_user_group_member].user_group_id = [guacamole_user_group].user_group_id
+ JOIN [guacamole_entity] ON [guacamole_entity].entity_id = [guacamole_user_group].entity_id
+ JOIN [guacamole_user_group_permission] ON affected_user_group_id = [guacamole_user_group].user_group_id
+ WHERE
+
+
+
+
+
+ AND [guacamole_user_group_member].member_entity_id = #{parent.entityID,jdbcType=INTEGER}
+ AND [guacamole_entity].type = 'USER_GROUP'
+ AND permission = 'READ'
+
+
+
+
+ DELETE [guacamole_user_group_member]
+ FROM [guacamole_user_group_member]
+ JOIN [guacamole_user_group] ON [guacamole_user_group].user_group_id = [guacamole_user_group_member].user_group_id
+ JOIN [guacamole_entity] ON [guacamole_entity].entity_id = [guacamole_user_group].entity_id
+ WHERE
+ member_entity_id = #{parent.entityID,jdbcType=INTEGER}
+ AND [guacamole_entity].type = 'USER_GROUP'
+ AND [guacamole_entity].name IN
+
+ #{identifier,jdbcType=VARCHAR}
+
+
+
+
+
+ INSERT INTO [guacamole_user_group_member] (
+ user_group_id,
+ member_entity_id
+ )
+ SELECT DISTINCT
+ [guacamole_user_group].user_group_id,
+ #{parent.entityID,jdbcType=INTEGER}
+ FROM [guacamole_user_group]
+ JOIN [guacamole_entity] ON [guacamole_user_group].entity_id = [guacamole_entity].entity_id
+ WHERE
+ [guacamole_entity].name IN
+
+ #{identifier,jdbcType=VARCHAR}
+
+ AND [guacamole_entity].type = 'USER_GROUP'
+ AND [guacamole_user_group].user_group_id NOT IN (
+ SELECT [guacamole_user_group_member].user_group_id
+ FROM [guacamole_user_group_member]
+ WHERE [guacamole_user_group_member].member_entity_id = #{parent.entityID,jdbcType=INTEGER}
+ )
+
+
+