Hi, attached you can find a patch for yum to preserve query parameter in urls. A second patch for urlgrabber will follow.
Some CDN do token authentication by appending a token to the URL as query parameter. So the baseurl could be something like: https://host.domain.top/path/?abcdef1234567890 Simply appending the relative part to it will result in something like this https://host.domain.top/path/?abcdef1234567890/repodata/repomd.xml which is simply wrong. -- Regards Michael Calmer -------------------------------------------------------------------------- Michael Calmer SUSE LINUX Products GmbH, Maxfeldstr. 5, D-90409 Nuernberg T: +49 (0) 911 74053 0 F: +49 (0) 911 74053575 - e-mail: michael.cal...@suse.com -------------------------------------------------------------------------- SUSE LINUX Products GmbH, GF: Jeff Hawn, Jennifer Guild, Felix Imendörffer HRB 16746 (AG Nürnberg)
>From 964f75c66170d7d5aa860f2dd37d5a079f900bde Mon Sep 17 00:00:00 2001 From: Michael Calmer <m...@suse.de> Date: Fri, 12 Sep 2014 13:05:04 +0200 Subject: [PATCH] preserve queryparams in urls Some CDN do token authentication by appending a token to the URL as query parameter. So the baseurl could be something like: https://host.domain.top/path/?abcdef1234567890 Simply appending the relative part to it will result in an invalid URL. --- yum/yumRepo.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/yum/yumRepo.py b/yum/yumRepo.py index 4d64dff..b95b333 100644 --- a/yum/yumRepo.py +++ b/yum/yumRepo.py @@ -845,11 +845,11 @@ class YumRepository(Repository, config.RepoConf): if url in ['', None]: continue url = parser.varReplace(url, self.yumvar) - if url[-1] != '/': - url= url + '/' try: # This started throwing ValueErrors, BZ 666826 (s,b,p,q,f,o) = urlparse.urlparse(url) + if p[-1] != '/': + p = p + '/' except (ValueError, IndexError, KeyError), e: s = 'blah' @@ -857,7 +857,7 @@ class YumRepository(Repository, config.RepoConf): skipped = url continue else: - goodurls.append(url) + goodurls.append(urlparse.urlunparse((s,b,p,q,f,o))) if skipped is not None: # Caller cleans up for us. @@ -996,7 +996,7 @@ Insufficient space in download directory %s size=size, **ugopts) - remote = url + '/' + relative + remote = urlparse.urlunsplit((scheme, netloc, path + '/' + relative, query, fragid)) try: result = ug.urlgrab(misc.to_utf8(remote), local, -- 1.8.1.4
_______________________________________________ Yum-devel mailing list Yum-devel@lists.baseurl.org http://lists.baseurl.org/mailman/listinfo/yum-devel