curl-and-python

Re: Problems with OPT_CAINFO

From: Kamil Dudka via curl-and-python <curl-and-python_at_cool.haxx.se>
Date: Thu, 06 Aug 2015 13:25:04 +0200

On Thursday 06 August 2015 12:41:39 Dario Meloni wrote:
> Apparently the bug is in the ubuntu packages. If I manually install pycurl,
> correctly set the library path, it works with the previous parameters.
>
> using: /usr/local/lib/python3.4/dist-packages/pycurl.cpython-34m.so
>
> pycurl.cpython-34m.so->curl_easy_setopt(0xe41d70, 172, 1, 0) = 0
>
> I don't understand though why the ubuntu version doesn't work with an
> identical call.

Ubuntu uses GnuTLS as the TLS backend for libcurl and the CURLOPT_CERTINFO
option is not supported in the version of libcurl you are using. So you
either need to update libcurl to 7.42.0+:

https://github.com/bagder/curl/commit/a332922a

... or recompile it with a different TLS backend that supports it already
in your ancient version of libcurl.

Kamil

> Dario Meloni
>
> 2015-08-06 12:21 GMT+02:00 Dario Meloni <mellon85_at_gmail.com>:
> > Yes, you are right,
> > I just finished some more testing and noticed I had a mess in the python
> > libraries. I cleared everything and now I can make everything work on
> > python2, but not on python3 due to that different behaviour in the call to
> > libcurl.
> > Disregard the previous patch. I can reproduce it in every case in python3
> > running the example script
> >
> > $ ltrace -e curl_easy_setopt python3 certinfo_example.py
> > pycurl.cpython-34m-x86_64-linux-gnu.so->curl_easy_setopt(0x276b9e0,
> > 0x271a, 0x7fc931d12ee8, 116) = 0
> > pycurl.cpython-34m-x86_64-linux-gnu.so->curl_easy_setopt(0x276b9e0,
> > 0x2777, 0x7fc931d12e10, 0) = 0
> > pycurl.cpython-34m-x86_64-linux-gnu.so->curl_easy_setopt(0x276b9e0, 43, 1,
> > 0x7ffecd69d730) = 0
> > pycurl.cpython-34m-x86_64-linux-gnu.so->curl_easy_setopt(0x276b9e0, 41, 0,
> > 0x7ffecd69d730) = 0
> > pycurl.cpython-34m-x86_64-linux-gnu.so->curl_easy_setopt(0x276b9e0,
> > 0x2796, 0, 0x7ffecd69d730) = 0
> > pycurl.cpython-34m-x86_64-linux-gnu.so->curl_easy_setopt(0x276b9e0,
> > 0x2722, 0x26eb380, 0x7ffecd69d730) = 0
> > pycurl.cpython-34m-x86_64-linux-gnu.so->curl_easy_setopt(0x276b9e0,
> > 0x2712, 0x7fc931c170f8, 8) = 0
> > pycurl.cpython-34m-x86_64-linux-gnu.so->curl_easy_setopt(0x276b9e0,
> > 0x4e2b, 0x7fc9308715c0, 0) = 0
> > pycurl.cpython-34m-x86_64-linux-gnu.so->curl_easy_setopt(0x276b9e0,
> > 0x2711, 0x7fc931d12e10, 0x7ffecd69d610) = 0
> > pycurl.cpython-34m-x86_64-linux-gnu.so->curl_easy_setopt(0x276b9e0, 172,
> > 1, 0) = 48
> >
> > Traceback (most recent call last):
> > File "certinfo_example.py", line 20, in <module>
> >
> > elements = certinfo_demo()[0]
> >
> > File "certinfo_example.py", line 13, in certinfo_demo
> >
> > c.setopt(pycurl.OPT_CERTINFO, True)
> >
> > pycurl.error: (48, '')
> > +++ exited (status 1) +++
> >
> > Dario Meloni
> >
> > 2015-08-06 11:49 GMT+02:00 Kamil Dudka <kdudka_at_redhat.com>:
> >> On Thursday 06 August 2015 11:31:00 Dario Meloni via curl-and-python
> >>
> >> wrote:
> >> > I am sorry, I created the patch backward...
> >> >
> >> >
> >> > --- easy.c.orig 2015-08-06 11:12:33.070837025 +0200
> >> > +++ easy.c 2015-08-06 11:12:41.334837007 +0200
> >> > @@ -1,5 +1,6 @@
> >> >
> >> > #include "pycurl.h"
> >> > #include "docstrings.h"
> >> >
> >> > +#include <curl/curl.h>
> >>
> >> This looks strange. <curl/curl.h> is already included by src/pycurl.h so
> >> including it once again should be a no-op. Could you please attach the
> >> preprocessed source code of src/easy.c with/without your patch?
> >>
> >> Kamil
> >>
> >>
> >> /************************************************************************
> >> *
> >>
> >> > // static utility functions
> >> >
> >> > Dario Meloni
> >> >
> >> > 2015-08-06 11:17 GMT+02:00 Dario Meloni <mellon85_at_gmail.com>:
> >> > > While developing some automated test in python I noticed I couldn't
> >>
> >> get
> >>
> >> > > OPT_CAINFO to work, it was always returning error 48 (UNKNOWN
> >> > > OPTION).
> >> > > The error is raised also while trying the example script from
> >>
> >> http://curl.haxx.se/mail/curlpython-2010-02/att-0017/certinfo_example.py
> >>
> >> > > This is happening on Ubuntu 14.04LTS. I tested with both pycurl
> >> > > 7.19.3
> >> > > (ubuntu package), installing the latest 7.19.5.1 in python 2 and 3
> >>
> >> with
> >>
> >> > > pip/pip3 and also manually installing it.
> >> > >
> >> > >
> >> > > I checked with ltrace what's the difference wrt a simple C program
> >>
> >> that
> >>
> >> > > was instead working and noticed these diferences:
> >> > >
> >> > > a.out->curl_easy_setopt(0x801510, 172, 1, 172) = 0
> >> > >
> >> > > pycurl.cpython-34m-x86_64-linux-gnu.so->curl_easy_setopt(0xfa4c30,
> >>
> >> 172, 1,
> >>
> >> > > 0) = 48
> >> > >
> >> > > the pycurl version was sending a different value as the last argument
> >> > >
> >> > > Applying this incredibly small patch fixes it for me
> >> > >
> >> > >
> >> > > --- easy.c 2015-08-06 11:12:41.334837007 +0200
> >> > > +++ easy.c.orig 2015-08-06 11:12:33.070837025 +0200
> >> > > @@ -1,6 +1,5 @@
> >> > >
> >> > > #include "pycurl.h"
> >> > > #include "docstrings.h"
> >> > >
> >> > > -#include <curl/curl.h>
> >>
> >> /************************************************************************
> >>
> >> > > *
> >> > > // static utility functions
> >> > >
> >> > > Dario Meloni

_______________________________________________
http://cool.haxx.se/cgi-bin/mailman/listinfo/curl-and-python
Received on 2015-08-06