Hi Olaf,

I've written a sample configuration for this use case and have tested it
successfully :

https://lsc-project.org/svn/lsc/trunk/sample/postgresql/etc-postgresql2opendj/lsc.xml

You should be able to adapt it to your need.

Best regards,
-- 
Sebastien BAHLOUL
IAM / Security specialist
Ldap Synchronization Connector : http://lsc-project.org
Blog : http://sbahloul.wordpress.com/
Twitter: https://twitter.com/SebastienBah

2013/5/13 Olaf Pueschel <[email protected]>

> Hi Clément,
>
> here you are!
>
> Since this map is also used by the user sync query, it contains a lot
> stuff not used in the password sync.
>
> Best regards
> Olaf
>
> <!DOCTYPE sqlMap PUBLIC "-//iBATIS.com//DTD SQL Map 2.0//EN" "
> http://www.ibatis.com/dtd/sql-map-2.dtd";>
>
> <sqlMap namespace="InetOrgPerson">
>
>         <resultMap id="InetOrgPersonResult" class="java.util.HashMap">
>                 <result property="uid" column="userid" nullValue=""/>
>                 <result property="cardIdNumber" column="cardIdNumber"
> nullValue=""/>
>                 <result property="businessCategory"
> column="businessCategory" nullValue=""/>
>                 <result property="cn" column="cn" nullValue=""/>
>                 <result property="sn" column="sn" nullValue=""/>
>                 <result property="givenName" column="givenName"
> nullValue=""/>
>                 <result property="displayName" column="displayName"
> nullValue=""/>
>                 <result property="normalizedName" column="normalizedName"
> nullValue=""/>
>                 <result property="title" column="title" nullValue=""/>
>                 <result property="employeeNumber" column="employeeNumber"
> nullValue=""/>
>                 <result property="employeeType" column="employeeType"
> nullValue=""/>
>                 <result property="gender" column="gender" nullValue=""/>
>                 <result property="businessUnit" column="businessUnit"
> nullValue=""/>
>                 <result property="o" column="o" nullValue=""/>
>                 <result property="ou" column="ou" nullValue=""/>
>                 <result property="costCenter" column="costCenter"
> nullValue=""/>
>                 <result property="c" column="c" nullValue=""/>
>                 <result property="l" column="l" nullValue=""/>
>                 <result property="street" column="street" nullValue=""/>
>                 <result property="postalCode" column="postalCode"
> nullValue=""/>
>                 <result property="postOfficeBox" column="postOfficeBox"
> nullValue=""/>
>                 <result property="roomNumber" column="roomNumber"
> nullValue=""/>
>                 <result property="telephoneNumber" column="userid"
> select="selectPhoneByPerson" nullValue=""/>
>                 <result property="facsimileTelephoneNumber"
> column="userid" select="selectFaxByPerson" nullValue=""/>
>                 <result property="mobile" column="userid"
> select="selectMobileByPerson" nullValue=""/>
>                 <result property="mail" column="userid"
> select="selectMailByPerson" nullValue=""/>
>                 <result property="destinationindicator"
> column="destinationindicator" nullValue=""/>
>                 <result property="badgeCode" column="badgeCode"
> nullValue=""/>
>                 <result property="adsDomain" column="adsDomain"
> nullValue=""/>
>                 <result property="homeDir" column="homeDir" nullValue=""/>
>                 <result property="userPrincipalName"
> column="userPrincipalName" nullValue=""/>
>                 <result property="registrationAuthority"
> column="registrationAuthority" nullValue=""/>
>                 <result property="myidRoles" column="myidRoles"
> nullValue=""/>
>                 <result property="manager" column="manager" nullValue=""/>
>                 <result property="userPassword" column="userPassword"
> nullValue=""/>
>         </resultMap>
>
>         <select id="selectPhoneByPerson" resultClass="java.lang.String">
>                 SELECT TRIM(trailing ';' from agg_concat(fullqualdata ||
> ';')) AS telephoneNumber
>                 FROM contacts_expanded
>                 WHERE ctype = 'PHONE' AND grptype = 'PBX'
>                 AND ldapid = #userid#
>         </select>
>
>         <select id="selectFaxByPerson" resultClass="java.lang.String">
>                 SELECT TRIM(trailing ';' from agg_concat(fullqualdata ||
> ';')) AS facsimileTelephoneNumber
>                 FROM contacts_expanded
>                 WHERE ctype = 'FAX' AND grptype = 'PBX'
>                 AND ldapid = #userid#
>         </select>
>
>         <select id="selectMobileByPerson" resultClass="java.lang.String">
>                 SELECT TRIM(trailing ';' from agg_concat(fullqualdata ||
> ';')) AS mobile
>                 FROM contacts_expanded
>                 WHERE ctype = 'MOBILE'
>                 AND ldapid = #userid#
>                 AND priority = 1
>         </select>
>
>         <select id="selectMailByPerson" resultClass="java.lang.String">
>                 SELECT TRIM(trailing ';' from agg_concat(fullqualdata ||
> ';')) AS mail
>                 FROM contacts_expanded
>                 WHERE ctype = 'EMAIL'
>                 AND ldapid = #userid#
>         </select>
>
>         <select id="getInetOrgPersonClean" resultClass="java.util.HashMap"
> parameterClass="java.util.Map">
>                 Select
>                   cn
>                 FROM ldap_user
>                 WHERE cn = #cn#
>         </select>
>
>         <select id="getInetOrgPerson" resultMap="InetOrgPersonResult"
> parameterClass="java.util.Map">
>                 Select
>                   *
>                 FROM ldap_user
>                 WHERE cn = #cn#
>         </select>
>
>          <select id="getInetOrgPersonNext" resultClass="java.util.HashMap">
>                  SELECT 'puescheo' AS cn FROM dual
>         </select>
>
>         <select id="getInetOrgPersonList" resultClass="java.util.HashMap">
>                 SELECT cn
>                 FROM ldap_user
>         WHERE cn IN ('puescheo') -- restrict list for testing
>         </select>
> </sqlMap>
>
> --
> *Olaf Püschel (ext.)*
> Senior Consultant
> IS4IT GmbH
> externer Dienstleister im Auftrag der
> Giesecke & Devrient GmbH, Prinzregentenstr. 159, 81677 München,
> Deutschland
> http://www.gi-de.com
> Tel. +49 89 4119-3283, Fax +49 89 4119-1568
> mailto:[email protected] <[email protected]>
>
>
>
>
> Von:        Clément OUDOT <[email protected]>
> An:        Olaf Pueschel <[email protected]>
> Kopie:        [email protected]
> Datum:        13.05.2013 18:07
> Betreff:        Re: [lsc-users] Problem with running lsc in async mode
> from jdbc src
> ------------------------------
>
>
>
> 2013/5/13 Olaf Pueschel <[email protected]>:
> > Hi lsc community!
> >
> > I would like to switch our lsc installation (DB to LDAP, c.a. 15000
> entries)
> > from synchronous to asynchronous mode.
> > For testing I wanted to try to sync just the userpassword field from the
> > database (Oracle) to LDAP (OpenDJ). I am using lsc 2.0.2.
> >
> > First I created and tested a syncronous configuration. Then I modified
> the
> > lsc.xml config to include
> >
> > <requestNameForNextId>getInetOrgPersonNext</requestNameForNextId>
> >
> > and added
> >
> > <select id="getInetOrgPersonNext" resultClass="java.util.HashMap">
> >                 SELECT cn
> >                 FROM ldap_sync
> >                 WHERE id = (SELECT MAX(id) FROM ldap_sync)
> > </select>
> >
> > to my InetOrgPerson.xml file (cn being my pivot attribute). The
> "ldap_sync"
> > view contains the "cn" values for all the changed records in the
> database.
> >
> > There is no complete example for async mode in the documentation, So I
> just
> > guessed that "requestNameForNextId" should return the value of the
> > pivot attribute for the next changed record. Obviously i'm missing out
> > something, because it does not work. I tried several modifications but no
> > luck.
> >
> > ******************
> > If anyone can post a full example how to use asynchronous mode with a
> jdbc
> > source and ldap destination, that would be great
> > *****************
> >
> > I tried some more...
> >
> > Switched to a static select for testing
> >
> > <select id="getInetOrgPersonNext" resultClass="java.util.HashMap">
> >                 SELECT 'puescheo' AS cn FROM dual
> > </select>
> >
> > but still I get the same errors:
> >
> > $ bin/lsc-gdldaptestpw -a all -t 1
> > May 13 17:46:31 - DEBUG - Loading XML configuration from:
> > /home/puescheo/lsc2/gdldaptestpw/bin/../etc/lsc.xml
> > May 13 17:46:32 - INFO  - Reflections took 407 ms to scan 1 urls,
> producing
> > 60 keys and 226 values
> > May 13 17:46:32 - DEBUG - Importing XML schema file:
> > schemas/lsc-core-2.0.xsd
> > May 13 17:46:32 - INFO  - Logging configuration successfully loaded from
> > /home/puescheo/lsc2/gdldaptestpw/bin/../etc/logback.xml
> > May 13 17:46:32 - INFO  - LSC configuration successfully loaded from
> > /home/puescheo/lsc2/gdldaptestpw/bin/../etc/
> > May 13 17:46:32 - INFO  - Connecting to LDAP server
> > ldap://gdldaptest1.accounts.intern:389/dc=gi-de,dc=com as cn=Directory
> > Manager
> > May 13 17:46:32 - DEBUG - Reading sql-map-config.xml from
> > file:/home/puescheo/lsc2/gdldaptestpw/bin/../etc/sql-map-config.xml
> > May 13 17:46:33 - INFO  - Starting async for PasswordSyncTask
> > May 13 17:46:33 - DEBUG - Asynchronous synchronize PasswordSyncTask
> > May 13 17:46:33 - ERROR - Error while synchronizing ID puescheo:
> > java.util.NoSuchElementException
> > May 13 17:46:33 - DEBUG - java.util.NoSuchElementException
> > java.util.NoSuchElementException: null
> >         at java.util.HashMap$HashIterator.nextEntry(HashMap.java:897)
> > ~[na:1.7.0_17]
> >         at java.util.HashMap$KeyIterator.next(HashMap.java:928)
> > ~[na:1.7.0_17]
> >         at
> org.lsc.LscDatasets.getStringValueAttribute(LscDatasets.java:81)
> > ~[lsc-core-2.0.2.jar:na]
> >         at
> >
> org.lsc.jndi.AbstractSimpleJndiService.get(AbstractSimpleJndiService.java:247)
> > ~[lsc-core-2.0.2.jar:na]
> >         at
> > org.lsc.jndi.SimpleJndiDstService.getBean(SimpleJndiDstService.java:122)
> > ~[lsc-core-2.0.2.jar:na]
> >         at org.lsc.SynchronizeTask.run(AbstractSynchronize.java:714)
> > [lsc-core-2.0.2.jar:na]
> >         at org.lsc.SynchronizeTask.run(AbstractSynchronize.java:673)
> > [lsc-core-2.0.2.jar:na]
> >         at org.lsc.SynchronizeTask.run(AbstractSynchronize.java:652)
> > [lsc-core-2.0.2.jar:na]
> >         at java.lang.Thread.run(Thread.java:722) [na:1.7.0_17]
> >
> > The lsc.xml used is as follows:
> >
> > <?xml version="1.0" ?>
> > <lsc xmlns="http://lsc-project.org/XSD/lsc-core-2.0.xsd"; revision="0">
> >   <connections>
> >     <databaseConnection>
> >       <name>edatadb-src-conn</name>
> >       <url>jdbc:oracle:thin:@****************************</url>
> >       <username>**********</username>
> >       <password>********</password>
> >       <driver>oracle.jdbc.driver.OracleDriver</driver>
> >     </databaseConnection>
> >
> >     <ldapConnection>
> >       <name>gdldap-dst-conn</name>
> >       <url>ldap://******************/dc=gi-de,dc=com</url>
> >       <username>cn=Directory Manager</username>
> >       <password>**************</password>
> >       <authentication>SIMPLE</authentication>
> >       <referral>IGNORE</referral>
> >       <derefAliases>NEVER</derefAliases>
> >       <version>VERSION_3</version>
> >       <pageSize>500</pageSize>
> >       <factory>com.sun.jndi.ldap.LdapCtxFactory</factory>
> >     </ldapConnection>
> >   </connections>
> >
> >   <tasks>
> >     <task>
> >       <name>PasswordSyncTask</name>
> >       <bean>org.lsc.beans.SimpleBean</bean>
> >       <databaseSourceService>
> >         <name>pw-edatadb-src-service</name>
> >         <connection reference="edatadb-src-conn" />
> >         <requestNameForList>getInetOrgPersonList</requestNameForList>
> >         <requestNameForObject>getInetOrgPerson</requestNameForObject>
> >         <requestNameForNextId>getInetOrgPersonNext</requestNameForNextId>
> >         <requestNameForClean>getInetOrgPersonClean</requestNameForClean>
> >       </databaseSourceService>
> >       <ldapDestinationService>
> >         <name>pw-gdldap-dst-service</name>
> >         <connection reference="gdldap-dst-conn" />
> >         <baseDn>ou=People,dc=gi-de,dc=com</baseDn>
> >         <pivotAttributes>
> >           <string>cn</string>
> >         </pivotAttributes>
> >         <fetchedAttributes>
> >           <string>userpassword</string>
> >         </fetchedAttributes>
> >         <getAllFilter>(objectClass=inetorgperson)</getAllFilter>
> >
> > <getOneFilter>(&amp;(objectClass=inetorgperson)(cn={cn}))</getOneFilter>
> >       </ldapDestinationService>
> >       <propertiesBasedSyncOptions>
> >         <mainIdentifier>"cn=" + srcBean.getDatasetFirstValueById("cn") +
> > ",ou=" + srcBean.getDatasetFirstValueById("o") +
> > ",ou=People,dc=gi-de,dc=com"</mainIdentifier>
> >         <defaultDelimiter>;</defaultDelimiter>
> >         <defaultPolicy>FORCE</defaultPolicy>
> >         <conditions>
> >                 <create>false</create>
> >                 <update>true</update>
> >                 <delete>false</delete>
> >                 <changeId>false</changeId>
> >         </conditions>
> >         <dataset>
> >           <name>userpassword</name>
> >           <policy>FORCE</policy>
> >           <defaultValues></defaultValues>
> >           <forceValues></forceValues>
> >           <createValues></createValues>
> >         </dataset>
> >       </propertiesBasedSyncOptions>
> >     </task>
> >   </tasks>
> >   <security>
> >     <encryption>
> >       <keyfile>etc/lsc.key</keyfile>
> >       <algorithm>AES</algorithm>
> >       <strength>128</strength>
> >     </encryption>
> >   </security>
> > </lsc>
> >
> > I'll be very happy with any help or advice!
>
> Could you send us your complete iBastis configuration file?
>
> Thanks,
>
> Clément.
>
>
>
> Vorsitzender des Aufsichtsrats: Dr. Peter-Alexander Wacker
> Geschäftsführer: Dr. Karsten Ottenberg (Vorsitzender, CEO),
> Michael Kuemmerle, Hans Wolfgang Kunz,
> Dr. Walter Schlebusch, Dr. Peter Zattler (CFO)
> Gesellschaftssitz: München, Handelsregister Amtsgericht München HRB 4619.
>
> Bitte prüfen Sie der Umwelt zuliebe, ob der Ausdruck dieser E-Mail
> erforderlich ist.
>
> _______________________________________________________________
> Ldap Synchronization Connector (LSC) - http://lsc-project.org
>
> lsc-users mailing list
> [email protected]
> http://lists.lsc-project.org/listinfo/lsc-users
>
>
_______________________________________________________________
Ldap Synchronization Connector (LSC) - http://lsc-project.org

lsc-users mailing list
[email protected]
http://lists.lsc-project.org/listinfo/lsc-users

Reply via email to