Date: Sat, 23 Feb 2002 20:06:41 -0600 From: "Scot W. Hetzel" <hetzels@westbend.net> To: "'freebsd-security@freebsd.org'" <freebsd-security@FreeBSD.ORG> Subject: Re: RE: Third /tmp location ? Message-ID: <008d01c1bcd7$e6f39c40$11fd2fd8@westbend.net> References: <B57AF59C8ABFD411BBE000508BF300F303B70634@wh01ex01.oskarmobil.cz> <20020222152529.A16356@xor.obsecurity.org> <20020222152714.B16356@xor.obsecurity.org> <000501c1bcab$84ff2df0$1efd2fd8@westbend.net> <20020223161724.A32157@xor.obsecurity.org>
next in thread | previous in thread | raw e-mail | index | archive | help
>On Sat, Feb 23, 2002 at 02:48:52PM -0600, Scot W. Hetzel wrote:
>> How about patching find_play_pen to set a variable to say that /usr/tmp
was
>> created by the pkg_install tools and then when the pkg_install tools call
>> leave_playpen, /usr/tmp is removed only if the variable is set.
>
>That might be the best idea.
>
>> attached is a untested patch for pen.c.
>
>It's best to include patches directly so they can be read inline, but
>thanks..I'll try and take a look at it.
>
Here's the patch inline for others to review:
Index: pen.c
===================================================================
RCS file: /home/ncvs/src/usr.sbin/pkg_install/lib/pen.c,v
retrieving revision 1.31.2.6
diff -u -r1.31.2.6 pen.c
--- pen.c 22 Nov 2001 17:40:36 -0000 1.31.2.6
+++ pen.c 23 Feb 2002 20:34:31 -0000
@@ -34,6 +34,9 @@
static char PenLocation[FILENAME_MAX];
static char Previous[FILENAME_MAX];
+/* did we create the /usr/tmp directory */
+static int create_usr_tmp;
+
char *
where_playpen(void)
{
@@ -47,6 +50,8 @@
char *cp;
struct stat sb;
+ create_usr_tmp=0;
+
if (pen[0] && isdir(dirname(pen)) == TRUE && (min_free(dirname(pen)) >=
sz))
return pen;
else if ((cp = getenv("PKG_TMPDIR")) != NULL && stat(cp, &sb) != FAIL
&& (min_free(cp) >= sz))
@@ -57,9 +62,12 @@
strcpy(pen, "/var/tmp/instmp.XXXXXX");
else if (stat("/tmp", &sb) != FAIL && min_free("/tmp") >= sz)
strcpy(pen, "/tmp/instmp.XXXXXX");
- else if ((stat("/usr/tmp", &sb) == SUCCESS || mkdir("/usr/tmp", 01777)
== SUCCESS) && min_free("/usr/tmp") >= sz)
+ else if (stat("/usr/tmp", &sb) == SUCCESS && min_free("/usr/tmp") >=
sz) {
strcpy(pen, "/usr/tmp/instmp.XXXXXX");
- else {
+ } else if (mkdir("/usr/tmp", 01777) == SUCCESS && min_free("/usr/tmp")
>= sz) {
+ strcpy(pen, "/usr/tmp/instmp.XXXXXX");
+ create_usr_tmp=1;
+ } else {
cleanup(0);
errx(2, __FUNCTION__
": can't find enough temporary space to extract the files, please set
your\n"
@@ -161,6 +169,10 @@
if (PenLocation[0] == '/' && vsystem("rm -rf %s", PenLocation))
warnx("couldn't remove temporary dir '%s'", PenLocation);
popPen(PenLocation);
+ }
+ if (create_usr_tmp) {
+ if ( rmdir(/usr/tmp") == FAIL )
+ warnx("couldn't remove /usr/tmp");
}
signal(SIGINT, oldsig);
}
To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-security" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?008d01c1bcd7$e6f39c40$11fd2fd8>
