On 24/06/2009 09:56, Cl?ment OUDOT wrote:
>> Cl??ment OUDOT a ??crit :
>>>> Yes, the use of employeeNumber as pivot attribute doesn't a good
>>>> idee...
>>>>
>>>>
>>>> I change it by uid attribute.
>>>>
>>>>
>>>> I have changed too lsc.tasks.salaries.srcService.filterAll to have only
>>>> entries of zimbra with a valid uid like this :
>>>>
>>>>
>>>> lsc.tasks.salaries.srcService.filterAll =
>>>> (&(objectClass=organizationalPerson) (uid=*))
>>>>
>>>>
>>>> Now i have a problem when i run :
>>>>
>>>> ant lsc::synchronize -Dsynchronize.parameters="-c all -s all"
>>>>
>>>> the reponse is :
>>>>
>>>> Buildfile: build.xml
>>>>
>>>> lsc::init:
>>>>
>>>> lsc::prepare-env:
>>>> [echo] Copying xml and properties files
>>>> [copy] Copying 1 file to
>>>> /home/pascal/lsc/lsc-salarie2-z2ldap/target/classes
>>>>
>>>> lsc::compile-resources:
>>>> [echo] Compiling resources
>>>>
>>>> lsc::compile-app:
>>>>
>>>> lsc::synchronize:
>>>> [java] 0 [main] WARN
>>>> org.lsc.SimpleSynchronize.launchTask(SimpleSynchronize.java:230) -
>>>> Starting sync for salaries
>>>> [java] 586 [main] ERROR
>>>> org.lsc.jndi.JndiServices.apply(JndiServices.java:554) - Error while
>>>> modifying directory on entry
>>>> uid=,ou=Salaries,o=fal44,o=cdr44,dc=centrederessources44,dc=org / [Add
>>>> attribute: objectclass: top, shadowAccount, inetOrgPerson, Add
>>>> attribute: sn: Maurieras, Add attribute: cn: Pascal Maurieras]
>>>> [java] javax.naming.InvalidNameException:
>>>> uid=,ou=Salaries,o=fal44,o=cdr44: [LDAP: error code 34 - invalid DN];
>>>> remaining name 'uid=,ou=Salaries,o=fal44,o=cdr44'
>>>> [java] at
>>>> com.sun.jndi.ldap.LdapCtx.processReturnCode(LdapCtx.java:2932)
>>>> [java] at
>>>> com.sun.jndi.ldap.LdapCtx.processReturnCode(LdapCtx.java:2746)
>>>> [java] at
>>>> com.sun.jndi.ldap.LdapCtx.c_createSubcontext(LdapCtx.java:779)
>>>> [java] at
>>>> com.sun.jndi.toolkit.ctx.ComponentDirContext.p_createSubcontext(ComponentDirContext.java:319)
>>>> [java] at
>>>> com.sun.jndi.toolkit.ctx.PartialCompositeDirContext.createSubcontext(PartialCompositeDirContext.java:248)
>>>> [java] at
>>>> javax.naming.directory.InitialDirContext.createSubcontext(InitialDirContext.java:183)
>>>> [java] at
>>>> org.lsc.jndi.JndiServices.apply(JndiServices.java:513)
>>>> [java] at
>>>> org.lsc.AbstractSynchronize.synchronize2Ldap(AbstractSynchronize.java:414)
>>>> [java] at
>>>> org.lsc.SimpleSynchronize.launchTask(SimpleSynchronize.java:280)
>>>> [java] at
>>>> org.lsc.SimpleSynchronize.launch(SimpleSynchronize.java:172)
>>>> [java] at org.lsc.Launcher.run(Launcher.java:128)
>>>> [java] at org.lsc.Launcher.main(Launcher.java:111)
>>>> [java] 2213 [main] ERROR
>>>> org.lsc.AbstractSynchronize.logActionError(AbstractSynchronize.java:475)
>>>> - Erreur rencontr??e sur l'identifiant
>>>> uid=,ou=Salaries,o=fal44,o=cdr44,dc=centrederessources44,dc=org:
>>>> [java]
>>>> [java] dn:
>>>> uid=,ou=Salaries,o=fal44,o=cdr44,dc=centrederessources44,dc=org
>>>> [java] changetype: add
>>>> [java] objectclass: top
>>>> [java] objectclass: shadowAccount
>>>> [java] objectclass: inetOrgPerson
>>>> [java] sn: Maurieras
>>>> [java] cn: Pascal Maurieras
>>>> [java]
>>>> ...
>>>>
>>>>
>>>> The method srcBean.getAttributeValueById("uid") seems doesn't work in
>>>> lsc.tasks.salaries.dn ?
>>>>
>>>>
>>>> My new conf is :
>>>>
>>>>
>>>> lsc.tasks.salaries.type = ldap2ldap
>>>> lsc.tasks.salaries.srcService.pivotAttrs = uid
>>>> lsc.tasks.salaries.srcService.filterId =
>>>> (&(objectClass=organizationalPerson)(uid={uid}))
>>>> lsc.tasks.salaries.srcService.filterAll =
>>>> (&(objectClass=organizationalPerson) (uid=*))
>>>> lsc.tasks.salaries.srcService.baseDn = ou=people
>>>> lsc.tasks.salaries.srcService.attrs = uid cn sn givenName mail
>>>> objectClass
>>>> lsc.tasks.salaries.srcService = org.lsc.jndi.SimpleJndiSrcService
>>>> lsc.tasks.salaries.object = org.lsc.objects.organizationalPerson
>>>> lsc.tasks.salaries.dstService.pivotAttrs = uid
>>>> lsc.tasks.salaries.dstService.filterId =
>>>> (&(objectClass=inetOrgPerson)(uid={uid}))
>>>> lsc.tasks.salaries.dstService.filterAll = (objectClass=inetOrgPerson)
>>>> lsc.tasks.salaries.dstService.baseDn = ou=Salaries,o=fal44,o=cdr44
>>>> lsc.tasks.salaries.dstService.attrs = uid cn sn givenName mail
>>>> objectClass
>>>> lsc.tasks.salaries.dstService = org.lsc.jndi.SimpleJndiDstService
>>>> lsc.tasks.salaries.dn = "uid=" + srcBean.getAttributeValueById("uid") +
>>>> ",ou=Salaries,o=fal44,o=cdr44,dc=centrederessources44,dc=org"
>>>> lsc.tasks.salaries.bean = org.lsc.beans.inetOrgPersonBean
>>>> lsc.tasks = salaries
>>>>
>>>>
>>>>
>>>
>>>
>>>
>>> Hello,
>>>
>>> it seems that srcBean.getAttributeValueById("uid") returns nothing, so
>>> DN
>>> cannot be set. Are you sure your entry in source directory has a value
>>> in
>>> uid?
>>>
>>> Cl???ment.
>>>
>>>
>>>
>>>
>> Yes uid has a value. The entrie in source directory of zimbra is :
>>
>> dn: uid=pascal.maurieras,ou=people,dc=nordet,dc=org
>> cn: Pascal Maurieras
>> displayName: Pascal Maurieras
>> givenName: Pascal
>> mail: pascal.maurieras at nordet.org
>> objectClass: organizationalPerson
>> objectClass: zimbraAccount
>> objectClass: amavisAccount
>> sn: Maurieras
>> uid: pascal.maurieras
>> zimbraId: f3b8699c-1fe9-4450-a672-030c91fbfc22
>> zimbraMailDeliveryAddress: pascal.maurieras at nordet.org
>> zimbraMailHost: mail.nordet.org
>> zimbraMailStatus: enabled
>> zimbraMailTransport: lmtp:mail.nordet.org:7025
>>
>
> Ok I think I see the problem. You source objet is organizationalPerson:
> lsc.tasks.salaries.object = org.lsc.objects.organizationalPerson
>
> But uid may not be defined in this object (it must be an attribute of
> zimbraAccount objectClass).
>
> I think you need to edit the
> src/impl/java/org/lsc/objects/organizationalPerson.java to add the "uid"
> attribute.
>
> Can someone confirm that?
Indeed, you are absolutely right Cl?ment. The "uid" attribute is not
allowed in organizationalPerson, but only in inetOrgPerson, as shown here:
http://ldap.akbkhome.com/index.php/attribute/uid.html
This is why LSC is not returning it, since it has no knowledge of uid in
organizationalPerson.
Captain, you can work around this by setting in your conf:
lsc.tasks.salaries.object = org.lsc.objects.inetOrgPerson
Jonathan
--
--------------------------------------------------------------
Jonathan Clarke - jonathan at phillipoux.net
--------------------------------------------------------------
Ldap Synchronization Connector (LSC) - http://lsc-project.org
--------------------------------------------------------------