mirror of
https://github.com/Stichting-MINIX-Research-Foundation/pkgsrc-ng.git
synced 2025-09-12 05:52:19 -04:00
58 lines
1.2 KiB
Plaintext
58 lines
1.2 KiB
Plaintext
$NetBSD: patch-CVE-2001-1593_1,v 1.1 2014/02/05 17:20:31 drochner Exp $
|
|
|
|
http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=737385
|
|
|
|
--- lib/routines.c.orig 2007-12-29 01:58:23.000000000 +0000
|
|
+++ lib/routines.c
|
|
@@ -242,3 +242,50 @@ unlink2 (PARAM_UNUSED void * dummy, cons
|
|
/* Don't complain if you can't unlink. Who cares of a tmp file? */
|
|
unlink (filename);
|
|
}
|
|
+
|
|
+/*
|
|
+ * Securely generate a temp file, and make sure it gets
|
|
+ * deleted upon exit.
|
|
+ */
|
|
+static char ** tempfiles;
|
|
+static unsigned ntempfiles;
|
|
+
|
|
+static void
|
|
+cleanup_tempfiles()
|
|
+{
|
|
+ while (ntempfiles--)
|
|
+ unlink(tempfiles[ntempfiles]);
|
|
+}
|
|
+
|
|
+char *
|
|
+safe_tempnam(const char *pfx)
|
|
+{
|
|
+ char *dirname, *filename;
|
|
+ int fd;
|
|
+
|
|
+ if (!(dirname = getenv("TMPDIR")))
|
|
+ dirname = "/tmp";
|
|
+
|
|
+ tempfiles = (char **) realloc(tempfiles,
|
|
+ (ntempfiles+1) * sizeof(char *));
|
|
+ if (tempfiles == NULL)
|
|
+ return NULL;
|
|
+
|
|
+ filename = malloc(strlen(dirname) + strlen(pfx) + sizeof("/XXXXXX"));
|
|
+ if (!filename)
|
|
+ return NULL;
|
|
+
|
|
+ sprintf(filename, "%s/%sXXXXXX", dirname, pfx);
|
|
+
|
|
+ if ((fd = mkstemp(filename)) < 0) {
|
|
+ free(filename);
|
|
+ return NULL;
|
|
+ }
|
|
+ close(fd);
|
|
+
|
|
+ if (ntempfiles == 0)
|
|
+ atexit(cleanup_tempfiles);
|
|
+ tempfiles[ntempfiles++] = filename;
|
|
+
|
|
+ return filename;
|
|
+}
|