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
...
...

Thanks for helping.

Regards,
George

On 10/22/2012 06:31 PM, Clément OUDOT wrote:
2012/10/22 Christian Bösch <[email protected]>:
On Oct 19, 2012, at 14:36 , Clément OUDOT <[email protected]> wrote:

2012/10/19 Christian Bösch <[email protected]>:
Hi Clement,

This had the effect that all the members have been deleted in the AD group.

Oct 19 14:19:15 - INFO  - # Updating object 
CN=ou-is,OU=FHgroups,DC=ad,DC=abc,DC=net for groups
dn: CN=ou-is,OU=FHgroups,DC=ad,DC=abc,DC=net
changetype: modify
delete: member

So try with :

var members = [];

You should just get a compliant javacript code, LSC will jsut run it into Rhino.
Hi Clement,

Still no success.
So to test I set members manually:

             <string><![CDATA[
               var members = ['CN=Lastname 
Firstname,OU=FHusers,DC=ad,DC=abc,DC=net'];
               members
             ]]></string>

But there is still the error:

ERROR - Error while modifying entry CN=ou-is,OU=FHgroups,DC=ad,DC=abc,DC=net in 
directory :javax.naming.OperationNotSupportedException: [LDAP: error code 53 - 
0000054F: SvcErr: DSID-031A120C, problem 5003 (WILL_NOT_PERFORM), data 0
]; remaining name 'CN=ou-is,OU=FHgroups'
ERROR - Error while synchronizing ID CN=ou-is,OU=FHgroups,DC=ad,DC=abc,DC=net: 
java.lang.NullPointerException
dn: CN=ou-is,OU=FHgroups,DC=ad,DC=abc,DC=net
changetype: modify
replace: member
member: sun.org.mozilla.javascript.NativeArray@f052d5

Here is a sample code that transform uniqueMember values (DN) into
memberUid values (uid) :

         <dataset>
           <name>memberUid</name>
           <policy>FORCE</policy>
           <defaultValues></defaultValues>
           <forceValues>
             <string>
               <![CDATA[
                 var membersSrcDn = 
srcBean.getDatasetValuesById("uniqueMember");
                 var memberUidValues = [];
                 for  (var i=0; i<membersSrcDn.size(); i++) {
                         var memberSrcDn = membersSrcDn.get(i);
                         var agriUid = "";
                         try {
                                 agriUid =
srcLdap.attribute(memberSrcDn, "uid").get(0);
                         } catch(e) {
                                 continue;
                         }
                         var destMembersDn = ldap.search("ou=users",
"(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 (memberUid);
                 }
                 memberUidValues
               ]]>
             </string>
           </forceValues>
           <createValues></createValues>
         </dataset>


Hope this can help you to get a correct script.

Clément.
_______________________________________________________________
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