diff -r f5921d151c29 -r 47791bdf1725 dav/scfg.c --- a/dav/scfg.c Wed Jul 13 12:03:04 2016 +0200 +++ b/dav/scfg.c Wed Jul 13 14:29:50 2016 +0200 @@ -120,6 +120,27 @@ } } +static int scfg_load_filter(xmlNode *node, UcxList **include, UcxList **exclude) { + node = node->children; + + while(node) { + if(node->type == XML_ELEMENT_NODE) { + char *value = util_xml_get_text(node); + if(!value) { + return 1; + } else if(xstreq(node->name, "include")) { + *include = add_regex_pattern(*include, value); + } else if(xstreq(node->name, "exclude")) { + *exclude = add_regex_pattern(*exclude, value); + } + } + + node = node->next; + } + + return 0; +} + int scfg_load_directory(xmlNode *node) { char *name = NULL; char *path = NULL; @@ -129,7 +150,7 @@ char *database = NULL; UcxList *include = NULL; UcxList *exclude = NULL; - int max_retry = DAV_MAX_RETRY; + int max_retry = 0; bool backuppull = false; bool lockpull = false; bool lockpush = false; @@ -150,18 +171,18 @@ collection = value; } else if(xstreq(node->name, "repository")) { repository = value; + } else if(xstreq(node->name, "filter")) { + if(scfg_load_filter(node, &include, &exclude)) { + return -1; + } } else if(xstreq(node->name, "database")) { database = value; - } else if(xstreq(node->name, "include")) { - include = add_regex_pattern(include, value); - } else if(xstreq(node->name, "exclude")) { - exclude = add_regex_pattern(exclude, value); } else if(xstreq(node->name, "max-retry")) { int64_t i; - if(util_strtoint(value, &i)) { + if(util_strtoint(value, &i) && i >= 0) { max_retry = (int)i; } else { - fprintf(stderr, "Warnung: sync.xml: integer value " + fprintf(stderr, "Warnung: sync.xml: unsigned integer value " "expected in element\n"); } } else if(xstreq(node->name, "backup-on-pull")) {