[Yum-devel] [PATCH] add sizes to all getFile calls. this sets a max size for repomd.xml and repomd.xml.asc to 100K, which is probably reasonable

Tim Lauridsen tim.lauridsen at googlemail.com
Sat Sep 26 06:59:11 UTC 2009


On 09/25/2009 10:18 PM, Seth Vidal wrote:
> ---
>   yum/yumRepo.py |   32 ++++++++++++++++++++++----------
>   1 files changed, 22 insertions(+), 10 deletions(-)
>
> diff --git a/yum/yumRepo.py b/yum/yumRepo.py
> index bdca2ad..ea8518a 100644
> --- a/yum/yumRepo.py
> +++ b/yum/yumRepo.py
> @@ -713,7 +713,8 @@ class YumRepository(Repository, config.RepoConf):
>                                fdel=lambda self: setattr(self, "_metalink", None))
>
>       def _getFile(self, url=None, relative=None, local=None, start=None, end=None,
> -            copy_local=None, checkfunc=None, text=None, reget='simple', cache=True):
> +            copy_local=None, checkfunc=None, text=None, reget='simple',
> +            cache=True, size=None):
>           """retrieve file from the mirrorgroup for the repo
>              relative to local, optionally get range from
>              start to end, also optionally retrieve from a specific baseurl"""
> @@ -785,7 +786,8 @@ class YumRepository(Repository, config.RepoConf):
>                               ssl_verify_host=self.sslverify,
>                               ssl_ca_cert=self.sslcacert,
>                               ssl_cert=self.sslclientcert,
> -                            ssl_key=self.sslclientkey
> +                            ssl_key=self.sslclientkey,
> +                            size=size
>                               )
>
>               ug.opts.user_agent = default_grabber.opts.user_agent
> @@ -817,6 +819,7 @@ class YumRepository(Repository, config.RepoConf):
>                                              reget = reget,
>                                              checkfunc=checkfunc,
>                                              http_headers=headers,
> +                                           size=size
>                                              )
>               except URLGrabError, e:
>                   errstr = "failure: %s from %s: %s" % (relative, self.id, e)
> @@ -828,7 +831,7 @@ class YumRepository(Repository, config.RepoConf):
>           return result
>       __get = _getFile
>
> -    def getPackage(self, package, checkfunc = None, text = None, cache = True):
> +    def getPackage(self, package, checkfunc=None, text=None, cache=True):
>           remote = package.relativepath
>           local = package.localPkg()
>           basepath = package.basepath
> @@ -843,7 +846,8 @@ class YumRepository(Repository, config.RepoConf):
>                           local=local,
>                           checkfunc=checkfunc,
>                           text=text,
> -                        cache=cache
> +                        cache=cache,
> +                        size=package.size,
>                           )
>
>       def getHeader(self, package, checkfunc = None, reget = 'simple',
> @@ -853,6 +857,7 @@ class YumRepository(Repository, config.RepoConf):
>           local =  package.localHdr()
>           start = package.hdrstart
>           end = package.hdrend
> +        size = end-start
>           basepath = package.basepath
>           # yes, I know, don't ask
>           if not os.path.exists(self.hdrdir):
> @@ -860,7 +865,7 @@ class YumRepository(Repository, config.RepoConf):
>
>           return self._getFile(url=basepath, relative=remote, local=local, start=start,
>                           reget=None, end=end, checkfunc=checkfunc, copy_local=1,
> -                        cache=cache,
> +                        cache=cache, size=size,
>                           )
>
>       def metadataCurrent(self):
> @@ -989,7 +994,8 @@ class YumRepository(Repository, config.RepoConf):
>                                      text=text,
>                                      reget=None,
>                                      checkfunc=checkfunc,
> -                                   cache=self.http_caching == 'all')
> +                                   cache=self.http_caching == 'all',
> +                                   size=102400) # setting max size as 100K
>
>           except URLGrabError, e:
>               misc.unlink_f(tfname)
> @@ -1422,7 +1428,8 @@ class YumRepository(Repository, config.RepoConf):
>                                          text='%s/signature' % self.id,
>                                          reget=None,
>                                          checkfunc=None,
> -                                       cache=self.http_caching == 'all')
> +                                       cache=self.http_caching == 'all',
> +                                       size=102400)
>               except URLGrabError, e:
>                   raise URLGrabError(-1, 'Error finding signature for repomd.xml for %s: %s' % (self, e))
>
> @@ -1536,9 +1543,14 @@ class YumRepository(Repository, config.RepoConf):
>           try:
>               checkfunc = (self.checkMD, (mdtype,), {})
>               text = "%s/%s" % (self.id, mdtype)
> -            local = self._getFile(relative=remote, local=local, copy_local=1,
> -                             checkfunc=checkfunc, reget=None, text=text,
> -                             cache=self.http_caching == 'all')
> +            local = self._getFile(relative=remote,
> +                                  local=local,
> +                                  copy_local=1,
> +                                  checkfunc=checkfunc,
> +                                  reget=None,
> +                                  text=text,
> +                                  cache=self.http_caching == 'all',
> +                                  size=thisdata.size)
>           except (Errors.NoMoreMirrorsRepoError, Errors.RepoError):
>               if retrieve_can_fail:
>                   return None
>    

Looks fine to me

Tim


More information about the Yum-devel mailing list