[PATCHES] more mirrorlist fixes

Mike McGrath mmcgrath at redhat.com
Mon May 17 15:24:54 UTC 2010


On Mon, 17 May 2010, Matt Domsch wrote:

> >From 2530807e1216786ea5dac8110cbb27a2f25103a3 Mon Sep 17 00:00:00 2001
> From: Adrian Reber <adrian at lisas.de>
> Date: Sun, 16 May 2010 17:15:22 -0500
> Subject: [PATCH 1/2] mirrorlist_server: handle bad client IP address input
>
> Signed-off-by: Matt Domsch <matt at domsch.com>
> ---
>  mirrorlist-server/mirrorlist_server.py |   10 ++++++++--
>  1 files changed, 8 insertions(+), 2 deletions(-)
>
> diff --git a/mirrorlist-server/mirrorlist_server.py b/mirrorlist-server/mirrorlist_server.py
> index 0de7132..e909927 100755
> --- a/mirrorlist-server/mirrorlist_server.py
> +++ b/mirrorlist-server/mirrorlist_server.py
> @@ -298,7 +298,10 @@ def do_internet2(kwargs, cache, clientCountry, header):
>      client_ip = kwargs['client_ip']
>      if client_ip == 'unknown':
>          return (header, hostresults)
> -    ip = IP(client_ip)
> +    try:
> +        ip = IP(client_ip)
> +    except:
> +        return (header, hostresults)
>      asn = lookup_ip_asn(internet2_tree, ip)
>      if asn is not None:
>          header += 'Using Internet2 '
> @@ -312,7 +315,10 @@ def do_asn(kwargs, cache, header):
>      client_ip = kwargs['client_ip']
>      if client_ip == 'unknown':
>          return (header, hostresults)
> -    ip = IP(client_ip)
> +    try:
> +        ip = IP(client_ip)
> +    except:
> +        return (header, hostresults)
>      asn = lookup_ip_asn(global_tree, ip)
>      if asn is not None and asn in asn_host_cache:
>          for hostid in asn_host_cache[asn]:
> --
> 1.7.0.1
>
>
> >From bb8c3038cf9f76fa39e8580a990d7d9edef7f43c Mon Sep 17 00:00:00 2001
> From: Matt Domsch <Matt_Domsch at dell.com>
> Date: Mon, 17 May 2010 10:15:34 -0500
> Subject: [PATCH 2/2] mirrorlist_server: handle more failures gracefully
>
> Handle being passed a bad country= value.
>
> Catch all failures in do_mirrorlist() and return a proper error
> message.  This should also prevent failures in mirrorlist_server from
> causing mirrorlist_client() to spin indefinitely waiting for an answer.
> ---
>  mirrorlist-server/mirrorlist_server.py |   15 ++++++++++-----
>  1 files changed, 10 insertions(+), 5 deletions(-)
>
> diff --git a/mirrorlist-server/mirrorlist_server.py b/mirrorlist-server/mirrorlist_server.py
> index e909927..0d73469 100755
> --- a/mirrorlist-server/mirrorlist_server.py
> +++ b/mirrorlist-server/mirrorlist_server.py
> @@ -262,7 +262,7 @@ def do_countrylist(kwargs, cache, clientCountry, requested_countries, header):
>  def get_same_continent_countries(clientCountry, requested_countries):
>      result = []
>      for r in requested_countries:
> -        if r is not None:
> +        if r in country_continents:
>              requestedCountries = [c.upper() for c in continents[country_continents[r]] \
>                                        if c != clientCountry ]
>              result.extend(requestedCountries)
> @@ -690,17 +690,22 @@ class MirrorlistHandler(StreamRequestHandler):
>              pass
>
>          try:
> -            r = do_mirrorlist(d)
> +            try:
> +                r = do_mirrorlist(d)
> +            except:
> +                raise
>              message = r['message']
>              results = r['results']
>              resulttype = r['resulttype']
>              returncode = r['returncode']
>          except:
> -            message='# Server Error'
> +            message=u'# Bad Request'
> +            returncode = 400
> +            results = []
> +            resulttype = 'mirrorlist'
>              if d['metalink']:
>                  resulttype = 'metalink'
> -            results = errordoc(d['metalink'], message)
> -            returncode = 500
> +                results = errordoc(d['metalink'], message)
>          del d
>          del p
>

+1

	-Mike


More information about the infrastructure mailing list