lsc icon indicating copy to clipboard operation
lsc copied to clipboard

when using mysql -> LDAP, numeric results in mysql cause errors

Open styx-tdo opened this issue 2 months ago • 0 comments

Query for "mailUidNumber" which is integer:

Nov 07 08:30:36 - ERROR - Error while adding entry uid=10221,xxxxxxxxxxxxx,dc=xx in directory :javax.naming.directory.InvalidAttributeValueException: Malformed 'mailUidNumber' attribute value; remaining name 'uid=10221,xxxxxxxxxxl'

When I change the underlying view to:

cast(`mail_user`.`mailuser_id` as char charset utf8mb4) AS `mailUidNumber`,

this works as expected.

lsc should not be dependent on the column type of the database.

REPRODUCE: Create a mysql table with mailuser_id as an int(11)

Sync that to ldap

                    <bean>org.lsc.beans.SimpleBean</bean>
                    <databaseSourceService>
                            <name>maildb-src2</name>
                            <connection reference="mail-sql"/>
                            <requestNameForList>getInetOrgPersonList</requestNameForList>
                            <requestNameForObject>getInetOrgPerson</requestNameForObject>
                            <requestNameForClean>getInetOrgPersonClean</requestNameForClean>
                    </databaseSourceService>
                    <ldapDestinationService>
                            <name>mailldap-dst2</name>
                            <connection reference="mail-ldap"/>
                            <baseDn>ou=mail,dc=heiss,dc=it</baseDn>
                            <pivotAttributes>
                                    <string>uid</string>
                            </pivotAttributes>
                            <fetchedAttributes>
                                    <string>description</string>
                                    <string>cn</string>
                                    <string>sn</string>
                                    <string>uid</string>
                                    <string>userPassword</string>
                                    <string>objectClass</string>
                                    <string>mail</string>
                                    <string>mailAlias</string>
                                    <string>mailEnabled</string>
                                    <string>mailUidNumber</string>
                                    <string>mailQuota</string>
                            </fetchedAttributes>
                            <getAllFilter>(objectClass=inetOrgPerson)</getAllFilter>
                            <getOneFilter>(&amp;(objectClass=inetOrgPerson)(uid={uid}))</getOneFilter>
                    </ldapDestinationService>
                    <propertiesBasedSyncOptions>
                            <!-- <mainIdentifier>"mail=" + srcBean.getDatasetFirstValueById("mail") + ",ou=" + srcBean.getDatasetFirstValueById("groupid") + ",ou=mail,dc=heiss,dc=it"</mainIdentifier> -->
                            <mainIdentifier>"uid=" + srcBean.getDatasetFirstValueById("uid") + ",ou=" + srcBean.getDatasetFirstValueById("ou") + ",ou=mail,dc=heiss,dc=it"</mainIdentifier>
                            <defaultDelimiter>;</defaultDelimiter>
                            <defaultPolicy>FORCE</defaultPolicy>
                            <dataset>
                                    <name>objectClass</name>
                                    <policy>FORCE</policy>
                                    <forceValues>
                                            <string>"top"</string>
                                            <string>"person"</string>
                                            <string>"organizationalPerson"</string>
                                            <string>"inetOrgPerson"</string>
                                            <string>"PostfixBookMailAccount"</string>
                                    </forceValues>
                                    <delimiter>,</delimiter>
                            </dataset>
                    </propertiesBasedSyncOptions>
            </task>




            <databaseConnection>
                    <name>mail-sql</name>
                    <url>jdbc:mariadb://xxxxxx3306/yyyyyy</url>
                    <username>ldap</username>
                    <password>yyyyyyyyyyyyy</password>
                    <driver>org.mariadb.jdbc.Driver</driver>
            </databaseConnection>
<select id="getInetOrgPerson" resultClass="java.util.HashMap" parameterClass="java.util.Map">
	Select *
	FROM ldap
	WHERE uid LIKE #uid# 
</select>

<select id="getInetOrgPersonClean" resultClass="java.util.HashMap" parameterClass="java.util.Map">
	Select
		 uid
	FROM ldap 
	WHERE uid LIKE #uid#
</select>

<select id="getInetOrgPersonList" resultClass="java.util.HashMap">
	SELECT mail, uid
	FROM ldap
</select>

styx-tdo avatar Nov 07 '25 08:11 styx-tdo