X-Git-Url: http://git.pld-linux.org/?a=blobdiff_plain;ds=sidebyside;f=a2ps-security.patch;h=f32e1f3542c538ee2dcc21da943c8802e73f8b48;hb=718daff33798cb5e7f497d724825ab60d9bab0a4;hp=ce4b6cfa54e40f019d791b1aaf224b152c87a7b8;hpb=9d216bc5f3c0c727f5e9c96a074c9be3f8097771;p=packages%2Fa2ps.git diff --git a/a2ps-security.patch b/a2ps-security.patch index ce4b6cf..f32e1f3 100644 --- a/a2ps-security.patch +++ b/a2ps-security.patch @@ -1,67 +1,65 @@ -diff -ur a2ps-4.13.orig/lib/routines.c a2ps-4.13/lib/routines.c ---- a2ps-4.13.orig/lib/routines.c Sat Oct 16 06:46:37 1999 -+++ a2ps-4.13/lib/routines.c Fri Jan 5 12:51:20 2001 -@@ -242,3 +242,50 @@ - /* 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, filename); -+ -+ if ((fd = mkstemp(filename)) < 0) { -+ free(filename); -+ return NULL; -+ } -+ close(fd); -+ -+ if (ntempfiles == 0) -+ atexit(cleanup_tempfiles); -+ tempfiles[ntempfiles++] = filename; -+ -+ return filename; -+} -diff -ur a2ps-4.13.orig/lib/routines.h a2ps-4.13/lib/routines.h ---- a2ps-4.13.orig/lib/routines.h Mon Oct 18 22:24:41 1999 -+++ a2ps-4.13/lib/routines.h Fri Jan 5 12:37:53 2001 -@@ -255,7 +255,8 @@ - /* If _STR_ is not defined, give it a tempname in _TMPDIR_ */ - #define tempname_ensure(Str) \ - do { \ -- (Str) = (Str) ? (Str) : tempnam (NULL, "a2_"); \ -+ (Str) = (Str) ? (Str) : safe_tempnam("a2_"); \ - } while (0) -+char * safe_tempnam(const char *); - - #endif +--- a2ps-4.13/lib/routines.c~ 1999-10-16 06:46:37.000000000 +0200 ++++ a2ps-4.13/lib/routines.c 2003-08-21 09:58:57.361425544 +0200 +@@ -242,3 +242,50 @@ + /* 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 = NULL; ++static unsigned ntempfiles = 0; ++ ++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; ++} +--- a2ps-4.13/lib/routines.h~ 1999-10-18 22:24:41.000000000 +0200 ++++ a2ps-4.13/lib/routines.h 2003-08-21 09:55:11.500761584 +0200 +@@ -255,7 +255,7 @@ + /* If _STR_ is not defined, give it a tempname in _TMPDIR_ */ + #define tempname_ensure(Str) \ + do { \ +- (Str) = (Str) ? (Str) : tempnam (NULL, "a2_"); \ ++ (Str) = (Str) ? (Str) : safe_tempnam("a2_"); \ + } while (0) +- ++char * safe_tempnam(const char *); + #endif