Code

When specifying a relative path (-j option) rrd_cached would segfault when
authoroetiker <oetiker@a5681a0c-68f1-0310-ab6d-d61299d08faa>
Mon, 26 Apr 2010 12:38:11 +0000 (12:38 +0000)
committeroetiker <oetiker@a5681a0c-68f1-0310-ab6d-d61299d08faa>
Mon, 26 Apr 2010 12:38:11 +0000 (12:38 +0000)
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/branches/1.4/program@2072 a5681a0c-68f1-0310-ab6d-d61299d08faa

src/rrd_daemon.c

index 58b07049d836924fe2ad65e6a6f7220af6320428..3697a4aec75b95ac0ce96dd4b243a47dd1a9c9a0 100644 (file)
@@ -2111,6 +2111,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? */
@@ -3062,7 +3066,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)