Apache-DAV
view release on metacpan or search on metacpan
mod_dav-1.0.3.patch view on Meta::CPAN
+ int result;
+ dav_xml_elem *child;
+ dav_propdb *propdb;
+ int failure = 0;
+ dav_text *propstat_text;
+ array_header *ctx_list;
+ dav_prop_ctx *ctx;
+
+ *propstat_text_ptr = NULL ;
+
+ if (doc == NULL || !dav_validate_root(doc, "propertyupdate")) {
+ /* This supplies additional information for the default message. */
+ ap_log_rerror(APLOG_MARK, APLOG_ERR | APLOG_NOERRNO, r,
+ "The request body does not contain "
+ "a \"propertyupdate\" element.");
+ return HTTP_BAD_REQUEST;
+ }
+
+ /* Check If-Headers and existing locks */
+ /* Note: depth == 0. Implies no need for a multistatus response. */
+ if ((err = dav_validate_request(r, resource, 0, NULL, NULL,
+ DAV_VALIDATE_RESOURCE, NULL)) != NULL) {
+ /* ### add a higher-level description? */
+ return dav_handle_err(r, err, NULL);
+ }
+
+ if ((err = dav_open_propdb(r, NULL, resource, 0, doc->namespaces,
+ &propdb)) != NULL) {
+ err = dav_push_error(r->pool, HTTP_INTERNAL_SERVER_ERROR, 0,
+ ap_psprintf(r->pool,
+ "Could not open the property "
+ "database for %s.",
+ ap_escape_html(r->pool, r->uri)),
+ err);
+ return dav_handle_err(r, err, NULL);
+ }
+ /* ### what to do about closing the propdb on server failure? */
+
+ /* ### validate "live" properties */
+
+ /* set up an array to hold property operation contexts */
+ ctx_list = ap_make_array(r->pool, 10, sizeof(dav_prop_ctx));
+
+ /* do a first pass to ensure that all "remove" properties exist */
+ for (child = doc->root->first_child; child; child = child->next) {
+ int is_remove;
+ dav_xml_elem *prop_group;
+ dav_xml_elem *one_prop;
+
mod_dav-1.0.3.patch view on Meta::CPAN
+ for (one_prop = prop_group->first_child; one_prop;
+ one_prop = one_prop->next) {
+
+ ctx = (dav_prop_ctx *)ap_push_array(ctx_list);
+ ctx->propdb = propdb;
+ ctx->operation = is_remove ? DAV_PROP_OP_DELETE : DAV_PROP_OP_SET;
+ ctx->prop = one_prop;
+
+ ctx->r = r; /* for later use by dav_prop_log_errors() */
+
+ dav_prop_validate(ctx);
+
+ if ( DAV_PROP_CTX_HAS_ERR(*ctx) ) {
+ failure = 1;
+ }
+ }
+ }
+
+ /* ### should test that we found at least one set/remove */
+
+ /* execute all of the operations */
mod_dav-1.0.3.patch view on Meta::CPAN
dav_text *propstat_text;
- array_header *ctx_list;
- dav_prop_ctx *ctx;
/* Ask repository module to resolve the resource */
result = dav_get_resource(r, &resource);
@@ -1948,103 +2060,9 @@
}
/* note: doc == NULL if no request body */
- if (doc == NULL || !dav_validate_root(doc, "propertyupdate")) {
- /* This supplies additional information for the default message. */
- ap_log_rerror(APLOG_MARK, APLOG_ERR | APLOG_NOERRNO, r,
- "The request body does not contain "
- "a \"propertyupdate\" element.");
- return HTTP_BAD_REQUEST;
- }
-
- /* Check If-Headers and existing locks */
- /* Note: depth == 0. Implies no need for a multistatus response. */
- if ((err = dav_validate_request(r, resource, 0, NULL, NULL,
- DAV_VALIDATE_RESOURCE, NULL)) != NULL) {
- /* ### add a higher-level description? */
- return dav_handle_err(r, err, NULL);
- }
-
- if ((err = dav_open_propdb(r, NULL, resource, 0, doc->namespaces,
- &propdb)) != NULL) {
- err = dav_push_error(r->pool, HTTP_INTERNAL_SERVER_ERROR, 0,
- ap_psprintf(r->pool,
- "Could not open the property "
- "database for %s.",
- ap_escape_html(r->pool, r->uri)),
- err);
- return dav_handle_err(r, err, NULL);
- }
- /* ### what to do about closing the propdb on server failure? */
-
- /* ### validate "live" properties */
-
- /* set up an array to hold property operation contexts */
- ctx_list = ap_make_array(r->pool, 10, sizeof(dav_prop_ctx));
-
- /* do a first pass to ensure that all "remove" properties exist */
- for (child = doc->root->first_child; child; child = child->next) {
- int is_remove;
- dav_xml_elem *prop_group;
- dav_xml_elem *one_prop;
-
mod_dav-1.0.3.patch view on Meta::CPAN
- for (one_prop = prop_group->first_child; one_prop;
- one_prop = one_prop->next) {
-
- ctx = (dav_prop_ctx *)ap_push_array(ctx_list);
- ctx->propdb = propdb;
- ctx->operation = is_remove ? DAV_PROP_OP_DELETE : DAV_PROP_OP_SET;
- ctx->prop = one_prop;
-
- ctx->r = r; /* for later use by dav_prop_log_errors() */
-
- dav_prop_validate(ctx);
-
- if ( DAV_PROP_CTX_HAS_ERR(*ctx) ) {
- failure = 1;
- }
- }
- }
-
- /* ### should test that we found at least one set/remove */
-
- /* execute all of the operations */
xs/Apache/DAV/DAV.xs view on Meta::CPAN
MODULE = Apache::DAV PACKAGE = Apache::DAV::PropCtx PREFIX = dav_
void
dav_prop_rollback(ctx)
Apache::DAV::PropCtx ctx
MODULE = Apache::DAV PACKAGE = Apache::DAV::PropCtx PREFIX = dav_
void
dav_prop_validate(ctx)
Apache::DAV::PropCtx ctx
MODULE = Apache::DAV PACKAGE = Apache PREFIX = dav_
int
dav_proppatch(r, resource, doc)
Apache r
Apache::DAV::Resource resource
Apache::DAV::XMLDoc doc
PREINIT:
xs/Apache/DAV/DAV.xs view on Meta::CPAN
int
dav_unlock(r, resource, locktoken)
Apache r
Apache::DAV::Resource resource
Apache::DAV::LockToken locktoken
MODULE = Apache::DAV PACKAGE = Apache::DAV::XMLDoc PREFIX = dav_
int
dav_validate_root(doc, tagname)
Apache::DAV::XMLDoc doc
const char * tagname
PROTOTYPES: disabled
BOOT:
items = items; /* -Wall */
xs/Apache/DAV/HooksLiveprop/HooksLiveprop.xs view on Meta::CPAN
typedef Apache__DAV__Error (*tdavxs_cb_Apache__DAV__HooksLiveprop__patch_exec_func)(dav_resource * resource,const dav_xml_elem * elem,int operation,void * context,dav_liveprop_rollback * * rollback_ctx) ;
static tdavxs_cb_Apache__DAV__HooksLiveprop__patch_exec_func davxs_davxs_cb_Apache__DAV__HooksLiveprop__patch_exec_func [4] = {
davxs_cb_Apache__DAV__HooksLiveprop__patch_exec_obj0,
davxs_cb_Apache__DAV__HooksLiveprop__patch_exec_obj1,
davxs_cb_Apache__DAV__HooksLiveprop__patch_exec_obj2,
davxs_cb_Apache__DAV__HooksLiveprop__patch_exec_obj3
} ;
/* --- Apache::DAV::HooksLiveprop -> patch_validate --- */
static Apache__DAV__Error davxs_cb_Apache__DAV__HooksLiveprop__patch_validate (SV * __cbdest,const dav_resource * resource,const dav_xml_elem * elem,int operation,void * * context,int * defer_to_dead)
{
Apache__DAV__Error __retval ;
SV * __retsv ;
int __cnt ;
dSP ;
ENTER ;
SAVETMPS ;
PUSHMARK(SP) ;
PUSHs(__cbdest) ;
PUSHs(davxs_Apache__DAV__Resource_2obj(resource)) ;
PUSHs(davxs_Apache__DAV__XMLElem_2obj(elem)) ;
PUSHs(davxs_IV_2obj(operation)) ;
PUTBACK ;
__cnt = perl_call_method("patch_validate", G_ARRAY) ;
if (__cnt != 3)
croak ("davxs_cb_Apache__DAV__HooksLiveprop__patch_validate expected 3 return values") ;
SPAGAIN ;
__retsv = POPs;
__retval = (Apache__DAV__Error)davxs_sv2_Apache__DAV__Error(__retsv);
__retsv = POPs;
*context = (void *)davxs_sv2_PTR(__retsv);
__retsv = POPs;
*defer_to_dead = (int)davxs_sv2_IV(__retsv);
PUTBACK ;
FREETMPS ;
LEAVE ;
return __retval ;
}
static Apache__DAV__Error davxs_cb_Apache__DAV__HooksLiveprop__patch_validate_obj0 (const dav_resource * resource,const dav_xml_elem * elem,int operation,void * * context,int * defer_to_dead)
{
return davxs_cb_Apache__DAV__HooksLiveprop__patch_validate (davxs_Apache__DAV__HooksLiveprop_obj[0],resource,elem,operation,context,defer_to_dead) ;
}
static Apache__DAV__Error davxs_cb_Apache__DAV__HooksLiveprop__patch_validate_obj1 (const dav_resource * resource,const dav_xml_elem * elem,int operation,void * * context,int * defer_to_dead)
{
return davxs_cb_Apache__DAV__HooksLiveprop__patch_validate (davxs_Apache__DAV__HooksLiveprop_obj[1],resource,elem,operation,context,defer_to_dead) ;
}
static Apache__DAV__Error davxs_cb_Apache__DAV__HooksLiveprop__patch_validate_obj2 (const dav_resource * resource,const dav_xml_elem * elem,int operation,void * * context,int * defer_to_dead)
{
return davxs_cb_Apache__DAV__HooksLiveprop__patch_validate (davxs_Apache__DAV__HooksLiveprop_obj[2],resource,elem,operation,context,defer_to_dead) ;
}
static Apache__DAV__Error davxs_cb_Apache__DAV__HooksLiveprop__patch_validate_obj3 (const dav_resource * resource,const dav_xml_elem * elem,int operation,void * * context,int * defer_to_dead)
{
return davxs_cb_Apache__DAV__HooksLiveprop__patch_validate (davxs_Apache__DAV__HooksLiveprop_obj[3],resource,elem,operation,context,defer_to_dead) ;
}
typedef Apache__DAV__Error (*tdavxs_cb_Apache__DAV__HooksLiveprop__patch_validate_func)(const dav_resource * resource,const dav_xml_elem * elem,int operation,void * * context,int * defer_to_dead) ;
static tdavxs_cb_Apache__DAV__HooksLiveprop__patch_validate_func davxs_davxs_cb_Apache__DAV__HooksLiveprop__patch_validate_func [4] = {
davxs_cb_Apache__DAV__HooksLiveprop__patch_validate_obj0,
davxs_cb_Apache__DAV__HooksLiveprop__patch_validate_obj1,
davxs_cb_Apache__DAV__HooksLiveprop__patch_validate_obj2,
davxs_cb_Apache__DAV__HooksLiveprop__patch_validate_obj3
} ;
/* --- Apache::DAV::HooksLiveprop -> is_writeable --- */
static dav_prop_rw davxs_cb_Apache__DAV__HooksLiveprop__is_writeable (SV * __cbdest,const dav_resource * resource,int propid)
{
xs/Apache/DAV/HooksLiveprop/HooksLiveprop.xs view on Meta::CPAN
int propid
CODE:
RETVAL = (*__self->is_writeable)(resource, propid);
OUTPUT:
RETVAL
MODULE = Apache::DAV::HooksLiveprop PACKAGE = Apache::DAV::HooksLiveprop
Apache::DAV::Error
patch_validate(__self, resource, elem, operation)
Apache::DAV::HooksLiveprop __self
Apache::DAV::Resource resource
Apache::DAV::XMLElem elem
int operation
PREINIT:
PTR context;
IV defer_to_dead;
PPCODE:
RETVAL = (*__self->patch_validate)(resource, elem, operation, &context, &defer_to_dead);
XSprePUSH;
EXTEND(SP, 3) ;
PUSHs(davxs_Apache__DAV__Error_2obj(RETVAL)) ;
PUSHs(davxs_PTR_2obj(context)) ;
PUSHs(davxs_IV_2obj(defer_to_dead)) ;
MODULE = Apache::DAV::HooksLiveprop PACKAGE = Apache::DAV::HooksLiveprop
Apache::DAV::Error
patch_exec(__self, resource, elem, operation, context)
xs/Apache/DAV/HooksLiveprop/HooksLiveprop.xs view on Meta::CPAN
}
if (n < 0)
croak ("Limit for concurrent object callbacks reached for Apache::DAV::HooksLiveprop. Limit is 4") ;
davxs_Apache__DAV__HooksLiveprop_obj[n] = ref ;
cobj -> find_prop = davxs_davxs_cb_Apache__DAV__HooksLiveprop__find_prop_func[n] ;
cobj -> insert_prop = davxs_davxs_cb_Apache__DAV__HooksLiveprop__insert_prop_func[n] ;
cobj -> insert_all = davxs_davxs_cb_Apache__DAV__HooksLiveprop__insert_all_func[n] ;
cobj -> is_writeable = davxs_davxs_cb_Apache__DAV__HooksLiveprop__is_writeable_func[n] ;
cobj -> patch_validate = davxs_davxs_cb_Apache__DAV__HooksLiveprop__patch_validate_func[n] ;
cobj -> patch_exec = davxs_davxs_cb_Apache__DAV__HooksLiveprop__patch_exec_func[n] ;
cobj -> patch_commit = davxs_davxs_cb_Apache__DAV__HooksLiveprop__patch_commit_func[n] ;
cobj -> patch_rollback = davxs_davxs_cb_Apache__DAV__HooksLiveprop__patch_rollback_func[n] ;
PROTOTYPES: disabled
BOOT:
items = items; /* -Wall */
( run in 0.237 second using v1.01-cache-2.11-cpan-4d50c553e7e )