Mailing List Archive

Re: svn commit: r1879889 - in /httpd/httpd/trunk: CHANGES include/ap_mmn.h modules/dav/main/mod_dav.h modules/dav/main/props.c
You're already changing the API ... why not simply introduce
insert_prop_v2() with the appropriate parameters? This concept of "pass
parameters via the pool" is very disturbing.

Cheers,
-g

On Wed, Jul 15, 2020 at 8:56 AM <minfrin@apache.org> wrote:

> Author: minfrin
> Date: Wed Jul 15 13:56:55 2020
> New Revision: 1879889
>
> URL: http://svn.apache.org/viewvc?rev=1879889&view=rev
> Log:
> mod_dav: Some DAV extensions, like CalDAV, specify both document
> elements and property elements that need to be taken into account
> when generating a property. The document element and property element
> are made available in the dav_liveprop_elem structure under the
> DAV_PROP_ELEMENT key in the resource pool.
>
> Modified:
> httpd/httpd/trunk/CHANGES
> httpd/httpd/trunk/include/ap_mmn.h
> httpd/httpd/trunk/modules/dav/main/mod_dav.h
> httpd/httpd/trunk/modules/dav/main/props.c
>
> Modified: httpd/httpd/trunk/CHANGES
> URL:
> http://svn.apache.org/viewvc/httpd/httpd/trunk/CHANGES?rev=1879889&r1=1879888&r2=1879889&view=diff
>
> ==============================================================================
> --- httpd/httpd/trunk/CHANGES [utf-8] (original)
> +++ httpd/httpd/trunk/CHANGES [utf-8] Wed Jul 15 13:56:55 2020
> @@ -1,6 +1,12 @@
> -*- coding:
> utf-8 -*-
> Changes with Apache 2.5.1
>
> + *) mod_dav: Some DAV extensions, like CalDAV, specify both document
> + elements and property elements that need to be taken into account
> + when generating a property. The document element and property element
> + are made available in the dav_liveprop_elem structure under the
> + DAV_PROP_ELEMENT key in the resource pool. [Graham Leggett]
> +
> *) mod_dav: Add utility functions dav_validate_root_ns(),
> dav_find_child_ns(), dav_find_next_ns(), dav_find_attr_ns() and
> dav_find_attr() so that other modules get to play too.
>
> Modified: httpd/httpd/trunk/include/ap_mmn.h
> URL:
> http://svn.apache.org/viewvc/httpd/httpd/trunk/include/ap_mmn.h?rev=1879889&r1=1879888&r2=1879889&view=diff
>
> ==============================================================================
> --- httpd/httpd/trunk/include/ap_mmn.h (original)
> +++ httpd/httpd/trunk/include/ap_mmn.h Wed Jul 15 13:56:55 2020
> @@ -657,6 +657,8 @@
> * 20200705.1 (2.5.1-dev) Add dav_validate_root_ns(),
> dav_find_child_ns(),
> * dav_find_next_ns(), dav_find_attr_ns() and
> * dav_find_attr().
> + * 20200705.2 (2.5.1-dev) Add dav_liveprop_elem structure and
> + * DAV_PROP_ELEMENT key.
> */
>
> #define MODULE_MAGIC_COOKIE 0x41503235UL /* "AP25" */
> @@ -664,7 +666,7 @@
> #ifndef MODULE_MAGIC_NUMBER_MAJOR
> #define MODULE_MAGIC_NUMBER_MAJOR 20200705
> #endif
> -#define MODULE_MAGIC_NUMBER_MINOR 1 /* 0...n */
> +#define MODULE_MAGIC_NUMBER_MINOR 2 /* 0...n */
>
> /**
> * Determine if the server's current MODULE_MAGIC_NUMBER is at least a
>
> Modified: httpd/httpd/trunk/modules/dav/main/mod_dav.h
> URL:
> http://svn.apache.org/viewvc/httpd/httpd/trunk/modules/dav/main/mod_dav.h?rev=1879889&r1=1879888&r2=1879889&view=diff
>
> ==============================================================================
> --- httpd/httpd/trunk/modules/dav/main/mod_dav.h (original)
> +++ httpd/httpd/trunk/modules/dav/main/mod_dav.h Wed Jul 15 13:56:55 2020
> @@ -913,6 +913,14 @@ struct dav_hooks_liveprop
> ** property, and does not want it handled as a dead property, it
> should
> ** return DAV_PROP_INSERT_NOTSUPP.
> **
> + ** Some DAV extensions, like CalDAV, specify both document elements
> + ** and property elements that need to be taken into account when
> + ** generating a property. The document element and property element
> + ** are made available in the dav_liveprop_elem structure under the
> + ** DAV_PROP_ELEMENT key in the resource pool, accessible as follows:
> + **
> + ** apr_pool_userdata_get(&elem, DAV_PROP_ELEMENT, resource->pool);
> + **
> ** Returns one of DAV_PROP_INSERT_* based on what happened.
> **
> ** ### we may need more context... ie. the lock database
> @@ -1061,6 +1069,20 @@ DAV_DECLARE(void) dav_add_all_liveprop_x
> apr_text_header *phdr);
>
> /*
> + ** When calling insert_prop(), the request element is associated with
> + ** the pool userdata attached to the resource. Access as follows:
> + **
> + ** apr_pool_userdata_get(&elem, DAV_PROP_ELEMENT, resource->pool);
> + **
> + */
> +#define DAV_PROP_ELEMENT "mod_dav-element"
> +
> +typedef struct {
> + const apr_xml_doc *doc;
> + const apr_xml_elem *elem;
> +} dav_liveprop_elem;
> +
> +/*
> ** The following three functions are part of mod_dav's internal handling
> ** for the core WebDAV properties. They are not part of mod_dav's API.
> */
>
> Modified: httpd/httpd/trunk/modules/dav/main/props.c
> URL:
> http://svn.apache.org/viewvc/httpd/httpd/trunk/modules/dav/main/props.c?rev=1879889&r1=1879888&r2=1879889&view=diff
>
> ==============================================================================
> --- httpd/httpd/trunk/modules/dav/main/props.c (original)
> +++ httpd/httpd/trunk/modules/dav/main/props.c Wed Jul 15 13:56:55 2020
> @@ -795,10 +795,18 @@ DAV_DECLARE(dav_get_props_result) dav_ge
> apr_text_header hdr_ns = { 0 };
> int have_good = 0;
> dav_get_props_result result = { 0 };
> + dav_liveprop_elem *element;
> char *marks_liveprop;
> dav_xmlns_info *xi;
> int xi_filled = 0;
>
> + /* we lose both the document and the element when calling
> (insert_prop),
> + * make these available in the pool.
> + */
> + element = apr_pcalloc(propdb->resource->pool,
> sizeof(dav_liveprop_elem));
> + element->doc = doc;
> + apr_pool_userdata_setn(element, DAV_PROP_ELEMENT, NULL,
> propdb->resource->pool);
> +
> /* ### NOTE: we should pass in TWO buffers -- one for keys, one for
> the marks */
>
> @@ -822,6 +830,8 @@ DAV_DECLARE(dav_get_props_result) dav_ge
> dav_prop_insert inserted;
> dav_prop_name name;
>
> + element->elem = elem;
> +
> /*
> ** First try live property providers; if they don't handle
> ** the property, then try looking it up in the propdb.
>
>
>
Re: svn commit: r1879889 - in /httpd/httpd/trunk: CHANGES include/ap_mmn.h modules/dav/main/mod_dav.h modules/dav/main/props.c [ In reply to ]
On 15 Jul 2020, at 16:18, Greg Stein <gstein@gmail.com> wrote:

> You're already changing the API ... why not simply introduce insert_prop_v2() with the appropriate parameters? This concept of "pass parameters via the pool" is very disturbing.

Changes to these provider APIs can’t be backported, thus the pool.

Separately I’d like to change the signature of insert_prop(), but that’s a separate patch. Not seeing any point in insert_prop_v2() if backporting isn't possible, rather keep it clean and have one API that does the right thing in v2.6 onwards.

Regards,
Graham