summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorZac Medico <zmedico@gentoo.org>2007-04-29 06:33:47 +0000
committerZac Medico <zmedico@gentoo.org>2007-04-29 06:33:47 +0000
commitf281ed3e6888b50fdaaf615a0e6065b391fb9409 (patch)
treef16dc6db94041ad8830d8b200fee9d168e53eecc
parent1f9baeb7bef4c68a25a5e79fe47471196bf7585e (diff)
downloadportage-f281ed3e6888b50fdaaf615a0e6065b391fb9409.tar.gz
portage-f281ed3e6888b50fdaaf615a0e6065b391fb9409.tar.bz2
portage-f281ed3e6888b50fdaaf615a0e6065b391fb9409.zip
For bug #175058, avoid potential quoting issues by spawning FETCHCOMMAND without a shell.
svn path=/main/trunk/; revision=6456
-rw-r--r--cnf/make.globals4
-rw-r--r--pym/portage/__init__.py15
2 files changed, 11 insertions, 8 deletions
diff --git a/cnf/make.globals b/cnf/make.globals
index 51475f12a..45ffea680 100644
--- a/cnf/make.globals
+++ b/cnf/make.globals
@@ -29,8 +29,8 @@ RPMDIR=/usr/portage/rpm
PORTAGE_TMPDIR=/var/tmp
# Fetching command (5 tries, passive ftp for firewall compatibility)
-FETCHCOMMAND="/usr/bin/wget -t 5 -T 60 --passive-ftp -P \\\"\${DISTDIR}\\\" \\\"\${URI}\\\""
-RESUMECOMMAND="/usr/bin/wget -c -t 5 -T 60 --passive-ftp -P \\\"\${DISTDIR}\\\" \\\"\${URI}\\\""
+FETCHCOMMAND="/usr/bin/wget -t 5 -T 60 --passive-ftp -P \${DISTDIR} \${URI}"
+RESUMECOMMAND="/usr/bin/wget -c -t 5 -T 60 --passive-ftp -P \${DISTDIR} \${URI}"
# Default user options
FEATURES="sandbox distlocks metadata-transfer"
diff --git a/pym/portage/__init__.py b/pym/portage/__init__.py
index ae4f2b43e..04294ce12 100644
--- a/pym/portage/__init__.py
+++ b/pym/portage/__init__.py
@@ -2601,9 +2601,6 @@ def fetch(myuris, mysettings, listonly=0, fetchonly=0, locks_in_subdir=".locks",
else:
resumecommand=mysettings["RESUMECOMMAND"]
- fetchcommand=fetchcommand.replace("${DISTDIR}",mysettings["DISTDIR"])
- resumecommand=resumecommand.replace("${DISTDIR}",mysettings["DISTDIR"])
-
if not can_fetch:
if fetched != 2:
if fetched == 0:
@@ -2633,8 +2630,14 @@ def fetch(myuris, mysettings, listonly=0, fetchonly=0, locks_in_subdir=".locks",
locfetch=fetchcommand
writemsg_stdout(">>> Downloading '%s'\n" % \
re.sub(r'//(.+):.+@(.+)/',r'//\1:*password*@\2/', loc))
- myfetch=locfetch.replace("${URI}",loc)
- myfetch=myfetch.replace("${FILE}",myfile)
+ myfetch = locfetch.split()
+ variables = {"${DISTDIR}":mysettings["DISTDIR"],
+ "${URI}":loc, "${FILE}":myfile}
+ for i in xrange(len(myfetch)):
+ token = myfetch[i].strip("\"'")
+ value = variables.get(token)
+ if value is not None:
+ myfetch[i] = value
spawn_keywords = {}
if "userfetch" in mysettings.features and \
@@ -2652,7 +2655,7 @@ def fetch(myuris, mysettings, listonly=0, fetchonly=0, locks_in_subdir=".locks",
con = con.replace(mysettings["PORTAGE_T"], mysettings["PORTAGE_FETCH_T"])
selinux.setexec(con)
- myret = portage.process.spawn_bash(myfetch,
+ myret = portage.process.spawn(myfetch,
env=mysettings.environ(), **spawn_keywords)
if mysettings.selinux_enabled():