2014-03-14 12:33 GMT+01:00 PaqAttack <[email protected]>: > Hi LSC Community, > I try to synchronize users from Postgresql to OpenDJ. > I use two tables to get info for user. > I've just a problem with users who have multi values OU. > Example: > DB_USERS: > cn=usr1 > cn=usr2 > > DB_OU, > cn=usr1,ou=Dept (OK for one OU) > cn=usr2,ou=Mrkt > cn=usr2,ou=Empl (Dont work more than one OU > > > *My lsc.xml:* > <?xml version="1.0" ?> > <!--<lsc xmlns="http://lsc-project.org/XSD/lsc-core-2.1.xsd" > revision="0">--> > <lsc xmlns="http://lsc-project.org/XSD/lsc-core-2.0.xsd" id="1" > revision="0"> > <connections> > <ldapConnection> > <name>ldap-src-conn</name> > <url>ldap://127.0.0.1:389/dc=lsc-project,dc=org</url> > <username>cn=Manager</username> > <password>secret</password> > <authentication>SIMPLE</authentication> > <referral>IGNORE</referral> > <derefAliases>NEVER</derefAliases> > <version>VERSION_3</version> > <pageSize>-1</pageSize> > <factory>com.sun.jndi.ldap.LdapCtxFactory</factory> > <tlsActivated>false</tlsActivated> > </ldapConnection> > <databaseConnection> > <name>jdbc-dst-conn</name> > <url>jdbc:postgresql://127.0.0.1:5432/users</url> > <username>admin</username> > <password>password</password> > <driver>org.postgresql.Driver</driver> > </databaseConnection> > </connections> > <tasks> > <task> > <name>Users</name> > <bean>org.lsc.beans.SimpleBean</bean> > <databaseSourceService> > <name>postgresql-src-service</name> > <connection reference="jdbc-dst-conn" /> > <requestNameForList>getInetOrgPersonList</requestNameForList> > <requestNameForObject>getInetOrgPerson</requestNameForObject> > <requestNameForNextId>getNextInetOrgPersonId</requestNameForNextId> > </databaseSourceService> > <ldapDestinationService> > <name>openldap-source-service</name> > <connection reference="ldap-src-conn" /> > <baseDn>ou=Sample,dc=lsc-project,dc=org</baseDn> > <pivotAttributes> > <string>ou</string> > </pivotAttributes> > <fetchedAttributes> > <string>objectClass</string> > <string>uid</string> > <string>cn</string> > <string>sn</string> > <string>ou</string> > </fetchedAttributes> > > <getAllFilter>(&(objectClass=inetorgperson)(uid=*))</getAllFilter> > > <getOneFilter>(&(objectClass=inetorgperson)(uid={uid}))</getOneFilter> > </ldapDestinationService> > <propertiesBasedSyncOptions> > <mainIdentifier>"uid="+srcBean.getDatasetFirstValueById("uid") + > ",ou=Sample,dc=lsc-project,dc=org"</mainIdentifier> > <defaultDelimiter>;</defaultDelimiter> > <defaultPolicy>MERGE</defaultPolicy> > <conditions> > <changeId>false</changeId> > </conditions> > </propertiesBasedSyncOptions> > </task> > </tasks> > </lsc> > > *My InetOrgPerson.xml:* > <?xml version="1.0" encoding="UTF-8" standalone="no"?> > <!DOCTYPE sqlMap PUBLIC "-//iBATIS.com//DTD SQL Map 2.0//EN" " > http://www.ibatis.com/dtd/sql-map-2.dtd"> > > <sqlMap namespace="InetOrgPerson"> > > <select id="getInetOrgPerson" resultClass="java.util.HashMap" > parameterClass="java.util.Map"> > SELECT > 'inetOrgPerson' objectClass, > keycn, > cn as uid, > cn as cn, > cn as sn, > appl as ou > FROM DB_USR JOIN DB_OU USING (keycn) > WHERE keycn = #keycn# and cn = #cn# and appl = #appl# > </select> > > <insert id="insertInetOrgPerson" parameterClass="java.util.Map"> > INSERT INTO DB_USR > ( uid, cn, sn, ou) > VALUES ( #uid#, #cn#, #sn#, #ou# ) > JOIN DB_OU USING (keycn) > </insert> > > <update id="updateInetOrgPerson" parameterClass="java.util.Map"> > UPDATE DB_USR > SET uid = #uid#, cn = #cn#, sn = #sn#, ou = #ou# > JOIN DB_OU USING (keycn) > </update> > > <delete id="deleteInetOrgPerson" parameterClass="java.util.Map"> > DELETE FROM DB_USR > WHERE keycn = #keycn# > </delete> > > <select id="getInetOrgPersonList" resultClass="java.util.HashMap"> > SELECT keycn, cn, appl > FROM DB_USR JOIN DB_OU USING (keycn) > > </select> > > <select id="getNextInetOrgPersonId" > resultClass="java.util.HashMap"> > SELECT keycn > FROM DB_USR > ORDER by keycn DESC > LIMIT 1 > </select> > </sqlMap> > > Whats wrong on my config ? > > >
The first thing to know is that LSC will always associate to a destination entry a sinle source entry, so you can't return more than one SQL row for an entry. If you want to manage multiple values for OU, you need to concat OU values in SQL to get one row for each entry. Clément.
_______________________________________________________________ Ldap Synchronization Connector (LSC) - http://lsc-project.org lsc-users mailing list [email protected] http://lists.lsc-project.org/listinfo/lsc-users

