Проблемы с LDAP-serverом в OpenLDAP

Доброе утро;

После работы над настройкой proxy-serverа LDAP для репликации данных LDAP, я получаю следующее post:

52a0b5ca send_ldap_result: conn = -1 op = 0 p = 3

52a0b5ca send_ldap_result: err = 32 соответствий = "" text = ""

52a0b5ca ==> ldap_back_add ("dc = basecorp, dc = net")

52a0b5ca => ldap_back_getconn: conn 0x7f40ea0 fetched refcnt = 1.

/ usr / libexec / slapd: ошибка searchа символа: /usr/libexec/openldap/back_ldap-2.4.so.2: undefined symbol: ldap_add_ext

Это с OpenLDAP 2.4.37 как на хосте Solaris 10 x86, так и на хосте RedHat 5.5. Оба установлены из источников, вkeyая новейший дистрибутив BDB. sourceerver – это машина, с которой я хочу извлечь данные и синхронизировать их с destserver (см. ниже конфиги).

Итак, единственное, что у меня было с двумя прошивками, с которыми я столкнулся, – это я (тьфу!). Является ли проблема, что я настроил proxy назад? Возможно, мне не разрешено добавлять запись на server LDAP? Надеюсь, один из y'all может изучить мои конфиги ниже и ответить на мой вопрос, а также многие другие там.

Мой slapd.conf для proxy:

database ldap hidden on suffix "dc=basecorp,dc=net" rootdn "cn=Manager" uri ldaps://destserver01.dest.net:636 lastmod on acl-bind bindmethod=simple binddn="cn=Manager" credentials=mypassword syncrepl rid=500 provider=ldaps://sourceserver01.dest.net:636 binddn="cn=Manager" bindmethod=simple credentials=mypassword searchbase="dc=basecorp,dc=net" filter="(objectClass=*)" scope=sub schemachecking=on type=refreshAndPersist retry="5 5 300 5" overlay syncprov 

Наконец, позвольте мне бросить грязь в воду:

Я использовал nm:

 [[email protected] ~]# nm /usr/libexec/openldap/back_ldap-2.4.so.2 | grep ldap_add U ldap_add_ext 

И есть мой недостающий символ. Wth !?

Как предполагалось, @ c4f4t0r, у вас еще less проблем с конфигурацией – у вас проблемы с построением .

TL; DR: не используйте динамические бэкэнды, они в основном разбиты, если вы не играете с processом сборки. Перейдите к обновлению ниже для ужасных подробностей …


У вас, вероятно, есть старые или не-OpenLDAP LDAP-библиотеки в стандартных полях системы. Я не считаю, что скрипт configure достаточно умен, чтобы проверить это условие, или что process сборки достаточно прочен для его обработки. Например, если старый libldap.so находится в расположении системной библиотеки, он будет использоваться в качестве предпочтительного и свеже установленного libldap.so во time выполнения. Запуск ldd против back_ldap-2.4.so должен показать это.

Возможно, вы сможете исправить это (без восстановления), добавив соответствующий directory к ​​переменной окружения LD_LIBRARY_PATH чтобы сначала find directory с самыми новыми библиотеками OpenLDAP (обязательно export переменную).

Или, исправьте его (желательно) во time сборки, запустив configure с LDFLAGS среды LDFLAGS установленной с RPATH которая будет жестко закодировать path searchа библиотеки в создаваемые вами двоичные fileы.

Вы не указали свои parameters configure или path установки и т. Д. Я использовал варианты в прошлом:

 export LDFLAGS="-L/usr/local/ssl/lib -Wl,-rpath,/usr/local/ssl/lib" 

в случае, когда я хочу использовать несистемный OpenSSL, то же самое касается использования несистемной версии BerkeleyDB. В Solaris вам может потребоваться использовать «-R» вместо «-rpath» (если вы используете gcc с компоновщиком Sun, а не с компоновщиком GNU):

 export LDFLAGS="-L/usr/local/ssl/lib -R/usr/local/ssl/lib" 

В вашем случае вам, вероятно, просто нужно установить rpath ( -Wl,-rpath или -R ), а не -L (хотя я рекомендую использовать оба варианта, когда для случаев OpenSSL и BerkeleyDB).


Обновление Вы строите:

 /configure --prefix=/usr --sysconfdir=/etc --enable-slapd --enable-crypt \ --enable-modules --enable-bdb=mod --enable-hdb=mod --enable-ldap=yes \ --enable-perl=mod --enable-overlays=mod --with-tls --with-gnu-ld 

Примечание: « --enable-ldap=yes », это статически back_ldap.so LDAP-server в slapd , он не создает динамически загружаемый back_ldap.so (т.е. --enable-ldap=mod ). Одна из возможностей заkeyается в том, что у вас есть back_ldap.so который вы пытаетесь upload на свой server, и moduleload back_ldap . Однако slapd не позволит вам загружать dynamic module, если существует static module с таким же именем, поэтому ваш binary код slapd не выглядит так, как вы описали.

Запустите slapd -VVV чтобы подтвердить статические slapd -VVV .

Предполагая, что back_ldap является статичным, вы должны иметь возможность обойти эту проблему и удалить любую moduleload и устаревать .so для хорошей меры.

У меня есть сильное подозрение, что здесь есть некоторые проблемы с libtool, ошибка dependencies или проблема с linkerом. Я могу воспроизвести это с помощью динамического back_ldap. ldap_add_ext – это действительно неразрешенный символ, который не обязательно является проблемой (из-за явного dlopen() для модhive), но этот символ не exportируется slapd . Он exportируется libldap.so , но это не зависимость от back_ldap.so и ничто другое не вызывает libldap . (Это также означает, что совет, который я дал выше, не решит проблему, поскольку это не просто так просто, как проблема с библиотечным путем).

Что происходит (т. ldap_add_ext Ошибка, которую вы viewите) заkeyается в том, что символ ldap_add_ext не разрешается, пока не потребуется («ленивая» привязка). При попытке добавить object LDAP, конечно, требуется, конечно. Затем колеса оторвались. (Если вы чувствуете желание, вы можете разбить его во time начала, exportировав LD_BIND_NOW=1 который отkeyает ленивую привязку, а затем запускает slapd , хотя коэффициенты – это другой символ, который отkeyит его.)

В настоящее time самым простым вариантом является работа со статическим back_ldap ( --enable-ldap=yes и, возможно, make clean && make depend && make install чтобы быть уверенным, что slapd правильно построен). Менее простой вариант – использовать LD_PRELOAD=/usr/lib/libldap.so LD_PRELOAD=/usr/lib/libldap_r.so для решения проблемы зависимости и перекрестных пальцев, надеясь, что не имеет каких-то нечетных побочных эффектов ,


ОК, эта старая электронная почта libldap_r.a проблему: http://www.openldap.org/lists/openldap-software/200211/msg00469.html slapd по умолчанию связан со статическим libldap_r.a , это ограничивает символы, которые будут доступны к тем, которые известны во time соединения . Поскольку динамические модули загружаются во time выполнения с помощью dlopen() компоновщик не имеет viewимости своих требований (символов / библиотек).

Можно было бы разумно заkeyить, что динамическое построение (некоторых) бэкэндов в течение некоторого времени в значительной степени нарушено.

Таким образом, либо не используйте динамические бэкэнды (рекомендуется), либо выдумывайте сборку (не рекомендуется) с чем-то вроде:

 make depend && make rm servers/slapd/slapd LTSTATIC="" make -e # alternative to editing the Makefile make install 

Это связывает slapd с libldap_r.so вы только что создали вместо .a , поэтому все символы могут быть загружены по мере необходимости (это также делает slapd на 15% меньше на диске). Я не запускаю операционный server LDAP с этим, YMMV. Должны быть какие-то похожие или альтернативные решения, используемые дистрибутивами …

Это не проблема конфигурации, ошибка ясна, говорит вам, openldap ищут функцию в библиотеке /usr/libexec/openldap/back_ldap-2.4.so.2, которой less.

На redhat 5, почему вы не используете стандартный ldap в formatе rpm?

  • что это значит ? openldap: TLS: less разблокированного certificateа для certificateа <субъект certificateа>
  • ldap_modify: Недостаточный доступ (50) при смене пароля
  • Настройте selinux, чтобы разрешить openldap на CentOS 6.4
  • Dovecot + OpenLDAP
  • Настройка Jenkins с LDAP: параметр «Root DN»
  • OpenLDAP дает повторяющуюся ошибку attributeType
  • openLDAPServer: ldapsearch, ошибка ldapadd в ubuntu 12.04
  • альтернативная альтернатива dpkg-reconfigure slapd
  • Базовая установка openldap с использованием конфигурации slapd.d
  • Как переместить directory базы данных для Red Hat Directory Server 9.0
  • Как продлить certificate SSL Ubuntu OpenLDAP с иstackшим сроком действия
  • Interesting Posts
    Давайте будем гением компьютера.