reassign 201589 gnupg 1.4.6-2 retitle 201589 GnuPG does not work with Privoxy (and maybe other HTTP proxies?) [patch] tags 201589 + patch thanks
Hi, there was a long-standing bug against Privoxy that keyserver access does not work with GnuPG. I actually found out that GnuPG is the culprit, not Privoxy. The problem only occurs with the built-in "curl-shim.c" code, not when libcurl is used. BTW, you should explicitly build --without-curl, otherwise any installed curl dev package on the build machine will be picked up. The attached patch simply disables two lines of code. I'm not sure what their purpose is - without them, keyserver access for sending and retrieving keys works both with and without a proxy. HTTP_FLAG_NO_SHUTDOWN isn't actually used anywhere else in the code. The patch also adds a "Host:" header when an HTTP proxy is used. I think the host header is always required by the spec, and if it's not there, this might cause problems with some proxies/servers. Virtual keyserver hosting is fairly uncommon these days ;) - nevertheless, having "Host:" is more correct. Finally: Maybe consider changing to --with-curl - that curl-shim code looks quite hacked up and does a lot of ugly string/malloc operations... Cheers, Richard -- __ _ |_) /| Richard Atterer | \/¯| http://atterer.net ¯ '` ¯ --- ./util/http.c.orig 2006-07-24 15:46:27.000000000 +0200 +++ ./util/http.c 2008-01-05 20:53:08.706898505 +0100 @@ -212,8 +212,10 @@ iobuf_ioctl (hd->fp_write, 1, 1, NULL); /* keep the socket open */ iobuf_close (hd->fp_write); hd->fp_write = NULL; +#if 0 if ( !(hd->flags & HTTP_FLAG_NO_SHUTDOWN) ) shutdown( hd->sock, 1 ); +#endif hd->in_data = 0; hd->fp_read = iobuf_sockopen( hd->sock , "r" ); @@ -573,13 +575,14 @@ request=xmalloc(strlen(server)*2 + strlen(p) + (authstr?strlen(authstr):0) - + (proxy_authstr?strlen(proxy_authstr):0) + 65); + + (proxy_authstr?strlen(proxy_authstr):0) + 256); if( proxy && *proxy ) - sprintf( request, "%s http://%s:%hu%s%s HTTP/1.0\r\n%s%s", + sprintf( request, "%s http://%s:%hu%s%s HTTP/1.0\r\nHost: %s:%hu\r\n%s%s", hd->req_type == HTTP_REQ_GET ? "GET" : hd->req_type == HTTP_REQ_HEAD? "HEAD": hd->req_type == HTTP_REQ_POST? "POST": "OOPS", server, port, *p == '/'? "":"/", p, + server, port, authstr?authstr:"",proxy_authstr?proxy_authstr:"" ); else {