[horde] [kronolith] Errors after upgrade to pecl_http 2 / Horde_Http 2.1.1
simon at simonandkate.net
simon at simonandkate.net
Wed May 28 13:07:42 UTC 2014
On 28 May 2014, at 10:17 pm, "Jens-U. Mozdzen" <jmozdzen at nde.ag> wrote:
>
> Hi Simon & all,
>
> Zitat von Simon Wilson <simon at simonandkate.net>:
>> [...]
>>> Zitat von "Jens-U. Mozdzen" <jmozdzen at nde.ag>:
>>>
>>>> Hi Simon & all,
>>>>
>>>> Zitat von Simon Wilson <simon at simonandkate.net>:
>>>>> ----- Message from "Jens-U. Mozdzen" <jmozdzen at nde.ag> ---------
>>>>> [...]
>>>>>> What bothers me is: I've installed (over and over again)
>>>>>> pecl_http-2.0.6.tar, and looking at it's source code, I can see
>>>>>> that these constants are to be registered:
>>>>>>
>>>>>> --- cut here ---
>>>>>> # grep -r AUTH_ANY pecl_http-2.0.6/
>>>>>> ...
>>>>>> pecl_http-2.0.6/php_http_client_curl.c:
>>>>>> REGISTER_NS_LONG_CONSTANT("http\\Client\\Curl", "AUTH_ANY",
>>>>>> CURLAUTH_ANY, CONST_CS|CONST_PERSISTENT);
>>>>>> --- cut here ---
>>>>>>
>>>>>> But checking the freshly generated http.so file, I see no trace
>>>>>> of those constants:
>>>>>>
>>>>>> --- cut here ---
>>>>>> # grep AUTH_ /usr/lib64/php5/extensions/http.so
>>>>>> #
>>>>>> --- cut here ---
>>>>>>
>>>>>> It is as if the file didn't get compiled or the macro
>>>>>> "REGISTER_NS_LONG_CONSTANT()" acted as a noop?!? The build log
>>>>>> of the PECL package shows no hint that anything went wrong:
>> [...]
>> This is the closest mine comes:
>>
>> $ strings /usr/lib64/php/modules/http.so | grep Client
>> http\Client
>> http\Client\%s
>> http\Client\Request
>> http\Client\Response
>>
>> Tried reinstalling again, still nothing.
>>
>> I have a full log from the pecl install Jens if that helps at some stage.
>
> sometimes it's so easy, it hurts. Had I spent 5 more minutes before
> sending my above responses, this case could already have been closed:
>
>>>>>> It is as if the file didn't get compiled or the macro
>>>>>> "REGISTER_NS_LONG_CONSTANT()" acted as a noop?!?
>
> Well... it's neither of those - the file is compiled (I had already
> verified), but it about starts with "#if PHP_HTTP_HAVE_CURL", which is
> set during config9.m4 processing... but only if curl/curl.h is found.
>
> In other words, to compile some curl client code, you need the curl
> development package installed. Now isn't that surprising?
>
> Simon, in that full log from pecl install, check for the following to
> confirm it couldn't find that include file: "checking for
> curl/curl.h... not found".
>
> I'm running this on a SUSE Linux Enterprise server, so the required
> task was to install "libcurl-devel" and then forcibly re-install
> pecl_http.
>
> Now I get
>
> --- cut here ---
> # strings /usr/lib64/php5/extensions/http.so | grep Client
> http\Client
> http\Client\%s
> http\Client\Request
> .Ahttp\Client\Curl
> http\Client\Curl\Request
> http\Client\Curl\IPRESOLVE_V4
> http\Client\Curl\IPRESOLVE_V6
> http\Client\Curl\AUTH_BASIC
> http\Client\Curl\AUTH_DIGEST
> http\Client\Curl\AUTH_NTLM
> http\Client\Curl\AUTH_GSSNEG
> http\Client\Curl\AUTH_ANY
> http\Client\Curl\PROXY_SOCKS4
> http\Client\Curl\PROXY_SOCKS5
> http\Client\Curl\PROXY_HTTP
> http\Client\Curl\HTTP_VERSION_1_0
> http\Client\Curl\HTTP_VERSION_1_1
> http\Client\Curl\HTTP_VERSION_ANY
> http\Client\Curl\SSL_VERSION_TLSv1
> http\Client\Curl\SSL_VERSION_SSLv2
> http\Client\Curl\SSL_VERSION_SSLv3
> http\Client\Curl\SSL_VERSION_ANY
> http\Client\Curl\IPRESOLVE_ANY
> http\Client\Curl\AUTH_DIGEST_IE
> http\Client\Curl\PROXY_SOCKS4A
> http\Client\Curl\PROXY_SOCKS5_HOSTNAME
> http\Client\Curl\PROXY_HTTP_1_0
> http\Client\Curl\POSTREDIR_301
> http\Client\Curl\POSTREDIR_302
> http\Client\Curl\POSTREDIR_ALL
> http\Client\Response
> --- cut here ---
>
> and no more errors when opening email messages.
>
>> Thanks Jan. Looks like the Horde libraries are relying on a package
>> that is broken in some situations... :-/
>
> Nope, the package isn't broken. The error in my case was on my side of
> the keyboard.
>
> Best regards to all,
> Jens
>
>
So... Hear me out here... :)
Pecl_http compiles with what it finds, and if that does not include libcurl-devel it silently builds without curl support. The package's doco does not specify libcurl-devel as a prereq.
Yet once Horde sees http.so loaded, does it assume that pecl_http HAS been compiled with curl support?
If it does, is that a valid assumption? On at least three systems it would appear not. If the package is genuinely not functional without libcurl-devel but compiling anyway, then the issue is with them. If the package is a valid compilation without libcurl-devel, but Horde assumes it has it, then surely the onus is on Horde to test for that, call it out, and / or fall back gracefully to other methods?
Not trolling, genuine queries.
Simon
More information about the horde
mailing list