From: oetiker Date: Mon, 26 Apr 2010 12:38:11 +0000 (+0000) Subject: When specifying a relative path (-j option) rrd_cached would segfault when X-Git-Url: https://git.tokkee.org/?a=commitdiff_plain;h=e50ceea8bf16dc7aaec6d005d3b63c4ffacdd0ae;p=rrdtool-all.git When specifying a relative path (-j option) rrd_cached would segfault when trying to read past journals (journal_init function). Added an extra check to journal_init before reading the directory, and, when parsing the command line options, to expand the relative path to an absolute path. -- Adrian-Ioan Vasile yoyo@opennet.ro git-svn-id: svn://svn.oetiker.ch/rrdtool/trunk@2072 a5681a0c-68f1-0310-ab6d-d61299d08faa --- diff --git a/program/src/rrd_daemon.c b/program/src/rrd_daemon.c index 3be6e784..6fda921b 100644 --- a/program/src/rrd_daemon.c +++ b/program/src/rrd_daemon.c @@ -2293,6 +2293,10 @@ static void journal_init(void) /* {{{ */ } dir = opendir(journal_dir); + if (!dir) { + RRDD_LOG(LOG_CRIT, "journal_init: opendir(%s) failed\n", journal_dir); + return; + } while ((dent = readdir(dir)) != NULL) { /* looks like a journal file? */ @@ -3244,7 +3248,9 @@ static int read_options (int argc, char **argv) /* {{{ */ case 'j': { - const char *dir = journal_dir = strdup(optarg); + char journal_dir_actual[PATH_MAX]; + const char *dir; + dir = journal_dir = strdup(realpath((const char *)optarg, journal_dir_actual)); status = rrd_mkdir_p(dir, 0777); if (status != 0)