From: laiwei Date: Tue, 11 Mar 2014 03:24:44 +0000 (+0800) Subject: bugfix: free filecopy when create when recursive creating dir; bugfix: dir-creating... X-Git-Tag: v1.5.0-rc1~119^2~1 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=64b8a17dec199818198e7461421b911427d5d7f2;p=thirdparty%2Frrdtool-1.x.git bugfix: free filecopy when create when recursive creating dir; bugfix: dir-creating not working --- diff --git a/.gitignore b/.gitignore index 60bf85ac..42c73583 100644 --- a/.gitignore +++ b/.gitignore @@ -45,3 +45,6 @@ Makefile.in # tests MUST create their own RRDs /tests/*.rrd + +#vim swp file +*.swp diff --git a/src/rrd_daemon.c b/src/rrd_daemon.c index 44869c27..4206fb4f 100644 --- a/src/rrd_daemon.c +++ b/src/rrd_daemon.c @@ -1929,21 +1929,16 @@ static int handle_request_create (HANDLER_PROTO) /* {{{ */ } RRDD_LOG(LOG_INFO, "rrdcreate request for %s",file); - /* dirname may modify its argument */ - dir = dirname(file_copy); - 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); - } - /* realpath puts the first problematic part in dir_tmp, so we can use - * the parent of dir_tmp to stat in order to set a reasonable mode - * since dir_tmp is */ - if (stat(dirname(dir_tmp), &st) && rrd_mkdir_p(dir, st.st_mode) != 0) { - return send_response(sock, RESP_ERR, "Cannot create: %s\n", dir); - } - } + 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); + } + free(file_copy); while ((status = buffer_get_field(&buffer, &buffer_size, &tok)) == 0 && tok) { if( ! strncmp(tok,"-b",2) ) {