Monday 7 October 2013 by Bradley M. Kuhn
I recently upgraded
to Debian wheezy.
On, Debian squeeze, I
had no problem using the stock Perl module Business::PayPal::API
to import PayPal transactions for Software Freedom Conservancy, via the
Debian package libbusiness-paypal-api-perl
.
After the wheezy upgrade, something goes wrong and it doesn't work. I reviewed some similar complaints, that seem to relate to this resolved bug, but that wasn't my problem, I don't think.
I ran strace to dig around and see what was going on. The working squeeeze install did this:
select(8, [3], [3], NULL, {0, 0}) = 1 (out [3], left {0, 0}) write(3, "SOMEDATA"..., 1365) = 1365 rt_sigprocmask(SIG_BLOCK, [ALRM], [], 8) = 0 rt_sigaction(SIGALRM, {SIG_DFL, [], 0}, {SIG_DFL, [], 0}, 8) = 0 rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0 rt_sigprocmask(SIG_BLOCK, [ALRM], [], 8) = 0 rt_sigaction(SIGALRM, {0xxxxxx, [], 0}, {SIG_DFL, [], 0}, 8) = 0 rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0 alarm(60) = 0 read(3, "SOMEDATA", 5) = 5
But the same script on wheezy did this at the same point:
select(8, [3], [3], NULL, {0, 0}) = 1 (out [3], left {0, 0}) write(3, "SOMEDATA"..., 1373) = 1373 read(3, 0xxxxxxxx, 5) = -1 EAGAIN (Resource temporarily unavailable) select(0, NULL, NULL, NULL, {0, 100000}) = 0 (Timeout) read(3, 0xxxxxxxx, 5) = -1 EAGAIN (Resource temporarily unavailable) select(0, NULL, NULL, NULL, {0, 100000}) = 0 (Timeout) read(3, 0xxxxxxxx, 5) = -1 EAGAIN (Resource temporarily unavailable) select(0, NULL, NULL, NULL, {0, 100000}) = 0 (Timeout) read(3, 0xxxxxxxx, 5) = -1 EAGAIN (Resource temporarily unavailable)
I was pretty confused, and basically I still am, but then I
noticed this
in the documentation for Business::PayPal::API
,
regarding SOAP::Lite
:
if you have already loaded Net::SSLeay (or IO::Socket::SSL), then Net::HTTPS
will prefer to use IO::Socket::SSL. I don't know how to get SOAP::Lite to
work with IO::Socket::SSL (e.g., Crypt::SSLeay uses HTTPS_* environment
variables), so until then, you can use this hack:
local $IO::Socket::SSL::VERSION = undef;
That hack didn't work, but I did confirm via strace that on
wheezy, IO::Socket::SSL
was getting loaded instead
of Net::SSL
. So, I did this, which was a complete and much worse
hack:
use Net::SSL; use Net::SSLeay; $ENV{'PERL_LWP_SSL_VERIFY_HOSTNAME'} = 0; # Then: use Business::PayPal::API qw(GetTransactionDetails TransactionSearch);
… And this incantation worked. This isn't the right fix, but I figured I should publish this, as this ate up three hours, and it's worth the 15 minutes to write this post, just in case someone else tries to use Business::PayPal::API on wheezy.
I used to be a Perl expert once upon a time. This situation convinced me that I'm not. In the old days, I would've actually figured out what was wrong.
Posted on Monday 7 October 2013 at 19:00 by Bradley M. Kuhn.
Comment on this post in this identi.ca conversation.
This website and all documents on it are licensed under a Creative Commons Attribution-Share Alike 3.0 United States License .
#include <std/disclaimer.h>
use Standard::Disclaimer;
from standard import disclaimer
SELECT full_text FROM standard WHERE type = 'disclaimer';
Both previously and presently, I have been employed by and/or done work for various organizations that also have views on Free, Libre, and Open Source Software. As should be blatantly obvious, this is my website, not theirs, so please do not assume views and opinions here belong to any such organization.
— bkuhn
ebb is a (currently) unregistered service mark of Bradley M. Kuhn.
Bradley M. Kuhn <bkuhn@ebb.org>