--- web/snapshot.c.mkdir 2012-04-26 12:40:43.399110703 -0700 +++ web/snapshot.c 2012-04-26 13:41:58.914792167 -0700 @@ -197,7 +197,10 @@ sprintf(dirid, "%lu-%u", (unsigned long)getpid(), (unsigned int)getcurrenttime(NULL)); sprintf(outdir, "%s/%s", xgetenv("XYMONSNAPDIR"), dirid); - if (mkdir(outdir, 0755) == -1) errormsg("Cannot create output directory"); + if (mkdir(outdir, 0755) == -1) { + if (xgetenv("XYMONSNAPDIR") && mkdir(xgetenv("XYMONSNAPDIR"), 0755) != -1) dbgprintf("Created %s\n", xgetenv("XYMONSNAPDIR")); + if (mkdir(outdir, 0755) == -1) errormsg("Cannot create output directory"); + } sprintf(xymonwebenv, "XYMONWEB=%s/%s", xgetenv("XYMONSNAPURL"), dirid); putenv(xymonwebenv); --- web/report.c.mkdir 2012-04-26 12:40:43.379111475 -0700 +++ web/report.c 2012-04-26 14:31:16.366778244 -0700 @@ -258,5 +258,8 @@ if (!csvoutput) { sprintf(outdir, "%s/%s", xgetenv("XYMONREPDIR"), dirid); - mkdir(outdir, 0755); + if (mkdir(outdir, 0755) == -1) { + if (xgetenv("XYMONREPDIR") && mkdir(xgetenv("XYMONREPDIR"), 0755) != -1) dbgprintf("Created %s\n", xgetenv("XYMONREPDIR")); + if (mkdir(outdir, 0755) == -1) errormsg("Cannot create output directory"); + } xymongen_argv[newargi++] = outdir; sprintf(xymonwebenv, "XYMONWEB=%s/%s", xgetenv("XYMONREPURL"), dirid); @@ -265,4 +265,5 @@ else { sprintf(outdir, "--csv=%s/%s.csv", xgetenv("XYMONREPDIR"), dirid); + if (xgetenv("XYMONREPDIR")) mkdir(xgetenv("XYMONREPDIR"), 0755); // superfluous, but handled here xymongen_argv[newargi++] = outdir; sprintf(csvdelimopt, "--csvdelim=%c", csvdelim); --- xymond/xymond_filestore.c.mkdir 2012-04-27 00:55:10.085724395 -0700 +++ xymond/xymond_filestore.c 2012-04-27 02:35:39.092696166 -0700 @@ -18,2 +18,3 @@ +#include #include @@ -57,6 +57,11 @@ } logfd = fopen(tmpfn, mode); + if (!logfd) { + errprintf("Could not open '%s' as '%s', mode %s: %s\n", fn, tmpfn, mode, strerror(errno)); + MEMUNDEFINE(tmpfn); + return; + } fwrite(msg, strlen(msg), 1, logfd); if (sender) fprintf(logfd, "\n\nMessage received from %s\n", sender); if (timesincechange >= 0) { @@ -254,6 +259,8 @@ errprintf("No directory given, aborting\n"); return 1; } + if (filedir && mkdir(filedir, 0755) != -1) dbgprintf("Created %s\n", filedir); + if (htmldir && mkdir(htmldir, 0755) != -1) dbgprintf("Created %s\n", htmldir); /* For picking up lost children */ setup_signalhandler("xymond_filestore"); @@ -361,1 +361,1 @@ - sprintf(logfn, "%s/%s", basename(filedir), hostname); + sprintf(logfn, "%s/%s", filedir, basename(hostname));