Seems these helper functions would be a better fit within apr_xml, rather
than httpd.


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

> Author: minfrin
> Date: Wed Jul 15 13:16:19 2020
> New Revision: 1879888
>
> URL: http://svn.apache.org/viewvc?rev=1879888&view=rev
> Log:
> 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/CHANGES
>     httpd/httpd/trunk/include/ap_mmn.h
>     httpd/httpd/trunk/modules/dav/main/mod_dav.h
>     httpd/httpd/trunk/modules/dav/main/util.c
>
> Modified: httpd/httpd/trunk/CHANGES
> URL:
> http://svn.apache.org/viewvc/httpd/httpd/trunk/CHANGES?rev=1879888&r1=1879887&r2=1879888&view=diff
>
> ==============================================================================
> --- httpd/httpd/trunk/CHANGES [utf-8] (original)
> +++ httpd/httpd/trunk/CHANGES [utf-8] Wed Jul 15 13:16:19 2020
> @@ -1,6 +1,10 @@
>                                                           -*- coding:
> utf-8 -*-
>  Changes with Apache 2.5.1
>
> +  *) 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.
> +     [Graham Leggett]
>
>    *) mod_http2:
>       Fixes <https://github.com/icing/mod_h2/issues/200>:
>
> Modified: httpd/httpd/trunk/include/ap_mmn.h
> URL:
> http://svn.apache.org/viewvc/httpd/httpd/trunk/include/ap_mmn.h?rev=1879888&r1=1879887&r2=1879888&view=diff
>
> ==============================================================================
> --- httpd/httpd/trunk/include/ap_mmn.h (original)
> +++ httpd/httpd/trunk/include/ap_mmn.h Wed Jul 15 13:16:19 2020
> @@ -654,6 +654,9 @@
>   * 20200703.0 (2.5.1-dev)  Remove ap_md5digest(), ap_md5contextTo64(),
>   *                         ContentDigest directive.
>   * 20200705.0 (2.5.1-dev)  Update method_precondition hook.
> + * 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().
>   */
>
>  #define MODULE_MAGIC_COOKIE 0x41503235UL /* "AP25" */
> @@ -661,7 +664,7 @@
>  #ifndef MODULE_MAGIC_NUMBER_MAJOR
>  #define MODULE_MAGIC_NUMBER_MAJOR 20200705
>  #endif
> -#define MODULE_MAGIC_NUMBER_MINOR 0             /* 0...n */
> +#define MODULE_MAGIC_NUMBER_MINOR 1             /* 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=1879888&r1=1879887&r2=1879888&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:16:19 2020
> @@ -583,8 +583,22 @@ DAV_DECLARE(int) dav_get_depth(request_r
>
>  DAV_DECLARE(int) dav_validate_root(const apr_xml_doc *doc,
>                                     const char *tagname);
> +DAV_DECLARE(int) dav_validate_root_ns(const apr_xml_doc *doc,
> +                                      int ns, const char *tagname);
>  DAV_DECLARE(apr_xml_elem *) dav_find_child(const apr_xml_elem *elem,
>                                             const char *tagname);
> +DAV_DECLARE(apr_xml_elem *) dav_find_child_ns(const apr_xml_elem *elem,
> +                                              int ns, const char
> *tagname);
> +DAV_DECLARE(apr_xml_elem *) dav_find_next_ns(const apr_xml_elem *elem,
> +                                             int ns, const char *tagname);
> +
> +/* find and return the attribute with a name in the given namespace */
> +DAV_DECLARE(apr_xml_attr *) dav_find_attr_ns(const apr_xml_elem *elem,
> +                                             int ns, const char
> *attrname);
> +
> +/* find and return the attribute with a given DAV: tagname */
> +DAV_DECLARE(apr_xml_attr *) dav_find_attr(const apr_xml_elem *elem,
> +                                          const char *attrname);
>
>  /* gather up all the CDATA into a single string */
>  DAV_DECLARE(const char *) dav_xml_get_cdata(const apr_xml_elem *elem,
> apr_pool_t *pool,
>
> Modified: httpd/httpd/trunk/modules/dav/main/util.c
> URL:
> http://svn.apache.org/viewvc/httpd/httpd/trunk/modules/dav/main/util.c?rev=1879888&r1=1879887&r2=1879888&view=diff
>
> ==============================================================================
> --- httpd/httpd/trunk/modules/dav/main/util.c (original)
> +++ httpd/httpd/trunk/modules/dav/main/util.c Wed Jul 15 13:16:19 2020
> @@ -316,26 +316,71 @@ DAV_DECLARE(dav_lookup_result) dav_looku
>  */
>
>  /* validate that the root element uses a given DAV: tagname (TRUE==valid)
> */
> -DAV_DECLARE(int) dav_validate_root(const apr_xml_doc *doc,
> -                                   const char *tagname)
> +DAV_DECLARE(int) dav_validate_root_ns(const apr_xml_doc *doc,
> +                                      int ns, const char *tagname)
>  {
>      return doc->root &&
> -        doc->root->ns == APR_XML_NS_DAV_ID &&
> +        doc->root->ns == ns &&
>          strcmp(doc->root->name, tagname) == 0;
>  }
>
> -/* find and return the (unique) child with a given DAV: tagname */
> -DAV_DECLARE(apr_xml_elem *) dav_find_child(const apr_xml_elem *elem,
> -                                           const char *tagname)
> +/* validate that the root element uses a given DAV: tagname (TRUE==valid)
> */
> +DAV_DECLARE(int) dav_validate_root(const apr_xml_doc *doc,
> +                                   const char *tagname)
> +{
> +       return dav_validate_root_ns(doc, APR_XML_NS_DAV_ID, tagname);
> +}
> +
> +/* find and return the next child with a tagname in the given namespace */
> +DAV_DECLARE(apr_xml_elem *) dav_find_next_ns(const apr_xml_elem *elem,
> +                                             int ns, const char *tagname)
> +{
> +    apr_xml_elem *child = elem->next;
> +
> +    for (; child; child = child->next)
> +        if (child->ns == ns && !strcmp(child->name, tagname))
> +            return child;
> +    return NULL;
> +}
> +
> +/* find and return the (unique) child with a tagname in the given
> namespace */
> +DAV_DECLARE(apr_xml_elem *) dav_find_child_ns(const apr_xml_elem *elem,
> +                                              int ns, const char *tagname)
>  {
>      apr_xml_elem *child = elem->first_child;
>
>      for (; child; child = child->next)
> -        if (child->ns == APR_XML_NS_DAV_ID && !strcmp(child->name,
> tagname))
> +        if (child->ns == ns && !strcmp(child->name, tagname))
>              return child;
>      return NULL;
>  }
>
> +/* find and return the (unique) child with a given DAV: tagname */
> +DAV_DECLARE(apr_xml_elem *) dav_find_child(const apr_xml_elem *elem,
> +                                           const char *tagname)
> +{
> +       return dav_find_child_ns(elem, APR_XML_NS_DAV_ID, tagname);
> +}
> +
> +/* find and return the attribute with a name in the given namespace */
> +DAV_DECLARE(apr_xml_attr *) dav_find_attr_ns(const apr_xml_elem *elem,
> +                                             int ns, const char *attrname)
> +{
> +    apr_xml_attr *attr = elem->attr;
> +
> +    for (; attr; attr = attr->next)
> +        if (attr->ns == ns && !strcmp(attr->name, attrname))
> +            return attr;
> +    return NULL;
> +}
> +
> +/* find and return the attribute with a given DAV: tagname */
> +DAV_DECLARE(apr_xml_attr *) dav_find_attr(const apr_xml_elem *elem,
> +                                          const char *attrname)
> +{
> +       return dav_find_attr_ns(elem, APR_XML_NS_DAV_ID, attrname);
> +}
> +
>  /* gather up all the CDATA into a single string */
>  DAV_DECLARE(const char *) dav_xml_get_cdata(const apr_xml_elem *elem,
> apr_pool_t *pool,
>                                int strip_white)
>
>
>

Reply via email to