From 5e33660b65d8bc1571e12d697bddbdbb8716940a Mon Sep 17 00:00:00 2001 From: oetiker Date: Sun, 4 Oct 2009 11:29:40 +0000 Subject: [PATCH] rrdcached: Improved the "base-dir symlink check". The daemon checks if the specified base directory contains symlinks by comparing the canonicalized path name (by realpath()) with the path name specified on the command line. The GNU libc's implementation of realpath() removed trailing slashes ('/') from the pathname. Thus, specifying a base directory with a trailing slash results in rrdcached aborting, complaining about an invalid base directory, which is quite annoying imho. Now, trailing slashes are removed before comparing the two path names. -- Sebastian Harl git-svn-id: svn://svn.oetiker.ch/rrdtool/trunk@1923 a5681a0c-68f1-0310-ab6d-d61299d08faa --- program/src/rrd_daemon.c | 28 ++++++++++++++++++---------- 1 file changed, 18 insertions(+), 10 deletions(-) diff --git a/program/src/rrd_daemon.c b/program/src/rrd_daemon.c index fa7dc41b..7406325c 100644 --- a/program/src/rrd_daemon.c +++ b/program/src/rrd_daemon.c @@ -2918,16 +2918,6 @@ static int read_options (int argc, char **argv) /* {{{ */ "%s\n", config_base_dir, rrd_strerror(errno)); return 5; } - else if (strncmp(config_base_dir, - base_realpath, sizeof(base_realpath)) != 0) - { - fprintf(stderr, - "Base directory (-b) resolved via file system links!\n" - "Please consult rrdcached '-b' documentation!\n" - "Consider specifying the real directory (%s)\n", - base_realpath); - return 5; - } len = strlen (config_base_dir); while ((len > 0) && (config_base_dir[len - 1] == '/')) @@ -2943,6 +2933,24 @@ static int read_options (int argc, char **argv) /* {{{ */ } _config_base_dir_len = len; + + len = strlen (base_realpath); + while ((len > 0) && (base_realpath[len - 1] == '/')) + { + base_realpath[len - 1] = '\0'; + len--; + } + + if (strncmp(config_base_dir, + base_realpath, sizeof(base_realpath)) != 0) + { + fprintf(stderr, + "Base directory (-b) resolved via file system links!\n" + "Please consult rrdcached '-b' documentation!\n" + "Consider specifying the real directory (%s)\n", + base_realpath); + return 5; + } } break; -- 2.30.2