From ad9c4d7021c42455727b40c727e301657c090928 Mon Sep 17 00:00:00 2001 From: kyoshiro Date: Wed, 23 May 2007 20:55:09 +0000 Subject: [PATCH] create mandatory directories --- scripts/bipgenconfig | 19 ++++++++++++++----- src/bip.c | 1 + src/log.c | 11 +++++++++-- src/log.h | 1 + 4 files changed, 25 insertions(+), 7 deletions(-) diff --git a/scripts/bipgenconfig b/scripts/bipgenconfig index 6e28968..0c27a9e 100755 --- a/scripts/bipgenconfig +++ b/scripts/bipgenconfig @@ -14,8 +14,10 @@ use strict; use IO::File; use Data::Dumper; -my $CFILE = $ENV{'HOME'} . '/.bip/bip.conf.autogen'; -my $sfile = $ENV{'HOME'} . '/.bip/bipgenconfig.store'; +my $bipdir = $ENV{'HOME'} . '/.bip'; +my $CFILE = $bipdir . '/bip.conf.autogen'; +my $sfile = $bipdir . '/bipgenconfig.store'; +my $certout = $bipdir . '/bip.pem.autogen'; my $SERIALIZE_DBG = 1; my %cf; my $DEBUG = 0; @@ -26,7 +28,6 @@ my $mode = 'normal'; my $maxlevel = 5; my $bipmkpw; my $tmpcrt = "/tmp/bip-cert.cnf"; -my $certout = $ENV{'HOME'} . '/.bip/bip.pem.autogen'; my %optdesc = ( 'global' => { 'ip' => { 'type' => 's', 'adv' => 1, 'default' => '0.0.0.0', @@ -39,7 +40,7 @@ my %optdesc = ( 'optional' => 1, 'desc' => 'Do you want to enable client side SSL ?' }, 'pid_file' => { 'type' => 's', 'adv' => 1, 'optional' => 1, - 'default' => $ENV{'HOME'} . '/.bip/bip.pid', + 'default' => $bipdir . '/bip.pid', 'desc' => 'Where do you want the pidfile to be stored ?' }, 'log' => { 'type' => 'b', 'adv' => 0, 'default' => 'true', 'optional' => 1, @@ -54,7 +55,7 @@ my %optdesc = ( 'desc' => 'Define bip\'s system logs verbosity level {less 0 - 7 tremendous}:' }, 'log_root' => { 'type' => 's', 'adv' => 0, 'optional' => 1, - 'default' => $ENV{'HOME'} . '/.bip/logs', + 'default' => $bipdir . '/logs', 'depends' => 'log', 'depval' => 'true', 'desc' => 'In which directory do you want logs to be stored ?' }, 'log_format' => { 'type' => 's', 'adv' => 1, 'default' => '%n/%Y-%m/%c.%d.log', @@ -1271,6 +1272,14 @@ sub invMode { return ($mode eq 'advanced' ? 'normal' : 'advanced'); } +if (! -e $bipdir) { + mkdir($bipdir) || fatal("Unable to create bip's dir `$bipdir'"); +} elsif (! -d $bipdir) { + fatal("Bip's dir `$bipdir' already exists and is not a directory"); +} elsif (! -w $bipdir) { + fatal("Bip's dir `$bipdir' already exists and is not writable"); +} + main_menu(); #sets config backlog #different user/nick/real ? diff --git a/src/bip.c b/src/bip.c index c86a311..bfc9266 100644 --- a/src/bip.c +++ b/src/bip.c @@ -985,6 +985,7 @@ int main(int argc, char **argv) exit(28); } + check_dir(conf_log_root, 1); fd = do_pid_stuff(); pid_t pid = 0; if (conf_daemonize) diff --git a/src/log.c b/src/log.c index 97407c1..53fc708 100644 --- a/src/log.c +++ b/src/log.c @@ -38,7 +38,7 @@ static char *_log_wrap(char *dest, char *line); /* TODO: change fatal("out of memory") to cleanup & return NULL */ -int check_dir(char *filename) +int check_dir(char *filename, int is_fatal) { int err; struct stat statbuf; @@ -47,15 +47,22 @@ int check_dir(char *filename) if (err && errno == ENOENT) { err = mkdir(filename, 0750); if (err) { + if (is_fatal) + fatal("mkdir(%s) %s", filename, + strerror(errno)); mylog(LOG_ERROR, "mkdir(%s) %s", filename, strerror(errno)); return 1; } } else if (err) { + if (is_fatal) + fatal("stat(%s) %s", filename, strerror(errno)); mylog(LOG_ERROR, "stat(%s) %s", filename, strerror(errno)); return 1; } else if (!(statbuf.st_mode & S_IFDIR)) { + if (is_fatal) + fatal("%s is not a directory", filename); mylog(LOG_ERROR, "%s is not a directory", filename); return 1; } @@ -88,7 +95,7 @@ int check_dir_r(char *dirname) count += pos; *(dir + count) = '\0'; mylog(LOG_DEBUGVERB,"check_dir_r: %s", dir); - if (check_dir(dir)) { + if (check_dir(dir, 0)) { free(dir); return 1; } diff --git a/src/log.h b/src/log.h index 8389d76..4f5a8e7 100644 --- a/src/log.h +++ b/src/log.h @@ -93,4 +93,5 @@ int log_has_backlog(log_t *logdata, char *destination); void log_flush_all(void); void log_client_none_connected(log_t *logdata); void log_reset(logfilegroup_t *); +int check_dir(char *filename, int is_fatal); #endif