Hi everybody,

I noticed a weird behaviour in the last release of lsc-2.0.

1/ when using a logback.xml with all levels at "INFO", I got nothing
synchronized... It stays blocked with no special message.
Note : I use ldap async source service, with a sunDS.
Note: logback.xml is shown below, with all INFO values replaced by DEBUG

2/ This one is more a comment than a bug :
when moving from lsc1.0 to lsc2.0 :
- with a ldapsourceservice, no problem
- with an async ldap source service, binary attributes does not seem to
be synchronized the same way. Indeed, attribute :
<string>userCertificate;binary</string> as shown below must be replaced by :
<string>userCertificate</string>

Maybe the job to get the binary attribute is done in internal ?

Once it is done, you must also take care to the Delimiter, else, the
userCertificate could be splitted into two certificate.
Maybe these points can be added to the documentation ?


Thank you for the helpers !

David Coutadeur





<?xml version="1.0" ?>

<lsc xmlns="http://lsc-project.org/XSD/lsc-core-2.0.xsd"; id="1"
revision="0">

  <connections id="2">

    <ldapConnection id="3">
      <name>src-ldap</name>
      <url>ldap://src-sunds.domain.com:389/dc=domain,dc=com</url>
      <username>cn=Directory 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>
      <saslMutualAuthentication>false</saslMutualAuthentication>
    </ldapConnection>

    <ldapConnection id="4">
      <name>dst-ldap</name>
      <url>ldap://dest-oldap.domain.com:389/dc=domain,dc=com</url>
      <username>cn=Manager,dc=domain,dc=com</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>
      <saslMutualAuthentication>false</saslMutualAuthentication>
    </ldapConnection>
  </connections>

  <tasks id="6">

    <task id="7">
      <name>people</name>
      <bean>org.lsc.beans.SimpleBean</bean>
     <asyncLdapSourceService>
      <name>people-src</name>
      <connection reference="src-ldap" />
      <baseDn>ou=People,dc=domain,dc=com</baseDn>
      <pivotAttributes id="9">
        <string>employeeNumber</string>
      </pivotAttributes>
      <fetchedAttributes id="10">
          <string>domainAccountsClosed</string>
          <string>cn</string>
          <string>ctr</string>
          <string>description</string>
          <string>displayName</string>
          <string>dn</string>
          <string>employeeNumber</string>
          <string>userCertificate;binary</string>
      </fetchedAttributes>

<getAllFilter>(&amp;(objectClass=domainPerson)(employeeNumber=1390))</getAllFilter>
      <getOneFilter>(employeeNumber={employeeNumber})</getOneFilter>
      <serverType>SunDS</serverType>
     </asyncLdapSourceService>

     <ldapDestinationService>
        <name>people-dst</name>
        <connection reference="dst-ldap" />
        <baseDn>ou=People,dc=domain,dc=com</baseDn>
        <pivotAttributes id="12">
          <string>employeeNumber</string>
        </pivotAttributes>
        <fetchedAttributes id="13">
          <string>domainAccountsClosed</string>
          <string>cn</string>
          <string>ctr</string>
          <string>description</string>
          <string>displayName</string>
          <string>dn</string>
          <string>employeeNumber</string>
          <string>userCertificate;binary</string>
        </fetchedAttributes>

<getAllFilter>(&amp;(objectClass=domainPerson)(employeeNumber=test))</getAllFilter>
        <getOneFilter>(employeeNumber={employeeNumber})</getOneFilter>
     </ldapDestinationService>

      <propertiesBasedSyncOptions>

        <mainIdentifier>"cn=" + srcBean.getDatasetFirstValueById("cn") +
",ou=People,dc=domain,dc=com"</mainIdentifier>
        <defaultDelimiter>µ</defaultDelimiter>
        <defaultPolicy>FORCE</defaultPolicy>

        <conditions>
           <create>true</create>
           <update>true</update>
           <delete>false</delete>
           <changeId>true</changeId>
        </conditions>

        <dataset>
          <name>telephoneNumberPrivate</name>
          <policy>FORCE</policy>
          <forceValues id="19">
            <string>
<![CDATA[
        var j = 0;
        var tmp = new Array();
        var t = srcBean.getDatasetValuesById( "telephoneNumberPrivate"
).toArray();
        for ( var i=0; i<t.length; i++  ) {
                var tableau=String(t[i]).split( /[|,;]+/g );
                for (var k=0; k<tableau.length; k++) {
                        tmp[j] = tableau[k];
                        j++;
                }
        }
        var resTab =
java.lang.reflect.Array.newInstance(java.lang.String, j);
        for ( var i = 0; i<j; i++) {
                resTab[i] = tmp[i];
        }
resTab
]]>
</string>
          </forceValues>
        </dataset>

        <dataset id="21">
          <name>telephoneNumber</name>
          <policy>FORCE</policy>
          <forceValues id="23">
            <string>
<![CDATA[
        var j = 0;
        var tmp = new Array();
        var t = srcBean.getDatasetValuesById( "telephoneNumber" ).toArray();
        for ( var i=0; i<t.length; i++  ) {
                var tableau=String(t[i]).split( /[|,;]+/g );
                for (var k=0; k<tableau.length; k++) {
                        tmp[j] = tableau[k];
                        j++;
                }
        }
        var resTab =
java.lang.reflect.Array.newInstance(java.lang.String, j);
        for ( var i = 0; i<j; i++) {
                resTab[i] = tmp[i];
        }
resTab
]]>
</string>
          </forceValues>
        </dataset>

        <dataset id="25">
          <name>objectClass</name>
          <policy>FORCE</policy>
          <forceValues id="27">
            <string>
<![CDATA[
        var j = 0;
        var tmp = new Array();
        if ( typeof(dstBean) != "undefined" ) {
        var t1 = dstBean.getDatasetValuesById( "objectClass" ).toArray();
        for ( var i=0; i<t1.length; i++  ) {
                tmp[j] = t1[i];
                j++;
        }
        }
        var t2 = srcBean.getDatasetValuesById( "objectClass" ).toArray();
        for ( var i=0; i<t2.length; i++  ) {
                var     ok=1;
                if (t2[i].toLowerCase() != "enateluser" ) {
                        for ( k=0; k<j; k++ ) {
                                if ( t2[i].toLowerCase() ==
tmp[k].toLowerCase() ) {
                                        ok=0;
                                }
                        }
                        if ( ok == 1 ) {
                                tmp[j] = t2[i];
                                j++;
                        }
                }
        }
        var resTab =
java.lang.reflect.Array.newInstance(java.lang.String, j);
        for ( var i = 0; i<j; i++) {
                resTab[i] = tmp[i];
        }
resTab
]]>
</string>
          </forceValues>
        </dataset>

        <dataset id="29">
          <name>domainIrisRole</name>
          <policy>FORCE</policy>
          <forceValues id="31">
            <string>
<![CDATA[
        var t = srcBean.getDatasetFirstValueById( "hidden" );
        t = String(t).replace( /editeur_bascule/, "ROLE1");
        t = String(t).replace( /producteur_bascule/, "ROLE2");
        t
]]>

</string>
          </forceValues>
        </dataset>

        <dataset id="33">
          <name>domainIrisAlternateRole</name>
          <policy>FORCE</policy>
          <forceValues id="35">
            <string>
<![CDATA[
        var t = srcBean.getDatasetFirstValueById(
"domainIrisAlternateRole" );
        t = String(t).replace( /editeur_bascule/, "ROLE1");
        t = String(t).replace( /producteur_bascule/, "ROLE2");
        t
]]>
</string>
        </forceValues>
        </dataset>

      </propertiesBasedSyncOptions>

    </task>

  </tasks>
  <security id="434">
    <encryption id="435">
      <algorithm>AES</algorithm>
      <strength>128</strength>
    </encryption>
  </security>
</lsc>











<?xml version="1.0" encoding="UTF-8"?>

<configuration>

        <!-- standard output to console -->
        <appender name="CONSOLE"
class="ch.qos.logback.core.ConsoleAppender">
                <encoder
class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
                        <layout class="org.lsc.utils.output.LdifLayout">
                                <Pattern>%date{MMM dd HH:mm:ss} -
%-5level - %message%n</Pattern>
                        </layout>
                </encoder>
        </appender>

        <!-- log all application messages to the file /tmp/lsc.log -->
        <!-- this file is rotated every 10000KB, compressed and 7 files
are kept for history -->
        <appender name="LSC"
class="ch.qos.logback.core.rolling.RollingFileAppender">
                <Append>true</Append>
                <File>${LSC_HOME}/logs/lsc.log</File>

                <layout class="org.lsc.utils.output.LdifLayout">
                        <Pattern>%date{MMM dd HH:mm:ss} - %-5level -
%message%n</Pattern>
                </layout>

                <filter
class="ch.qos.logback.classic.filter.ThresholdFilter">
                        <level>DEBUG</level>
                </filter>

                <rollingPolicy
class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
                        <FileNamePattern>lsc.log.%i.gz</FileNamePattern>
                        <MinIndex>1</MinIndex>
                        <MaxIndex>7</MaxIndex>
                </rollingPolicy>

                <triggeringPolicy
class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
                        <MaxFileSize>10000KB</MaxFileSize>
                </triggeringPolicy>
        </appender>

        <!-- special logger to have a LDIF file of all modifications
applied -->
        <!-- this file is rotated every 10000KB, compressed and 7 files
are kept for history -->
        <appender name="LDIF"
class="ch.qos.logback.core.rolling.RollingFileAppender">
                <!--See also
http://logback.qos.ch/manual/appenders.html#RollingFileAppender-->
                <Append>true</Append>
                <File>/tmp/lsc.ldif</File>

                <layout class="org.lsc.utils.output.LdifLayout">
                        <Pattern>%m%n</Pattern>
                </layout>

                <filter
class="ch.qos.logback.classic.filter.ThresholdFilter">
                        <level>DEBUG</level>
                </filter>

                <rollingPolicy
class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
                        <FileNamePattern>lsc.ldif.%i.gz</FileNamePattern>
                        <MinIndex>1</MinIndex>
                        <MaxIndex>7</MaxIndex>
                </rollingPolicy>

                <triggeringPolicy
class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
                        <MaxFileSize>10000KB</MaxFileSize>
                </triggeringPolicy>
        </appender>

        <!-- link log sources and log appenders -->
        <logger name="communicationLogger" level="WARN">
                <appender-ref ref="CONSOLE"/>
        </logger>
        <logger name="org.lsc" level="DEBUG">
                <appender-ref ref="LSC"/>
        </logger>
        <logger name="lsc" level="DEBUG">
                <appender-ref ref="LDIF"/>
        </logger>
        <logger name="org.apache" level="WARN">
                <appender-ref ref="CONSOLE"/>
        </logger>
        <logger name="poolLogger" level="ERROR">
                <appender-ref ref="CONSOLE"/>
        </logger>
        <root level="WARN">
                <appender-ref ref="CONSOLE"/>
        </root>
</configuration>


_______________________________________________________________
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