--- modules/dav/fs/repos.c (revision 500367) +++ modules/dav/fs/repos.c (working copy) @@ -348,8 +348,19 @@ status = apr_file_open(&outf, dst, APR_WRITE | APR_CREATE | APR_TRUNCATE | APR_BINARY, perms, p); if (status != APR_SUCCESS) { + char *dirpath = NULL; + apr_finfo_t dir_finfo; + apr_status_t rv; apr_file_close(inf); + /* check if destination directory exists if not then return + * HTTP_CONFLICT + */ + dirpath = ap_make_dirstr_parent(p, dst); + rv = apr_stat(&dir_finfo, dirpath, APR_FINFO_NORM, p); + if (rv != APR_SUCCESS) + return dav_new_error(p, HTTP_CONFLICT, 0, dirpath); + return dav_new_error(p, MAP_IO2HTTP(status), 0, "Could not open file for writing"); } --- modules/dav/main/mod_dav.c (revision 500367) +++ modules/dav/main/mod_dav.c (working copy) @@ -2637,6 +2637,10 @@ return dav_error_response(r, lookup.rnew->status, "Destination URI had an error."); } + if (!dav_get_provider(lookup.rnew)) { + return dav_error_response(r, HTTP_FORBIDDEN, + "Destination URI had an error."); + } /* Resolve destination resource */ err = dav_get_resource(lookup.rnew, 0 /* label_allowed */,