]> git.ipfire.org Git - thirdparty/rrdtool-1.x.git/commitdiff
bugfix: free filecopy when create when recursive creating dir; bugfix: dir-creating...
authorlaiwei <laiwei.ustc@gmail.com>
Tue, 11 Mar 2014 03:24:44 +0000 (11:24 +0800)
committerlaiwei <laiwei.ustc@gmail.com>
Tue, 11 Mar 2014 03:24:44 +0000 (11:24 +0800)
.gitignore
src/rrd_daemon.c

index 60bf85ac0e731d337f75f769a6e73deef37b8afb..42c73583b5633b58188ed2a44c5ce68867e739f5 100644 (file)
@@ -45,3 +45,6 @@ Makefile.in
 
 # tests MUST create their own RRDs
 /tests/*.rrd
+
+#vim swp file
+*.swp
index 44869c27c9c4589c8f7a9eb36f5236624407d5cf..4206fb4fb78e00a810d59efc78fa088286b3eef3 100644 (file)
@@ -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) ) {