std_liveprop.c revision 5fbee309625f7a631a42d7dc05bbfa0d45a926cc
0b3b020a178cf3b957fed627de13c895773995ecLennart Poettering/* ====================================================================
0b3b020a178cf3b957fed627de13c895773995ecLennart Poettering * The Apache Software License, Version 1.1
12b42c76672a66c2d4ea7212c14f8f1b5a62b78dTom Gundersen *
0b3b020a178cf3b957fed627de13c895773995ecLennart Poettering * Copyright (c) 2000 The Apache Software Foundation. All rights
0b3b020a178cf3b957fed627de13c895773995ecLennart Poettering * reserved.
0b3b020a178cf3b957fed627de13c895773995ecLennart Poettering *
0b3b020a178cf3b957fed627de13c895773995ecLennart Poettering * Redistribution and use in source and binary forms, with or without
0b3b020a178cf3b957fed627de13c895773995ecLennart Poettering * modification, are permitted provided that the following conditions
0b3b020a178cf3b957fed627de13c895773995ecLennart Poettering * are met:
0b3b020a178cf3b957fed627de13c895773995ecLennart Poettering *
5430f7f2bc7330f3088b894166bf3524a067e3d8Lennart Poettering * 1. Redistributions of source code must retain the above copyright
5430f7f2bc7330f3088b894166bf3524a067e3d8Lennart Poettering * notice, this list of conditions and the following disclaimer.
0b3b020a178cf3b957fed627de13c895773995ecLennart Poettering *
0b3b020a178cf3b957fed627de13c895773995ecLennart Poettering * 2. Redistributions in binary form must reproduce the above copyright
0b3b020a178cf3b957fed627de13c895773995ecLennart Poettering * notice, this list of conditions and the following disclaimer in
0b3b020a178cf3b957fed627de13c895773995ecLennart Poettering * the documentation and/or other materials provided with the
0b3b020a178cf3b957fed627de13c895773995ecLennart Poettering * distribution.
5430f7f2bc7330f3088b894166bf3524a067e3d8Lennart Poettering *
0b3b020a178cf3b957fed627de13c895773995ecLennart Poettering * 3. The end-user documentation included with the redistribution,
5430f7f2bc7330f3088b894166bf3524a067e3d8Lennart Poettering * if any, must include the following acknowledgment:
0b3b020a178cf3b957fed627de13c895773995ecLennart Poettering * "This product includes software developed by the
0b3b020a178cf3b957fed627de13c895773995ecLennart Poettering * Apache Software Foundation (http://www.apache.org/)."
0b3b020a178cf3b957fed627de13c895773995ecLennart Poettering * Alternately, this acknowledgment may appear in the software itself,
56ba3c78ae35065064c4289a0c8e22a81256af20Zbigniew Jędrzejewski-Szmek * if and wherever such third-party acknowledgments normally appear.
0b3b020a178cf3b957fed627de13c895773995ecLennart Poettering *
798d3a524ea57aaf40cb53858aaa45ec702f012dZbigniew Jędrzejewski-Szmek * 4. The names "Apache" and "Apache Software Foundation" must
798d3a524ea57aaf40cb53858aaa45ec702f012dZbigniew Jędrzejewski-Szmek * not be used to endorse or promote products derived from this
798d3a524ea57aaf40cb53858aaa45ec702f012dZbigniew Jędrzejewski-Szmek * software without prior written permission. For written
798d3a524ea57aaf40cb53858aaa45ec702f012dZbigniew Jędrzejewski-Szmek * permission, please contact apache@apache.org.
798d3a524ea57aaf40cb53858aaa45ec702f012dZbigniew Jędrzejewski-Szmek *
798d3a524ea57aaf40cb53858aaa45ec702f012dZbigniew Jędrzejewski-Szmek * 5. Products derived from this software may not be called "Apache",
798d3a524ea57aaf40cb53858aaa45ec702f012dZbigniew Jędrzejewski-Szmek * nor may "Apache" appear in their name, without prior written
798d3a524ea57aaf40cb53858aaa45ec702f012dZbigniew Jędrzejewski-Szmek * permission of the Apache Software Foundation.
798d3a524ea57aaf40cb53858aaa45ec702f012dZbigniew Jędrzejewski-Szmek *
798d3a524ea57aaf40cb53858aaa45ec702f012dZbigniew Jędrzejewski-Szmek * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
798d3a524ea57aaf40cb53858aaa45ec702f012dZbigniew Jędrzejewski-Szmek * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
798d3a524ea57aaf40cb53858aaa45ec702f012dZbigniew Jędrzejewski-Szmek * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
798d3a524ea57aaf40cb53858aaa45ec702f012dZbigniew Jędrzejewski-Szmek * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
798d3a524ea57aaf40cb53858aaa45ec702f012dZbigniew Jędrzejewski-Szmek * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
798d3a524ea57aaf40cb53858aaa45ec702f012dZbigniew Jędrzejewski-Szmek * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
798d3a524ea57aaf40cb53858aaa45ec702f012dZbigniew Jędrzejewski-Szmek * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
798d3a524ea57aaf40cb53858aaa45ec702f012dZbigniew Jędrzejewski-Szmek * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
798d3a524ea57aaf40cb53858aaa45ec702f012dZbigniew Jędrzejewski-Szmek * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
798d3a524ea57aaf40cb53858aaa45ec702f012dZbigniew Jędrzejewski-Szmek * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
798d3a524ea57aaf40cb53858aaa45ec702f012dZbigniew Jędrzejewski-Szmek * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
798d3a524ea57aaf40cb53858aaa45ec702f012dZbigniew Jędrzejewski-Szmek * SUCH DAMAGE.
798d3a524ea57aaf40cb53858aaa45ec702f012dZbigniew Jędrzejewski-Szmek * ====================================================================
798d3a524ea57aaf40cb53858aaa45ec702f012dZbigniew Jędrzejewski-Szmek *
798d3a524ea57aaf40cb53858aaa45ec702f012dZbigniew Jędrzejewski-Szmek * This software consists of voluntary contributions made by many
798d3a524ea57aaf40cb53858aaa45ec702f012dZbigniew Jędrzejewski-Szmek * individuals on behalf of the Apache Software Foundation. For more
798d3a524ea57aaf40cb53858aaa45ec702f012dZbigniew Jędrzejewski-Szmek * information on the Apache Software Foundation, please see
798d3a524ea57aaf40cb53858aaa45ec702f012dZbigniew Jędrzejewski-Szmek * <http://www.apache.org/>.
798d3a524ea57aaf40cb53858aaa45ec702f012dZbigniew Jędrzejewski-Szmek */
798d3a524ea57aaf40cb53858aaa45ec702f012dZbigniew Jędrzejewski-Szmek
798d3a524ea57aaf40cb53858aaa45ec702f012dZbigniew Jędrzejewski-Szmek#include "httpd.h"
798d3a524ea57aaf40cb53858aaa45ec702f012dZbigniew Jędrzejewski-Szmek#include "util_xml.h"
798d3a524ea57aaf40cb53858aaa45ec702f012dZbigniew Jędrzejewski-Szmek#include "apr_strings.h"
798d3a524ea57aaf40cb53858aaa45ec702f012dZbigniew Jędrzejewski-Szmek
798d3a524ea57aaf40cb53858aaa45ec702f012dZbigniew Jędrzejewski-Szmek#include "mod_dav.h"
798d3a524ea57aaf40cb53858aaa45ec702f012dZbigniew Jędrzejewski-Szmek
798d3a524ea57aaf40cb53858aaa45ec702f012dZbigniew Jędrzejewski-Szmek/* forward-declare */
798d3a524ea57aaf40cb53858aaa45ec702f012dZbigniew Jędrzejewski-Szmekstatic const dav_hooks_liveprop dav_core_hooks_liveprop;
798d3a524ea57aaf40cb53858aaa45ec702f012dZbigniew Jędrzejewski-Szmek
798d3a524ea57aaf40cb53858aaa45ec702f012dZbigniew Jędrzejewski-Szmek/*
798d3a524ea57aaf40cb53858aaa45ec702f012dZbigniew Jędrzejewski-Szmek** The namespace URIs that we use. There will only ever be "DAV:".
798d3a524ea57aaf40cb53858aaa45ec702f012dZbigniew Jędrzejewski-Szmek*/
798d3a524ea57aaf40cb53858aaa45ec702f012dZbigniew Jędrzejewski-Szmekstatic const char * const dav_core_namespace_uris[] =
798d3a524ea57aaf40cb53858aaa45ec702f012dZbigniew Jędrzejewski-Szmek{
798d3a524ea57aaf40cb53858aaa45ec702f012dZbigniew Jędrzejewski-Szmek "DAV:",
798d3a524ea57aaf40cb53858aaa45ec702f012dZbigniew Jędrzejewski-Szmek NULL /* sentinel */
798d3a524ea57aaf40cb53858aaa45ec702f012dZbigniew Jędrzejewski-Szmek};
798d3a524ea57aaf40cb53858aaa45ec702f012dZbigniew Jędrzejewski-Szmek
798d3a524ea57aaf40cb53858aaa45ec702f012dZbigniew Jędrzejewski-Szmek/*
798d3a524ea57aaf40cb53858aaa45ec702f012dZbigniew Jędrzejewski-Szmek** Define each of the core properties that this provider will handle.
798d3a524ea57aaf40cb53858aaa45ec702f012dZbigniew Jędrzejewski-Szmek** Note that all of them are in the DAV: namespace, which has a
798d3a524ea57aaf40cb53858aaa45ec702f012dZbigniew Jędrzejewski-Szmek** provider-local index of 0.
798d3a524ea57aaf40cb53858aaa45ec702f012dZbigniew Jędrzejewski-Szmek*/
798d3a524ea57aaf40cb53858aaa45ec702f012dZbigniew Jędrzejewski-Szmekstatic const dav_liveprop_spec dav_core_props[] =
798d3a524ea57aaf40cb53858aaa45ec702f012dZbigniew Jędrzejewski-Szmek{
798d3a524ea57aaf40cb53858aaa45ec702f012dZbigniew Jędrzejewski-Szmek { 0, "comment", DAV_PROPID_comment, 1 },
798d3a524ea57aaf40cb53858aaa45ec702f012dZbigniew Jędrzejewski-Szmek { 0, "creator-displayname", DAV_PROPID_creator_displayname, 1 },
798d3a524ea57aaf40cb53858aaa45ec702f012dZbigniew Jędrzejewski-Szmek { 0, "displayname", DAV_PROPID_displayname, 1 },
798d3a524ea57aaf40cb53858aaa45ec702f012dZbigniew Jędrzejewski-Szmek { 0, "resourcetype", DAV_PROPID_resourcetype, 0 },
798d3a524ea57aaf40cb53858aaa45ec702f012dZbigniew Jędrzejewski-Szmek { 0, "source", DAV_PROPID_source, 1 },
798d3a524ea57aaf40cb53858aaa45ec702f012dZbigniew Jędrzejewski-Szmek { 0, "supported-live-property-set",
798d3a524ea57aaf40cb53858aaa45ec702f012dZbigniew Jędrzejewski-Szmek DAV_PROPID_supported_live_property_set, 0 },
798d3a524ea57aaf40cb53858aaa45ec702f012dZbigniew Jędrzejewski-Szmek { 0, "supported-method-set", DAV_PROPID_supported_method_set, 0 },
798d3a524ea57aaf40cb53858aaa45ec702f012dZbigniew Jędrzejewski-Szmek { 0, "supported-report-set", DAV_PROPID_supported_report_set, 0 },
798d3a524ea57aaf40cb53858aaa45ec702f012dZbigniew Jędrzejewski-Szmek
798d3a524ea57aaf40cb53858aaa45ec702f012dZbigniew Jędrzejewski-Szmek { 0 } /* sentinel */
798d3a524ea57aaf40cb53858aaa45ec702f012dZbigniew Jędrzejewski-Szmek};
798d3a524ea57aaf40cb53858aaa45ec702f012dZbigniew Jędrzejewski-Szmek
798d3a524ea57aaf40cb53858aaa45ec702f012dZbigniew Jędrzejewski-Szmekstatic const dav_liveprop_group dav_core_liveprop_group =
798d3a524ea57aaf40cb53858aaa45ec702f012dZbigniew Jędrzejewski-Szmek{
798d3a524ea57aaf40cb53858aaa45ec702f012dZbigniew Jędrzejewski-Szmek dav_core_props,
798d3a524ea57aaf40cb53858aaa45ec702f012dZbigniew Jędrzejewski-Szmek dav_core_namespace_uris,
798d3a524ea57aaf40cb53858aaa45ec702f012dZbigniew Jędrzejewski-Szmek &dav_core_hooks_liveprop
798d3a524ea57aaf40cb53858aaa45ec702f012dZbigniew Jędrzejewski-Szmek};
798d3a524ea57aaf40cb53858aaa45ec702f012dZbigniew Jędrzejewski-Szmek
798d3a524ea57aaf40cb53858aaa45ec702f012dZbigniew Jędrzejewski-Szmekstatic dav_prop_insert dav_core_insert_prop(const dav_resource *resource,
798d3a524ea57aaf40cb53858aaa45ec702f012dZbigniew Jędrzejewski-Szmek int propid, int insvalue,
798d3a524ea57aaf40cb53858aaa45ec702f012dZbigniew Jędrzejewski-Szmek ap_text_header *phdr)
798d3a524ea57aaf40cb53858aaa45ec702f012dZbigniew Jędrzejewski-Szmek{
798d3a524ea57aaf40cb53858aaa45ec702f012dZbigniew Jędrzejewski-Szmek const char *value;
798d3a524ea57aaf40cb53858aaa45ec702f012dZbigniew Jędrzejewski-Szmek const char *s;
798d3a524ea57aaf40cb53858aaa45ec702f012dZbigniew Jędrzejewski-Szmek dav_prop_insert which;
798d3a524ea57aaf40cb53858aaa45ec702f012dZbigniew Jędrzejewski-Szmek apr_pool_t *p = resource->pool;
798d3a524ea57aaf40cb53858aaa45ec702f012dZbigniew Jędrzejewski-Szmek const dav_liveprop_spec *info;
798d3a524ea57aaf40cb53858aaa45ec702f012dZbigniew Jędrzejewski-Szmek int global_ns;
798d3a524ea57aaf40cb53858aaa45ec702f012dZbigniew Jędrzejewski-Szmek
798d3a524ea57aaf40cb53858aaa45ec702f012dZbigniew Jędrzejewski-Szmek switch (propid)
798d3a524ea57aaf40cb53858aaa45ec702f012dZbigniew Jędrzejewski-Szmek {
798d3a524ea57aaf40cb53858aaa45ec702f012dZbigniew Jędrzejewski-Szmek case DAV_PROPID_resourcetype:
798d3a524ea57aaf40cb53858aaa45ec702f012dZbigniew Jędrzejewski-Szmek switch (resource->type) {
798d3a524ea57aaf40cb53858aaa45ec702f012dZbigniew Jędrzejewski-Szmek case DAV_RESOURCE_TYPE_VERSION:
798d3a524ea57aaf40cb53858aaa45ec702f012dZbigniew Jędrzejewski-Szmek if (resource->baselined) {
798d3a524ea57aaf40cb53858aaa45ec702f012dZbigniew Jędrzejewski-Szmek value = "<D:baseline/>";
798d3a524ea57aaf40cb53858aaa45ec702f012dZbigniew Jędrzejewski-Szmek break;
798d3a524ea57aaf40cb53858aaa45ec702f012dZbigniew Jędrzejewski-Szmek }
798d3a524ea57aaf40cb53858aaa45ec702f012dZbigniew Jędrzejewski-Szmek /* fall through */
798d3a524ea57aaf40cb53858aaa45ec702f012dZbigniew Jędrzejewski-Szmek case DAV_RESOURCE_TYPE_REGULAR:
798d3a524ea57aaf40cb53858aaa45ec702f012dZbigniew Jędrzejewski-Szmek case DAV_RESOURCE_TYPE_WORKING:
798d3a524ea57aaf40cb53858aaa45ec702f012dZbigniew Jędrzejewski-Szmek if (resource->collection) {
798d3a524ea57aaf40cb53858aaa45ec702f012dZbigniew Jędrzejewski-Szmek value = "<D:collection/>";
798d3a524ea57aaf40cb53858aaa45ec702f012dZbigniew Jędrzejewski-Szmek }
798d3a524ea57aaf40cb53858aaa45ec702f012dZbigniew Jędrzejewski-Szmek else {
798d3a524ea57aaf40cb53858aaa45ec702f012dZbigniew Jędrzejewski-Szmek /* ### should we denote lock-null resources? */
798d3a524ea57aaf40cb53858aaa45ec702f012dZbigniew Jędrzejewski-Szmek
798d3a524ea57aaf40cb53858aaa45ec702f012dZbigniew Jędrzejewski-Szmek value = ""; /* becomes: <D:resourcetype/> */
798d3a524ea57aaf40cb53858aaa45ec702f012dZbigniew Jędrzejewski-Szmek }
798d3a524ea57aaf40cb53858aaa45ec702f012dZbigniew Jędrzejewski-Szmek break;
798d3a524ea57aaf40cb53858aaa45ec702f012dZbigniew Jędrzejewski-Szmek case DAV_RESOURCE_TYPE_HISTORY:
798d3a524ea57aaf40cb53858aaa45ec702f012dZbigniew Jędrzejewski-Szmek value = "<D:version-history/>";
798d3a524ea57aaf40cb53858aaa45ec702f012dZbigniew Jędrzejewski-Szmek break;
798d3a524ea57aaf40cb53858aaa45ec702f012dZbigniew Jędrzejewski-Szmek case DAV_RESOURCE_TYPE_WORKSPACE:
798d3a524ea57aaf40cb53858aaa45ec702f012dZbigniew Jędrzejewski-Szmek value = "<D:collection/>";
798d3a524ea57aaf40cb53858aaa45ec702f012dZbigniew Jędrzejewski-Szmek break;
798d3a524ea57aaf40cb53858aaa45ec702f012dZbigniew Jędrzejewski-Szmek case DAV_RESOURCE_TYPE_ACTIVITY:
798d3a524ea57aaf40cb53858aaa45ec702f012dZbigniew Jędrzejewski-Szmek value = "<D:activity/>";
798d3a524ea57aaf40cb53858aaa45ec702f012dZbigniew Jędrzejewski-Szmek break;
798d3a524ea57aaf40cb53858aaa45ec702f012dZbigniew Jędrzejewski-Szmek
798d3a524ea57aaf40cb53858aaa45ec702f012dZbigniew Jędrzejewski-Szmek default:
798d3a524ea57aaf40cb53858aaa45ec702f012dZbigniew Jędrzejewski-Szmek /* ### bad juju */
798d3a524ea57aaf40cb53858aaa45ec702f012dZbigniew Jędrzejewski-Szmek return DAV_PROP_INSERT_NOTDEF;
798d3a524ea57aaf40cb53858aaa45ec702f012dZbigniew Jędrzejewski-Szmek }
798d3a524ea57aaf40cb53858aaa45ec702f012dZbigniew Jędrzejewski-Szmek break;
798d3a524ea57aaf40cb53858aaa45ec702f012dZbigniew Jędrzejewski-Szmek
798d3a524ea57aaf40cb53858aaa45ec702f012dZbigniew Jędrzejewski-Szmek case DAV_PROPID_supported_live_property_set:
798d3a524ea57aaf40cb53858aaa45ec702f012dZbigniew Jędrzejewski-Szmek /* ### insert all live property names ### */
798d3a524ea57aaf40cb53858aaa45ec702f012dZbigniew Jędrzejewski-Szmek break;
707b66c66381c899d7ef640e158ffdd5bcff4debLennart Poettering
707b66c66381c899d7ef640e158ffdd5bcff4debLennart Poettering case DAV_PROPID_supported_method_set:
707b66c66381c899d7ef640e158ffdd5bcff4debLennart Poettering /* ### leverage code from dav_method_options ### */
707b66c66381c899d7ef640e158ffdd5bcff4debLennart Poettering break;
707b66c66381c899d7ef640e158ffdd5bcff4debLennart Poettering
707b66c66381c899d7ef640e158ffdd5bcff4debLennart Poettering case DAV_PROPID_supported_report_set:
707b66c66381c899d7ef640e158ffdd5bcff4debLennart Poettering#if 0
707b66c66381c899d7ef640e158ffdd5bcff4debLennart Poettering {
707b66c66381c899d7ef640e158ffdd5bcff4debLennart Poettering /* ### where to get "r" ??? */
707b66c66381c899d7ef640e158ffdd5bcff4debLennart Poettering const dav_hooks_vsn *vsn_hooks = dav_get_vsn_hooks(r);
a8eaaee72a2f06e0fb64fb71de3b71ecba31dafbJan Engelhardt
707b66c66381c899d7ef640e158ffdd5bcff4debLennart Poettering if (vsn_hooks != NULL) {
707b66c66381c899d7ef640e158ffdd5bcff4debLennart Poettering const dav_report_elem *reports;
707b66c66381c899d7ef640e158ffdd5bcff4debLennart Poettering dav_error *err;
707b66c66381c899d7ef640e158ffdd5bcff4debLennart Poettering
707b66c66381c899d7ef640e158ffdd5bcff4debLennart Poettering if ((err = (*vsn_hooks->avail_reports)(resource,
707b66c66381c899d7ef640e158ffdd5bcff4debLennart Poettering &reports)) != NULL) {
707b66c66381c899d7ef640e158ffdd5bcff4debLennart Poettering err = dav_push_error(p, err->status, 0,
707b66c66381c899d7ef640e158ffdd5bcff4debLennart Poettering "DAV:supported-report-set could not "
707b66c66381c899d7ef640e158ffdd5bcff4debLennart Poettering "be determined due to a problem "
707b66c66381c899d7ef640e158ffdd5bcff4debLennart Poettering "fetching the available reports "
707b66c66381c899d7ef640e158ffdd5bcff4debLennart Poettering "for this resource.",
707b66c66381c899d7ef640e158ffdd5bcff4debLennart Poettering err);
707b66c66381c899d7ef640e158ffdd5bcff4debLennart Poettering /* ### can't return err... sigh. punt for now. */
707b66c66381c899d7ef640e158ffdd5bcff4debLennart Poettering return DAV_PROP_INSERT_NOTDEF;
707b66c66381c899d7ef640e158ffdd5bcff4debLennart Poettering }
7ca4155737730ece73ae4b4ac80571005cb99b69Jan Engelhardt
707b66c66381c899d7ef640e158ffdd5bcff4debLennart Poettering value = "";
707b66c66381c899d7ef640e158ffdd5bcff4debLennart Poettering
707b66c66381c899d7ef640e158ffdd5bcff4debLennart Poettering if (reports == NULL) {
707b66c66381c899d7ef640e158ffdd5bcff4debLennart Poettering /* no reports are defined. break with value="" */
707b66c66381c899d7ef640e158ffdd5bcff4debLennart Poettering break;
707b66c66381c899d7ef640e158ffdd5bcff4debLennart Poettering }
707b66c66381c899d7ef640e158ffdd5bcff4debLennart Poettering
707b66c66381c899d7ef640e158ffdd5bcff4debLennart Poettering for (; reports->nmspace != NULL; ++reports) {
707b66c66381c899d7ef640e158ffdd5bcff4debLennart Poettering /* Note: presume reports->namespace is XML/URL quoted */
707b66c66381c899d7ef640e158ffdd5bcff4debLennart Poettering const char *v = apr_psprintf(p, "<%s xmlns=\"%s\"/>" DEBUG_CR,
798d3a524ea57aaf40cb53858aaa45ec702f012dZbigniew Jędrzejewski-Szmek reports->name, reports->nmspace);
798d3a524ea57aaf40cb53858aaa45ec702f012dZbigniew Jędrzejewski-Szmek
798d3a524ea57aaf40cb53858aaa45ec702f012dZbigniew Jędrzejewski-Szmek /* This isn't very memory-efficient, but there should only
798d3a524ea57aaf40cb53858aaa45ec702f012dZbigniew Jędrzejewski-Szmek be a small number of reports */
798d3a524ea57aaf40cb53858aaa45ec702f012dZbigniew Jędrzejewski-Szmek value = apr_pstrcat(p, value, v, NULL);
798d3a524ea57aaf40cb53858aaa45ec702f012dZbigniew Jędrzejewski-Szmek }
798d3a524ea57aaf40cb53858aaa45ec702f012dZbigniew Jędrzejewski-Szmek }
798d3a524ea57aaf40cb53858aaa45ec702f012dZbigniew Jędrzejewski-Szmek break;
798d3a524ea57aaf40cb53858aaa45ec702f012dZbigniew Jędrzejewski-Szmek }
798d3a524ea57aaf40cb53858aaa45ec702f012dZbigniew Jędrzejewski-Szmek#endif
798d3a524ea57aaf40cb53858aaa45ec702f012dZbigniew Jędrzejewski-Szmek /* above code disabled. FALLTHROUGH */
798d3a524ea57aaf40cb53858aaa45ec702f012dZbigniew Jędrzejewski-Szmek
798d3a524ea57aaf40cb53858aaa45ec702f012dZbigniew Jędrzejewski-Szmek case DAV_PROPID_comment:
798d3a524ea57aaf40cb53858aaa45ec702f012dZbigniew Jędrzejewski-Szmek case DAV_PROPID_creator_displayname:
798d3a524ea57aaf40cb53858aaa45ec702f012dZbigniew Jędrzejewski-Szmek case DAV_PROPID_displayname:
798d3a524ea57aaf40cb53858aaa45ec702f012dZbigniew Jędrzejewski-Szmek case DAV_PROPID_source:
798d3a524ea57aaf40cb53858aaa45ec702f012dZbigniew Jędrzejewski-Szmek default:
798d3a524ea57aaf40cb53858aaa45ec702f012dZbigniew Jędrzejewski-Szmek /*
798d3a524ea57aaf40cb53858aaa45ec702f012dZbigniew Jędrzejewski-Szmek ** This property is known, but not defined as a liveprop. However,
798d3a524ea57aaf40cb53858aaa45ec702f012dZbigniew Jędrzejewski-Szmek ** it may be a dead property.
798d3a524ea57aaf40cb53858aaa45ec702f012dZbigniew Jędrzejewski-Szmek */
798d3a524ea57aaf40cb53858aaa45ec702f012dZbigniew Jędrzejewski-Szmek return DAV_PROP_INSERT_NOTDEF;
798d3a524ea57aaf40cb53858aaa45ec702f012dZbigniew Jędrzejewski-Szmek }
0b3b020a178cf3b957fed627de13c895773995ecLennart Poettering
0b3b020a178cf3b957fed627de13c895773995ecLennart Poettering /* assert: value != NULL */
/* get the information and global NS index for the property */
global_ns = dav_get_liveprop_info(propid, &dav_core_liveprop_group, &info);
/* assert: info != NULL && info->name != NULL */
if (insvalue) {
s = apr_psprintf(p, "<lp%d:%s>%s</lp%d:%s>" DEBUG_CR,
global_ns, info->name, value, global_ns, info->name);
which = DAV_PROP_INSERT_VALUE;
}
else {
s = apr_psprintf(p, "<lp%d:%s/>" DEBUG_CR, global_ns, info->name);
which = DAV_PROP_INSERT_NAME;
}
ap_text_append(p, phdr, s);
/* we inserted a name or value (this prop is done) */
return which;
}
static int dav_core_is_writable(const dav_resource *resource, int propid)
{
const dav_liveprop_spec *info;
(void) dav_get_liveprop_info(propid, &dav_core_liveprop_group, &info);
return info->is_writable;
}
static dav_error * dav_core_patch_validate(const dav_resource *resource,
const ap_xml_elem *elem,
int operation, void **context,
int *defer_to_dead)
{
/* all of our writeable props go in the dead prop database */
*defer_to_dead = 1;
return NULL;
}
static const dav_hooks_liveprop dav_core_hooks_liveprop = {
dav_core_insert_prop,
dav_core_is_writable,
dav_core_namespace_uris,
dav_core_patch_validate,
NULL, /* patch_exec */
NULL, /* patch_commit */
NULL, /* patch_rollback */
};
int dav_core_find_liveprop(request_rec *r, const char *ns_uri,
const char *name,
const dav_hooks_liveprop **hooks)
{
return dav_do_find_liveprop(ns_uri, name, &dav_core_liveprop_group, hooks);
}
void dav_core_insert_all_liveprops(request_rec *r,
const dav_resource *resource,
int insvalue, ap_text_header *phdr)
{
(void) dav_core_insert_prop(resource, DAV_PROPID_resourcetype,
insvalue, phdr);
(void) dav_core_insert_prop(resource,
DAV_PROPID_supported_live_property_set,
insvalue, phdr);
(void) dav_core_insert_prop(resource, DAV_PROPID_supported_method_set,
insvalue, phdr);
(void) dav_core_insert_prop(resource, DAV_PROPID_supported_report_set,
insvalue, phdr);
}
void dav_core_register_uris(apr_pool_t *p)
{
/* register the namespace URIs */
dav_register_liveprop_group(p, &dav_core_liveprop_group);
}