diff options
author | vorlon <vorlon@alioth.debian.org> | 2009-02-14 17:29:27 +0000 |
---|---|---|
committer | vorlon <vorlon@alioth.debian.org> | 2009-02-14 17:29:27 +0000 |
commit | 29cc33a9f2824fb3a9a842a6e3003771c95d1b90 (patch) | |
tree | bbcdfc2e58d5ac82336d533764bcfb2a2818a707 /source/lib/fault.c | |
parent | 13a8578b18e7eec921f6f35a1e06654511592ebe (diff) | |
download | samba-29cc33a9f2824fb3a9a842a6e3003771c95d1b90.tar.gz |
merge upstream 3.3.0
git-svn-id: svn://svn.debian.org/svn/pkg-samba/trunk/samba@2571 fc4039ab-9d04-0410-8cac-899223bdd6b0
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. |