From b507ff1d26557cc4c1df809016b556a06fbdc578 Mon Sep 17 00:00:00 2001 From: laiwei Date: Tue, 11 Mar 2014 15:49:21 +0800 Subject: [PATCH] fix missing realpath --- src/rrd_daemon.c | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) 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); -- 2.47.2