use ngx_ext_rename_file() for single file MOVE
diff --git a/src/http/modules/ngx_http_dav_module.c b/src/http/modules/ngx_http_dav_module.c
index 33bb2e9..d1dcc22 100644
--- a/src/http/modules/ngx_http_dav_module.c
+++ b/src/http/modules/ngx_http_dav_module.c
@@ -246,9 +246,11 @@
dlcf = ngx_http_get_module_loc_conf(r, ngx_http_dav_module);
ext.access = dlcf->access;
+ ext.path_access = dlcf->access;
ext.time = -1;
ext.create_path = dlcf->create_full_put_path;
ext.delete_file = 1;
+ ext.log_rename_error = 1;
ext.log = r->connection->log;
if (r->headers_in.date) {
@@ -521,6 +523,7 @@
ngx_tree_ctx_t tree;
ngx_file_info_t fi;
ngx_table_elt_t *dest, *over;
+ ngx_ext_rename_file_t ext;
ngx_http_dav_copy_ctx_t copy;
ngx_http_dav_loc_conf_t *dlcf;
@@ -781,9 +784,32 @@
} else {
if (r->method == NGX_HTTP_MOVE) {
- if (ngx_rename_file(path.data, copy.path.data) != NGX_FILE_ERROR) {
+
+ dlcf = ngx_http_get_module_loc_conf(r, ngx_http_dav_module);
+
+ ext.access = 0;
+ ext.path_access = dlcf->access;
+ ext.time = -1;
+ ext.create_path = 1;
+ ext.delete_file = 0;
+ ext.log_rename_error = 0;
+ ext.log = r->connection->log;
+
+ if (ngx_ext_rename_file(&path, ©.path, &ext) == NGX_OK) {
return NGX_HTTP_NO_CONTENT;
}
+
+ if (ext.rename_error != NGX_EXDEV) {
+
+ if (ext.rename_error) {
+ ngx_log_error(NGX_LOG_CRIT, r->connection->log,
+ ext.rename_error,
+ ngx_rename_file_n " \"%s\" to \"%s\" failed",
+ path.data, copy.path.data);
+ }
+
+ return NGX_HTTP_INTERNAL_SERVER_ERROR;
+ }
}
dlcf = ngx_http_get_module_loc_conf(r, ngx_http_dav_module);
diff --git a/src/http/ngx_http_upstream.c b/src/http/ngx_http_upstream.c
index 840007f..ae56c12 100644
--- a/src/http/ngx_http_upstream.c
+++ b/src/http/ngx_http_upstream.c
@@ -2288,9 +2288,11 @@
}
ext.access = u->conf->store_access;
+ ext.path_access = u->conf->store_access;
ext.time = -1;
ext.create_path = 1;
ext.delete_file = 1;
+ ext.log_rename_error = 1;
ext.log = r->connection->log;
if (u->headers_in.last_modified) {