diff -r ab9c5afdc243 -r 604e7e335b3b dav/main.c --- a/dav/main.c Sun Feb 04 12:36:26 2018 +0100 +++ b/dav/main.c Sun Feb 04 15:58:07 2018 +0100 @@ -1487,23 +1487,42 @@ } char *namespace = cmd_getoption(a, "namespace"); + char *xml = cmd_getoption(a, "xml"); + char *property = a->argv[1]; char *value = a->argc > 2 ? a->argv[2] : stdin2str(); - if(namespace) { - dav_set_string_property_ns(res, namespace, property, value); + int ret = 0; + if(xml) { + DavXmlNode *xmlvalue = dav_parse_xml(sn, value, strlen(value)); + if(xmlvalue) { + if(namespace) { + dav_set_property_ns(res, namespace, property, xmlvalue->children); + } else { + dav_set_property(res, property, xmlvalue->children); + } + } else { + fprintf(stderr, "Error: property content is not valid xml\n"); + ret = 1; + } } else { - dav_set_string_property(res, property, value); + if(namespace) { + dav_set_string_property_ns(res, namespace, property, value); + } else { + dav_set_string_property(res, property, value); + } } - int ret = 0; - if(dav_store(res)) { - print_resource_error(sn, res->path); - fprintf(stderr, "Cannot set property.\n"); - ret = -1; - } + if(ret == 0) { + if(dav_store(res)) { + print_resource_error(sn, res->path); + fprintf(stderr, "Cannot set property.\n"); + ret = -1; + } + } else free(path); + dav_session_destroy(sn); return ret; }