diff a/src/rrd_daemon.c b/src/rrd_daemon.c --- a/src/rrd_daemon.c +++ b/src/rrd_daemon.c @@ -3090,8 +3090,7 @@ static int read_options (int argc, char **argv) /* {{{ */ case 'j': { char journal_dir_actual[PATH_MAX]; - const char *dir; - dir = journal_dir = strdup(realpath((const char *)optarg, journal_dir_actual)); + const char *dir = (const char *)optarg; status = rrd_mkdir_p(dir, 0777); if (status != 0) @@ -3100,8 +3099,16 @@ static int read_options (int argc, char **argv) /* {{{ */ dir, rrd_strerror(errno)); return 6; } + journal_dir = realpath((const char *)dir, journal_dir_actual); + if (! journal_dir) { + fprintf(stderr, "Failed to canonicalize journal directory '%s': %s\n", + dir, rrd_strerror(errno)); + return 6; + } + + journal_dir = strdup(journal_dir); - if (access(dir, R_OK|W_OK|X_OK) != 0) + if (access(journal_dir, R_OK|W_OK|X_OK) != 0) { fprintf(stderr, "Must specify a writable directory with -j! (%s)\n", errno ? rrd_strerror(errno) : "");