Sun, 16 Jul 2023 13:52:02 +0200
fix dav_add_collection_lock() setting the lock path
/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2019 Olaf Wintermann. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. */ #ifndef SCFG_H #define SCFG_H #include <cx/string.h> #include <stdbool.h> #include <libidav/webdav.h> #include <regex.h> #include "db.h" #include "tags.h" #ifdef __cplusplus extern "C" { #endif #define SYNC_CMD_PULL 1 #define SYNC_CMD_PUSH 2 #define SYNC_CMD_ARCHIVE 4 #define SYNC_CMD_RESTORE 8 #define SYNC_SYMLINK_SYNC 1 #define SYNC_SYMLINK_IGNORE_EXTERN 2 #define SYNC_SYMLINK_IGNORE_INTERN 4 #define DEFAULT_TAG_XATTR "tags" #define MACOS_TAG_XATTR "com.apple.metadata:_kMDItemUserTags" #define VERSIONING_DEFAULT_PATH "/.dav-version-history" #define SYNC_SYMLINK(dir) \ (((dir)->symlink & SYNC_SYMLINK_SYNC) == SYNC_SYMLINK_SYNC) #define SYNC_HASHING(dir) ((dir)->hashing) #define SYNC_STORE_HASH(dir) ((dir)->store_hash) typedef struct TagConfig TagConfig; typedef struct Versioning Versioning; typedef struct SplitConfig SplitConfig; typedef struct Filter Filter; enum PushStrategy { PUSH_STRATEGY_METADATA = 0, PUSH_STRATEGY_HASH }; typedef enum PushStrategy PushStrategy; struct Filter { CxList *include; CxList *exclude; CxList *tags; }; typedef struct SyncDirectory { char *name; char *path; char *trash; char *collection; char *repository; char *database; TagConfig *tagconfig; Versioning *versioning; Filter filter; CxList *splitconfig; uint32_t metadata; int max_retry; int allow_cmd; uint32_t symlink; time_t lock_timeout; PushStrategy push_strategy; bool backuppull; bool lockpull; bool lockpush; bool hashing; bool store_hash; bool pull_skip_hashing; uint32_t db_settings; } SyncDirectory; struct SplitConfig { /* * resource filter or NULL */ Filter *filter; /* * minimum file size for activating file splitting * a value of -1 means no size restriction */ int64_t minsize; /* * split files into blocks with this size */ size_t blocksize; }; enum TagFormat { TAG_FORMAT_TEXT = 0, TAG_FORMAT_CSV, TAG_FORMAT_XML, TAG_FORMAT_MACOS, TAG_FORMAT_UNKNOWN }; typedef enum TagFormat TagFormat; enum TagStore { TAG_STORE_XATTR = 0, TAG_STORE_UNKNOWN }; typedef enum TagStore TagStore; enum TagConflict { TAG_NO_CONFLICT = 0, TAG_KEEP_LOCAL, TAG_KEEP_REMOTE, TAG_MERGE }; typedef enum TagConflict TagConflict; struct TagConfig { TagStore store; TagFormat local_format; TagFormat server_format; char *xattr_name; TagConflict conflict; bool detect_changes; }; enum VersioningType { VERSIONING_SIMPLE = 0, VERSIONING_DELTAV }; typedef enum VersioningType VersioningType; struct Versioning { VersioningType type; char *collection; bool always; }; int load_sync_config(); CxIterator scfg_directory_iterator(); SyncDirectory* scfg_get_dir(const char *name); int scfg_check_dir(SyncDirectory *dir); char* scfg_create_path(const char *cfg); int add_directory(SyncDirectory *dir); char* generate_db_name(const char *basename); void free_filter(Filter filter); void free_sync_config(); #ifdef __cplusplus } #endif #endif /* SCFG_H */