Thank you Clément! That did solve that error but it’s still not working completely right.
I have three users in the database right now. If I run lsc again after the first sync, I get a list of all the attributes for all the users, indicating that nothing will be modified. That makes sense. But if I change the database value for userid_db from user6 to usersix, then re-run lsc, I only see references to the other two users and no modifications are made. But the last line does say: All entries: 3, If I change usersix back to user6, and then re-run, everything behaves normally including modifications to other fields for user6. Changing the userid_db and another field also results in no modifications being made. I’ve since gone through and removed the uppercase letters from gnuniqueid EVERYWHERE, including the getOneFilter and the attribute and objectclass in the schema. It didn’t seem to make any difference. So something is still blocking me from changing the userid_db value and getting that to sync to OpenLDAP. Even though the pivot is gnuniqueid. Do you have any idea if this can be made to work? Thank you again for your help! On Jul 16, 2014, at 12:44 PM, Clément OUDOT <[email protected]> wrote: > I think you just need to lowercase the attribute name inside SQL macro: > #gnUniqueId# -> #gnuniqueid# > > Clément. > > > 2014-07-16 11:49 GMT+02:00 Brad Firestone <[email protected]>: > Hi All, > > I’m still trying to get LSC to work correctly for my needs. I’m trying to > sync data from a database to OpenLDAP. > If I set it up with the “default” settings that are used in the examples, it > works fine. > This is using SELECT userid_db AS uid FROM ft_form_6 WHERE userid_db = #uid# > etc... > All the values in the SQL Map follow this format, and the lsc.xml file has > <pivotAttributes>uid</pivotAttributes>. > > However, with this arrangement, I can’t ever change the database value of > userid_db. (This might be needed if the user changes their name.) > If I change the value in userid_db, then I get a second record created in > OpenLDAP. > Because the user’s password is stored and managed through LDAP, the database > only has the original password. So they > would have to change their password after the userid_db value is changed. > (The clean function does remove the original > record, so we don’t end up with multiple accounts for one user.) > > What I planned to do was to use a unique identifier field in the database as > the field that would never change. This would be the pivot. > That sould allow me to change the username and retain the original account in > OpenLDAP, including the current password. > However, when I try to substitute the values userid_db and uid with unid_db > and gnUniqueId, I get the following error: > Sychronization aborted because no source object has been found ! > > The only thing I’m changing between successful runs and getting this error > are the settings in the SQL Map, and the <task>. > Here are those files that give the error: > —————————————— > > <sqlMap namespace="GNPerson"> > > <select id="getGNPerson" resultClass="java.util.HashMap" > parameterClass="java.util.Map"> > SELECT > unid_db AS gnUniqueId, > userid_db AS uid, > mail_db AS mail, > userPassword_db AS userPassword, > displayName_db AS displayName, > description_db AS description, > vidyoDisplayName_db AS vidyoDisplayName, > vidyoUserType_db AS vidyoUserType, > vidyoUserGroup_db AS vidyoUserGroup, > vidyoUserLocation_db AS vidyoUserLocation, > chatUserType_db AS chatUserType, > chatGroups_db AS chatGroups > FROM ft_form_6 > WHERE unid_db = #gnUniqueId# > </select> > > <select id="getGNPersonClean" resultClass="java.util.HashMap" > parameterClass="java.util.Map"> > SELECT unid_db AS gnUniqueId > FROM ft_form_6 > WHERE unid_db = #gnUniqueId# > </select> > > <select id="getGNPersonList" resultClass="java.util.HashMap"> > SELECT unid_db AS gnUniqueId > FROM ft_form_6 > </select> > > </sqlMap> > > ——————————————————————— > > <tasks> > <task> > <name>db2ldap-users-task</name> > <bean>org.lsc.beans.SimpleBean</bean> > <databaseSourceService> > <name>db2ldap-db-src</name> > <connection reference="formtools-db-source-conn"/> > <requestNameForList>getGNPersonList</requestNameForList> > <requestNameForObject>getGNPerson</requestNameForObject> > <requestNameForClean>getGNPersonClean</requestNameForClean> > </databaseSourceService> > > <ldapDestinationService> > <name>db2ldap-ldap-dest</name> > <connection reference="openldap-dest-conn"/> > <baseDn>ou=people,dc=mydomain,dc=org</baseDn> > <pivotAttributes> > <string>gnUniqueId</string> > </pivotAttributes> > <fetchedAttributes> > <string>gnUniqueId</string> > <string>uid</string> > <string>mail</string> > <string>userPassword</string> > <string>displayName</string> > <string>description</string> > <string>vidyoDisplayName</string> > <string>vidyoUserType</string> > <string>vidyoUserGroup</string> > <string>vidyoUserLocation</string> > <string>chatUserType</string> > <string>chatGroups</string> > <string>objectClass</string> > </fetchedAttributes> > <getAllFilter>(objectClass=gnPerson)</getAllFilter> > > <getOneFilter>(&(objectClass=gnPerson)(gnUniqueId={gnUniqueId}))</getOneFilter> > </ldapDestinationService> > > <propertiesBasedSyncOptions> > <mainIdentifier>"uid=" + srcBean.getDatasetFirstValueById("uid") + > ",ou=people,dc=mydomain,dc=org"</mainIdentifier> > <defaultDelimiter>;</defaultDelimiter> > <defaultPolicy>FORCE</defaultPolicy> > <conditions> > <create>true</create> > <update>true</update> > <delete>true</delete> > <changeId>false</changeId> > </conditions> > > <dataset> > <name>objectClass</name> > <policy>FORCE</policy> > <forceValues> > <string>"gnPerson"</string> > <string>"top"</string> > </forceValues> > <delimiter>,</delimiter> > </dataset> > > <dataset> > <name>uid</name> > <forceValues> > > <string>js:srcBean.getDatasetFirstValueById("uid").toLowerCase()</string> > </forceValues> > </dataset> > > <dataset> > <name>userPassword</name> > <policy>KEEP</policy> > <forceValues> > <string>"{SHA}" + SecurityUtils.hash(SecurityUtils.HASH_SHA1, > srcBean.getDatasetFirstValueById("userPassword"))</string> > </forceValues> > </dataset> > > </propertiesBasedSyncOptions> > </task> > </tasks> > > ——————————————————————— > Sample Table Entry: > > Field Name Value > ———————————————— > submission_id 10111 > mail_db [email protected] > userid_db firstuser > userPassword_db secret > displayName_db First User > description_db testing > ……. > chatGroups_db users > unid_db 10111 > > ——————————————— > When using userid_db and uid, all the data syncs fine, including unid_db > syncing to gnUniqueId. > Does anyone have any ideas why this is failing? When I substitute the field: > description_db and description, > it doesn’t give me this error either. Both fields are type varchar. > > Thank you for any help you can provide! > Brad > _______________________________________________________________ > 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

