1 diff a/src/rrd_daemon.c b/src/rrd_daemon.c
2 --- a/src/rrd_daemon.c
3 +++ b/src/rrd_daemon.c
4 @@ -3090,8 +3090,7 @@ static int read_options (int argc, char **argv) /* {{{ */
5 case 'j':
6 {
7 char journal_dir_actual[PATH_MAX];
8 - const char *dir;
9 - dir = journal_dir = strdup(realpath((const char *)optarg, journal_dir_actual));
10 + const char *dir = (const char *)optarg;
12 status = rrd_mkdir_p(dir, 0777);
13 if (status != 0)
14 @@ -3100,8 +3099,16 @@ static int read_options (int argc, char **argv) /* {{{ */
15 dir, rrd_strerror(errno));
16 return 6;
17 }
18 + journal_dir = realpath((const char *)dir, journal_dir_actual);
19 + if (! journal_dir) {
20 + fprintf(stderr, "Failed to canonicalize journal directory '%s': %s\n",
21 + dir, rrd_strerror(errno));
22 + return 6;
23 + }
24 +
25 + journal_dir = strdup(journal_dir);
27 - if (access(dir, R_OK|W_OK|X_OK) != 0)
28 + if (access(journal_dir, R_OK|W_OK|X_OK) != 0)
29 {
30 fprintf(stderr, "Must specify a writable directory with -j! (%s)\n",
31 errno ? rrd_strerror(errno) : "");