pkgsrc-Bugs archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
pkg/34816: pkgtools/pkg_chk-1.82 uses /tmp unconditionally for scratch
>Number: 34816
>Category: pkg
>Synopsis: pkgtools/pkg_chk-1.82 uses /tmp unconditionally for scratch
>Confidential: no
>Severity: non-critical
>Priority: low
>Responsible: pkg-manager
>State: open
>Class: change-request
>Submitter-Id: net
>Arrival-Date: Sat Oct 14 19:20:02 +0000 2006
>Originator: Jim Bernard
>Release: NetBSD 4.99.2
>Organization:
>Environment:
System: NetBSD 4.99.2 #0: Sat Sep 16 12:17:30 MDT 2006 i386
Architecture: i386
Machine: i386
>Description:
The pkg_chk shell script unconditionally puts its scratch
directory under /tmp and sets TMPDIR to the directory created.
This can lead to filling of the file system containing /tmp
when installing large package trees, and externally setting
TMPDIR doesn't help.
While I'm here: I noticed that pkg_chk executes pkg_add,
pkg_delete, and pkg_info as arguments to /usr/bin/env, but
/usr/bin/env is given no flags, nor any environment variables
to set, and the programs are specified by full path names,
such as "/usr/bin/env /usr/sbin/pkg_add ...". That would seem
to make the use of /usr/bin/env superfluous. Perhaps the intent
was to execute the version of (e.g.) pkg_add in the location where
the shell would find it in $PATH. If so, then it's appropriate
to use just (e.g.) "/usr/bin/env pkg_add ..." without the path
prefix to pkg_add.
>How-To-Repeat:
Run pkg_chk with TMPDIR set to, say, /var/tmp, and notice that
the temporary directory it creates is in /tmp. Or just read
the script.
>Fix:
Here's a candidate patch.
--- /usr/pkg/sbin/pkg_chk 2006-10-14 09:57:23.000000000 -0600
+++ ./pkg_chk 2006-10-14 12:50:20.000000000 -0600
@@ -86,12 +86,12 @@
done
}
cleanup_and_exit()
{
- rm -f $TMPFILE
- rmdir $TMPDIR
+ rm -f $PKG_CHK_TMPFILE
+ rmdir $PKG_TMPDIR
exit "$@"
}
delete_pkgs()
{
@@ -246,13 +246,13 @@
${PKG_INFO} -. -q -b $PACKAGES/$PKGNAME$PKG_SUFX | ${GREP} .
return
fi
# Unfortunately pkgsrc always outputs to a file, but it does helpfully
# allows # us to specify the name
- rm -f $TMPFILE
- ${MAKE} _BUILD_VERSION_FILE=$TMPFILE $TMPFILE
- cat $TMPFILE
+ rm -f $PKG_CHK_TMPFILE
+ ${MAKE} _BUILD_VERSION_FILE=$PKG_CHK_TMPFILE $PKG_CHK_TMPFILE
+ cat $PKG_CHK_TMPFILE
}
list_packages()
{
# DEPCHECKLIST contains packages for which binary packages are known to
@@ -666,12 +666,12 @@
if [ $# != 0 ];then
usage "Additional argument ($*) given"
fi
-TMPDIR=`mktemp -d /tmp/${0##*/}.XXXXXX`
-TMPFILE=$TMPDIR/tmp
+export PKG_TMPDIR=`mktemp -d ${PKG_TMPDIR:-${TMPDIR:-/tmp}}/${0##*/}.XXXXXX`
+PKG_CHK_TMPFILE=$PKG_TMPDIR/tmp
# Hide PKG_PATH to avoid breakage in 'make' calls
saved_PKG_PATH=$PKG_PATH
unset PKG_PATH || true
Home |
Main Index |
Thread Index |
Old Index