[horde] [kronolith] Errors after upgrade to pecl_http 2 / Horde_Http 2.1.1

Jan Schneider jan at horde.org
Wed May 28 13:22:34 UTC 2014


Zitat von simon at simonandkate.net:

> 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?

Yes.

> 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.

That's how I understand it. I don't see anything in the docs that curl  
might be optional, or that there even was any alternative driver.

> 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?

Correct.

-- 
Jan Schneider
The Horde Project
http://www.horde.org/
https://www.facebook.com/hordeproject



More information about the horde mailing list