From 02433030ae7cbb2e072c8c633cd11a259512a54b Mon Sep 17 00:00:00 2001 From: Graham Leggett Date: Tue, 30 Apr 2013 15:28:57 +0000 Subject: [PATCH] mod_dav: mod_dav overrides dav_fs response on PUT failure. PR 35981. git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@1477687 13f79535-47bb-0310-9956-ffa450edef68 --- CHANGES | 4 ++++ modules/dav/main/mod_dav.c | 17 +++++++++++------ 2 files changed, 15 insertions(+), 6 deletions(-) diff --git a/CHANGES b/CHANGES index 5d0b53c88f4..3a09209b881 100644 --- a/CHANGES +++ b/CHANGES @@ -1,6 +1,10 @@ -*- coding: utf-8 -*- Changes with Apache 2.5.0 + *) mod_dav: mod_dav overrides dav_fs response on PUT failure. PR 35981 + [Basant Kumar Kukreja , Alejandro Alvarez + ] + *) mod_dav: Do not segfault on PROPFIND with a zero length DBM. PR 52559 [Diego Santa Cruz ] diff --git a/modules/dav/main/mod_dav.c b/modules/dav/main/mod_dav.c index 90a6c5a88a8..6094049858e 100644 --- a/modules/dav/main/mod_dav.c +++ b/modules/dav/main/mod_dav.c @@ -960,12 +960,17 @@ static int dav_method_put(request_rec *r) /* Create the new file in the repository */ if ((err = (*resource->hooks->open_stream)(resource, mode, &stream)) != NULL) { - /* ### assuming FORBIDDEN is probably not quite right... */ - err = dav_push_error(r->pool, HTTP_FORBIDDEN, 0, - apr_psprintf(r->pool, - "Unable to PUT new contents for %s.", - ap_escape_html(r->pool, r->uri)), - err); + int status = err->status ? err->status : HTTP_FORBIDDEN; + if (status > 299) { + err = dav_push_error(r->pool, status, 0, + apr_psprintf(r->pool, + "Unable to PUT new contents for %s.", + ap_escape_html(r->pool, r->uri)), + err); + } + else { + err = NULL; + } } if (err == NULL && has_range) { -- 2.47.3