[prev in list] [next in list] [prev in thread] [next in thread] 

List:       ipfire-development
Subject:    Re: [PATCH] fireinfo: support upstream proxy with authentication
From:       Michael Tremer <michael.tremer () ipfire ! org>
Date:       2018-10-29 13:32:06
Message-ID: 012244772b10b32fb8751ec45f44368cb0d6caf5.camel () ipfire ! org
[Download RAW message or body]

Hi,

On Sat, 2018-10-27 at 16:20 +0200, Peter Müller wrote:
> Fireinfo could not send its profile to https://fireinfo.ipfire.org/
> if the machine is behind an upstream proxy which requires username
> and password. This is fixed by tweaking urllib2's opening handler.
> 
> To apply this on existing installations, the fireinfo package
> needs to be shipped during an update.
> 
> Fixes #11905
> 
> Signed-off-by: Peter Müller <peter.mueller@link38.eu>
> ---
>  src/sendprofile | 11 +++++++++--
>  1 file changed, 9 insertions(+), 2 deletions(-)
>  mode change 100644 => 100755 src/sendprofile
> 
> diff --git a/src/sendprofile b/src/sendprofile
> old mode 100644
> new mode 100755
> index b836567..8c0603f
> --- a/src/sendprofile
> +++ b/src/sendprofile
> @@ -73,10 +73,17 @@ def send_profile(profile):
>  	request.add_header("User-Agent", "fireinfo/%s" % fireinfo.__version__)
>  
>  	# Set upstream proxy if we have one.
> -	# XXX this cannot handle authentication
>  	proxy = get_upstream_proxy()
> +
>  	if proxy["host"]:
> -		request.set_proxy(proxy["host"], "http")
> +                # handling upstream proxies with authentication is more
> tricky...

The commented line is indented with spaces whereas everything else is using
tabs. Python doesn't like this to be mixed.

> +		if proxy["user"] and proxy["pass"]:
> +			proxy_handler = urllib2.ProxyHandler({'https': '
> http://' + proxy["user"] + ':' + proxy["pass"] + '@' + proxy["host"] + '/'})

I am not a fan of formatting strings like this, because I find it hard to read,
and this doesn't work when one of the variables isn't a string.

> +			auth = urllib2.HTTPBasicAuthHandler()
> +			opener = urllib2.build_opener(proxy_handler, auth,
> urllib2.HTTPHandler)
> +			urllib2.install_opener(opener)
> +		else:
> +			request.set_proxy(proxy["host"], "https")

Why does this patch remove the proxy for HTTP without mentioning it? I know that
we only send requests via HTTPS now, but I think generally this should be
configured just in case.

>  	try:
>  		urllib2.urlopen(request, timeout=60)

-Michael

[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic