diff --git a/Sda2/P/UnixSqlLdap/Jndi/usermanage/Schema/divers.sql b/Sda2/P/UnixSqlLdap/Jndi/usermanage/Schema/divers.sql index 515965eb1de77867609e2b1cfb98c0858e88ef50..66642c1179235e87d5950d1eed23664446317126 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 1bda490a1a3d1ffffcf424d2820ec5915cc0fd5a..a3f2d3b9316599fb8c0f85d15d076180366a3bbd 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 1e1d6ec22afec7dc63a1f87d24fcd62ac5f78250..3f747f27f5270876c6d1db4006223c65870245ac 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 a2db509245a73e27e35cdd341eb16c01a025741b..1030186f20be1633bb8ab0d7c05704c8ce8952d5 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 0000000000000000000000000000000000000000..06a1de9c006fb839b2362b202a9f4612425dca11 --- /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; + } +}