* want if mkdir, chmod, chown fail...
authorWilfried Göesgens <willi@citadel.org>
Tue, 5 Jan 2010 23:01:35 +0000 (23:01 +0000)
committerWilfried Göesgens <willi@citadel.org>
Tue, 5 Jan 2010 23:01:35 +0000 (23:01 +0000)
citadel/database.c
citadel/server_main.c
citadel/sysdep.c

index 7c157e4c2c155522cd03d12f153fe1a2d1ebf880..4c049f60e86edd77653566d72234290adc6ab613 100644 (file)
@@ -301,10 +301,21 @@ void open_databases(void)
         * Silently try to create the database subdirectory.  If it's
         * already there, no problem.
         */
-       mkdir(ctdl_data_dir, 0700);
-       chmod(ctdl_data_dir, 0700);
-       chown(ctdl_data_dir, CTDLUID, (-1));
-
+       if ((mkdir(ctdl_data_dir, 0700) != 0) && (errno != EEXIST)){
+               CtdlLogPrintf(CTDL_EMERG, 
+                             "unable to create database directory [%s]: %s", 
+                             ctdl_data_dir, strerror(errno));
+       }
+       if (chmod(ctdl_data_dir, 0700) != 0){
+               CtdlLogPrintf(CTDL_EMERG, 
+                             "unable to set database directory accessrights [%s]: %s", 
+                             ctdl_data_dir, strerror(errno));
+       }
+       if (chown(ctdl_data_dir, CTDLUID, (-1)) != 0){
+               CtdlLogPrintf(CTDL_EMERG, 
+                             "unable to set the owner for [%s]: %s", 
+                             ctdl_data_dir, strerror(errno));
+       }
        CtdlLogPrintf(CTDL_DEBUG, "bdb(): Setting up DB environment\n");
        db_env_set_func_yield(sched_yield);
        ret = db_env_create(&dbenv, 0);
index 0321eeedc8909cb2b55a1fd68b64715ac2a54244..bdcdac46ed264fdeaf3b1f4bd31733560492235c 100644 (file)
@@ -165,7 +165,14 @@ int main(int argc, char **argv)
                }
 
                else if (!strncmp(argv[a], "-t", 2)) {
-                       freopen(&argv[a][2], "w", stderr);
+                       if (freopen(&argv[a][2], "w", stderr) != stderr)
+                       {
+                               CtdlLogPrintf(CTDL_EMERG, 
+                                             "unable to open your trace log [%s]: %s", 
+                                             &argv[a][2], 
+                                             strerror(errno));
+                               exit(1);
+                       }
                }
 
                else if (!strncmp(argv[a], "-D", 2)) {
@@ -261,8 +268,16 @@ int main(int argc, char **argv)
 #else // HAVE_GETPWUID_R
                pwp = NULL;
 #endif // HAVE_GETPWUID_R
-               mkdir(ctdl_run_dir, 0755);
-               chown(ctdl_run_dir, config.c_ctdluid, (pwp==NULL)?-1:pw.pw_gid);
+
+               if ((mkdir(ctdl_run_dir, 0755) != 0) && (errno != EEXIST))
+                       CtdlLogPrintf(CTDL_EMERG, 
+                                     "unable to create run directory [%s]: %s", 
+                                     ctdl_run_dir, strerror(errno));
+
+               if (chown(ctdl_run_dir, config.c_ctdluid, (pwp==NULL)?-1:pw.pw_gid) != 0)
+                       CtdlLogPrintf(CTDL_EMERG, 
+                                     "unable to set the access rights for [%s]: %s", 
+                                     ctdl_run_dir, strerror(errno));
        }
                        
 
index a0ba89b2c71e3144ee2c5e59279f224bc48e7011..dfe3278f1089fff814f5262885354318747499dd 100644 (file)
@@ -745,7 +745,10 @@ void start_daemon(int unused) {
         * We don't just call close() because we don't want these fd's
         * to be reused for other files.
         */
-       chdir(ctdl_run_dir);
+       if (chdir(ctdl_run_dir) != 0)
+               CtdlLogPrintf(CTDL_EMERG, 
+                             "unable to change into directory [%s]: %s", 
+                             ctdl_run_dir, strerror(errno));
 
        child = fork();
        if (child != 0) {
@@ -758,9 +761,13 @@ void start_daemon(int unused) {
 
        setsid();
        umask(0);
-        freopen("/dev/null", "r", stdin);
-        freopen("/dev/null", "w", stdout);
-        freopen("/dev/null", "w", stderr);
+        if ((freopen("/dev/null", "r", stdin) != stdin) || 
+           (freopen("/dev/null", "w", stdout) != stdout) || 
+           (freopen("/dev/null", "w", stderr) != stderr))
+               CtdlLogPrintf(CTDL_EMERG, 
+                             "unable to reopen stdin/out/err %s", 
+                             strerror(errno));
+               
 
        do {
                current_child = fork();