Сбой в библиотеке openldap при использовании функции starttls ldap_start_tls_s (ldap_int_tls_start) - PullRequest
0 голосов
/ 03 октября 2019

Я использую openldap-servers-2.4.40-16 на сервере CentOS 6 и связываю его с помощью флага -lldap при сборке в C ++. Я использую функцию startTLS (ldap_start_tls_s) для запуска соединения TLS через порт ldap (389). Эта функция прекрасно работает во время нашего тестирования, но во время выполнения происходит прерывистый сбой.

CALLSTCK: (Static functions may not be resolved correctly, as they are resolved to the nearest symbol)
  [0] 0x00002AAAB2590FCC sqloPGRPRegisterOneCrash + 0x20C
  [1] 0x00002AAAB26EE312 sqloEDUCodeTrapHandler + 0xB22
  [2] 0x00002AAAAACDD7E0 /lib64/libpthread.so.0 + 0xF7E0
  [3] 0x000000367380F8D0 PR_GetIdentitiesLayer + 0x30
  [4] 0x00002AAAE1AFFF0F /usr/lib64/libssl3.so + 0x2BF0F
  [5] 0x00002AAAE1B030E5 /usr/lib64/libssl3.so + 0x2F0E5
  [6] 0x000000367D83719D /lib64/libldap-2.4.so.2 + 0x3719D
  [7] 0x000000367D835754 /lib64/libldap-2.4.so.2 + 0x35754
  [8] 0x000000367D8358D5 /lib64/libldap-2.4.so.2 + 0x358D5
  [9] 0x000000367D835ADE ldap_int_tls_start + 0x6E
  [10] 0x000000367D835C4E ldap_start_tls_s + 0xBE
  [11] 0x00002AAAE16A6F7F initLDAP + 0x34F
  [12] 0x00002AAAE16A5DC6 _Z10FindGroupsPKciS0_iS0_iiS0_iPviiS0_iPS1_PiPPcS3_ + 0x293
  [13] 0x00002AAAB0C94775 _Z16getgroupsforuserPciS_iS_iiS_iPviiS_iP14sqlo_mem_descrP17group_functions_1 + 0x365
  [14] 0x00002AAAB0C94050 _Z21sqlexGetGroupsForUserPciS_iS_iiS_iPviiS_iP14sqlo_mem_descrP9sqlf_kcfd + 0x2B0
  [15] 0x00002AAAB0CE48A1 _Z20sqlexSlsSystemAccrdbP14db2UCinterface + 0x121
  [16] 0x00002AAAB0CD27F9 _Z20sqlexEngAuthenticateP14db2UCinterface + 0xF49
  [17] 0x00002AAAB08B75A0 _ZN14sqeApplication13AppLocalStartEP14db2UCinterface + 0x370
  [18] 0x00002AAAB0C5559F _Z11sqlelostWrpP14db2UCinterface + 0x4F

Ниже приведен фрагмент кода, который я использую:

   switch( rc )
   {
      case LDAP_SUCCESS:
           break;

      case LDAP_CONNECT_ERROR:
           ldap_rc = ldap_get_option( *ld, LDAP_OPT_DIAGNOSTIC_MESSAGE, (void*)&ldapErrMsg);
           if (ldap_rc != LDAP_SUCCESS) 
           {
             snprintf(dumpMsg, MAX_ERROR_MSG_SIZE, "InitLDAP: ldap_start_tls_s() CONNECT AND MEMORY ERROR ldap_rc = %d",
                                       ldap_rc );
             *errorMsg = strdup(dumpMsg);
             rc = PLUGIN_NETWORKERROR;
             goto exit;
           }
           snprintf( dumpMsg, MAX_ERROR_MSG_SIZE, "InitLDAP: ldap_start_tls_s() %s uri %s\n", ldapErrMsg, uri);
           *errorMsg = strdup(dumpMsg);
           rc = PLUGIN_NETWORKERROR;
           goto exit;

      default:
           snprintf( dumpMsg, MAX_ERROR_MSG_SIZE, "InitLDAP: ldap_start_tls_s(): %s\n", ldap_err2string(rc) );
           goto exit;
};

Ошибка прерывистая, котораячто делает его очень трудным для отладки, любая помощь очень ценится.

...