From: laiwei Date: Tue, 11 Mar 2014 07:49:21 +0000 (+0800) Subject: fix missing realpath X-Git-Tag: v1.5.0-rc1~119^2 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=refs%2Fpull%2F453%2Fhead;p=thirdparty%2Frrdtool-1.x.git fix missing realpath --- diff --git a/src/rrd_daemon.c b/src/rrd_daemon.c index 4206fb4f..0bc40a6b 100644 --- a/src/rrd_daemon.c +++ b/src/rrd_daemon.c @@ -1930,13 +1930,15 @@ static int handle_request_create (HANDLER_PROTO) /* {{{ */ RRDD_LOG(LOG_INFO, "rrdcreate request for %s",file); dir = dirname(file_copy); - if (!config_allow_recursive_mkdir) { - return send_response(sock, RESP_ERR, - "No permission to recursively create: %s\nDid you pass -R to the daemon?\n", - dir); - } - if (rrd_mkdir_p(dir, 0755) != 0) { - return send_response(sock, RESP_ERR, "Cannot create: %s\n", dir); + if (realpath(dir, dir_tmp) == NULL && errno == ENOENT) { + if (!config_allow_recursive_mkdir) { + return send_response(sock, RESP_ERR, + "No permission to recursively create: %s\nDid you pass -R to the daemon?\n", + dir); + } + if (rrd_mkdir_p(dir, 0755) != 0) { + return send_response(sock, RESP_ERR, "Cannot create: %s\n", dir); + } } free(file_copy);