diff --git a/Sda2/P/UnixSqlLdap/Jndi/Rdbms2Ldap/.gitignore b/Sda2/P/UnixSqlLdap/Jndi/Rdbms2Ldap/.gitignore
new file mode 100644
index 0000000000000000000000000000000000000000..a1c3ab4d08c0f9f91918f21c730272a4711885e8
--- /dev/null
+++ b/Sda2/P/UnixSqlLdap/Jndi/Rdbms2Ldap/.gitignore
@@ -0,0 +1,4 @@
+/target/
+/.settings/
+.classpath
+.project
diff --git a/Sda2/P/UnixSqlLdap/Jndi/Rdbms2Ldap/Schema/schema.ldif b/Sda2/P/UnixSqlLdap/Jndi/Rdbms2Ldap/Schema/schema.ldif
new file mode 100644
index 0000000000000000000000000000000000000000..9338a24eab6423306b1a94623e134b80ac113bb3
--- /dev/null
+++ b/Sda2/P/UnixSqlLdap/Jndi/Rdbms2Ldap/Schema/schema.ldif
@@ -0,0 +1,12 @@
+version: 1
+
+dn: ou=groups,dc=hdm-stuttgart,dc=de
+objectClass: top
+objectClass: organizationalUnit
+ou: groups
+
+dn: ou=users,dc=hdm-stuttgart,dc=de
+objectClass: top
+objectClass: organizationalUnit
+ou: users
+
diff --git a/Sda2/P/UnixSqlLdap/Jndi/Rdbms2Ldap/pom.xml b/Sda2/P/UnixSqlLdap/Jndi/Rdbms2Ldap/pom.xml
new file mode 100644
index 0000000000000000000000000000000000000000..7d82a7c1391932a6fb28404c1cd3f957201cb8f9
--- /dev/null
+++ b/Sda2/P/UnixSqlLdap/Jndi/Rdbms2Ldap/pom.xml
@@ -0,0 +1,54 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+	<modelVersion>4.0.0</modelVersion>
+
+	<groupId>de.hdm-stuttgart.mi.sda2</groupId>
+	<artifactId>rdbms2ldap</artifactId>
+	<version>0.9</version>
+	<packaging>jar</packaging>
+
+	<name>rdbms2ldap</name>
+
+	<!--Fixme: Add a sensible project related domain here -->
+	<url>http://somedomain.org</url>
+
+	<properties>
+		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+	</properties>
+
+	<dependencies>
+		<dependency>
+			<groupId>junit</groupId>
+			<artifactId>junit</artifactId>
+			<version>4.11</version>
+			<scope>test</scope>
+		</dependency>
+
+		<dependency>
+			<groupId>log4j</groupId>
+			<artifactId>log4j</artifactId>
+			<version>1.2.17</version>
+		</dependency>
+
+		<dependency>
+			<groupId>mysql</groupId>
+			<artifactId>mysql-connector-java</artifactId>
+			<version>5.1.33</version>
+		</dependency>
+
+	</dependencies>
+
+	<build>
+		<plugins>
+			<plugin>
+				<groupId>org.apache.maven.plugins</groupId>
+				<artifactId>maven-compiler-plugin</artifactId>
+				<version>3.1</version>
+				<configuration>
+					<source>1.8</source>
+					<target>1.8</target>
+				</configuration>
+			</plugin>
+		</plugins>
+	</build>
+</project>
diff --git a/Sda2/P/UnixSqlLdap/Jndi/Rdbms2Ldap/src/main/java/de/hdm_stuttgart/mi/sda2/rdbms2ldap/Config.java b/Sda2/P/UnixSqlLdap/Jndi/Rdbms2Ldap/src/main/java/de/hdm_stuttgart/mi/sda2/rdbms2ldap/Config.java
new file mode 100644
index 0000000000000000000000000000000000000000..b88b0e4b6cb0798ba150ab102a9b03488a5216c6
--- /dev/null
+++ b/Sda2/P/UnixSqlLdap/Jndi/Rdbms2Ldap/src/main/java/de/hdm_stuttgart/mi/sda2/rdbms2ldap/Config.java
@@ -0,0 +1,22 @@
+package de.hdm_stuttgart.mi.sda2.rdbms2ldap;
+
+import java.util.MissingResourceException;
+import java.util.ResourceBundle;
+
+public class Config {
+	private static final String BUNDLE_NAME = "de.hdm_stuttgart.mi.sda2.rdbms2ldap.ldap"; //$NON-NLS-1$
+
+	private static final ResourceBundle RESOURCE_BUNDLE = ResourceBundle
+			.getBundle(BUNDLE_NAME);
+
+	private Config() {
+	}
+
+	public static String get(String key) {
+		try {
+			return RESOURCE_BUNDLE.getString(key);
+		} catch (MissingResourceException e) {
+			return '!' + key + '!';
+		}
+	}
+}
diff --git a/Sda2/P/UnixSqlLdap/Jndi/Rdbms2Ldap/src/main/java/de/hdm_stuttgart/mi/sda2/rdbms2ldap/Driver.java b/Sda2/P/UnixSqlLdap/Jndi/Rdbms2Ldap/src/main/java/de/hdm_stuttgart/mi/sda2/rdbms2ldap/Driver.java
new file mode 100644
index 0000000000000000000000000000000000000000..3ce7d8aac065f9ccb8e56ed264cecd01592d0281
--- /dev/null
+++ b/Sda2/P/UnixSqlLdap/Jndi/Rdbms2Ldap/src/main/java/de/hdm_stuttgart/mi/sda2/rdbms2ldap/Driver.java
@@ -0,0 +1,38 @@
+package de.hdm_stuttgart.mi.sda2.rdbms2ldap;
+
+import java.sql.SQLException;
+
+import javax.naming.NamingException;
+
+import org.apache.log4j.Logger;
+
+import de.hdm_stuttgart.mi.sda2.rdbms2ldap.ldap.LdapHandler;
+import de.hdm_stuttgart.mi.sda2.rdbms2ldap.rdbms.RdbmsHandler;
+
+/**
+ * Transfer user/group data from RDBMS to LDAP
+ *
+ */
+public class Driver {
+   private static Logger log = Logger.getLogger(Driver.class);
+
+    public static void main( String[] args ) {
+        
+    	final RdbmsHandler rdbmsHandler = new RdbmsHandler();
+    	try {
+			rdbmsHandler.connect();
+		} catch (SQLException e1) {
+			log.fatal("Unable to connect to database server");
+		}
+    	
+    	final LdapHandler ldapHandler = new LdapHandler();
+    	try {
+			ldapHandler.connect();
+		} catch (NamingException e) {
+			log.error("Unable to connect to lDAP server:" + e.getMessage());
+		}
+    	rdbmsHandler.transferUsers(ldapHandler);
+    	rdbmsHandler.transferGroups(ldapHandler);
+    	
+    }
+}
diff --git a/Sda2/P/UnixSqlLdap/Jndi/Rdbms2Ldap/src/main/java/de/hdm_stuttgart/mi/sda2/rdbms2ldap/ldap/LdapHandler.java b/Sda2/P/UnixSqlLdap/Jndi/Rdbms2Ldap/src/main/java/de/hdm_stuttgart/mi/sda2/rdbms2ldap/ldap/LdapHandler.java
new file mode 100644
index 0000000000000000000000000000000000000000..391ec4f4c2584dbc5679422ffa3fded9d6e93a55
--- /dev/null
+++ b/Sda2/P/UnixSqlLdap/Jndi/Rdbms2Ldap/src/main/java/de/hdm_stuttgart/mi/sda2/rdbms2ldap/ldap/LdapHandler.java
@@ -0,0 +1,96 @@
+package de.hdm_stuttgart.mi.sda2.rdbms2ldap.ldap;
+
+import java.util.Hashtable;
+
+import javax.naming.Context;
+import javax.naming.NamingException;
+import javax.naming.directory.Attributes;
+import javax.naming.directory.BasicAttribute;
+import javax.naming.directory.BasicAttributes;
+import javax.naming.directory.DirContext;
+import javax.naming.directory.InitialDirContext;
+
+import org.apache.log4j.Logger;
+
+import de.hdm_stuttgart.mi.sda2.rdbms2ldap.Config;
+
+public class LdapHandler {
+	private static Logger log = Logger.getLogger(LdapHandler.class);
+
+	InitialDirContext rootContext;
+	
+	DirContext groupsContext, usersContext;
+	
+	public void connect() throws NamingException {
+		Hashtable <String, String> env = new Hashtable<String, String>();
+		env.put(Context.INITIAL_CONTEXT_FACTORY, Config.get("LdapHandler.ldapCtxFactory"));
+		env.put(Context.PROVIDER_URL, Config.get("LdapHandler.ldapBaseDN"));
+		env.put(Context.SECURITY_PRINCIPAL, Config.get("LdapHandler.ldapBindDn"));  
+		env.put(Context.SECURITY_CREDENTIALS, Config.get("LdapHandler.ldapBindPw"));  
+		
+		rootContext = new InitialDirContext (env);
+		groupsContext = (DirContext) lookupContext(rootContext, Config.get("LdapHandler.groupsRDN"), DirContext.class);
+		usersContext = (DirContext) lookupContext(rootContext, Config.get("LdapHandler.usersRDN"), DirContext.class);
+	}
+	
+	public void insertGroup(final String gid, final int gidNumber) {
+		final Attributes groupAttrs = new BasicAttributes();
+		groupAttrs.put(new BasicAttribute ("objectclass", "top"));           
+		groupAttrs.put(new BasicAttribute("objectclass", "posixGroup"));     
+		
+		groupAttrs.put(new BasicAttribute("cn", gid));           
+		groupAttrs.put(new BasicAttribute("gidNumber", "" + gidNumber));           
+
+		final String groupRdn = "gidNumber=" + gidNumber;
+		try {
+			groupsContext.bind(groupRdn, null, groupAttrs);
+		} catch (NamingException e) {
+			log.fatal("Unable to bind context '" + groupRdn + "' :" + e.getMessage());
+			System.exit(1);
+		}
+	}
+	
+	public void insertUser(final String uid, final int uidNumber, final int primaryGidNumber, final String cname, final String homeDirectory, final String shell) {
+		
+		final Attributes userAttrs = new BasicAttributes();
+		
+		final BasicAttribute objectClass = new BasicAttribute("objectClass", "account");
+		objectClass.add("posixAccount");
+		objectClass.add("top");
+		
+		userAttrs.put(objectClass);
+		
+		userAttrs.put(new BasicAttribute("uid", uid));           
+		userAttrs.put(new BasicAttribute("uidNumber", "" + uidNumber));           
+		userAttrs.put(new BasicAttribute("gidNumber", "" + primaryGidNumber));
+		userAttrs.put(new BasicAttribute("cn", cname));           
+		userAttrs.put(new BasicAttribute("homeDirectory", homeDirectory));           
+		userAttrs.put(new BasicAttribute("loginShell", shell));           
+
+		final String userRdn = "uid=" + uid;
+		try {
+			usersContext.bind(userRdn, null, userAttrs);
+		} catch (NamingException e) {
+			log.fatal("Unable to bind context '" + userRdn + "' :" + e.getMessage());
+			System.exit(1);
+		}
+	}
+	
+	@SuppressWarnings("unchecked")
+	private static final <T extends Object> T lookupContext(final DirContext parent, final String rdn, Class<T> type) {
+		try { 
+			final Object o = parent.lookup(rdn);
+			if (null == o) {
+				log.fatal("Context '" + rdn + "' does not exist");
+			} else if(type.isAssignableFrom(o.getClass())) {
+				return (T)o;
+			} else {
+				log.fatal("Context '" + rdn + "' is no subtype of '" + type + "'");
+			} 
+		} catch (NamingException ne) {
+			log.fatal("Unable to retrieve context '" + rdn + "'");
+			System.exit(1);
+		}
+		return null;
+	}
+}
diff --git a/Sda2/P/UnixSqlLdap/Jndi/Rdbms2Ldap/src/main/java/de/hdm_stuttgart/mi/sda2/rdbms2ldap/rdbms/RdbmsHandler.java b/Sda2/P/UnixSqlLdap/Jndi/Rdbms2Ldap/src/main/java/de/hdm_stuttgart/mi/sda2/rdbms2ldap/rdbms/RdbmsHandler.java
new file mode 100644
index 0000000000000000000000000000000000000000..069a0905cf1f5e97c3965f385acf6184412f15de
--- /dev/null
+++ b/Sda2/P/UnixSqlLdap/Jndi/Rdbms2Ldap/src/main/java/de/hdm_stuttgart/mi/sda2/rdbms2ldap/rdbms/RdbmsHandler.java
@@ -0,0 +1,74 @@
+package de.hdm_stuttgart.mi.sda2.rdbms2ldap.rdbms;
+
+import java.sql.Connection;
+import java.sql.DriverManager;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.sql.Statement;
+
+import org.apache.log4j.Logger;
+
+import de.hdm_stuttgart.mi.sda2.rdbms2ldap.Config;
+import de.hdm_stuttgart.mi.sda2.rdbms2ldap.ldap.LdapHandler;
+
+public class RdbmsHandler {
+
+	private static Logger log = Logger
+			.getLogger(RdbmsHandler.class);
+
+	static {
+		try {
+			Class.forName(Config.get("RdbmsHandler.driverClassName"));
+		} catch (ClassNotFoundException e) {
+			System.err.println("Unable to register JDBC driver '"
+					+ Config.get("RdbmsHandler.jdbcUrl") + "'");
+			System.exit(1);
+		}
+	}
+
+	Connection conn = null;
+
+	public void connect() throws SQLException {
+		if (null != conn) {
+			conn.rollback();
+			conn.close();
+		}
+		conn = DriverManager.getConnection(Config.get("RdbmsHandler.jdbcUrl"),
+				Config.get("RdbmsHandler.user"), Config.get("RdbmsHandler.password"));
+		conn.setAutoCommit(true);
+	}
+	
+	public void transferGroups(LdapHandler ldapHandler) {
+		try {
+			Statement stmt = conn.createStatement();
+			final ResultSet groups = stmt.executeQuery("SELECT * FROM SysGroup");
+			while (groups.next()) {
+				ldapHandler.insertGroup(groups.getString("gid"),
+						groups.getInt("gidNumber"));
+			}
+			
+		} catch (SQLException e) {
+			log.fatal("Unable to insert groups: " + e.getMessage());
+		}
+	}
+	public void transferUsers(LdapHandler ldapHandler) {
+		try {
+			Statement stmt = conn.createStatement();
+			final ResultSet users = stmt.executeQuery("SELECT * FROM SysUser");
+			while (users.next()) {
+				ldapHandler.insertUser(
+						users.getString("uid")
+						,users.getInt("uidNumber")
+						,users.getInt("primaryGidNumber")
+						,users.getString("cname")
+						,users.getString("homeDirectory")
+						,users.getString("shell")
+						);
+			}
+			
+		} catch (SQLException e) {
+			log.fatal("Unable to insert userss: " + e.getMessage());
+		}
+	}
+	
+}
diff --git a/Sda2/P/UnixSqlLdap/Jndi/Rdbms2Ldap/src/main/resources/de/hdm_stuttgart/mi/sda2/rdbms2ldap/ldap.properties b/Sda2/P/UnixSqlLdap/Jndi/Rdbms2Ldap/src/main/resources/de/hdm_stuttgart/mi/sda2/rdbms2ldap/ldap.properties
new file mode 100644
index 0000000000000000000000000000000000000000..abb0fb2b0a2ed1e7b438112825fd540199c297e6
--- /dev/null
+++ b/Sda2/P/UnixSqlLdap/Jndi/Rdbms2Ldap/src/main/resources/de/hdm_stuttgart/mi/sda2/rdbms2ldap/ldap.properties
@@ -0,0 +1,16 @@
+# LDAP
+LdapHandler.ldapCtxFactory=com.sun.jndi.ldap.LdapCtxFactory
+LdapHandler.ldapBaseDN=ldap://localhost:389/dc=hdm-stuttgart,dc=de
+LdapHandler.ldapBindDn=cn=admin,dc=hdm-stuttgart,dc=de
+LdapHandler.ldapBindPw=XYZ
+
+LdapHandler.groupsRDN=ou=groups
+LdapHandler.usersRDN=ou=users
+
+
+# RDBMS
+RdbmsHandler.driverClassName=com.mysql.jdbc.Driver
+
+RdbmsHandler.jdbcUrl=jdbc:mysql://localhost:3306/hdm
+RdbmsHandler.password=XYZ
+RdbmsHandler.user=hdmuser
diff --git a/Sda2/P/UnixSqlLdap/Jndi/Rdbms2Ldap/src/main/resources/log4j.properties b/Sda2/P/UnixSqlLdap/Jndi/Rdbms2Ldap/src/main/resources/log4j.properties
new file mode 100644
index 0000000000000000000000000000000000000000..05100dbdea8c0eda4a287c8d6a8c754fd981352f
--- /dev/null
+++ b/Sda2/P/UnixSqlLdap/Jndi/Rdbms2Ldap/src/main/resources/log4j.properties
@@ -0,0 +1,15 @@
+#Set root logger level to DEBUG and its only appender to A1.
+log4j.rootLogger=DEBUG, A1
+
+# A1 is set to be a ConsoleAppender.
+log4j.appender.A1=org.apache.log4j.ConsoleAppender
+
+# A1 uses PatternLayout comforting Eclipse's debugger.
+log4j.appender.A1.layout=org.apache.log4j.PatternLayout
+log4j.appender.A1.layout.ConversionPattern=%p: %m at %c.%M(%C{1}.java:%L)%n
+
+# Activate per-class or package logging rules if required. For example
+# reducing logging to INFO level for class de.hdm-stuttgart.mi.sda2.rdbms2ldap.App
+# can be achieved by un-commenting the following line:
+
+#log4j.logger.de.hdm-stuttgart.mi.sda2.rdbms2ldap.App.parse.Group=INFO
diff --git a/Sda2/P/UnixSqlLdap/Jndi/Rdbms2Ldap/src/test/java/de/hdm_stuttgart/mi/sda2/rdbms2ldap/AppTest.java b/Sda2/P/UnixSqlLdap/Jndi/Rdbms2Ldap/src/test/java/de/hdm_stuttgart/mi/sda2/rdbms2ldap/AppTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..f80250269b3b0962f30d361734c4d58d4c65721f
--- /dev/null
+++ b/Sda2/P/UnixSqlLdap/Jndi/Rdbms2Ldap/src/test/java/de/hdm_stuttgart/mi/sda2/rdbms2ldap/AppTest.java
@@ -0,0 +1,14 @@
+package de.hdm_stuttgart.mi.sda2.rdbms2ldap;
+
+import org.junit.Assert;
+import org.junit.Test;
+
+/**
+ * Unit test for simple App.
+ */
+public class AppTest {
+    @Test
+    public void testApp() {
+        Assert.assertTrue( true );
+    }
+}