diff options
Diffstat (limited to 'source/lib/fault.c')
-rw-r--r-- | source/lib/fault.c | 39 |
1 files changed, 35 insertions, 4 deletions
diff --git a/source/lib/fault.c b/source/lib/fault.c index 1964955f1b..1bd7d038c9 100644 --- a/source/lib/fault.c +++ b/source/lib/fault.c @@ -119,7 +119,18 @@ void dump_core_setup(const char *progname) SAFE_FREE(logbase); return; } - mkdir(corepath,0700); + if (mkdir(corepath,0700) == -1) { + if (errno != EEXIST) { + SAFE_FREE(corepath); + SAFE_FREE(logbase); + return; + } + } + if (chmod(corepath,0700) == -1) { + SAFE_FREE(corepath); + SAFE_FREE(logbase); + return; + } SAFE_FREE(corepath); if (asprintf(&corepath, "%s/cores/%s", @@ -127,11 +138,26 @@ void dump_core_setup(const char *progname) SAFE_FREE(logbase); return; } - mkdir(corepath,0700); + if (mkdir(corepath,0700) == -1) { + if (errno != EEXIST) { + SAFE_FREE(corepath); + SAFE_FREE(logbase); + return; + } + } - sys_chown(corepath,getuid(),getgid()); - chmod(corepath,0700); + if (sys_chown(corepath,getuid(),getgid()) == -1) { + SAFE_FREE(corepath); + SAFE_FREE(logbase); + return; + } + if (chmod(corepath,0700) == -1) { + SAFE_FREE(corepath); + SAFE_FREE(logbase); + return; + } + SAFE_FREE(corepath); SAFE_FREE(logbase); #ifdef HAVE_GETRLIMIT @@ -188,6 +214,11 @@ void dump_core_setup(const char *progname) become_root(); } + if (corepath == NULL) { + DEBUG(0, ("Can not dump core: corepath not set up\n")); + exit(1); + } + if (*corepath != '\0') { /* The chdir might fail if we dump core before we finish * processing the config file. |