php.net |  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Bug #76433 Build failure with macOS libldap.dylib
Submitted: 2018-06-08 22:50 UTC Modified: 2019-04-29 07:49 UTC
Votes:6
Avg. Score:3.8 ± 0.9
Reproduced:4 of 4 (100.0%)
Same Version:2 (50.0%)
Same OS:3 (75.0%)
From: kevin dot abel dot 0 at gmail dot com Assigned: mcmic (profile)
Status: Assigned Package: LDAP related
PHP Version: 7.3.0alpha1 OS: macOS
Private report: No CVE-ID: None
 [2018-06-08 22:50 UTC] kevin dot abel dot 0 at gmail dot com
Description:
------------
Trying to build PHP 7.3.0alpha1 on macOS 10.13 with the ldap extension results in failure during linking. The macOS library for ldap (/usr/lib/libldap.dylib) does not contain some of the new symbols used in the 7.3 ldap changes.

Test script:
---------------
Output from configure script run is available at https://gist.github.com/kabel/28ffd286da24d39ad7a6062d7cf27564#file-01-configure

Output from the make process is available at https://gist.github.com/kabel/28ffd286da24d39ad7a6062d7cf27564#file-02-make

Expected result:
----------------
Build success or configure failure

Actual result:
--------------
Configure success, build failure at link.

make: *** [sapi/cli/php] Error 1
Undefined symbols for architecture x86_64:
  "_ldap_create_passwordpolicy_control", referenced from:
      _zif_ldap_exop_passwd in ldap.o
  "_ldap_create_sort_control_value", referenced from:
      __php_ldap_controls_from_array in ldap.o
  "_ldap_create_vlv_control_value", referenced from:
      __php_ldap_controls_from_array in ldap.o
  "_ldap_parse_passwordpolicy_control", referenced from:
      __php_ldap_controls_to_array in ldap.o
ld: symbol(s) not found for architecture x86_64

Patches

macos-ldap (last revision 2018-06-11 17:57 UTC by kevin dot abel dot 0 at gmail dot com)

Pull Requests

History

AllCommentsChangesGit/SVN commitsRelated reports
 [2018-06-09 13:51 UTC] cmb@php.net
-Assigned To: +Assigned To: mcmic
 [2018-06-09 13:51 UTC] cmb@php.net
Côme, could you please have a look at this issue?
 [2018-06-11 07:39 UTC] mcmic@php.net
First, the documentation says OpenLDAP 2.4 or newer is needed: https://secure.php.net/manual/en/ldap.requirements.php

There was a discussion and a patch to make it build with solaris LDAP but it was for PHP 5.6 IIRC, not sure it’s still building: https://php.markmail.org/thread/mke5rclimfzvtaza#query:+page:1+mid:22llnz6vwjpl6sl5+state:results

Which changes would be needed to make it build with libldap.dylib?
 [2018-06-11 18:01 UTC] kevin dot abel dot 0 at gmail dot com
libldap on macOS is a fork of OpenLDAP, claiming to be 2.4.28, although there are clearly some pieces of the API that have been taken out or disabled. I added a patch to the bug that just adds some configure checks to these functions and add guards around them in the source. It may not be the best solution, but I was at least able to fully compile with it.
 [2018-07-24 11:06 UTC] php dot mac75 at yahoo dot com
Sorry to intervene but is using openldap from homebrew an option/alternative ?
 [2018-07-25 08:47 UTC] jan dot a dot viljanen at gmail dot com
It is but currently https://bugs.php.net/bug.php?id=76403 is blocking the project from doing just that. Can also add that if you look in the ldap.h header file macOS provides it states

LDAP_F( int )
ldap_parse_passwordpolicy_control LDAP_P((
        LDAP *ld,
        LDAPControl *ctrl,
        ber_int_t *expirep,
        ber_int_t *gracep,
        LDAPPasswordPolicyError *errorp )) __OSX_AVAILABLE_BUT_DEPRECATED_MSG(__MAC_10_0, __MAC_10_11, __IPHONE_NA, __IPHONE_NA, "use OpenDirectory Framework");

so it looks like they are trying to get people to not use openldap.
 [2018-11-01 08:06 UTC] heiglandreas@php.net
Might that be connected to https://bugs.php.net/bug.php?id=77005?
 [2019-04-25 20:34 UTC] ronyan at outlook dot com
The suggestion:
"LDAP_F( int )
ldap_parse_passwordpolicy_control LDAP_P((
        LDAP *ld,
        LDAPControl *ctrl,
        ber_int_t *expirep,
        ber_int_t *gracep,
        LDAPPasswordPolicyError *errorp )) __OSX_AVAILABLE_BUT_DEPRECATED_MSG(__MAC_10_0, __MAC_10_11, __IPHONE_NA, __IPHONE_NA, "use OpenDirectory Framework");
"

Do not work with 
System Version: OS X 10.11.6
Kernel Version: Darwin 15.6.0

Applied in files below, but without success:


/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift-migrator/sdks/MacOSX.sdk/usr/include/ldap.h
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/ldap.h
/usr/include/ldap.h
/usr/local/Cellar/openldap/2.4.47/include/ldap.h
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/ldap.h

openLdap version: 
$OpenLDAP: ldapmodify 2.4.28 (Oct  3 2015 17:40:55)
 [2019-04-26 13:03 UTC] ronyan at outlook dot com
Hello,

The patch macos-ldap (last revision 2018-06-11 17:57 UTC by kevin dot abel dot 0 at gmail dot com) do not work with :
System Version: OS X 10.11.6
Kernel Version: Darwin 15.6.0

php-7.3.4.tar.gz
httpd-2.4.39.tar.gz
OpenLDAP: ldapmodify 2.4.28 (Oct  3 2015 17:40:55)


Error:
Undefined symbols for architecture x86_64:
  "_ldap_create_sort_control_value", referenced from:
      __php_ldap_control_from_array in ldap.o
  "_ldap_create_vlv_control_value", referenced from:
      __php_ldap_control_from_array in ldap.o
ld: symbol(s) not found for architecture x86_64


It's seems only solves the issue about "_ldap_create_passwordpolicy_control" and "ldap_parse_passwordpolicy_control" symbols.
 [2019-04-29 07:49 UTC] mcmic@php.net
ldap_create_sort_control_value definitely exists in OpenLDAP 2.4.28, are you sure this is what you are linking against?
 
PHP Copyright © 2001-2024 The PHP Group
All rights reserved.
Last updated: Sat Dec 14 09:01:27 2024 UTC