From 6626378541466e00fe7d7e13ac39ceedf204c69b Mon Sep 17 00:00:00 2001 From: Martin Goik <goik@hdm-stuttgart.de> Date: Wed, 22 Oct 2014 22:50:11 +0200 Subject: [PATCH] Secondary User Group associations --- .../Jndi/usermanage/Schema/divers.sql | 9 ++++++- .../mi/sda2/usermanage/parse/Parser.java | 8 ++++++ .../mi/sda2/usermanage/parse/User.java | 9 ++++--- .../sda2/usermanage/rdbms/RdbmsHandler.java | 15 ++++++++++- .../sda2/usermanage/rdbms/UserGroupParam.java | 26 +++++++++++++++++++ 5 files changed, 61 insertions(+), 6 deletions(-) create mode 100644 Sda2/P/UnixSqlLdap/Jndi/usermanage/src/main/java/de/hdm_stuttgart/mi/sda2/usermanage/rdbms/UserGroupParam.java diff --git a/Sda2/P/UnixSqlLdap/Jndi/usermanage/Schema/divers.sql b/Sda2/P/UnixSqlLdap/Jndi/usermanage/Schema/divers.sql index 515965eb1..66642c117 100644 --- a/Sda2/P/UnixSqlLdap/Jndi/usermanage/Schema/divers.sql +++ b/Sda2/P/UnixSqlLdap/Jndi/usermanage/Schema/divers.sql @@ -1,5 +1,12 @@ SELECT * from SysGroup; SELECT * from SysUser; +SELECT * from SysUserGroup; + +SELECT uid,gid from SysUser, SysUserGroup, SysGroup +WHERE SysUser.id = SysUserGroup.sysuser + AND SysUserGroup.sysgroup = SysGroup.id + DELETE FROM SysGroup; -DELETE FROM SysUser; \ No newline at end of file +DELETE FROM SysUser; +DELETE FROM SysUserGroup; \ No newline at end of file diff --git a/Sda2/P/UnixSqlLdap/Jndi/usermanage/src/main/java/de/hdm_stuttgart/mi/sda2/usermanage/parse/Parser.java b/Sda2/P/UnixSqlLdap/Jndi/usermanage/src/main/java/de/hdm_stuttgart/mi/sda2/usermanage/parse/Parser.java index 1bda490a1..a3f2d3b93 100644 --- a/Sda2/P/UnixSqlLdap/Jndi/usermanage/src/main/java/de/hdm_stuttgart/mi/sda2/usermanage/parse/Parser.java +++ b/Sda2/P/UnixSqlLdap/Jndi/usermanage/src/main/java/de/hdm_stuttgart/mi/sda2/usermanage/parse/Parser.java @@ -38,6 +38,14 @@ public class Parser { while ( null != (line = passwdStream.readLine())){ rdbmsHandler.addUser(new User(line, lineNo++)); } + + for (final String uid: Group.secondaryGroupsByUid.keySet()) { + final User user = User.userByUid.get(uid); + for (final Group group: Group.secondaryGroupsByUid.get(uid)) { + rdbmsHandler.addUserGroup(user, group); + } + } + } catch (IOException e) { throw new ParseError("Unable to parse '" + passwdFile + "' file at line " + lineNo); diff --git a/Sda2/P/UnixSqlLdap/Jndi/usermanage/src/main/java/de/hdm_stuttgart/mi/sda2/usermanage/parse/User.java b/Sda2/P/UnixSqlLdap/Jndi/usermanage/src/main/java/de/hdm_stuttgart/mi/sda2/usermanage/parse/User.java index 1e1d6ec22..3f747f27f 100644 --- a/Sda2/P/UnixSqlLdap/Jndi/usermanage/src/main/java/de/hdm_stuttgart/mi/sda2/usermanage/parse/User.java +++ b/Sda2/P/UnixSqlLdap/Jndi/usermanage/src/main/java/de/hdm_stuttgart/mi/sda2/usermanage/parse/User.java @@ -1,5 +1,7 @@ package de.hdm_stuttgart.mi.sda2.usermanage.parse; +import java.util.HashMap; +import java.util.Map; import java.util.Set; import de.hdm_stuttgart.mi.sda2.usermanage.rdbms.DatabaseObject; @@ -7,6 +9,8 @@ import de.hdm_stuttgart.mi.sda2.usermanage.rdbms.DatabaseObject; public class User implements DatabaseObject { + public static final Map<String, User> userByUid = new HashMap<String, User>(); + private int databaseId = 0; public final String uid; @@ -25,10 +29,6 @@ public class User implements DatabaseObject { int csvIndex = 0; final String [] components = passwdLine.split(":"); - if (7 != components.length) { - - } - // row 1 uid = components[csvIndex++]; @@ -62,6 +62,7 @@ public class User implements DatabaseObject { // Group dependencies primaryGroup = Group.groupsByGidnumber.get(gidNumber); secondaryGroups = Group.secondaryGroupsByUid.get(uidNumber); + userByUid.put(uid, this); } public int getDatabaseId() { return databaseId; diff --git a/Sda2/P/UnixSqlLdap/Jndi/usermanage/src/main/java/de/hdm_stuttgart/mi/sda2/usermanage/rdbms/RdbmsHandler.java b/Sda2/P/UnixSqlLdap/Jndi/usermanage/src/main/java/de/hdm_stuttgart/mi/sda2/usermanage/rdbms/RdbmsHandler.java index a2db50924..1030186f2 100644 --- a/Sda2/P/UnixSqlLdap/Jndi/usermanage/src/main/java/de/hdm_stuttgart/mi/sda2/usermanage/rdbms/RdbmsHandler.java +++ b/Sda2/P/UnixSqlLdap/Jndi/usermanage/src/main/java/de/hdm_stuttgart/mi/sda2/usermanage/rdbms/RdbmsHandler.java @@ -20,6 +20,7 @@ public class RdbmsHandler { private MyNamedQuery<GroupParam> insertGroupStmt; private MyNamedQuery<UserParam> insertUserStmt; + private MyNamedQuery<UserGroupParam> insertUserGroupStmt; static { try { @@ -43,6 +44,7 @@ public class RdbmsHandler { conn.setAutoCommit(false); insertGroupStmt = new MyNamedQuery<GroupParam>(conn, GroupParam.gid, Statement.RETURN_GENERATED_KEYS); insertUserStmt = new MyNamedQuery<UserParam>(conn, UserParam.uid, Statement.RETURN_GENERATED_KEYS); + insertUserGroupStmt = new MyNamedQuery<UserGroupParam>(conn, UserGroupParam.sysuser, Statement.RETURN_GENERATED_KEYS); } public void addGroup(final Group group) { @@ -74,9 +76,20 @@ public class RdbmsHandler { e.printStackTrace(); } } - + public void addUserGroup(final User user, final Group group) { + try { + insertUserGroupStmt.setInt(UserGroupParam.sysuser, user.getDatabaseId()); + insertUserGroupStmt.setInt(UserGroupParam.sysgroup, group.getDatabaseId()); + insertUserGroupStmt.getStatement().addBatch(); + } catch (SQLException e) { + log.fatal("Error associating secondary group '" + group + "' to user '" + user.uid + "'"); + e.printStackTrace(); + } + + } public void commit() { try { + insertUserGroupStmt.getStatement().executeBatch(); conn.commit(); } catch (SQLException e) { // TODO Auto-generated catch block diff --git a/Sda2/P/UnixSqlLdap/Jndi/usermanage/src/main/java/de/hdm_stuttgart/mi/sda2/usermanage/rdbms/UserGroupParam.java b/Sda2/P/UnixSqlLdap/Jndi/usermanage/src/main/java/de/hdm_stuttgart/mi/sda2/usermanage/rdbms/UserGroupParam.java new file mode 100644 index 000000000..06a1de9c0 --- /dev/null +++ b/Sda2/P/UnixSqlLdap/Jndi/usermanage/src/main/java/de/hdm_stuttgart/mi/sda2/usermanage/rdbms/UserGroupParam.java @@ -0,0 +1,26 @@ +package de.hdm_stuttgart.mi.sda2.usermanage.rdbms; + +public enum UserGroupParam implements Param { + + // See index values in subsequent SQL statement + sysuser(1), + sysgroup(2); + + public static final String sql = + "INSERT INTO SysUserGroup (sysuser, sysgroup) " + /* Parameter index 1 2 */ + + "VALUES(?, ?)"; + + public final int index; + + UserGroupParam(final int index){ + this.index = index; + } + public int getIndex() { + return index; + } + + public String getSql() { + return sql; + } +} -- GitLab