Parcourir la source

* Changed some more mkstemp()s to Tempfile

svn: 1326
Bryan Drewery il y a 22 ans
Parent
commit
7301217361
3 fichiers modifiés avec 27 ajouts et 56 suppressions
  1. 8 21
      src/binary.c
  2. 12 18
      src/conf.c
  3. 7 17
      src/main.c

+ 8 - 21
src/binary.c

@@ -67,11 +67,9 @@ bin_md5(const char *fname, int todo, MD5_CTX * ctx)
   OPENSSL_cleanse(&ctx, sizeof(ctx));
 
   if (todo == WRITE_MD5) {
-    char *fname_bak = NULL, s[DIRMAX] = "";
-    FILE *fn = NULL;            /* the new binary */
-    int i = 0, fd = -1;
-    size_t size = 0;
-
+    char *fname_bak = NULL;
+    size_t size = 0, i = 0;
+    Tempfile *newbin = new Tempfile("bin");
 
     size = strlen(fname) + 2;
     fname_bak = (char *) calloc(1, size);
@@ -85,24 +83,14 @@ bin_md5(const char *fname, int todo, MD5_CTX * ctx)
     size = ftell(f);
     fseek(f, 0, SEEK_SET);
 
-    egg_snprintf(s, sizeof s, ".bin-XXXXXX");
-    if ((fd = mkstemp(s)) == -1 || (fn = fdopen(fd, "wb")) == NULL) {
-      if (fd != -1) {
-        unlink(s);
-        close(fd);
-      }
-      fatal("Can't create temporary file!", 0);
-    }
-
     while ((len = fread(buf, 1, sizeof(buf) - 1, f))) {
       if (i) {                  /* to skip bytes for hash */
         i -= sizeof(buf) - 1;
         continue;
       }
-      if (fwrite(buf, sizeof(buf) - 1, 1, fn) != 1) {
+      if (fwrite(buf, sizeof(buf) - 1, 1, newbin->f) != 1) {
         fclose(f);
-        fclose(fn);
-        unlink(s);
+        delete newbin;
         werr(ERR_BINSTAT);
       }
 /*
@@ -119,23 +107,22 @@ bin_md5(const char *fname, int todo, MD5_CTX * ctx)
       if (!memcmp(buf, &settings.prefix, PREFIXLEN)) {
         strncpyz(settings.hash, hash, 65);
         edpack(&settings, hash, PACK_ENC);
-        fwrite(&settings.hash, sizeof(settings_t) - PREFIXLEN, 1, fn);
+        fwrite(&settings.hash, sizeof(settings_t) - PREFIXLEN, 1, newbin->f);
         i = sizeof(settings_t) - PREFIXLEN;
       }
     }
 
     fclose(f);
-    fclose(fn);
 
     if (movefile(fname, fname_bak))
       fatal("Crappy os :D", 0);
 
-    if (movefile(s, fname))
+    if (movefile(newbin->file, fname))
       fatal("Crappy os :D", 0);
 
     fixmod(fname);
     unlink(fname_bak);
-    unlink(s);
+    delete newbin;
   }
   return hash;
 }

+ 12 - 18
src/conf.c

@@ -132,25 +132,20 @@ swap_uids_back()
 void
 confedit()
 {
-  FILE *f = NULL;
-  char s[DIRMAX] = "", *editor = NULL;
-  int fd;
+  Tempfile tmpconf = Tempfile("conf");
+  char *editor = NULL;
   mode_t um;
   int waiter;
   pid_t pid, xpid;
 
-  egg_snprintf(s, sizeof s, "%s.conf-XXXXXX", tempdir);
-  um = umask(077);
-
-  if ((fd = mkstemp(s)) == -1 || (f = fdopen(fd, "w")) == NULL) {
-    fatal("Can't create temp conffile!", 0);
-  }
 
-  writeconf(NULL, f, CONF_COMMENT);
+  um = umask(077);
 
+  writeconf(NULL, tmpconf.f, CONF_COMMENT);
+  fclose(tmpconf.f);
   (void) umask(um);
 
-  if (!can_stat(s))
+  if (!can_stat(tmpconf.file))
     fatal("Cannot stat tempfile", 0);
 
   /* Okay, edit the file */
@@ -169,7 +164,6 @@ confedit()
             #endif
 */
   }
-  fclose(f);
 
   (void) signal(SIGINT, SIG_IGN);
   (void) signal(SIGQUIT, SIG_IGN);
@@ -182,13 +176,13 @@ confedit()
     case 0:
     {
       char *run = NULL;
-      size_t size = strlen(s) + strlen(editor) + 5;
+      size_t size = tmpconf.len + strlen(editor) + 5;
 
       setgid(getgid());
       setuid(getuid());
       run = (char *) calloc(1, size);
       /* child */
-      egg_snprintf(run, size, "%s %s", editor, s);
+      egg_snprintf(run, size, "%s %s", editor, tmpconf.file);
       execlp("/bin/sh", "/bin/sh", "-c", run, NULL);
       perror(editor);
       exit(1);
@@ -231,15 +225,15 @@ confedit()
 
   swap_uids_back();
 
-  if (!can_stat(s))
+  if (!can_stat(tmpconf.file))
     fatal("Error reading new config file", 0);
-  readconf(s, 0);               /* read cleartext conf tmp into &settings */
-  unlink(s);
+  readconf(tmpconf.file, 0);               /* read cleartext conf tmp into &settings */
+  unlink(tmpconf.file);
   conf_to_bin(&conffile);       /* will exit */
   exit(0);                      /* never reached */
 
 fatal:
-  unlink(s);
+  unlink(tmpconf.file);
   exit(1);
 }
 #endif /* !CYGWIN_HACKS */

+ 7 - 17
src/main.c

@@ -576,24 +576,14 @@ static void startup_checks() {
 
   /* test tempdir: it's vital */
   {
-    FILE *f = NULL;
-    char s[DIRMAX] = "";
-    int fd;
-
-    egg_snprintf(s, sizeof s, "%s.test-XXXXXX", tempdir);
-    if ((fd = mkstemp(s)) == -1 || (f = fdopen(fd, "w")) == NULL) {
-      if (fd != -1) {
-        unlink(s);
-        close(fd);
-      }
-      fatal("Can't write to tempdir!", 0);
-    }
-    fprintf(f, "\n");
-    if (fflush(f))
+    Tempfile *testdir = new Tempfile("test");
+    int result;
+   
+    fprintf(testdir->f, "\n");
+    result = fflush(testdir->f);
+    delete testdir;
+    if (result)
       fatal(strerror(errno), 0);
-
-    unlink(s);
-    fclose(f);
   }
 
   if (old_hack && can_stat(cfile))