pkgsrc-Bugs archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
pkg/38230: pkgtools/pkg_comp leaves turds in ${SANDBOX}/pkg_comp/tmp (+FIX)
>Number: 38230
>Category: pkg
>Synopsis: pkgtools/pkg_comp leaves turds in ${SANDBOX}/pkg_comp/tmp
>(+FIX)
>Confidential: no
>Severity: non-critical
>Priority: medium
>Responsible: pkg-manager
>State: open
>Class: sw-bug
>Submitter-Id: net
>Arrival-Date: Wed Mar 12 14:25:00 +0000 2008
>Originator: Robert Elz
>Release: NetBSD 3.99.15 (pkgsrc current within past 8 hours)
>Organization:
Prince of Songkla University
>Environment:
System: NetBSD jade.coe.psu.ac.th 3.99.15 NetBSD 3.99.15
(GENERIC-1.696-20060125) #8: Wed Jan 25 04:59:39 ICT 2006
kre%jade.coe.psu.ac.th@localhost:/usr/obj/current/kernels/JADE_ASUS i386
Architecture: i386
Machine: i386
>Description:
pkg_comp leaves empty mktemp(1) files in its sandbox when it
exits.
>How-To-Repeat:
Run pkg_comp to build anything...
pkg_comp build pkgtools/pkg_comp
would do.
Then ls -l ${PKG_COMP_SANDBOX_BASEDIR}/pkg_comp/tmp
Expect to see something like ...
jade$ ls -l
total 0
-rw------- 1 root wheel 0 Mar 12 18:58 pkg_comp-064a
-rw------- 1 root wheel 0 Mar 12 18:52 pkg_comp-083a
-rw------- 1 root wheel 0 Mar 12 18:37 pkg_comp-165a
-rw------- 1 root wheel 0 Mar 12 18:43 pkg_comp-166a
(I had many more, but they're all basically the same, there
should be one for each package build attempt, successful or
not, since the last "pkg_comp makeroot")
>Fix:
Apply the appended patch - one use of mktemp(1) was not
following the pattern applied elsewhere in the script.
But while I'm here, I don't really see the point of mktemp
used this way - its intent is to safely create a file the
script can use - in pkg_comp all the script ever does with
the created file is remove it. Given this, mktemp -u would be
just as good (which isn't really much good), and quicker.
But all this mess is mostly beause someone seems to believe
there's some advantage in having shell scripts use names
that end ".sh" - what's more, these are scripts that (normally)
no human ever sees, they are created, executed, and removed,
all quite quickly.
If pkg_comp were to simply use the results of mktemp(1) as
the script filename to use, it would all work just as well,
and be much much safer. Someone wanting to attack it now,
can just create the .sh file as a symlink to whatever they
want to overwrite (since the basename doesn't exist, the
output from mktemp(1) is highly predictable), mktemp won't notice
that file exists - true this is not easy in any case as pkg_comp/tmp
is root owned and 755 mode, but if that's safe enough, then mktemp
is not achieving anything, and the script might just as well
create its own names)
In any case, here's the patch for the forgotten "rm".
(there's no real need to have the variable "prefix", it
could have just used "script", but for consistency I just
copied the pattern used elsewhere).
--- pkg_comp.sh 2007-10-28 07:28:06.000000000 +0700
+++ pkg_comp.sh-FIXED 2008-03-12 20:58:09.000000000 +0700
@@ -764,14 +764,16 @@
#
check_pkg_install()
{
- local script
+ local script prefix
copy_vulnerabilities
# We assume filesystems are mounted!
echo "PKG_COMP ==> Checking if pkg_install is up to date"
- script=`mktemp $DESTDIR/pkg_comp/tmp/pkg_comp-XXXX`.sh
+ prefix=`mktemp $DESTDIR/pkg_comp/tmp/pkg_comp-XXXX`
+ rm "${prefix}"
+ script=${prefix}.sh
init_script $script
cat >> $script <<EOF
cd /usr/pkgsrc/pkgtools/pkg_comp
Home |
Main Index |
Thread Index |
Old Index