diff -r 1c995e93bf40 -r 4b34d12cf211 dav/sync.c --- a/dav/sync.c Sat Aug 10 19:54:37 2019 +0200 +++ b/dav/sync.c Sat Aug 10 21:32:07 2019 +0200 @@ -459,7 +459,18 @@ if(local) { local->keep = TRUE; } - +} + +static int xattr_filter(const char *name, SyncDirectory *dir) { + // exclude tag xattr + if( + dir->tagconfig && + dir->tagconfig->store == TAG_STORE_XATTR && + !strcmp(dir->tagconfig->xattr_name, name)) + { + return 0; + } + return 1; } void res2map(DavResource *root, UcxMap *map) { @@ -2731,7 +2742,7 @@ if((dir->metadata & FINFO_XATTR) == FINFO_XATTR) { char *path = create_local_path(dir, local_resource_path(db_res)); - XAttributes *xattr = file_get_attributes(path); + XAttributes *xattr = file_get_attributes(path, (xattr_filter_func)xattr_filter, dir); // test if xattr are added, removed or changed if((db_res->xattr_hash && !xattr) || (!db_res->xattr_hash && xattr) || @@ -2825,7 +2836,7 @@ // currently only xattr needed if((dir->metadata & FINFO_XATTR) == FINFO_XATTR) { char *path = create_local_path(dir, local_resource_path(res)); - XAttributes *xattr = file_get_attributes(path); + XAttributes *xattr = file_get_attributes(path, (xattr_filter_func)xattr_filter, dir); res->xattr = xattr; free(path); } @@ -3184,7 +3195,7 @@ } } - if(!ret) { + if(!ret && local) { local->tags_updated = 0; } @@ -3247,7 +3258,7 @@ } else { if(changed) *changed = TRUE; } - if(!newhash) { + if(newhash) { *newhash = new_hash; } else { free(newhash);