s4:smbtorture Create a new random output directory each time, and delete it
authorAndrew Bartlett <abartlet@samba.org>
Tue, 6 Jul 2010 05:25:54 +0000 (15:25 +1000)
committerMatthieu Patou <mat@samba.org>
Mon, 11 Oct 2010 13:46:21 +0000 (13:46 +0000)
This ensures we don't delete an exiting directory.

Andrew Bartlett

Signed-off-by: Matthieu Patou <mat@matws.net>
source4/torture/smbtorture.c

index 8989bdf8d2924264f4e752faedcd2d1cf6f16788..36b8c0f37773c4e234885bdc05cafd0412d1548d 100644 (file)
@@ -404,6 +404,7 @@ int main(int argc,char *argv[])
        int shell = false;
        static const char *ui_ops_name = "subunit";
        const char *basedir = NULL;
+       char *outputdir;
        const char *extra_module = NULL;
        static int list_tests = 0;
        int num_extra_users = 0;
@@ -626,14 +627,22 @@ int main(int argc,char *argv[])
                        fprintf(stderr, "Please specify an absolute path to --basedir\n");
                        return 1;
                }
-               torture->outputdir = basedir;
+               outputdir = talloc_asprintf(torture, "%s/smbtortureXXXXXX", basedir);
        } else {
                char *pwd = talloc_size(torture, PATH_MAX);
                if (!getcwd(pwd, PATH_MAX)) {
                        fprintf(stderr, "Unable to determine current working directory\n");
                        return 1;
                }
-               torture->outputdir = pwd;
+               outputdir = talloc_asprintf(torture, "%s/smbtortureXXXXXX", pwd);
+       }
+       if (!outputdir) {
+               fprintf(stderr, "Could not allocate per-run output dir\n");
+               return 1;
+       }
+       torture->outputdir = mkdtemp(outputdir);
+       if (!torture->outputdir) {
+               perror("Failed to make temp output dir");
        }
 
        torture->lp_ctx = cmdline_lp_ctx;
@@ -670,6 +679,9 @@ int main(int argc,char *argv[])
                }
        }
 
+       /* Now delete the temp dir we created */
+       torture_deltree_outputdir(torture);
+
        if (torture->results->returncode && correct) {
                return(0);
        } else {