From dc3e3bac8c552a1dd0a371b8f68d011e3c20e5c4 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Wilfried=20G=C3=B6esgens?= Date: Tue, 5 Jan 2010 23:01:35 +0000 Subject: [PATCH] * want if mkdir, chmod, chown fail... --- citadel/database.c | 19 +++++++++++++++---- citadel/server_main.c | 21 ++++++++++++++++++--- citadel/sysdep.c | 15 +++++++++++---- 3 files changed, 44 insertions(+), 11 deletions(-) diff --git a/citadel/database.c b/citadel/database.c index 7c157e4c2..4c049f60e 100644 --- a/citadel/database.c +++ b/citadel/database.c @@ -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); diff --git a/citadel/server_main.c b/citadel/server_main.c index 0321eeedc..bdcdac46e 100644 --- a/citadel/server_main.c +++ b/citadel/server_main.c @@ -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)); } diff --git a/citadel/sysdep.c b/citadel/sysdep.c index a0ba89b2c..dfe3278f1 100644 --- a/citadel/sysdep.c +++ b/citadel/sysdep.c @@ -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(); -- 2.30.2