aboutsummaryrefslogtreecommitdiff
path: root/security/tripwire12/files/patch-mktemp
diff options
context:
space:
mode:
Diffstat (limited to 'security/tripwire12/files/patch-mktemp')
-rw-r--r--security/tripwire12/files/patch-mktemp239
1 files changed, 239 insertions, 0 deletions
diff --git a/security/tripwire12/files/patch-mktemp b/security/tripwire12/files/patch-mktemp
new file mode 100644
index 000000000000..3e871d4b6e5b
--- /dev/null
+++ b/security/tripwire12/files/patch-mktemp
@@ -0,0 +1,239 @@
+This patches replace all uses of the (potentially insecure) mktemp(3)
+with a much safer tmpfile(3).
+
+--- src/config.parse.c Wed Jul 20 21:03:26 1994
++++ src/config.parse.c Wed May 17 17:30:22 2000
+@@ -55,7 +55,6 @@
+ #endif
+
+ /* prototypes */
+-char *mktemp();
+ static void configfile_descend();
+
+ #ifndef L_tmpnam
+@@ -86,7 +85,6 @@
+ char ignorestring[1024];
+ char s[MAXPATHLEN+1024];
+ char configfile[MAXPATHLEN+512];
+- char *tmpfilename;
+ char number[128];
+ int entrynum = 0;
+ int err;
+@@ -98,18 +96,6 @@
+ if (!printpreprocess && !quietmode)
+ fputs("### Phase 1: Reading configuration file\n", stderr);
+
+- /* generate temporary file name */
+- if ((tmpfilename = (char *) malloc(L_tmpnam + MAXPATHLEN)) == NULL) {
+- perror("configfile_read: malloc()");
+- exit(1);
+- };
+- (void) strcpy(tmpfilename, TEMPFILE_TEMPLATE);
+-
+- if ((char *) mktemp(tmpfilename) == NULL) {
+- perror("configfile_read: mktemp()");
+- exit(1);
+- }
+-
+ /* generate configuration file name */
+ if (specified_configmode != SPECIFIED_FILE)
+ sprintf(configfile, "%s/%s", config_path, config_file);
+@@ -149,25 +135,17 @@
+
+ err = umask(077); /* to protect the tempfile */
+
+- if ((fpout = fopen(tmpfilename, "w+")) == NULL) {
+- sprintf(s, "tripwire: Couldn't open config file '%s'", configfile);
+- perror(s);
+- exit(1);
+- }
+- (void) umask(err); /* return it to its former state */
+-
+- /* The following unlink accomplishes two things:
++ /* The use of tmpfile(3) accomplishes two things:
+ * 1) if the program terminates, we won't leave a temp
+ * file sitting around with potentially sensitive names
+ * in it.
+ * 2) the file is "hidden" while we run
+ */
+- if (unlink(tmpfilename) < 0) {
+- perror("configfile_read: unlink()");
++ if ((fpout = tmpfile()) == NULL) {
++ perror("tmpfile");
+ exit(1);
+ }
+- free(tmpfilename);
+-
++ (void) umask(err); /* return it to its former state */
+
+ /*
+ * pass 0: preprocess file
+--- src/dbase.build.c Mon Jul 25 11:24:09 1994
++++ src/dbase.build.c Wed May 17 18:22:14 2000
+@@ -66,7 +66,6 @@
+ int files_scanned_num = 0;
+
+ /* prototypes */
+-char *mktemp();
+ static void database_record_write();
+
+ char backupfile[MAXPATHLEN+256];
+@@ -125,17 +124,7 @@
+
+ /* where do we write the new database? */
+ if (mode == DBASE_TEMPORARY) {
+- char *tmpfilename = (char *) malloc(strlen(TEMPFILE_TEMPLATE)+1);
+- if (tmpfilename == NULL)
+- die_with_err("malloc() failed in database_build", (char *) NULL);
+- (void) strcpy(tmpfilename, TEMPFILE_TEMPLATE);
+-
+- if ((char *) mktemp(tmpfilename) == NULL)
+- die_with_err("database_build: mktemp()", (char *) NULL);
+-
+- (void) strcpy(tempdatabase_file, tmpfilename);
+- (void) strcpy(database, tempdatabase_file);
+- free(tmpfilename);
++ /* do nothing */
+ } /* end if temporary database */
+ else if (mode == DBASE_UPDATE) {
+ sprintf(database, "./databases/%s", database_file);
+@@ -224,6 +213,12 @@
+ }
+
+ /* rebuild the database */
++ if (mode == DBASE_TEMPORARY) {
++ fpw = tmpfile();
++ if (fpw == NULL)
++ die_with_err("call tmpfile(3) failed. Check your TMPDIR setting",
++ NULL);
++ } else
+ if ((fpw = fopen(database, "w")) == NULL)
+ die_with_err("Hint: Maybe the database directory '%s' doesn't exist? fopen()", database);
+
+@@ -369,6 +364,6 @@
+
+- /* we don't want to allow anyone to spoof the temporary file in /tmp */
++ /* if the database was temporary, the file was opened by tmpfile(3) --
++ as such, it can not be accessed by anything but this process */
+ if (mode == DBASE_TEMPORARY) {
+- if ((fptempdbase = freopen(database, "r", fpw)) == NULL)
+- die_with_err("temporary database file disappeared?!?", database);
++ fptempdbase = fpw;
+ rewind(fptempdbase);
+--- src/main.c Fri Aug 26 04:23:03 1994
++++ src/main.c Wed May 17 18:01:00 2000
+@@ -108,7 +108,6 @@
+ char *database_path = DATABASE_PATH;
+ char *config_path = CONFIG_PATH;
+
+-char tempdatabase_file[MAXPATHLEN+256];
+ FILE *fptempdbase;
+
+ char *defaultignore = DEFAULTIGNORE;
+--- src/preen.c Mon Jul 25 11:24:11 1994
++++ src/preen.c Wed May 17 18:22:22 2000
+@@ -37,7 +37,6 @@
+ static int numentriesread = 0; /* running count of @@contents */
+
+ /* prototypes */
+-char *mktemp();
+ static void olddbasefile_load();
+
+ char *updatemodes[] = {
+@@ -97,9 +96,6 @@
+ preen_report(interactive, ppp_updateentries);
+ if (!specified_configmode)
+ (void) fclose(fp_in);
+-
+- /* remove the temporary database file */
+- (void) unlink(tempdatabase_file);
+
+ SPDEBUG(3) printf("*** leaving update_gather()\n");
+
+--- src/siggen.c Mon Jul 25 11:24:12 1994
++++ src/siggen.c Wed May 17 18:36:51 2000
+@@ -52,7 +52,6 @@
+
+ extern int optind;
+ int debuglevel = 0;
+-char *mktemp();
+
+ int (*pf_signatures [NUM_SIGS]) () = {
+ SIG0FUNC,
+@@ -84,7 +83,6 @@
+ };
+ int verbosity = 0;
+ int quietmode = 0;
+-char *tmpfilename = NULL;
+ int readstdin = 0;
+
+
+@@ -167,19 +167,6 @@
+ FILE *fpout;
+- /* generate temporary file name */
+- if ((tmpfilename = (char *) malloc(L_tmpnam + MAXPATHLEN)) == NULL) {
+- perror("main: malloc()");
+- exit(1);
+- };
+- (void) strcpy(tmpfilename, "/tmp/twzXXXXXX");
+-
+- if ((char *) mktemp(tmpfilename) == NULL) {
+- perror("siggen: mktemp()");
+- exit(1);
+- }
+
+ /* output */
+- if (!(fpout = fopen(tmpfilename, "w"))) {
+- char err[1024];
+- sprintf(err, "main: fopen(%s)", tmpfilename);
+- perror(err);
++ if (!(fpout = tmpfile())) {
++ perror("tmpfile()");
+ exit(1);
+@@ -189,12 +176,6 @@
+ putc(c, fpout);
+- fclose(fpout);
+- if ((fd = open(tmpfilename, O_RDONLY)) < 0) {
+- perror("siggen: open");
+- exit(1);
+- }
+- if (siggen(fd) < 0)
++ rewind(fpout);
++ if (siggen(fileno(fpout)) < 0)
+ errors++;
+
+- if (fd)
+- close(fd);
++ close(fd);
+- unlink(tmpfilename);
+--- src/utils.c Mon Jul 25 12:23:16 1994
++++ src/utils.c Wed May 17 18:21:38 2000
+@@ -785,23 +785,15 @@
+ int
+ fd_tempfilename_generate()
+ {
+- char tmp[MAXPATHLEN+256];
+- int fd;
++ FILE *tmp;
+
+- (void) strcpy(tmp, TEMPFILE_TEMPLATE);
+- if ((char *) mktemp(tmp) == NULL) {
+- perror("tempfilename_generate: mktemp()");
++ tmp = tmpfile();
++ if (tmp == NULL) {
++ perror("tempfilename_generate: tmpfile()");
+ exit(1);
+ }
+
+- if ((fd = open(tmp, O_RDWR | O_CREAT, 0600)) < 0) {
+- perror("tempfilename_generate: open()");
+- exit(1);
+- }
+- /* unlink right away to make sure no one can tamper with our file */
+- unlink(tmp);
+-
+- return fd;
++ return fileno(tmp);
+ }
+
+ /*