You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by re...@apache.org on 2021/09/20 19:23:37 UTC
[tomcat] branch 9.0.x updated: Fix delete then create
This is an automated email from the ASF dual-hosted git repository.
remm pushed a commit to branch 9.0.x
in repository https://gitbox.apache.org/repos/asf/tomcat.git
The following commit(s) were added to refs/heads/9.0.x by this push:
new 4c8e01b Fix delete then create
4c8e01b is described below
commit 4c8e01b8bbd08eba5d8c5e137e405201cea0e511
Author: remm <re...@apache.org>
AuthorDate: Mon Sep 20 21:19:12 2021 +0200
Fix delete then create
Delete is remembered so that everything gets removed before creating new
objects.
---
.../catalina/users/DataSourceUserDatabase.java | 221 ++++++++++-----------
webapps/docs/changelog.xml | 4 +
2 files changed, 114 insertions(+), 111 deletions(-)
diff --git a/java/org/apache/catalina/users/DataSourceUserDatabase.java b/java/org/apache/catalina/users/DataSourceUserDatabase.java
index 01f6718..a010498 100644
--- a/java/org/apache/catalina/users/DataSourceUserDatabase.java
+++ b/java/org/apache/catalina/users/DataSourceUserDatabase.java
@@ -562,7 +562,6 @@ public class DataSourceUserDatabase extends SparseUserDatabase {
Group group = new GenericGroup<>(this, groupname, description, null);
createdGroups.put(groupname, group);
modifiedGroups.remove(groupname);
- removedGroups.remove(groupname);
return group;
} finally {
readLock.unlock();
@@ -576,7 +575,6 @@ public class DataSourceUserDatabase extends SparseUserDatabase {
Role role = new GenericRole<>(this, rolename, description);
createdRoles.put(rolename, role);
modifiedRoles.remove(rolename);
- removedRoles.remove(rolename);
return role;
} finally {
readLock.unlock();
@@ -590,7 +588,6 @@ public class DataSourceUserDatabase extends SparseUserDatabase {
User user = new GenericUser<>(this, username, password, fullName, null, null);
createdUsers.put(username, user);
modifiedUsers.remove(username);
- removedUsers.remove(username);
return user;
} finally {
readLock.unlock();
@@ -1048,6 +1045,49 @@ public class DataSourceUserDatabase extends SparseUserDatabase {
if (isRoleStoreDefined()) {
+ // Removed roles
+ if (!removedRoles.isEmpty()) {
+ temp = new StringBuilder("DELETE FROM ");
+ temp.append(roleTable);
+ temp.append(" WHERE ").append(roleNameCol);
+ temp.append(" = ?");
+ if (groupRoleTable != null) {
+ tempRelationDelete = new StringBuilder("DELETE FROM ");
+ tempRelationDelete.append(groupRoleTable);
+ tempRelationDelete.append(" WHERE ");
+ tempRelationDelete.append(roleNameCol);
+ tempRelationDelete.append(" = ?");
+ }
+ StringBuilder tempRelationDelete2 = new StringBuilder("DELETE FROM ");
+ tempRelationDelete2.append(userRoleTable);
+ tempRelationDelete2.append(" WHERE ");
+ tempRelationDelete2.append(roleNameCol);
+ tempRelationDelete2.append(" = ?");
+ for (Role role : removedRoles.values()) {
+ if (tempRelationDelete != null) {
+ try (PreparedStatement stmt = dbConnection.prepareStatement(tempRelationDelete.toString())) {
+ stmt.setString(1, role.getRolename());
+ stmt.executeUpdate();
+ } catch (SQLException e) {
+ log.error(sm.getString("dataSourceUserDatabase.exception"), e);
+ }
+ }
+ try (PreparedStatement stmt = dbConnection.prepareStatement(tempRelationDelete2.toString())) {
+ stmt.setString(1, role.getRolename());
+ stmt.executeUpdate();
+ } catch (SQLException e) {
+ log.error(sm.getString("dataSourceUserDatabase.exception"), e);
+ }
+ try (PreparedStatement stmt = dbConnection.prepareStatement(temp.toString())) {
+ stmt.setString(1, role.getRolename());
+ stmt.executeUpdate();
+ } catch (SQLException e) {
+ log.error(sm.getString("dataSourceUserDatabase.exception"), e);
+ }
+ }
+ removedRoles.clear();
+ }
+
// Created roles
if (!createdRoles.isEmpty()) {
temp = new StringBuilder("INSERT INTO ");
@@ -1094,49 +1134,6 @@ public class DataSourceUserDatabase extends SparseUserDatabase {
modifiedRoles.clear();
}
- // Removed roles
- if (!removedRoles.isEmpty()) {
- temp = new StringBuilder("DELETE FROM ");
- temp.append(roleTable);
- temp.append(" WHERE ").append(roleNameCol);
- temp.append(" = ?");
- if (groupRoleTable != null) {
- tempRelationDelete = new StringBuilder("DELETE FROM ");
- tempRelationDelete.append(groupRoleTable);
- tempRelationDelete.append(" WHERE ");
- tempRelationDelete.append(roleNameCol);
- tempRelationDelete.append(" = ?");
- }
- StringBuilder tempRelationDelete2 = new StringBuilder("DELETE FROM ");
- tempRelationDelete2.append(userRoleTable);
- tempRelationDelete2.append(" WHERE ");
- tempRelationDelete2.append(roleNameCol);
- tempRelationDelete2.append(" = ?");
- for (Role role : removedRoles.values()) {
- if (tempRelationDelete != null) {
- try (PreparedStatement stmt = dbConnection.prepareStatement(tempRelationDelete.toString())) {
- stmt.setString(1, role.getRolename());
- stmt.executeUpdate();
- } catch (SQLException e) {
- log.error(sm.getString("dataSourceUserDatabase.exception"), e);
- }
- }
- try (PreparedStatement stmt = dbConnection.prepareStatement(tempRelationDelete2.toString())) {
- stmt.setString(1, role.getRolename());
- stmt.executeUpdate();
- } catch (SQLException e) {
- log.error(sm.getString("dataSourceUserDatabase.exception"), e);
- }
- try (PreparedStatement stmt = dbConnection.prepareStatement(temp.toString())) {
- stmt.setString(1, role.getRolename());
- stmt.executeUpdate();
- } catch (SQLException e) {
- log.error(sm.getString("dataSourceUserDatabase.exception"), e);
- }
- }
- removedRoles.clear();
- }
-
} else if (userRoleTable != null && roleNameCol != null) {
// Only remove role from users
tempRelationDelete = new StringBuilder("DELETE FROM ");
@@ -1171,6 +1168,40 @@ public class DataSourceUserDatabase extends SparseUserDatabase {
tempRelationDelete.append(" = ?");
String groupRoleRelationDelete = tempRelationDelete.toString();
+ // Removed groups
+ if (!removedGroups.isEmpty()) {
+ temp = new StringBuilder("DELETE FROM ");
+ temp.append(groupTable);
+ temp.append(" WHERE ").append(groupNameCol);
+ temp.append(" = ?");
+ StringBuilder tempRelationDelete2 = new StringBuilder("DELETE FROM ");
+ tempRelationDelete2.append(userGroupTable);
+ tempRelationDelete2.append(" WHERE ");
+ tempRelationDelete2.append(groupNameCol);
+ tempRelationDelete2.append(" = ?");
+ for (Group group : removedGroups.values()) {
+ try (PreparedStatement stmt = dbConnection.prepareStatement(groupRoleRelationDelete)) {
+ stmt.setString(1, group.getGroupname());
+ stmt.executeUpdate();
+ } catch (SQLException e) {
+ log.error(sm.getString("dataSourceUserDatabase.exception"), e);
+ }
+ try (PreparedStatement stmt = dbConnection.prepareStatement(tempRelationDelete2.toString())) {
+ stmt.setString(1, group.getGroupname());
+ stmt.executeUpdate();
+ } catch (SQLException e) {
+ log.error(sm.getString("dataSourceUserDatabase.exception"), e);
+ }
+ try (PreparedStatement stmt = dbConnection.prepareStatement(temp.toString())) {
+ stmt.setString(1, group.getGroupname());
+ stmt.executeUpdate();
+ } catch (SQLException e) {
+ log.error(sm.getString("dataSourceUserDatabase.exception"), e);
+ }
+ }
+ removedGroups.clear();
+ }
+
// Created groups
if (!createdGroups.isEmpty()) {
temp = new StringBuilder("INSERT INTO ");
@@ -1249,40 +1280,6 @@ public class DataSourceUserDatabase extends SparseUserDatabase {
modifiedGroups.clear();
}
- // Removed groups
- if (!removedGroups.isEmpty()) {
- temp = new StringBuilder("DELETE FROM ");
- temp.append(groupTable);
- temp.append(" WHERE ").append(groupNameCol);
- temp.append(" = ?");
- StringBuilder tempRelationDelete2 = new StringBuilder("DELETE FROM ");
- tempRelationDelete2.append(userGroupTable);
- tempRelationDelete2.append(" WHERE ");
- tempRelationDelete2.append(groupNameCol);
- tempRelationDelete2.append(" = ?");
- for (Group group : removedGroups.values()) {
- try (PreparedStatement stmt = dbConnection.prepareStatement(groupRoleRelationDelete)) {
- stmt.setString(1, group.getGroupname());
- stmt.executeUpdate();
- } catch (SQLException e) {
- log.error(sm.getString("dataSourceUserDatabase.exception"), e);
- }
- try (PreparedStatement stmt = dbConnection.prepareStatement(tempRelationDelete2.toString())) {
- stmt.setString(1, group.getGroupname());
- stmt.executeUpdate();
- } catch (SQLException e) {
- log.error(sm.getString("dataSourceUserDatabase.exception"), e);
- }
- try (PreparedStatement stmt = dbConnection.prepareStatement(temp.toString())) {
- stmt.setString(1, group.getGroupname());
- stmt.executeUpdate();
- } catch (SQLException e) {
- log.error(sm.getString("dataSourceUserDatabase.exception"), e);
- }
- }
- removedGroups.clear();
- }
-
}
String userRoleRelation = null;
@@ -1320,6 +1317,39 @@ public class DataSourceUserDatabase extends SparseUserDatabase {
userGroupRelationDelete = tempRelationDelete.toString();
}
+ // Removed users
+ if (!removedUsers.isEmpty()) {
+ temp = new StringBuilder("DELETE FROM ");
+ temp.append(userTable);
+ temp.append(" WHERE ").append(userNameCol);
+ temp.append(" = ?");
+ for (User user : removedUsers.values()) {
+ if (userRoleRelationDelete != null) {
+ try (PreparedStatement stmt = dbConnection.prepareStatement(userRoleRelationDelete)) {
+ stmt.setString(1, user.getUsername());
+ stmt.executeUpdate();
+ } catch (SQLException e) {
+ log.error(sm.getString("dataSourceUserDatabase.exception"), e);
+ }
+ }
+ if (userGroupRelationDelete != null) {
+ try (PreparedStatement stmt = dbConnection.prepareStatement(userGroupRelationDelete)) {
+ stmt.setString(1, user.getUsername());
+ stmt.executeUpdate();
+ } catch (SQLException e) {
+ log.error(sm.getString("dataSourceUserDatabase.exception"), e);
+ }
+ }
+ try (PreparedStatement stmt = dbConnection.prepareStatement(temp.toString())) {
+ stmt.setString(1, user.getUsername());
+ stmt.executeUpdate();
+ } catch (SQLException e) {
+ log.error(sm.getString("dataSourceUserDatabase.exception"), e);
+ }
+ }
+ removedUsers.clear();
+ }
+
// Created users
if (!createdUsers.isEmpty()) {
temp = new StringBuilder("INSERT INTO ");
@@ -1445,37 +1475,6 @@ public class DataSourceUserDatabase extends SparseUserDatabase {
modifiedGroups.clear();
}
- // Removed users
- if (!removedUsers.isEmpty()) {
- temp = new StringBuilder("DELETE FROM ");
- temp.append(userTable);
- temp.append(" WHERE ").append(userNameCol);
- temp.append(" = ?");
- for (User user : removedUsers.values()) {
- try (PreparedStatement stmt = dbConnection.prepareStatement(userRoleRelationDelete)) {
- stmt.setString(1, user.getUsername());
- stmt.executeUpdate();
- } catch (SQLException e) {
- log.error(sm.getString("dataSourceUserDatabase.exception"), e);
- }
- if (userGroupRelationDelete != null) {
- try (PreparedStatement stmt = dbConnection.prepareStatement(userGroupRelationDelete)) {
- stmt.setString(1, user.getUsername());
- stmt.executeUpdate();
- } catch (SQLException e) {
- log.error(sm.getString("dataSourceUserDatabase.exception"), e);
- }
- }
- try (PreparedStatement stmt = dbConnection.prepareStatement(temp.toString())) {
- stmt.setString(1, user.getUsername());
- stmt.executeUpdate();
- } catch (SQLException e) {
- log.error(sm.getString("dataSourceUserDatabase.exception"), e);
- }
- }
- removedUsers.clear();
- }
-
}
@Override
diff --git a/webapps/docs/changelog.xml b/webapps/docs/changelog.xml
index aab6f1f..90a8932 100644
--- a/webapps/docs/changelog.xml
+++ b/webapps/docs/changelog.xml
@@ -111,6 +111,10 @@
Provide the DataSource in the constructor of
<code>DataSourceUserDatabase</code>, since it is always global. (remm)
</fix>
+ <fix>
+ Fix delete then create object manipulations with
+ <code>DataSourceUserDatabase</code>. (remm)
+ </fix>
</changelog>
</subsection>
<subsection name="Coyote">
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org