48#define APR_WANT_STRFUNC
66#define DAV_DEFAULT_PROVIDER "filesystem"
69#define DAV_HANDLER_NAME "dav-handler"
97#define DAV_INHERIT_VALUE(parent, child, field) \
98 ((child)->field ? (child)->field : (parent)->field)
102extern module DAV_DECLARE_DATA dav_module;
165 if (l > 1 &&
d[l - 1] ==
'/')
187 "\"DAV Off\" cannot be used to turn off a subtree "
188 "of a DAV-enabled location.");
191 parent->provider_name) != 0) {
193 "A subtree cannot specify a different DAV provider "
202 allow_depthinfinity);
204 allow_lockdiscovery);
279 "Unknown DAV provider: %s",
339 return "DAVMinTimeout requires a non-negative integer.";
392 "<D:error xmlns:D=\"DAV:\"",
r);
396 ap_rputs(
" xmlns:m=\"http://apache.org/dav/xmlns\"",
r);
399 if (
err->childtags) {
405 err->tagname,
err->childtags,
err->tagname);
411 err->tagname,
err->childtags,
err->tagname);
419 err->namespace,
err->tagname);
431 "<m:human-readable errcode=\"%d\">" DEBUG_CR
509 "<D:status>HTTP/1.1 ",
527 "<D:responsedescription>",
529 "</D:responsedescription>" DEBUG_CR,
551 "<D:multistatus xmlns:D=\"DAV:\"");
648 if (response ==
NULL) {
699 " has been created.",
NULL);
715 else if (
strcmp(depth,
"0") == 0) {
718 else if (
strcmp(depth,
"1") == 0) {
725 "An invalid Depth header was specified.");
748 "An invalid Overwrite header was specified.");
778 "DAV not enabled for %s",
798 "failed to find repository for location configured "
799 "via regex match - missing DAVBasePath?");
804 "Could not fetch resource information.",
err);
813 "The provider did not define a "
838 return (*
hooks->open_lockdb)(
r, ro, 0, lockdb);
925 "Unable to set up HTTP headers.",
944 "Unable to deliver content.",
1013 "Cannot create resource %s with PUT.",
1021 "Cannot PUT to a collection.");
1050 "Malformed Content-Range header for PUT %s.",
1070 &stream)) !=
NULL) {
1075 "Unable to PUT new contents for %s.",
1107 "the request body (URI: %s)",
1135 "An error occurred while"
1136 " reading the request body"
1137 " from the bucket (URI: %s)",
1147 }
while (!seen_eos);
1178 "The PUT was successful, but there "
1179 "was a problem automatically checking in "
1180 "the resource or its parent collection.",
1193 "The file was PUT successfully, but there "
1194 "was a problem opening the lock database "
1195 "which prevents inheriting locks from the "
1196 "parent resources.",
1209 "The file was PUT successfully, but there "
1210 "was a problem updating its lock "
1237 resp.propresult = *propstats;
1255 resp->propresult = *propstats;
1304 "Depth must be \"infinity\" for DELETE of a collection.");
1308 if (!
resource->collection && depth == 1) {
1311 "Depth of \"1\" is not allowed for DELETE.");
1329 "Could not DELETE %s due to a failed "
1330 "precondition (e.g. locks).",
1361 "Could not DELETE %s.",
1369 "The DELETE was successful, but there "
1370 "was a problem automatically checking in "
1371 "the parent collection.",
1407 "<D:supported-method D:name=\"",
1415 for (child =
elem->first_child; child !=
NULL; child = child->
next) {
1417 &&
strcmp(child->
name,
"supported-method") == 0) {
1429 "A DAV:supported-method element "
1430 "does not have a \"name\" attribute");
1436 "<D:supported-method D:name=\"",
1463 "The lock database could not be opened, "
1464 "preventing the reporting of supported lock "
1471 &propdb)) !=
NULL) {
1476 "The property database could not be opened, "
1477 "preventing report of supported properties.",
1492 for (child =
elem->first_child; child !=
NULL; child = child->
next) {
1494 &&
strcmp(child->
name,
"supported-live-property") == 0) {
1496 const char *nmspace =
NULL;
1503 else if (
strcmp(
attr->name,
"namespace") == 0)
1504 nmspace =
attr->value;
1510 "A DAV:supported-live-property "
1511 "element does not have a \"name\" "
1517 if (nmspace ==
NULL)
1556 "DAV:supported-report-set could not be "
1557 "determined due to a problem fetching the "
1558 "available reports for this resource.",
1571 "<D:supported-report D:name=\"",
1573 "\" D:namespace=\"",
1581 for (child =
elem->first_child; child !=
NULL; child = child->
next) {
1583 &&
strcmp(child->
name,
"supported-report") == 0) {
1585 const char *nmspace =
NULL;
1593 else if (
strcmp(
attr->name,
"namespace") == 0)
1594 nmspace =
attr->value;
1600 "A DAV:supported-report element "
1601 "does not have a \"name\" attribute");
1605 if (nmspace ==
NULL) {
1612 &&
strcmp(nmspace,
rp->nmspace) == 0) {
1617 "<D:supported-report "
1620 "\" D:namespace=\"",
1665 "Unable to set up HTTP headers.",
1739 "The \"options\" element was not found.");
1782 if (vsn_hooks !=
NULL) {
1870 if (vsn_hooks !=
NULL) {
1991 if (
strcmp(
elem->name,
"supported-method-set") == 0) {
1995 else if (
strcmp(
elem->name,
"supported-live-property-set") == 0) {
1999 else if (
strcmp(
elem->name,
"supported-report-set") == 0) {
2023 "<D:options-response xmlns:D=\"DAV:\">" DEBUG_CR,
r);
2040 if (
ctx->propstat_404 !=
NULL) {
2056 "<D:status>HTTP/1.1 404 Not Found</D:status>" DEBUG_CR
2092 ctx->doc ?
ctx->doc->namespaces :
NULL, &propdb);
2183 "PROPFIND requests with a "
2184 "Depth of \"infinity\" are "
2185 "not allowed for %s.",
2194 "The \"propfind\" element was not found.");
2215 "The \"propfind\" element does not contain one of "
2216 "the required child elements (the specific command).");
2234 "The lock database could not be opened, "
2235 "preventing access to the various lock "
2236 "properties for the PROPFIND.",
2260 (*
ctx.w.lockdb->hooks->close_lockdb)(
ctx.w.lockdb);
2271 "Provider encountered an error while streaming"
2272 " a multistatus PROPFIND response.",
err);
2296 for ( ;
i-- > 0; ++
ctx ) {
2309 "Attempted DAV:set operation "
2310 "could not be completed due "
2311 "to other errors.");
2317 "Attempted DAV:remove "
2318 "operation could not be "
2319 "completed due to other "
2327 "HTTP/1.1 %d (status)"
2361 for ( ;
i-- > 0; ++
ctx ) {
2367 "<D:status>HTTP/1.1 200 OK</D:status>" DEBUG_CR
2455 "The request body does not contain "
2456 "a \"propertyupdate\" element.");
2478 &propdb)) !=
NULL) {
2484 "Could not open the property "
2519 "A \"prop\" element is missing inside "
2520 "the propertyupdate command.");
2528 ctx->propdb = propdb;
2598 "Unknown Transfer-Encoding %s",
tenc);
2609 "Invalid Content-Length %s",
lenp);
2709 "The MKCOL was successful, but there "
2710 "was a problem automatically checking in "
2711 "the parent collection.",
2722 "The MKCOL was successful, but there "
2723 "was a problem opening the lock database "
2724 "which prevents inheriting locks from the "
2725 "parent resources.",
2738 "The MKCOL was successful, but there "
2739 "was a problem updating its lock "
2793 "Cannot COPY/MOVE resource %s.",
2811 "The request is missing a Destination header.");
2831 "WWW-Authenticate");
2841 "Destination URI had an error.");
2860 "Destination URI is handled by a "
2861 "different repository than the source URI. "
2862 "MOVE or COPY between repositories is "
2877 "Destination is not empty and "
2878 "Overwrite is not \"T\"");
2885 "Source and Destination URIs are the same.");
2900 "Depth must be \"0\" or \"infinity\" for COPY or MOVE.");
2906 "Depth must be \"infinity\" when moving a collection.");
2932 "Could not %s %s due to a failed "
2933 "precondition on the source "
2935 is_move ?
"MOVE" :
"COPY",
2957 "Could not MOVE/COPY %s due to a "
2958 "failed precondition on the "
2959 "destination (e.g. locks).",
2970 "Source collection contains the "
2984 "Destination collection contains the Source "
2985 "and Overwrite has been specified.");
3009 if (is_move && lockdb !=
NULL) {
3041 else if (is_move || !
resource->versioned)
3045 else if ((
resource->collection == 0) != (
resnew->collection == 0))
3079 && (*
src_av_info.parent_resource->hooks->is_same_resource)
3118 "Could not MOVE/COPY %s.",
3128 "The MOVE/COPY was successful, but there was a "
3129 "problem automatically checking in the "
3130 "source parent collection.",
3137 "The MOVE/COPY was successful, but there was a "
3138 "problem automatically checking in the "
3139 "destination or its parent collection.",
3145 if (lockdb !=
NULL) {
3155 "The MOVE/COPY was successful, but there "
3156 "was a problem updating the lock "
3197 "Depth must be 0 or \"infinity\" for LOCK.");
3221 "The parent resource of %s does not "
3222 "exist or is not a collection.",
3265 "Could not LOCK %s due to a failed "
3266 "precondition (e.g. other locks).",
3286 "The lock refresh for %s failed "
3287 "because no lock tokens were "
3288 "specified in an \"If:\" "
3374 "Lock-Token")) ==
NULL) {
3376 "Unlock failed (%s): "
3377 "No Lock-Token specified in header",
r->
filename);
3395 &locktoken)) !=
NULL) {
3398 "The UNLOCK on %s failed -- an "
3399 "invalid lock token was specified "
3400 "in the \"If:\" header.",
3464 const char *target =
NULL;
3468 if (vsn_hooks ==
NULL)
3498 "The request body does not contain "
3499 "a \"version-control\" element.");
3506 "The \"version-control\" element does not contain "
3507 "a \"version\" element.");
3513 "The \"version\" element does not contain "
3514 "an \"href\" element.");
3523 "An \"href\" element does not contain a URI.");
3537 "<DAV:initial-version-required/>");
3542 if (target !=
NULL) {
3544 "<DAV:cannot-add-to-existing-history/>");
3552 "<DAV:must-be-versionable/>");
3590 "Could not VERSION-CONTROL resource %s.",
3601 "The VERSION-CONTROL was successful, but there "
3602 "was a problem automatically checking in "
3603 "the parent collection.",
3616 "The VERSION-CONTROL was successful, but there "
3617 "was a problem opening the lock database "
3618 "which prevents inheriting locks from the "
3619 "parent resources.",
3632 "The VERSION-CONTROL was successful, but there "
3633 "was a problem updating its lock "
3663 if (vsn_hooks ==
NULL)
3675 "The request body, if present, must be a "
3676 "DAV:checkout element.");
3685 "DAV:apply-to-version cannot be "
3686 "used in conjunction with a "
3704 for (; child !=
NULL; child = child->
next) {
3722 "Within the DAV:activity-set element, the "
3723 "DAV:new element must be used, or at least "
3724 "one DAV:href must be specified.");
3753 "Cannot checkout this type of resource.");
3758 "Cannot checkout unversioned resource.");
3763 "The resource is already checked out to the workspace.");
3775 "Could not CHECKOUT resource %s.",
3805 if (vsn_hooks ==
NULL)
3834 "Cannot uncheckout this type of resource.");
3839 "Cannot uncheckout unversioned resource.");
3844 "The resource is not checked out to the workspace.");
3853 "Could not UNCHECKOUT resource %s.",
3877 if (vsn_hooks ==
NULL)
3887 "The request body, if present, must be a "
3888 "DAV:checkin element.");
3917 "Cannot checkin this type of resource.");
3922 "Cannot checkin unversioned resource.");
3927 "The resource is not checked out.");
3937 "Could not CHECKIN resource %s.",
3981 "The request body does not contain "
3982 "an \"update\" element.");
3993 "The version element does not contain "
3994 "an \"href\" element.");
4000 "The \"update\" element does not contain "
4001 "a \"label-name\" or \"version\" element.");
4008 "Depth must be zero for UPDATE with a version");
4017 "A \"label-name\" or \"href\" element does not contain "
4045 "<DAV:must-be-checked-in-version-controlled-resource>");
4068 "Version URI had an error.");
4087 "Could not UPDATE %s.",
4116#define DAV_LABEL_ADD 1
4117#define DAV_LABEL_SET 2
4118#define DAV_LABEL_REMOVE 3
4146 "<DAV:must-be-version-or-version-selector/>");
4150 "<DAV:must-not-be-checked-out/>");
4219 "The request body does not contain "
4220 "a \"label\" element.");
4236 "The \"label\" element does not contain "
4237 "an \"add\", \"set\", or \"remove\" element.");
4244 "The label command element does not contain "
4245 "a \"label-name\" element.");
4253 "A \"label-name\" element does not contain "
4265 ctx.vsn_hooks = vsn_hooks;
4272 "The LABEL operation was terminated prematurely.",
4289 "Errors occurred during the LABEL operation.");
4332 while (
rp &&
rp->name) {
4361 "The request body must specify a report.");
4409 "Provider encountered an error while streaming"
4410 " a REPORT response.",
err);
4463 "The request body does not contain "
4464 "a \"mkworkspace\" element.");
4477 "<DAV:resource-must-be-null/>");
4487 "Could not create workspace %s.",
4539 "<DAV:resource-must-be-null/>");
4548 "<DAV:activity-location-ok/>");
4558 "Could not create activity %s.",
4594 if (vsn_hooks ==
NULL)
4603 "The request body must be present and must be a "
4604 "DAV:merge element.");
4611 "The DAV:merge element must contain a DAV:source "
4618 "The DAV:source element must contain a DAV:href "
4643 "Merge source URI had an error.");
4711 "Could not MERGE resource \"%s\" "
4763 "The request is missing a Destination header.");
4782 "Cross server bindings are not "
4783 "allowed by this server.");
4794 "Destination URI had an error.");
4813 "Destination URI is handled by a "
4814 "different repository than the source URI. "
4815 "BIND between repositories is not possible.");
4828 "Destination is not empty and "
4829 "Overwrite is not \"T\"");
4835 "Source and Destination URIs are the same.");
4854 "Could not BIND %s due to a "
4855 "failed precondition on the "
4856 "destination (e.g. locks).",
4866 "Source collection contains the Destination.");
4877 "Destination collection contains the Source and "
4878 "Overwrite has been specified.");
4907 "Could not BIND %s.",
4917 "The BIND was successful, but there was a "
4918 "problem automatically checking in the "
4919 "source parent collection.",
4942 "buggy client used un-escaped hash in Request-URI");
4944 "The request was invalid: the URI included "
4945 "an un-escaped hash character");
5195 "specify the DAV provider for a directory or location"),
5199 "specify the DAV repository base URL"),
5204 "specify minimum allowed timeout"),
5209 "allow Depth infinity PROPFIND requests"),
5214 "allow lock discovery by PROPFIND requests"),
5219module DAV_DECLARE_DATA dav_module =
5221 STANDARD20_MODULE_STUFF,
5222 dav_create_dir_config,
5223 dav_merge_dir_config,
5224 dav_create_server_config,
5225 dav_merge_server_config,
const char apr_size_t len
static int report(abts_suite *suite)
APR general purpose library routines.
apr_size_t const unsigned char unsigned int unsigned int d
APR Standard Headers Support.
static apr_size_t text_size(const apr_text *t)
static void reverse(const char **argv, int start, int len)
#define AP_INIT_TAKE1(directive, func, mconfig, where, help)
#define APLOG_USE_MODULE(foo)
#define ap_get_module_config(v, m)
void ap_hook_post_config(ap_HOOK_post_config_t *pf, const char *const *aszPre, const char *const *aszSucc, int nOrder)
#define AP_INIT_FLAG(directive, func, mconfig, where, help)
void ap_hook_handler(ap_HOOK_handler_t *pf, const char *const *aszPre, const char *const *aszSucc, int nOrder)
#define ap_fputs(f, bb, str)
#define ap_fputc(f, bb, c)
apr_status_t ap_pass_brigade(ap_filter_t *filter, apr_bucket_brigade *bucket)
apr_status_t ap_fputstrs(ap_filter_t *f, apr_bucket_brigade *bb,...)
apr_status_t ap_fprintf(ap_filter_t *f, apr_bucket_brigade *bb, const char *fmt,...) __attribute__((format(printf
apr_status_t ap_get_brigade(ap_filter_t *filter, apr_bucket_brigade *bucket, ap_input_mode_t mode, apr_read_type_e block, apr_off_t readbytes)
#define ap_get_core_module_config(v)
char * ap_construct_url(apr_pool_t *p, const char *uri, request_rec *r)
int ap_rvputs(request_rec *r,...)
int ap_map_http_request_error(apr_status_t rv, int status)
int ap_meets_conditions(request_rec *r)
int ap_method_register(apr_pool_t *p, const char *methname)
int ap_rprintf(request_rec *r, const char *fmt,...) __attribute__((format(printf
void ap_set_content_length(request_rec *r, apr_off_t length)
static APR_INLINE int ap_rputs(const char *str, request_rec *r)
void ap_set_content_type_ex(request_rec *r, const char *ct, int trusted)
void ap_set_content_type(request_rec *r, const char *ct)
const char * ap_get_status_line(int status)
int ap_discard_request_body(request_rec *r)
apr_array_header_t * ap_list_provider_names(apr_pool_t *pool, const char *provider_group, const char *provider_version)
void ap_hook_fixups(ap_HOOK_fixups_t *pf, const char *const *aszPre, const char *const *aszSucc, int nOrder)
int ap_xml_parse_input(request_rec *r, apr_xml_doc **pdoc)
#define APR_BUCKET_IS_METADATA(e)
#define APR_BRIGADE_INSERT_TAIL(b, e)
#define APR_BUCKET_NEXT(e)
#define APR_BRIGADE_SENTINEL(b)
#define APR_BUCKET_IS_EOS(e)
apr_brigade_flush void * ctx
#define APR_BRIGADE_FIRST(b)
#define apr_bucket_read(e, str, len, block)
apr_pool_t const char apr_dbd_t const char ** error
apr_pool_t apr_dbd_t const char const char * label
apr_dbd_transaction_t int mode
const char apr_ssize_t int flags
#define APR_IMPLEMENT_EXTERNAL_HOOK_RUN_FIRST(ns, link, ret, name, args_decl, args_use, decline)
#define APR_IMPLEMENT_EXTERNAL_HOOK_VOID(ns, link, name, args_decl, args_use)
#define APR_HOOK_LINK(name)
#define APR_HOOK_STRUCT(members)
#define APR_XML_X2T_INNER
#define APR_XML_NS_DAV_ID
#define APR_XML_GET_URI_ITEM(ary, i)
const apr_xml_elem int apr_array_header_t * namespaces
#define ap_is_HTTP_VALID_RESPONSE(x)
#define HTTP_MULTI_STATUS
#define HTTP_PRECONDITION_FAILED
#define HTTP_UNSUPPORTED_MEDIA_TYPE
#define HTTP_INTERNAL_SERVER_ERROR
#define HTTP_FAILED_DEPENDENCY
#define HTTP_METHOD_NOT_ALLOWED
#define HTTP_UNAUTHORIZED
#define HTTP_NOT_IMPLEMENTED
#define DAV_GET_HOOKS_LOCKS(r)
int dav_handle_err(request_rec *r, dav_error *err, dav_response *response)
#define DAV_RESOURCE_LOCK_NULL
void dav_hook_find_liveprop(dav_HOOK_find_liveprop_t *pf, const char *const *aszPre, const char *const *aszSucc, int nOrder)
int dav_get_depth(request_rec *r, int def_depth)
#define DAV_VALIDATE_RESOURCE
void dav_core_insert_all_liveprops(request_rec *r, const dav_resource *resource, dav_prop_insert what, apr_text_header *phdr)
const dav_hooks_locks * dav_get_lock_hooks(request_rec *r)
void dav_hook_gather_reports(dav_HOOK_gather_reports_t *pf, const char *const *aszPre, const char *const *aszSucc, int nOrder)
#define DAV_GET_HOOKS_BINDING(r)
#define DAV_RESPONSE_BODY_3
apr_text * dav_failed_proppatch(apr_pool_t *p, apr_array_header_t *prop_ctx)
void dav_run_gather_reports(request_rec *r, const dav_resource *resource, apr_array_header_t *reports, dav_error **err)
dav_get_props_result dav_get_allprops(dav_propdb *db, dav_prop_insert what)
dav_lookup_result dav_lookup_uri(const char *uri, request_rec *r, int must_be_absolute)
void dav_core_register_uris(apr_pool_t *p)
const char * dav_lock_get_activelock(request_rec *r, dav_lock *locks, dav_buffer *pbuf)
#define DAV_VALIDATE_NO_MODIFY
int dav_run_method_precondition(request_rec *r, dav_resource *src, const dav_resource *dest, const apr_xml_doc *doc, dav_error **err)
#define DAV_RESPONSE_BODY_2
#define DAV_RESOURCE_NULL
void dav_prop_validate(dav_prop_ctx *ctx)
const dav_hooks_binding * dav_get_binding_hooks(request_rec *r)
dav_error * dav_lock_parse_lockinfo(request_rec *r, const dav_resource *resource, dav_lockdb *lockdb, const apr_xml_doc *doc, dav_lock **lock_request)
int dav_unlock(request_rec *r, const dav_resource *resource, const dav_locktoken *locktoken)
#define DAV_READ_BLOCKSIZE
dav_error * dav_auto_checkin(request_rec *r, dav_resource *resource, int undo, int unlock, dav_auto_version_info *av_info)
const dav_provider * dav_lookup_provider(const char *name)
void dav_hook_deliver_report(dav_HOOK_deliver_report_t *pf, const char *const *aszPre, const char *const *aszSucc, int nOrder)
void dav_add_vary_header(request_rec *in_req, request_rec *out_req, const dav_resource *resource)
void dav_close_propdb(dav_propdb *db)
void dav_get_liveprop_supported(dav_propdb *propdb, const char *ns_uri, const char *propname, apr_text_header *body)
dav_error * dav_add_lock(request_rec *r, const dav_resource *resource, dav_lockdb *lockdb, dav_lock *request, dav_response **response)
apr_text * dav_success_proppatch(apr_pool_t *p, apr_array_header_t *prop_ctx)
dav_get_props_result dav_get_props(dav_propdb *db, apr_xml_doc *doc)
const char * dav_get_provider_name(request_rec *r)
#define DAV_RESPONSE_BODY_1
#define DAV_GET_HOOKS_SEARCH(r)
void dav_prop_exec(dav_prop_ctx *ctx)
time_t dav_get_timeout(request_rec *r)
int dav_validate_root(const apr_xml_doc *doc, const char *tagname)
int dav_get_resource_state(request_rec *r, const dav_resource *resource)
dav_error * dav_popen_propdb(apr_pool_t *p, request_rec *r, dav_lockdb *lockdb, const dav_resource *resource, int flags, apr_array_header_t *ns_xlate, dav_propdb **propdb)
#define DAV_VALIDATE_ADD_LD
dav_error * dav_join_error(dav_error *dest, dav_error *src)
dav_error * dav_get_locktoken_list(request_rec *r, dav_locktoken_list **ltl)
dav_error * dav_auto_checkout(request_rec *r, dav_resource *resource, int parent_only, dav_auto_version_info *av_info)
#define DAV_OPTIONS_EXTENSION_GROUP
#define DAV_VALIDATE_USE_424
const char * dav_xml_get_cdata(const apr_xml_elem *elem, apr_pool_t *pool, int strip_white)
apr_status_t dav_finish_multistatus(request_rec *r, apr_bucket_brigade *bb)
void dav_prop_commit(dav_prop_ctx *ctx)
const dav_provider * dav_get_provider(request_rec *r)
apr_xml_elem * dav_find_child(const apr_xml_elem *elem, const char *tagname)
void dav_hook_insert_all_liveprops(dav_HOOK_insert_all_liveprops_t *pf, const char *const *aszPre, const char *const *aszSucc, int nOrder)
void dav_send_one_response(dav_response *response, apr_bucket_brigade *bb, request_rec *r, apr_pool_t *pool)
int dav_core_find_liveprop(const dav_resource *resource, const char *ns_uri, const char *name, const dav_hooks_liveprop **hooks)
dav_error * dav_open_lockdb(request_rec *r, int ro, dav_lockdb **lockdb)
dav_error * dav_push_error(apr_pool_t *p, int status, int error_id, const char *desc, dav_error *prev)
#define DAV_RESPONSE_BODY_5
dav_error * dav_notify_created(request_rec *r, dav_lockdb *lockdb, const dav_resource *resource, int resource_state, int depth)
#define DAV_VALIDATE_PARENT
#define DAV_PROPDB_DISABLE_LOCKDISCOVERY
#define DAV_DECLARE(type)
#define DAV_XML_CONTENT_TYPE
#define DAV_TIMEOUT_INFINITE
#define DAV_RESPONSE_BODY_4
#define DAV_GET_HOOKS_VSN(r)
const dav_options_provider * dav_get_options_providers(const char *name)
void dav_begin_multistatus(apr_bucket_brigade *bb, request_rec *r, int status, apr_array_header_t *namespaces)
void dav_prop_rollback(dav_prop_ctx *ctx)
dav_error * dav_open_propdb(request_rec *r, dav_lockdb *lockdb, const dav_resource *resource, int flags, apr_array_header_t *ns_xlate, dav_propdb **propdb)
const dav_hooks_search * dav_get_search_hooks(request_rec *r)
const dav_hooks_vsn * dav_get_vsn_hooks(request_rec *r)
void dav_send_multistatus(request_rec *r, int status, dav_response *first, apr_array_header_t *namespaces)
dav_error * dav_get_resource(request_rec *r, int label_allowed, int use_checked_in, dav_resource **res_p)
dav_error * dav_new_error(apr_pool_t *p, int status, int error_id, apr_status_t aprerr, const char *desc)
dav_error * dav_validate_request(request_rec *r, dav_resource *resource, int depth, dav_locktoken *locktoken, dav_response **response, int flags, dav_lockdb *lockdb)
#define DAV_RESOURCE_EXISTS
void dav_add_response(dav_walk_resource *wres, int status, dav_get_props_result *propstats)
void dav_close_lockdb(dav_lockdb *lockdb)
const dav_hooks_propdb * dav_get_propdb_hooks(request_rec *r)
int dav_run_deliver_report(request_rec *r, const dav_resource *resource, const apr_xml_doc *doc, ap_filter_t *output, dav_error **err)
#define DAV_PROP_CTX_HAS_ERR(dpc)
void dav_run_gather_propsets(apr_array_header_t *uris)
@ DAV_PROP_INSERT_SUPPORTED
@ DAV_MODE_WRITE_SEEKABLE
@ DAV_RESOURCE_TYPE_VERSION
@ DAV_RESOURCE_TYPE_REGULAR
@ DAV_RESOURCE_TYPE_WORKING
#define M_VERSION_CONTROL
#define M_BASELINE_CONTROL
int ap_cstr_casecmp(const char *s1, const char *s2)
const char * ap_psignature(const char *prefix, request_rec *r)
#define ap_escape_uri(ppool, path)
#define ap_strchr_c(s, c)
int ap_cstr_casecmpn(const char *s1, const char *s2, apr_size_t n)
#define ap_escape_html(p, s)
int ap_parse_strict_length(apr_off_t *len, const char *str)
const char int apr_pool_t * pool
apr_array_header_t ** result
int strcasecmp(const char *a, const char *b)
apr_sockaddr_t apr_sockaddr_t apr_sockaddr_t * source
apr_interval_time_t apr_pollcb_cb_t func
#define apr_pool_create(newpool, parent)
#define apr_pcalloc(p, size)
const apr_array_header_t * arr
const apr_array_header_t * first
apr_int32_t apr_int32_t apr_int32_t err
const char const char *const const char *const apr_procattr_t * attr
static const char * dav_cmd_davmintimeout(cmd_parms *cmd, void *config, const char *arg1)
static int dav_created(request_rec *r, const char *locn, const char *what, int replaced)
static void dav_stream_response(dav_walk_resource *wres, int status, dav_get_props_result *propstats, apr_pool_t *pool)
static int dav_method_search(request_rec *r)
static int dav_method_unlock(request_rec *r)
#define DAV_DEFAULT_PROVIDER
static int dav_method_vsn_control(request_rec *r)
static int dav_method_copymove(request_rec *r, int is_move)
static dav_error * dav_gen_supported_reports(request_rec *r, const dav_resource *resource, const apr_xml_elem *elem, apr_text_header *body)
static void dav_core_gather_reports(request_rec *r, const dav_resource *resource, apr_array_header_t *reports, dav_error **err)
static int dav_method_update(request_rec *r)
static int dav_init_handler(apr_pool_t *p, apr_pool_t *plog, apr_pool_t *ptemp, server_rec *s)
static int dav_method_checkin(request_rec *r)
static const char * dav_cmd_davbasepath(cmd_parms *cmd, void *config, const char *arg1)
static int dav_method_options(request_rec *r)
static int dav_method_label(request_rec *r)
static const char * dav_cmd_davlockdiscovery(cmd_parms *cmd, void *config, int arg)
static int dav_method_lock(request_rec *r)
static int dav_fixups(request_rec *r)
static int dav_error_response_tag(request_rec *r, dav_error *err)
static int process_mkcol_body(request_rec *r)
static int dav_method_delete(request_rec *r)
static int dav_parse_range(request_rec *r, apr_off_t *range_start, apr_off_t *range_end)
static int dav_method_merge(request_rec *r)
static dav_error * dav_label_walker(dav_walk_resource *wres, int calltype)
static const command_rec dav_cmds[]
static int dav_method_proppatch(request_rec *r)
static int dav_method_make_workspace(request_rec *r)
static dav_error * dav_gen_supported_live_props(request_rec *r, const dav_resource *resource, const apr_xml_elem *elem, apr_text_header *body)
static void register_hooks(apr_pool_t *p)
static const char * dav_cmd_davdepthinfinity(cmd_parms *cmd, void *config, int arg)
static int dav_get_overwrite(request_rec *r)
static int dav_handler(request_rec *r)
static int dav_method_propfind(request_rec *r)
#define DAV_INHERIT_VALUE(parent, child, field)
static void dav_prop_log_errors(dav_prop_ctx *ctx)
static int dav_core_deliver_report(request_rec *r, const dav_resource *resource, const apr_xml_doc *doc, ap_filter_t *output, dav_error **err)
static int dav_method_checkout(request_rec *r)
static void dav_cache_badprops(dav_walker_ctx *ctx)
static dav_error * dav_propfind_walker(dav_walk_resource *wres, int calltype)
static int dav_error_response(request_rec *r, int status, const char *body)
static int dav_method_post(request_rec *r)
static const char * dav_xml_escape_uri(apr_pool_t *p, const char *uri)
static int dav_method_uncheckout(request_rec *r)
static int dav_method_make_activity(request_rec *r)
static int dav_methods[DAV_M_LAST]
static int dav_process_ctx_list(void(*func)(dav_prop_ctx *ctx), apr_array_header_t *ctx_list, int stop_on_error, int reverse)
static void * dav_merge_server_config(apr_pool_t *p, void *base, void *overrides)
static void dav_log_err(request_rec *r, dav_error *err, int level)
static int dav_method_mkcol(request_rec *r)
static void * dav_merge_dir_config(apr_pool_t *p, void *base, void *overrides)
static int dav_method_report(request_rec *r)
static void * dav_create_server_config(apr_pool_t *p, server_rec *s)
static void * dav_create_dir_config(apr_pool_t *p, char *dir)
static const char * dav_cmd_dav(cmd_parms *cmd, void *config, const char *arg1)
static int dav_method_bind(request_rec *r)
static int dav_method_get(request_rec *r)
static dav_error * dav_gen_supported_methods(request_rec *r, const apr_xml_elem *elem, const apr_table_t *methods, apr_text_header *body)
static int dav_method_put(request_rec *r)
static int dav_method_baseline_control(request_rec *r)
DAV extension module for Apache 2.0.*.
#define DAV_PROPFIND_IS_ALLPROP
#define DAV_WALKTYPE_AUTH
#define DAV_PROPFIND_IS_PROPNAME
#define DAV_WALKTYPE_TOLERANT
#define DAV_PROP_OP_DELETE
#define DAV_PROPFIND_IS_PROP
#define DAV_WALKTYPE_LOCKNULL
#define DAV_WALKTYPE_NORMAL
static const char *const hooks[]
The representation of a filter chain.
const char * provider_name
apr_array_header_t * namespaces
struct apr_xml_elem * first_child
struct apr_xml_elem * next
struct apr_xml_attr * attr
struct apr_bucket_alloc_t * bucket_alloc
Per-directory configuration.
const dav_provider * provider
const char * provider_name
void(* close_lockdb)(dav_lockdb *lockdb)
dav_error *(* get_resource)(request_rec *r, const char *root_dir, const char *label, int use_checked_in, dav_resource **resource)
int(* versionable)(const dav_resource *resource)
int(* can_be_activity)(const dav_resource *resource)
dav_error *(* vsn_control)(dav_resource *resource, const char *target)
int(* can_be_workspace)(const dav_resource *resource)
dav_error *(* avail_reports)(const dav_resource *resource, const dav_report_elem **reports)
dav_error *(* checkin)(dav_resource *resource, int keep_checked_out, dav_resource **version_resource)
dav_error *(* make_workspace)(dav_resource *resource, apr_xml_doc *doc)
dav_error *(* merge)(dav_resource *target, dav_resource *source, int no_auto_merge, int no_checkout, apr_xml_elem *prop_elem, ap_filter_t *output)
dav_error *(* add_label)(const dav_resource *resource, const char *label, int replace)
dav_error *(* deliver_report)(request_rec *r, const dav_resource *resource, const apr_xml_doc *doc, ap_filter_t *output)
dav_error *(* uncheckout)(dav_resource *resource)
dav_error *(* checkout)(dav_resource *resource, int auto_checkout, int is_unreserved, int is_fork_ok, int create_activity, apr_array_header_t *activities, dav_resource **working_resource)
dav_error *(* update)(const dav_resource *resource, const dav_resource *version, const char *label, int depth, dav_response **response)
int(* report_label_header_allowed)(const apr_xml_doc *doc)
dav_error *(* get_option)(const dav_resource *resource, const apr_xml_elem *elem, apr_text_header *option)
void(* get_vsn_options)(apr_pool_t *p, apr_text_header *phdr)
dav_error *(* make_activity)(dav_resource *resource)
const dav_hooks_vsn * vsn_hooks
const dav_hooks_locks * hooks
dav_error *(* dav_header)(request_rec *r, const dav_resource *resource, apr_text_header *phdr)
dav_error *(* dav_method)(request_rec *r, const dav_resource *resource, apr_text_header *phdr)
const dav_hooks_vsn * vsn
const dav_hooks_propdb * propdb
const dav_hooks_locks * locks
const dav_hooks_repository * repos
const dav_hooks_search * search
const dav_hooks_binding * binding
dav_get_props_result propresult
const dav_resource * resource
A structure that represents the current request.
struct ap_filter_t * output_filters
apr_table_t * err_headers_out
struct ap_filter_t * input_filters
struct ap_conf_vector_t * per_dir_config
apr_table_t * headers_out
A structure to store information for each virtual server.
static NAMED * lookup(XML_Parser parser, HASH_TABLE *table, KEY name, size_t createSize)