CLFRN1254E исключение при синхронизации TDI для соединений HCL с сервером OpenLDAP

В качестве тестовой среды я хочу настроить HCL Connections 6.5 с OpenLDAP. Это должна быть более легкая альтернатива, которую можно было бы лучше автоматизировать, чем полный сервер Domino, который используется в производстве. Я создал тестовых пользователей со следующими атрибутами:

{ sn: Max, cn: Muster, uid: max, displayName: "Max Muster", userPassword: "ldap", mail: "[email protected]" }

У всех есть объектные классы person shadowAccount inetOrgPerson. После выполнения collect_dns.sh следующий DN присутствует в collect.dns

uid=max,ou=People,dc=cnx,dc=local

При синхронизации этих пользователей с ./populate_from_dn_file.sh я получил неудачную запись. В файле журнала logs/ibmdi.log показано

2020-05-21 09:41:07,703 DEBUG [org.springframework.beans.factory.support.DefaultListableBeanFactory] - Eagerly caching bean 'PostgreSQL' to allow for resolving potential circular references
2020-05-21 09:41:07,703 DEBUG [org.springframework.beans.factory.support.DefaultListableBeanFactory] - Finished creating instance of bean 'PostgreSQL'
2020-05-21 09:41:07,703 DEBUG [org.springframework.beans.factory.support.DefaultListableBeanFactory] - Creating shared instance of singleton bean 'Sybase'
2020-05-21 09:41:07,704 DEBUG [org.springframework.beans.factory.support.DefaultListableBeanFactory] - Creating instance of bean 'Sybase'
2020-05-21 09:41:07,704 DEBUG [org.springframework.beans.factory.support.DefaultListableBeanFactory] - Eagerly caching bean 'Sybase' to allow for resolving potential circular references
2020-05-21 09:41:07,704 DEBUG [org.springframework.beans.factory.support.DefaultListableBeanFactory] - Finished creating instance of bean 'Sybase'
2020-05-21 09:41:07,704 INFO  [org.springframework.jdbc.support.SQLErrorCodesFactory] - SQLErrorCodes loaded: [DB2, Derby, H2, HSQL, Informix, MS-SQL, MySQL, Oracle, PostgreSQL, Sybase]
2020-05-21 09:41:07,704 DEBUG [org.springframework.jdbc.support.SQLErrorCodesFactory] - Looking up default SQLErrorCodes for DataSource [org.springframework.jdbc.datasource.TransactionAwareDataSourceProxy@64a644f9]
2020-05-21 09:41:07,705 DEBUG [org.springframework.jdbc.datasource.DataSourceUtils] - Fetching JDBC Connection from DataSource
2020-05-21 09:41:07,705 DEBUG [org.springframework.jdbc.datasource.DataSourceUtils] - Registering transaction synchronization for JDBC Connection
2020-05-21 09:41:07,706 DEBUG [org.springframework.jdbc.support.SQLErrorCodesFactory] - Database product name cached for DataSource [org.springframework.jdbc.datasource.TransactionAwareDataSourceProxy@64a644f9]: name is 'DB2/LINUXX8664'
2020-05-21 09:41:07,706 DEBUG [org.springframework.jdbc.support.SQLErrorCodesFactory] - SQL error codes for 'DB2/LINUXX8664' found
2020-05-21 09:41:07,706 DEBUG [org.springframework.jdbc.support.SQLErrorCodeSQLExceptionTranslator] - Translating SQLException with SQL state '23502', error code '-407', message [
--- The error occurred while applying a parameter map.
--- Check the Profile.createProfile-InlineParameterMap.
--- Check the statement (update failed).
--- Cause: com.ibm.db2.jcc.c.SqlException: DB2 SQL error: SQLCODE: -407, SQLSTATE: 23502, SQLERRMC: TBSPACEID=5, TABLEID=5, COLNO=7]; SQL was [] for task [SqlMapClient operation]
2020-05-21 09:41:07,707 DEBUG [org.springframework.jdbc.datasource.DataSourceUtils] - Returning JDBC Connection to DataSource
2020-05-21 09:41:07,707 DEBUG [org.springframework.jdbc.datasource.DataSourceTransactionManager] - Initiating transaction rollback
2020-05-21 09:41:07,707 DEBUG [org.springframework.jdbc.datasource.DataSourceTransactionManager] - Rolling back JDBC transaction on Connection [org.apache.commons.dbcp.PoolableConnection@a2d822e9]
2020-05-21 09:41:07,707 DEBUG [org.springframework.jdbc.datasource.DataSourceTransactionManager] - Releasing JDBC Connection [org.apache.commons.dbcp.PoolableConnection@a2d822e9] after transaction
2020-05-21 09:41:07,707 DEBUG [org.springframework.jdbc.datasource.DataSourceUtils] - Returning JDBC Connection to DataSource
2020-05-21 09:41:07,707 ERROR [com.ibm.lconn.profiles.api.tdi.connectors.ProfileConnector] - CLFRN1254E: An error occurred while performing findEntry: max.
2020-05-21 09:41:07,708 ERROR [AssemblyLine.AssemblyLines/populate_from_dns_file.1] - !com.ibm.lconn.profiles.api.tdi.service.TDIException: CLFRN1254E: An error occurred while performing findEntry: max.!
2020-05-21 09:41:07,708 INFO  [AssemblyLine.AssemblyLines/populate_from_dns_file.1] - [callSyncDB_mod] CTGDIS274I Skipping entry from [addorUpdateDB], CTGDIS393I Throwing this exception to tell the AssemblyLine to skip the current Entry. If used in an EventHandler, this exception tells the EventHandler to skip the remaining actions..
2020-05-21 09:41:07,708 INFO  [AssemblyLine.AssemblyLines/populate_from_dns_file.1] - [callSyncDB_mod] CTGDIS075I Trying to exit TaskCallBlock.
2020-05-21 09:41:07,708 INFO  [AssemblyLine.AssemblyLines/populate_from_dns_file.1] - [callSyncDB_mod] CTGDIS076I Succeeded exiting TaskCallBlock.
2020-05-21 09:41:07,708 INFO  [AssemblyLine.AssemblyLines/populate_from_dns_file.1] - [callSyncDB_mod] CTGDIS057I Hook after_functioncall not enabled.
2020-05-21 09:41:07,708 INFO  [AssemblyLine.AssemblyLines/populate_from_dns_file.1] - CTGDIS352I Use null Behavior for outputResult.
2020-05-21 09:41:07,708 INFO  [AssemblyLine.AssemblyLines/populate_from_dns_file.1] - [callSyncDB_mod] CTGDIS504I *Result of attribute mapping*
2020-05-21 09:41:07,708 INFO  [AssemblyLine.AssemblyLines/populate_from_dns_file.1] - [callSyncDB_mod] CTGDIS505I The 'conn' object
2020-05-21 09:41:07,708 INFO  [AssemblyLine.AssemblyLines/populate_from_dns_file.1] - [callSyncDB_mod] CTGDIS003I *** Start dumping Entry
2020-05-21 09:41:07,708 INFO  [AssemblyLine.AssemblyLines/populate_from_dns_file.1] -   Operation: generic
2020-05-21 09:41:07,708 INFO  [AssemblyLine.AssemblyLines/populate_from_dns_file.1] -   Entry attributes:
2020-05-21 09:41:07,708 INFO  [AssemblyLine.AssemblyLines/populate_from_dns_file.1] -           displayName (replace):  'Max Muster'
2020-05-21 09:41:07,708 INFO  [AssemblyLine.AssemblyLines/populate_from_dns_file.1] -           $lookup_status (replace):       'success'
2020-05-21 09:41:07,708 INFO  [AssemblyLine.AssemblyLines/populate_from_dns_file.1] -           userPassword (replace): (\6c\64\61\70)
2020-05-21 09:41:07,708 INFO  [AssemblyLine.AssemblyLines/populate_from_dns_file.1] -           $lookup_operation (replace):    'lookup_user'
2020-05-21 09:41:07,708 INFO  [AssemblyLine.AssemblyLines/populate_from_dns_file.1] -           cn (replace):   'Muster'
2020-05-21 09:41:07,708 INFO  [AssemblyLine.AssemblyLines/populate_from_dns_file.1] -           $_already_lookup_secretary (replace):
2020-05-21 09:41:07,709 INFO  [AssemblyLine.AssemblyLines/populate_from_dns_file.1] -           objectClass (replace):  'person'        'shadowAccount' 'inetOrgPerson'
2020-05-21 09:41:07,709 INFO  [AssemblyLine.AssemblyLines/populate_from_dns_file.1] -           entryUUID (replace):    'e74f6eec-2f22-103a-960a-770a291c4e47'
2020-05-21 09:41:07,709 INFO  [AssemblyLine.AssemblyLines/populate_from_dns_file.1] -           $secretary_uid (replace):
2020-05-21 09:41:07,709 INFO  [AssemblyLine.AssemblyLines/populate_from_dns_file.1] -           uid (replace):  'max'
2020-05-21 09:41:07,709 INFO  [AssemblyLine.AssemblyLines/populate_from_dns_file.1] -           $manager_uid (replace):
2020-05-21 09:41:07,709 INFO  [AssemblyLine.AssemblyLines/populate_from_dns_file.1] -           $_already_lookup_manager (replace):
2020-05-21 09:41:07,709 INFO  [AssemblyLine.AssemblyLines/populate_from_dns_file.1] -           syncExisting (replace):
2020-05-21 09:41:07,709 INFO  [AssemblyLine.AssemblyLines/populate_from_dns_file.1] -           $dn (replace):  'uid=max,ou=People,dc=cnx,dc=local'
2020-05-21 09:41:07,709 INFO  [AssemblyLine.AssemblyLines/populate_from_dns_file.1] -           mail (replace): '[email protected]'
2020-05-21 09:41:07,709 INFO  [AssemblyLine.AssemblyLines/populate_from_dns_file.1] -           sn (replace):   'Max'
2020-05-21 09:41:07,709 INFO  [AssemblyLine.AssemblyLines/populate_from_dns_file.1] -           $operation (replace):   'add'

Как я могу это исправить? Судя по сообщению об ошибке, я понятия не имею, в чем проблема.

Что я уже пробовал

В этом сообщении блога есть то же error и указывает, что нам нужно установить поле mode, из-за которого ошибка была установлена ​​на null. Чтобы проверить, работает ли это, я установил это в пользовательскую функцию, вставив mode={func_mode} в map_dbrepos_from_source.properties. Кроме того, я добавил эти функции в profiles_functions.js:

function func_mode(fieldname) {
        return 'internal';
}

Это должно обрабатывать всех пользователей как внутренних и избегать проблем из-за пустых полей. С помощью журналов отладки я мог убедиться, что это значение было применено:

2020-05-21 09:41:07,587 DEBUG [AssemblyLine.AssemblyLines/populate_from_dns_file.1] - CLFRN0011I: Mapping result: mode = internal.

Еще я попробовал набрать номер проверки для полей, которых нет в моем LDAP, например guid или isManager, комментируя их функции проверки в validate_dbrepos_fields.properties:

#distinguishedName=(x != null) && (x.length() > 0) && (x.length() <= 256)
#guid=(x != null) && (x.length() > 0) && (x.length() <= 256)
#isManager=(x == null) || (x == "Y") || (x == "N")
#surname=(x != null) && (x.length() > 0) && (x.length() <= 128)

Кроме того, сопоставление с этими полями было установлено на null, чтобы избежать ошибок, получая их из записи LDAP, где они не существуют.

grep "=null" map_dbrepos_from_source.properties
alternateLastname=null
blogUrl=null
    bldgId=null
calendarUrl=null
countryCode=null
courtesyTitle=null
deptNumber=null
description=null
employeeNumber=null
employeeTypeCode=null
experience=null
faxNumber=null
freeBusyUrl=null
    floor=null
groupwareEmail=null
ipTelephoneNumber=null
jobResp=null
loginId=null
logins=null
managerUid=null
mobileNumber=null
nativeFirstName=null
nativeLastName=null
orgId=null
pagerNumber=null
pagerId=null
pagerServiceProvider=null
pagerType=null
officeName=null
preferredFirstName=null
preferredLanguage=null
preferredLastName=null
profileType=null
secretaryUid=null
shift=null
telephoneNumber=null
tenantKey=null
    timezone=null
title=null
workLocationCode=null
isManager=nul
Verify that the DB exists

Раньше у меня была такая же проблема, и я обнаружил, что базы данных не были созданы должным образом. Итак, я проверил это:

su - db2inst1
/opt/IBM/db2/V11.1/bin/db2 list db directory | grep "Database name"
 Database name                        = OPNACT
 Database name                        = METRICS
 Database name                        = SNCOMM
 Database name                        = PNS
 Database name                        = WIKIS
 Database name                        = FORUM
 Database name                        = HOMEPAGE
 Database name                        = DOGEAR
 Database name                        = PEOPLEDB
 Database name                        = MOBILE
 Database name                        = FILES
 Database name                        = XCC
 Database name                        = BLOGS

Присутствуют все базы данных. Особенно PEOPLEDB, где TDI размещает профили пользователей, полученные из LDAP. Также там кажутся таблицы:

db2 => list tables for schema EMPINST@

Table/View                      Schema          Type  Creation time             
------------------------------- --------------- ----- --------------------------
CHG_EMP_DRAFT                   EMPINST         T     2020-05-20-22.48.28.416187
COUNTRY                         EMPINST         T     2020-05-20-22.48.26.864072
DEPARTMENT                      EMPINST         T     2020-05-20-22.48.26.635113
EMPLOYEE                        EMPINST         T     2020-05-20-22.48.25.249286
EMP_DRAFT                       EMPINST         T     2020-05-20-22.48.28.079615
EMP_ROLE_MAP                    EMPINST         T     2020-05-20-22.48.29.296064
EMP_TYPE                        EMPINST         T     2020-05-20-22.48.26.973100
EMP_UPDATE_TIMESTAMP            EMPINST         T     2020-05-20-22.48.29.539973
EVENTLOG                        EMPINST         T     2020-05-20-22.48.28.764942
GIVEN_NAME                      EMPINST         T     2020-05-20-22.48.25.723208
ORGANIZATION                    EMPINST         T     2020-05-20-22.48.26.745316
PEOPLE_TAG                      EMPINST         T     2020-05-20-22.48.26.477954
PHOTO                           EMPINST         T     2020-05-20-22.48.27.097088
PHOTOBKUP                       EMPINST         T     2020-05-20-22.48.27.311065
PHOTO_GUID                      EMPINST         T     2020-05-20-22.48.27.519014
PROFILES_SCHEDULER_LMGR         EMPINST         T     2020-05-20-22.48.30.229810
PROFILES_SCHEDULER_LMPR         EMPINST         T     2020-05-20-22.48.30.340702
PROFILES_SCHEDULER_TASK         EMPINST         T     2020-05-20-22.48.29.873149
PROFILES_SCHEDULER_TREG         EMPINST         T     2020-05-20-22.48.30.108769
PROFILE_EXTENSIONS              EMPINST         T     2020-05-20-22.48.26.025818
PROFILE_EXT_DRAFT               EMPINST         T     2020-05-20-22.48.26.258480
PROFILE_LAST_LOGIN              EMPINST         T     2020-05-20-22.48.29.430376
PROFILE_LOGIN                   EMPINST         T     2020-05-20-22.48.29.051552
PROFILE_PREFS                   EMPINST         T     2020-05-20-22.48.29.183711
PROF_CONNECTIONS                EMPINST         T     2020-05-20-22.48.28.490983
PROF_CONSTANTS                  EMPINST         T     2020-05-20-22.48.28.644499
PRONUNCIATION                   EMPINST         T     2020-05-20-22.48.27.726899
SNPROF_SCHEMA                   EMPINST         T     2020-05-20-22.48.25.020502
SURNAME                         EMPINST         T     2020-05-20-22.48.25.875498
TENANT                          EMPINST         T     2020-05-20-22.48.25.084242
USER_PLATFORM_EVENTS            EMPINST         T     2020-05-20-22.48.29.659806
WORKLOC                         EMPINST         T     2020-05-20-22.48.27.953047

Это соответствует количеству таблиц из файла SQL

$ grep -i "create table" /opt/cnx-install/cnx/wizard/connections.sql/profiles/db2/createDb.sql | wc -l
32

person Lion    schedule 21.05.2020    source источник


Ответы (1)


Вы задали вопрос в мае, поэтому я полагаю, что ответ пришел слишком поздно. Для справки в будущем: Пропуск записи из [addorUpdateDB] - это сообщение по сценарию, что означает, что учетная запись не соответствует минимальным требованиям для записи в профиле. Если я правильно помню, есть 4 основных поля, без которых невозможно создать запись в профиле:

  • Эл. адрес
  • уважаемое имя
  • гид
  • uid

Увидев, что вы пропустили гид, ошибка логична. Вы должны сопоставить свой гид со своим entryUUID.

person Martijn de Jong    schedule 20.11.2020