Initial code commit for Toolkit 1.1.
[silc.git] / apps / silcd / silcd.c
index 9c02f13af4b36ca99172b19304e4ac5ae4fff795..2ab5106562a6a6d202937d438349cf2297183f8c 100644 (file)
@@ -261,14 +261,22 @@ SILC_TASK_CALLBACK(stop_server)
 SILC_TASK_CALLBACK(dump_stats)
 {
   FILE *fdd;
+  int fild;
   char filename[256];
 
   memset(filename, 0, sizeof(filename));
-  snprintf(filename, sizeof(filename) - 1, "/tmp/silcd.%d.stats", getpid());
-  fdd = fopen(filename, "w+");
-  if (!fdd)
+  snprintf(filename, sizeof(filename) - 1, "/tmp/silcd.%d.stats-XXXXXX", getpid());
+  fild = mkstemp(filename);
+  if (fild == -1)
     return;
 
+  fdd = fdopen(fild, "w");
+  if (fdd == NULL) {
+    close(fild);
+    unlink(filename);
+    return;
+  }
+
 #define STAT_OUTPUT(fmt, stat) fprintf(fdd, fmt "\n", (int)stat);
 
   fprintf(fdd, "SILC Server %s Statistics\n\n", silcd->server_name);