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 )