From 31930aac1c0790304279a380d698c02e62df22b8 Mon Sep 17 00:00:00 2001 From: Tim Laszlo Date: Mon, 12 Jul 2010 22:14:26 +0000 Subject: Packages: Allow authentication in urls git-svn-id: https://svn.mcs.anl.gov/repos/bcfg/trunk/bcfg2@5970 ce84e21b-d406-0410-9b95-82705330c041 --- src/lib/Server/Plugins/Packages.py | 27 +++++++++++++++++++++++++-- 1 file changed, 25 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/lib/Server/Plugins/Packages.py b/src/lib/Server/Plugins/Packages.py index ac20ca1f0..b07720f6a 100644 --- a/src/lib/Server/Plugins/Packages.py +++ b/src/lib/Server/Plugins/Packages.py @@ -50,6 +50,19 @@ def source_from_xml(xsource): ret['url'] += '/' return ret +def _fetch_url(url): + if '@' in url: + mobj = re.match('(\w+://)([^:]+):([^@]+)@(.*)$', url) + if not mobj: + raise ValueError + user = mobj.group(2) + passwd = mobj.group(3) + url = mobj.group(1) + mobj.group(4) + auth = urllib2.HTTPBasicAuthHandler(urllib2.HTTPPasswordMgrWithDefaultRealm()) + auth.add_password(None, url, user, passwd) + urllib2.install_opener(urllib2.build_opener(auth)) + return urllib2.urlopen(url).read() + class Source(object): basegroups = [] def __init__(self, basepath, url, version, arches, components, groups, rawurl, @@ -113,7 +126,10 @@ class Source(object): logger.info("Packages: Updating %s" % url) fname = self.escape_url(url) try: - data = urllib2.urlopen(url).read() + data = _fetch_url(url) + except ValueError: + logger.error("Packages: Bad url string %s" % url) + continue except urllib2.HTTPError, h: logger.error("Packages: Failed to fetch url %s. code=%s" \ % (url, h.code)) @@ -271,8 +287,15 @@ class YUMSource(Source): surl += '/' rmdurl = surl + 'repodata/repomd.xml' try: - repomd = urllib2.urlopen(rmdurl).read() + repomd = _fetch_url(rmdurl) xdata = lxml.etree.XML(repomd) + except ValueError: + logger.error("Packages: Bad url string %s" % rmdurl) + continue + except urllib2.HTTPError, h: + logger.error("Packages: Failed to fetch url %s. code=%s" \ + % (rmdurl, h.code)) + continue except: logger.error("Failed to process url %s" % rmdurl) continue -- cgit v1.2.3-1-g7c22