[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