summaryrefslogtreecommitdiff
path: root/source/lib/fault.c
diff options
context:
space:
mode:
authorvorlon <vorlon@alioth.debian.org>2009-02-14 17:12:39 +0000
committervorlon <vorlon@alioth.debian.org>2009-02-14 17:12:39 +0000
commitca16c95b70df7e455b620a5d6eb9f224c725ae44 (patch)
tree1b2bdb4d178b3e53eec9e5b6d59fa053b6bc86f6 /source/lib/fault.c
parentd113059e3e5c884802d6b8c2741e53247d8ff64e (diff)
downloadsamba-ca16c95b70df7e455b620a5d6eb9f224c725ae44.tar.gz
Merge samba-3.3.0 into branches/samba/upstream.
git-svn-id: svn://svn.debian.org/svn/pkg-samba/branches/samba/upstream@2570 fc4039ab-9d04-0410-8cac-899223bdd6b0
Diffstat (limited to 'source/lib/fault.c')
-rw-r--r--source/lib/fault.c39
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.