Re: FreeBSD php{4,5} w/ LDAP + SSL/TLS ldap_start_tls()

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



File a bug at http://bugs.php.net and someone will take a look.

Brian A. Seklecki wrote:
> 
> Okay, problem fixed:
> 
> 1) cd /usr/{ports,pkgsrc}/{net/php5-ldap,databases/php-ldap} on
> {Free,Net}BSD respectively
> 
> 2) sudo make configure
> 
> 3) sudo vim
> On FreeBSD
> work/php-5.0.4/ext/ldap/config.h or..
> work/php-4.4.0/ext/ldap/config.h
> 
> on NetBSD:
> work/php-5.0.4/ext/ldap/config.h
> 
> 4) Change:
> /* Define to 1 if you have the `ldap_start_tls_s' function. */
> /* #undef HAVE_LDAP_START_TLS_S */
> 
>    To:
> 
> #define HAVE_LDAP_START_TLS_S 1
> 
> 5) sudo make install
> 
> 6) carry on pretending that your employee data is secure
> 
> $ cat ~/public_html/testtls.php
> <?
> 
> if (function_exists('ldap_start_tls'))
>                echo "I see it!\n";
> 
> ?>
> 
> [0] seklecki@blah:/$ php ~/public_html/testtls.php
> I see it!
> 
> 7) ...sit around on your day off and try to determine how the following
> piece of code from configure.sh was [ever] supposed to determine if
> ldap_start_tls_s() was a valid function w/o including arguments
> -I/usr/local/include, -L/usr/local/lib to gcc(1) or #including ldap.h or
> lber.h, and wonder who is responsible >:}
> 
> *cough*
> 
> http://chora.php.net/diff.php/php-src/ext/ldap/config.m4?php=3c934ff67902f7c5ce419c901b82c77e&r1=1.23&r2=1.24&ty=h&num=10
> 
> 
> *cough* ... 8-) ...i dunno, maybe it "just works(r)" on Linux >:}
> 
> 
> | /* confdefs.h.  */
> |
> | #define PACKAGE_NAME ""
> | #define PACKAGE_TARNAME ""
> | #define PACKAGE_VERSION ""
> | #define PACKAGE_STRING ""
> | #define PACKAGE_BUGREPORT ""
> | #define COMPILE_DL_LDAP 1
> | #define HAVE_LDAP 1
> | #define HAVE_3ARG_SETREBINDPROC 1
> | /* end confdefs.h.  */
> | /* Define ldap_start_tls_s to an innocuous variant, in case <limits.h>
> declares ldap_start_tls_s.
> |    For example, HP-UX 11i <limits.h> declares gettimeofday.  */
> | #define ldap_start_tls_s innocuous_ldap_start_tls_s
> | /* System header to define __stub macros and hopefully few prototypes,
> |     which can conflict with char ldap_start_tls_s (); below.
> |     Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
> |     <limits.h> exists even on freestanding compilers.  */
> |
> | #ifdef __STDC__
> | # include <limits.h>
> | #else
> | # include <assert.h>
> | #endif
> |
> | #undef ldap_start_tls_s
> |
> | /* Override any gcc2 internal prototype to avoid an error.  */
> | #ifdef __cplusplus
> | extern "C"
> | {
> | #endif
> | /* We use char because int might match the return type of a gcc2
> |    builtin and then its argument prototype would still apply.  */
> | char ldap_start_tls_s ();
> | /* The GNU C library defines this for functions which it implements
> |     to always fail with ENOSYS.  Some functions are actually named
> |     something starting with __ and the normal name is an alias.  */
> | #if defined (__stub_ldap_start_tls_s) || defined
> (__stub___ldap_start_tls_s)
> | choke me
> | #else
> | char (*f) () = ldap_start_tls_s;
> | #endif
> | #ifdef __cplusplus
> | }
> | #endif
> |
> | int
> | main ()
> | {
> | return f != ldap_start_tls_s;
> |   ;
> |   return 0;
> | }
> 
> 
> 
> ~BAS
> 
> On Sat, 3 Sep 2005, Brian A. Seklecki wrote:
> 
>>
>> Rasmus / all:
>>
>> I'll revert to that as path of last resort.  The FreeBSD port
>> mechanism for installing php extensions is administratively superior
>> to maintaining source installations manually.  Apache/PHP/LDAP/SSL/SQL
>> cocktails on anything other than Linux are way too convuluted to not
>> be using Ports, especially with the number of security advisories that
>> come out.  Without the XML vulnerability checklist from 'portaudit',
>> you might as well grab your ankles.
>>
>> Anyway, It's not FreeBSD ports.  The damn configure script in
>> php{4,5}???/ext/ldap/ per the following:
>>
>> Update:  The problem persists elsewhere than FreeBSD 5.3/i386.  It's also
>> happening on a NetBSD/i386 host with a -current (cvs -rHEAD)
>> pkgsrc/databases/{,php-ldap-}openldap/
>>
>> Okay, I traced it down:
>>
>> in /usr/ports/net/php5-ldap/work/php-5.0.4/ext/ldap/configure ->
>> conftest -> ldap_start_tls_s();
>> ldap_start_tls_s return false -> ac_cv_func_ldap_start_tls_s=no in
>> config.log
>> config.log -> ldap.h -> #undef HAVE_LDAP_START_TLS_S
>> config.c -> HAVE_LDAP_START_TLS_S -> PHP_FE(ldap_start_tls, NULL)
>>
>> ...therefore ldap_start_tls isn't registered.  The question is why the
>> conftest.c in GNU autoconf is failing with:
>>
>> configure:5048: cc -o conftest -O -pipe -march=pentium3   conftest.c  >&5
>> /var/tmp//cc63HySI.o(.text+0x12): In function `main':
>> : undefined reference to `ldap_start_tls_s'
>>
>> ...Which is odd since:
>>
>>
>> php4$ grep -ir ldap_start_tls_s lib/*
>> Binary file lib/libldap-2.2.so matches
>> Binary file lib/libldap-2.2.so.7 matches
>> Binary file lib/libldap.a matches
>> Binary file lib/libldap.so matches
>> Binary file lib/libldap_r-2.2.so matches
>> Binary file lib/libldap_r-2.2.so.7 matches
>> Binary file lib/libldap_r.a matches
>> Binary file lib/libldap_r.so matches
>> Binary file lib/pam_ldap.so matches
>>
>> php4$ grep -ir ldap_start_tls_s include/*
>> include/ldap.h:ldap_start_tls_s LDAP_P((
>> include/php/main/php_config.h:/* Define if you have the
>> ldap_start_tls_s function.  */
>> include/php/main/php_config.h:/* #undef HAVE_LDAP_START_TLS_S */
>>
>>
>> $ nm lib/libldap-2.2.so.7|grep -i start_tls
>> 0002b770 T ldap_start_tls_s
>>
>> and...
>>
>> php5$ grep -ir ldap_start_tls_s lib/*
>> Binary file lib/libldap-2.2.so matches
>> Binary file lib/libldap-2.2.so.7 matches
>> Binary file lib/libldap.a matches
>> Binary file lib/libldap.so matches
>> Binary file lib/libldap_r-2.2.so matches
>> Binary file lib/libldap_r-2.2.so.7 matches
>> Binary file lib/libldap_r.a matches
>> Binary file lib/libldap_r.so matches
>>
>> php5$ grep -ir ldap_start_tls_s include/*
>> include/ldap.h:ldap_start_tls_s LDAP_P((
>> include/php/main/php_config.h:/* Define if you have the
>> ldap_start_tls_s function.  */
>> include/php/main/php_config.h:/* #undef HAVE_LDAP_START_TLS_S */
>>
>> $ nm lib/libldap-2.2.so.7|grep -i start_tls
>> 0002b770 T ldap_start_tls_s
>>
>> ..from 'make configure' in ports/net/php5-ldap/
>>
>> checking for LDAP support... yes, shared
>> checking for LDAP Cyrus SASL support... no
>> checking for 3 arg ldap_set_rebind_proc... yes
>> checking for ldap_parse_reference... no
>> checking for ldap_start_tls_s... no
>> checking for ldap_bind_s... yes
>>
>>
>> ...from config.log:
>>
>> configure:5048: cc -o conftest -O -pipe -march=pentium3   conftest.c  >&5
>> /var/tmp//cc63HySI.o(.text+0x12): In function `main':
>> : undefined reference to `ldap_start_tls_s'
>> configure:5051: $? = 1
>> configure: failed program was:
>> #line 5011 "configure"
>> #include "confdefs.h"
>> /* System header to define __stub macros and hopefully few prototypes,
>>    which can conflict with char ldap_start_tls_s (); below.  */
>> #include <assert.h>
>> /* Override any gcc2 internal prototype to avoid an error.  */
>> #ifdef __cplusplus
>> extern "C"
>> #endif
>> /* We use char because int might match the return type of a gcc2
>>   builtin and then its argument prototype would still apply.  */
>> char ldap_start_tls_s ();
>> char (*f) ();
>> #ifdef F77_DUMMY_MAIN
>> #  ifdef __cplusplus
>>     extern "C"
>> #  endif
>>   int F77_DUMMY_MAIN() { return 1; }
>> #endif
>> int
>> main ()
>> {
>> /* The GNU C library defines this for functions which it implements
>>    to always fail with ENOSYS.  Some functions are actually named
>>    something starting with __ and the normal name is an alias.  */
>> #if defined (__stub_ldap_start_tls_s) || defined
>> (__stub___ldap_start_tls_s)
>> choke me
>> #else
>> f = ldap_start_tls_s;
>> #endif
>>
>>  ;
>>  return 0;
>> }
>> configure:5067: result: no
>> configure:5414: checking for ldap_bind_s
>> configure:5457: cc -o conftest -O -pipe -march=pentium3  
>> -R/usr/local/lib -L/usr/local/lib -lldap -R/usr/local/lib -
>> L/usr/local/lib -llber  conftest.c  >&5
>> configure:5460: $? = 0
>> configure:5463: test -s conftest
>> configure:5466: $? = 0
>> configure:5476: result: yes
>> configure:5583: checking for ld used by GCC
>> configure:5646: result: /usr/bin/ld
>> configure:5655: checking if the linker (/usr/bin/ld) is GNU ld
>> GNU ld version 2.15 [FreeBSD] 2004-05-23
>> configure:5667: result: yes
>> configure:5672: checking for /usr/bin/ld option to reload object files
>> configure:5679: result: -r
>> configure:5684: checking for BSD-compatible nm
>> configure:5720: result: nm
>> configure:5723: checking for a sed that does not truncate output
>> configure:5805: result: /usr/bin/sed
>> configure:5808: checking whether ln -s works
>> configure:5812: result: yes
>> configure:5819: checking how to recognise dependent libraries
>> configure:6001: result: pass_all
>> configure:6013: checking command to parse nm output
>> configure:6097: cc -c -O -pipe -march=pentium3  conftest.c >&5
>> configure:6100: $? = 0
>> configure:6104: nm conftest.o \| sed -n -e 's/^.*[
>> ]\([ABCDGISTW][ABCDGISTW]*\)[   ][      ]*\(\)\([_A-Za-z][_A-
>> Za-z0-9]*\)$/\1 \2\3 \3/p' \> conftest.nm
>> configure:6107: $? = 0
>> configure:6159: cc -o conftest -O -pipe -march=pentium3   conftest.c
>> conftstm.o >&5
>> configure:6162: $? = 0
>> configure:6206: result: ok
>> configure:6215: checking how to run the C preprocessor
>> configure:6241: cc -E  conftest.c
>> configure:6247: $? = 0
>> configure:6274: cc -E  conftest.c
>> configure:6271:28: ac_nonexistent.h: No such file or directory
>> configure:6280: $? = 1
>> configure: failed program was:
>> #line 6270 "configure"
>> #include "confdefs.h"
>> #include <ac_nonexistent.h>
>> configure:6317: result: cc -E
>> configure:6332: cc -E  conftest.c
>> configure:6338: $? = 0
>> configure:6365: cc -E  conftest.c
>> configure:6362:28: ac_nonexistent.h: No such file or directory
>> configure:6371: $? = 1
>> configure: failed program was:
>> #line 6361 "configure"
>> #include "confdefs.h"
>> #include <ac_nonexistent.h>
>> configure:6411: checking for ANSI C header files
>> configure:6425: cc -E  conftest.c
>> configure:6431: $? = 0
>> configure:6518: cc -o conftest -O -pipe -march=pentium3   conftest.c  >&5
>> configure:6521: $? = 0
>>
>> ac_cv_func_ldap_start_tls_s=no
>>
>>
>>     From php_ldap.h:
>>
>> #if LDAP_API_VERSION > 2000
>> PHP_FUNCTION(ldap_start_tls);
>> #endif
>>
>>     From ldap.c:
>>
>> #ifdef HAVE_LDAP_START_TLS_S
>>        PHP_FE(ldap_start_tls, NULL)
>> #endif
>>
>>
>>
>> #ifdef HAVE_LDAP_START_TLS_S
>> /* {{{ proto bool ldap_start_tls(resource link)
>>   Start TLS */
>> PHP_FUNCTION(ldap_start_tls)
>> {
>>        zval **link;
>>        ldap_linkdata *ld;
>>        int rc, protocol = LDAP_VERSION3;
>>
>>        if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &link) ==
>> FAILURE) {
>>                WRONG_PARAM_COUNT;
>>        }
>>
>>        ZEND_FETCH_RESOURCE(ld, ldap_linkdata *, link, -1, "ldap link",
>> le_link);
>>
>>        if (((rc = ldap_set_option(ld->link, LDAP_OPT_PROTOCOL_VERSION,
>> &protocol)) != LDAP_SUCCESS) ||
>>                ((rc = ldap_start_tls_s(ld->link, NULL, NULL)) !=
>> LDAP_SUCCESS)
>>        ) {
>>                php_error_docref(NULL TSRMLS_CC, E_WARNING,"Unable to
>> start TLS: %s", ldap_err2string(rc));
>>                RETURN_FALSE;
>>        } else {
>>                RETURN_TRUE;
>>        }
>> }
>> /* }}} */
>> #endif
>>
>>
>>
>> On Fri, 2 Sep 2005, Rasmus Lerdorf wrote:
>>
>>> Brian A. Seklecki wrote:
>>>
>>>> Firstly, sorry if this is the wrong list.  There are thousands of
>>>> forums
>>>> and PHP5 related MLs, but nothing FBSD specific.
>>>>
>>>> Second, I wouldn't post if this wasn't happening on two completely
>>>> different FBSD boxes.
>>>>
>>>> For whatever reason, the php4 and php5 from FreeBSD ports refuses to
>>>> properly configure SSL/TLS support for the LDAP module.
>>>
>>>
>>> Can't you just build from the PHP tarball instead?  Seems like a messed
>>> up port to me.  I use FreeBSD all day, every day and haven't seen this
>>> problem.  But I also don't use the ports.
>>>
>>> -Rasmus
>>>
>>
>> l8*
>>     -lava
>>
>> x.25 - minix - bitnet - plan9 - 110 bps - ASR 33 - base8
>>
>> -- 
>> PHP General Mailing List (http://www.php.net/)
>> To unsubscribe, visit: http://www.php.net/unsub.php
>>
>>
> 
> l8*
>     -lava
> 
> x.25 - minix - bitnet - plan9 - 110 bps - ASR 33 - base8

-- 
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php


[Index of Archives]     [PHP Home]     [Apache Users]     [PHP on Windows]     [Kernel Newbies]     [PHP Install]     [PHP Classes]     [Pear]     [Postgresql]     [Postgresql PHP]     [PHP on Windows]     [PHP Database Programming]     [PHP SOAP]

  Powered by Linux