Hi All,

Still hacking at this... I've dramatically simplified the the member section to hopefully figure this out. So far I can print the an array but need to get the DN to assign to the member attribute.

        <dataset>
          <name>member</name>
          <policy>FORCE</policy>
          <forceValues>
            <string>
<![CDATA[
     umembers = srcBean.getDatasetValuesById("memberUid").toArray();
     var xmembers = [];
         for (var i=0; i<umembers.length; i++ ) {
xmembers.push(ldap.attribute(ldap.list("OU=UsersTEST", "(sAMAccountName=" + (srcLdap.attribute(umembers[i], 'uid').get(0) + ")")).get(0), 'distinguishedname').get(0));
         }
     xmembers
]]>
            </string>
          </forceValues>
        </dataset>

With the config above I get the following errors:

Oct 26 17:29:45 - ERROR - Programmatic error
java.lang.reflect.InvocationTargetException: null
at sun.reflect.GeneratedMethodAccessor13.invoke(Unknown Source) ~[na:na] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.6.0_24]
    at java.lang.reflect.Method.invoke(Method.java:616) ~[na:1.6.0_24]
at org.lsc.jndi.ScriptableObject.wrap(ScriptableObject.java:92) [lsc-core-2.0.jar:na] at org.lsc.jndi.ScriptableObject.wrapString(ScriptableObject.java:155) [lsc-core-2.0.jar:na] at org.lsc.jndi.ScriptableJndiServices.attribute(ScriptableJndiServices.java:211) [lsc-core-2.0.jar:na] at sun.reflect.GeneratedMethodAccessor12.invoke(Unknown Source) ~[na:na] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.6.0_24]
    at java.lang.reflect.Method.invoke(Method.java:616) ~[na:1.6.0_24]
at sun.org.mozilla.javascript.MemberBox.invoke(MemberBox.java:161) [na:1.7R2] at sun.org.mozilla.javascript.NativeJavaMethod.call(NativeJavaMethod.java:247) [na:1.7R2] at sun.org.mozilla.javascript.optimizer.OptRuntime.call2(OptRuntime.java:76) [na:1.7R2] at sun.org.mozilla.javascript.gen._Unknown_source__360._c_script_0(<Unknown source>:8) [na:na] at sun.org.mozilla.javascript.gen._Unknown_source__360.call(<Unknown source>) [na:na] at sun.org.mozilla.javascript.ContextFactory.doTopCall(ContextFactory.java:426) [na:1.7R2] at com.sun.script.javascript.RhinoScriptEngine$1.superDoTopCall(RhinoScriptEngine.java:112) [na:1.6.0_24] at com.sun.script.javascript.RhinoScriptEngine$1.doTopCall(RhinoScriptEngine.java:105) [na:1.6.0_24] at sun.org.mozilla.javascript.ScriptRuntime.doTopCall(ScriptRuntime.java:3178) [na:1.7R2] at sun.org.mozilla.javascript.gen._Unknown_source__360.call(<Unknown source>) [na:na] at sun.org.mozilla.javascript.gen._Unknown_source__360.exec(<Unknown source>) [na:na] at sun.org.mozilla.javascript.Context.evaluateReader(Context.java:1142) [na:1.7R2] at com.sun.script.javascript.RhinoScriptEngine.eval(RhinoScriptEngine.java:169) [na:1.6.0_24] at com.sun.script.javascript.RhinoScriptEngine.eval(RhinoScriptEngine.java:195) [na:1.6.0_24] at javax.script.AbstractScriptEngine.eval(AbstractScriptEngine.java:233) [na:1.6.0_24] at org.lsc.utils.JScriptEvaluator.instanceEval(JScriptEvaluator.java:196) [lsc-core-2.0.jar:na] at org.lsc.utils.JScriptEvaluator.evalToStringList(JScriptEvaluator.java:113) [lsc-core-2.0.jar:na] at org.lsc.utils.ScriptingEvaluator.evalToStringList(ScriptingEvaluator.java:109) [lsc-core-2.0.jar:na] at org.lsc.beans.BeanComparator.getValuesToSet(BeanComparator.java:597) [lsc-core-2.0.jar:na] at org.lsc.beans.BeanComparator.getUpdatedObject(BeanComparator.java:297) [lsc-core-2.0.jar:na] at org.lsc.beans.BeanComparator.calculateModifications(BeanComparator.java:178) [lsc-core-2.0.jar:na] at org.lsc.SynchronizeTask.run(AbstractSynchronize.java:739) [lsc-core-2.0.jar:na] at org.lsc.SynchronizeTask.run(AbstractSynchronize.java:663) [lsc-core-2.0.jar:na] at org.lsc.SynchronizeTask.run(AbstractSynchronize.java:633) [lsc-core-2.0.jar:na] at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110) [na:1.6.0_24] at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603) [na:1.6.0_24]
    at java.lang.Thread.run(Thread.java:679) [na:1.6.0_24]
Caused by: java.lang.NoSuchMethodError: org.apache.directory.shared.i18n.I18n.err(Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String; at org.apache.directory.shared.ldap.name.FastDnParser.nextChar(FastDnParser.java:581) ~[shared-ldap-0.9.19.jar:na] at org.apache.directory.shared.ldap.name.FastDnParser.matchEquals(FastDnParser.java:511) ~[shared-ldap-0.9.19.jar:na] at org.apache.directory.shared.ldap.name.FastDnParser.parseRdnInternal(FastDnParser.java:165) ~[shared-ldap-0.9.19.jar:na] at org.apache.directory.shared.ldap.name.FastDnParser.parseDn(FastDnParser.java:101) ~[shared-ldap-0.9.19.jar:na] at org.apache.directory.shared.ldap.name.DnParser.parseInternal(DnParser.java:90) ~[shared-ldap-0.9.19.jar:na] at org.apache.directory.shared.ldap.name.DN.<init>(DN.java:165) ~[shared-ldap-0.9.19.jar:na] at org.lsc.jndi.JndiServices.rewriteBase(JndiServices.java:615) ~[lsc-core-2.0.jar:na] at org.lsc.jndi.JndiServices.readEntry(JndiServices.java:636) ~[lsc-core-2.0.jar:na] at org.lsc.jndi.JndiServices.readEntry(JndiServices.java:610) ~[lsc-core-2.0.jar:na] at org.lsc.jndi.ScriptableJndiServices._attr(ScriptableJndiServices.java:216) [lsc-core-2.0.jar:na]
    ... 36 common frames omitted
Oct 26 17:29:47 - ERROR - javax.script.ScriptException: sun.org.mozilla.javascript.EcmaError: TypeError: Cannot call method "get" of null (<Unknown source>#8) in <Unknown source> at line number 8

Any help and guidance will be appreciated. Thanks.

George

On 10/25/2012 07:11 PM, Clément OUDOT wrote:
2012/10/25 George Dobson <[email protected]>:
Hi Clément,

I'm also trying to populate the Group membership and used the example as
below but when I run the Group task the member update is just omitted.

An example of a valid user DN in the destination AD (samAccountName =
ajavier):
CN=Aaron Javier,OU=UsersTEST,OU=Dept,DC=company,DC=local
The corresponding user DN in the source openldap:
uid=ajavier,ou=People,dc=department,dc=zone

     <task>
       <name>Group</name>
       <bean>org.lsc.beans.SimpleBean</bean>
       <ldapSourceService>
         <name>openldap-source-service-group</name>
         <connection reference="ldap-src-conn" />
         <baseDn>ou=group,dc=department,dc=zone</baseDn>

         <pivotAttributes>
           <string>cn</string>
         </pivotAttributes>
         <fetchedAttributes>
           <string>cn</string>
           <string>memberUid</string>
           <string>description</string>
           <string>objectClass</string>
         </fetchedAttributes>
         <getAllFilter>(objectClass=top)</getAllFilter>
         <getOneFilter>(&amp;(objectClass=top)(cn={cn}))</getOneFilter>
         <cleanFilter>(&amp;(objectClass=top)(cn={cn}))</cleanFilter>
       </ldapSourceService>
       <ldapDestinationService>
         <name>ad-dst-service-group</name>
         <connection reference="ldap-dst-conn" />
         <baseDn>ou=GroupsTEST,ou=Dept,dc=company,dc=local</baseDn>

         <pivotAttributes>
           <string>cn</string>
         </pivotAttributes>
         <fetchedAttributes>
           <string>cn</string>
           <string>name</string>
           <string>description</string>
           <string>sAMAccountName</string>
           <string>objectClass</string>
           <string>member</string>
         </fetchedAttributes>
         <getAllFilter>(objectClass=group)</getAllFilter>

         <getOneFilter>(&amp;(objectClass=group)(cn={cn}))</getOneFilter>
<!--
         <cleanFilter>(&amp;(objectClass=group)(cn={cn}))</cleanFilter>
-->

       </ldapDestinationService>
       <propertiesBasedSyncOptions>
         <mainIdentifier>"CN=" + srcBean.getDatasetFirstValueById("cn") +
           ",OU=GroupsTEST,OU=Dept,DC=company,DC=local"</mainIdentifier>

         <defaultDelimiter>;</defaultDelimiter>
         <defaultPolicy>FORCE</defaultPolicy>
         <dataset>
           <name>member</name>
           <policy>MERGE</policy>
           <forceValues>
             <string>
<![CDATA[
                 var membersSrcDn =
srcBean.getDatasetValuesById("memberUid");

                 var memberUidValues = [];
                 for  (var i=0; i<membersSrcDn.size(); i++) {
                         var memberSrcDn = membersSrcDn.get(i);
                         var agriUid = "";
                         try {
                                 agriUid =
ldap-dst-conn.attribute(memberSrcDn, "samAccountName").get(0);
                         } catch(e) {
                                 continue;
                         }
                         var destMembersDn = ldap.search("ou=UsersTEST",
"(agriUid=" + agriUid + ")");

                         if (destMembersDn.size() == 0 ||
destMembersDn.size() > 1) {
                                 continue;
                         }
                         var destMemberDn = destMembersDn.get(0);
                         var memberUid = ldap.attribute(destMemberDn,
"uid").get(0);
                         memberUidValues.push (member);
                 }
                 memberUidValues
]]>
             </string>
           </forceValues>
         </dataset>
         <dataset>
           <name>sAMAccountName</name>
           <policy>KEEP</policy>
           <forceValues>
             <string>js:srcBean.getDatasetFirstValueById("cn")</string>
           </forceValues>
         </dataset>
         <dataset>
           <name>name</name>
           <policy>KEEP</policy>
           <forceValues>
             <string>js:srcBean.getDatasetFirstValueById("cn")</string>
           </forceValues>
         </dataset>
         <dataset>
           <name>objectClass</name>
           <policy>KEEP</policy>
           <forceValues>
             <string>"group"</string>
           </forceValues>
         </dataset>
       </propertiesBasedSyncOptions>
     </task>

The output I get is:
root:/usr/local/lsc-2.0# bin/lsc -f etc -c all -s Group
Oct 25 16:44:21 - DEBUG - Loading XML configuration from:
/usr/local/lsc-2.0/etc/lsc.xml
Oct 25 16:44:22 - INFO  - Reflections took 821 ms to scan 1 urls, producing
60 keys and 226 values
Oct 25 16:44:22 - DEBUG - Importing XML schema file:
schemas/lsc-core-2.0.xsd
Oct 25 16:44:22 - INFO  - Logging configuration successfully loaded from
/usr/local/lsc-2.0/etc/logback.xml
Oct 25 16:44:22 - INFO  - LSC configuration successfully loaded from
/usr/local/lsc-2.0/etc/
Oct 25 16:44:23 - INFO  - Connecting to LDAP server
ldap://192.168.49.167:389/dc=company,dc=local as
CN=ldapbind,DC=company,DC=local
Oct 25 16:44:23 - WARN  - Your baseDn settings (ou=UsersTEST,ou=Dept) does
not end with the LDAP naming context (dc=company,dc=local). This is probably
an error ! For LSC 1.X users, this is part of the changelog to 2.X.
Oct 25 16:44:23 - INFO  - Connecting to LDAP server
ldap://localhost:389/dc=department,dc=zone as uid=root,ou=People,dc=zone
Oct 25 16:44:23 - INFO  - Starting clean for People
Oct 25 16:44:25 - INFO  - All entries: 428, to modify entries: 0,
successfully modified entries: 0, errors: 0
Oct 25 16:44:25 - INFO  - Starting sync for Group
Oct 25 16:44:25 - ERROR - Synchronization aborted because no source object
has been found !
Oct 25 16:44:26 - INFO  - # Adding new object
CN=idev,OU=GroupsTEST,OU=Dept,DC=company,DC=local for Group
dn: CN=idev,OU=GroupsTEST,OU=Dept,DC=company,DC=local
changetype: add
cn: idev
sAMAccountName: idev
description: Company Development Team
name: idev
objectClass: group

Oct 25 16:44:27 - INFO  - # Adding new object
CN=icsworkforce,OU=GroupsTEST,OU=Dept,DC=company,DC=local for Group
dn: CN=icsworkforce,OU=GroupsTEST,OU=Dept,DC=company,DC=local
changetype: add
cn: icsworkforce
sAMAccountName: icsworkforce
description: Call Centre Team
name: icsworkforce
objectClass: group

Oct 25 16:44:27 - INFO  - # Adding new object
CN=icsprocess,OU=GroupsTEST,OU=Dept,DC=company,DC=local for Group
dn: CN=icsprocess,OU=GroupsTEST,OU=Dept,DC=company,DC=local
changetype: add
cn: icsprocess
sAMAccountName: icsprocess
description: Call Centre Team
name: icsprocess
objectClass: group

Oct 25 16:44:27 - INFO  - # Adding new object
CN=ifraud,OU=GroupsTEST,OU=Dept,DC=company,DC=local for Group
dn: CN=ifraud,OU=GroupsTEST,OU=Dept,DC=company,DC=local
changetype: add
cn: ifraud
sAMAccountName: ifraud
description: department fraud team
name: ifraud
objectClass: group
...
...

I think you cpy/paste the code without understanding it. Try to find
how the js code works. It will search attributes in src LDAP with a
filter, and then build values for attribute in destination. Adapt all
searches to your LDAP schema.

By the way, why did you choose a MERGE policy?

Clément.

_______________________________________________________________
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