Sun, 17 Dec 2023 15:33:50 +0100
fix faulty string to int conversion utilities
Probably it was expected that errno is set to EINVAL when illegal characters are encountered. But this is not standard and does not happen on every system, allowing illegal strings to be parsed as valid integers.
<!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml" lang="" xml:lang=""> <head> <meta charset="utf-8" /> <meta name="generator" content="pandoc" /> <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes" /> <title>Configuration</title> <style type="text/css"> code{white-space: pre-wrap;} span.smallcaps{font-variant: small-caps;} span.underline{text-decoration: underline;} div.column{display: inline-block; vertical-align: top; width: 50%;} </style> <link rel="stylesheet" href="davdoc.css" /> <!--[if lt IE 9]> <script src="//cdnjs.cloudflare.com/ajax/libs/html5shiv/3.7.3/html5shiv-printshiv.min.js"></script> <![endif]--> </head> <body> <div class="header"> <a href="./index.html"><span>DavUtils documentation</span></a> </div> <div class="sidebar"> <div class="nav"> <h3>dav</h3> <ul> <li><a href="getting-started.html">Getting started</a></li> <li><a href="commands.html">Commands</a></li> <ul> <li><a href="list.html">list</a></li> <li><a href="get.html">get</a></li> <li><a href="put.html">put</a></li> <li><a href="mkdir.html">mkdir</a></li> <li><a href="remove.html">remove</a></li> <li><a href="copy.html">copy</a></li> <li><a href="move.html">move</a></li> <li><a href="rename.html">rename</a></li> <li><a href="export.html">export</a></li> <li><a href="import.html">import</a></li> <li><a href="get-property.html">get-property</a></li> <li><a href="set-property.html">set-property</a></li> <li><a href="remove-property.html">remove-property</a></li> <li><a href="lock.html">lock</a></li> <li><a href="unlock.html">unlock</a></li> <li><a href="info.html">info</a></li> <li><a href="date.html">date</a></li> <li><a href="versioncontrol.html">versioncontrol</a></li> <li><a href="list-versions.html">list-versions</a></li> <li><a href="checkout.html">checkout</a></li> <li><a href="checkin.html">checkin</a></li> <li><a href="uncheckout.html">uncheckout</a></li> <li><a href="add-repository.html">add-repository</a></li> <li><a href="remove-repository.html">remove-repository</a></li> <li><a href="list-repositories.html">list-repositories</a></li> <li><a href="repository-url.html">repository-url</a></li> <li><a href="add-user.html">add-user</a></li> <li><a href="remove-user.html">remove-user</a></li> <li><a href="edit-user.html">edit-user</a></li> <li><a href="list-users.html">list-users</a></li> <li><a href="check-config.html">check-config</a></li> </ul> <li><a href="configuration.html">Configuration</a></li> <li><a href="encryption.html">Encryption</a></li> </ul> </div> <div class="nav"> <h3>dav-sync</h3> <ul> <li><a href="introduction.html">Introduction</a></li> <li><a href="sync-commands.html">Commands</a></li> <ul> <li><a href="pull.html">pull</a></li> <li><a href="push.html">push</a></li> <li><a href="archive.html">archive</a></li> <li><a href="restore.html">restore</a></li> <li><a href="list-conflicts.html">list-conflicts</a></li> <li><a href="resolve-conflicts.html">resolve-conflicts</a></li> <li><a href="delete-conflicts.html">delete-conflicts</a></li> <li><a href="trash-info.html">trash-info</a></li> <li><a href="empty-trash.html">empty-trash</a></li> <li><a href="list-versions.html">list-versions</a></li> <li><a href="add-tag.html">add-tag</a></li> <li><a href="remove-tag.html">remove-tag</a></li> <li><a href="set-tags.html">set-tags</a></li> <li><a href="list-tags.html">list-tags</a></li> <li><a href="add-directory.html">add-directory</a></li> <li><a href="list-directories.html">list-directories</a></li> <li><a href="sync-check-config.html">check-config</a></li> <li><a href="check-repositories.html">check-repositories</a></li> </ul> <li><a href="sync-configuration.html">Configuration</a></li> </ul> </div> </div> <!-- begin content --> <div class="content"> <header> <h1 class="title">Configuration</h1> </header> <p>The file <code>$HOME/.dav/sync.xml</code> is used for configuring sync-directories.</p> <p>The <em>sync.xml</em> file is an XML file with <code><configuration></code> as root element. This element can only have <code><directory></code> elements as children.</p> <h2 id="directory">directory</h2> <p>This element configures a sync-directory. A sync-directory must have a unique name, a (local) path, repository and a database.</p> <p>Required elements: <code><name></code>, <code><repository></code>, <code><path></code>, <code><database></code><br /> Optional elements: <code><collection></code>, <code><trash></code>, <code><max-retry></code>, <code><backup-on-pull></code>, <code><lock-pull></code>, <code><lock-push></code>, <code><lock-timeout></code>, <code><filter></code>, <code><metadata></code>, <code><versioning></code>, <code><splitconfig></code>, <code><symlink-intern></code>, <code><symlink-extern></code>, <code><tagconfig></code>, <code><allow-cmd></code></p> <h3 id="name">name</h3> <p>Unique sync-directory identifer. This identifer is used in combination with all <em>dav-sync</em> commands.</p> <p>Type: string<br /> Example: <code><name>mysyncdir</name></code></p> <h3 id="repository">repository</h3> <p>Name of the WebDAV-repository. A repository with the same name must be configured in [config.xml][1].</p> <p>Type: string<br /> Example: <code><name>myrepo</name></code></p> <h3 id="path">path</h3> <p>The path of the local directory that should be synchronized. The path must be an absolute path or start with an environment variable. A path with an environment variable must start with an <code>$</code> followed by the variable name optionally followed by a path. For example:</p> <pre><code>`<path>$HOME/Documents</path>`</code></pre> <p>The part between <code>$</code> and <code>/</code> is the environment variable name.</p> <p>Type: string<br /> Example: <code><path>/absolute/path</path></code></p> <h3 id="database">database</h3> <p>Path to the database file used for this sync-directory. The path must be relative to the <em>$HOME/.dav/</em> directory.</p> <p>Type: string<br /> Example: <code><database>myrepo-db.xml</database></code></p> <h3 id="collection">collection</h3> <p>Path of the collection relative to the repository root collection. For example if the repository url is <em>http://example.com/webdav/</em> and the collection value is <em>/myfiles/</em>, the directory is synchronized with <em>http://example.com/webdav/myfiles/</em></p> <p>Type: string<br /> Default: /<br /> Example: <code><collection>/myfiles</collection></code></p> <h3 id="hashing">hashing</h3> <p>Enables file hashing. The hash will be used for checking if files are modified and should be synchronized.</p> <p>Type: boolean<br /> Default: false<br /> Example: <code><hashing>true</hashing></code></p> <h3 id="trash">trash</h3> <p>Path to the trash directory for this sync-directory. Files that should be deleted will be moved to this directory. The value must be an absolute path or relative to the sync-directory path.</p> <p>Type: string<br /> Example: <code><trash>.trash</trash></code></p> <h3 id="push-strategy">push-strategy</h3> <p>Controls the strategy <em>push</em> uses for deciding which files should be pushed. Possible values are: <code>metadata</code> and <code>hash</code>.</p> <p>Type: pushstrategy enum<br /> Default: metadata Example: <code><push-strategy>hash</push-strategy></code></p> <h3 id="max-retry">max-retry</h3> <p>This integer value controls how many attempts of downloading/uploading a file in case of an error are made.</p> <p>Type: integer<br /> Default: 0<br /> Example: <code><max-retry>3</max-retry></code></p> <h3 id="backup-on-pull">backup-on-pull</h3> <p>If this element has the value of true, the <em>pull</em> command will move old local files to the trash directory before downloading the new version from the server.</p> <p>Type: boolean<br /> Default: false<br /> Example: <code><backup-on-pull>true</backup-on-pull></code></p> <h3 id="lock-pull">lock-pull</h3> <p>Enables locking for the <em>pull</em> command.</p> <p>Type: boolean<br /> Default: false<br /> Example: <code><lock-pull>true</lock-pull></code></p> <h3 id="lock-push">lock-push</h3> <p>Enables locking for the <em>push</em> command.</p> <p>Type: boolean<br /> Default: false<br /> Example: <code><lock-push>true</lock-push></code></p> <h3 id="lock-timeout">lock-timeout</h3> <p>Specifies the lock timeout in seconds. If the lock-timeout is 0, the client doesn’t request a specific timeout and the server’s default value is used. If the lock-timeout is -1, a infinite timeout is requested.</p> <p>Type: integer<br /> Default: 0<br /> Example: <code><lock-timeout>50</lock-timeout></code></p> <h3 id="metadata">metadata</h3> <p>Controls which file metadata should be synchronized. Possible values are: <code>mtime</code>, <code>mode</code>, <code>xattr</code> and <code>all</code>. If this element is not specified, no metadata will be synchronized.</p> <p>Type: list of metadata<br /> Example: <code><metadata>mtime mode</metadata></code></p> <h3 id="versioning">versioning</h3> <p>Enables resource versioning for the commands <em>push</em> and <em>archive</em>.</p> <p>Possible attributes: <code>type</code>, <code>always</code></p> <p>The attribute <code>type</code> sets the versioning method type. Possible values are <code>simple</code> and <code>deltav</code>. With <em>simple</em> versioning, resources are moved to a version history collection before the new content is uploaded. With <em>deltav</em>, the DeltaV methods <em>checkout</em> and <em>checkin</em> are used to store versions. The default value of the <code>type</code> attribute is <code>simple</code>.</p> <p>The boolean attribute <code>always</code> specifies if new versions should be always created. The default value is <code>false</code>.</p> <p>Optional elements: <code><history></code> Example: <code><versioning type="simple" always="true" /></code></p> <h3 id="history">history</h3> <p>Specifies the history collection path for <em>simple</em> versioning. The path is interpreted relatively to the root of the sync directory.</p> <p>Type: string<br /> Default: <code>/.dav-version-history</code> Example:</p> <pre><code><versioning type="simple"> <history>/.backup/</history> </versioning></code></pre> <h3 id="symlink-intern">symlink-intern</h3> <p>Configures the handling of symlinks, which have a target inside the sync directory. Possible values are: <code>sync</code>, <code>follow</code> and <code>ignore</code>.</p> <p>Type: symlink enum<br /> Default: follow<br /> Example: <code><symlink-intern>sync</symlink-intern></code></p> <h2 id="symlink-extern">symlink-extern</h2> <p>Configures the handling of symlinks, which have a target outside the sync directory. Possible values are: <code>follow</code> and <code>ignore</code>. Unlike internal symlinks, external symlinks cannot be synced.</p> <p>Type: symlink enum<br /> Default: follow<br /> Example: <code><symlink-extern>ignore</symlink-extern></code></p> <h3 id="tagconfig">tagconfig</h3> <p>Configures the local store for resource tags. If this element is specified, resource tags are stored locally.</p> <p>Optional elements: local-store, detect-changes, xattr-name, on-conflict</p> <h3 id="local-store">local-store</h3> <p>Specifies the tag-store type. Currently the only available type is <code>xattr</code>.</p> <p>The element can contain the attribute <code>format</code> with one of the following values: <code>text</code>, <code>csv</code>, <code>xml</code>, <code>macos</code>. The default value is <code>text</code>.</p> <p>Type: tagstore type enum<br /> Default: xattr<br /> Example: <code><local-store format="csv">xattr</local-store></code></p> <h3 id="xattr-name">xattr-name</h3> <p>Specifies the name of the extended attribute for storing tags. The default value is <code>tags</code>, unless you are using the <code>macos</code> format, where the default value is <code>com.apple.metadata:_kMDItemUserTags</code>.</p> <p>Type: string<br /> Default: tags<br /> Example: `<xattr-name>file_tags</xattr-name></p> <h3 id="detect-changes">detect-changes</h3> <p>Controls, if tag changes should be detected.</p> <p>Type: boolean<br /> Default: false<br /> Example: <code><detect-changes>true</detect-changes></code></p> <h3 id="on-conflict">on-conflict</h3> <p>Specifies the behavior, when tag conflicts occur. Possible values are: <code>no_conflict</code>, <code>keep_local</code>, <code>keep_remote</code>, <code>merge</code></p> <p>Type: onconflict enum<br /> Default: no_conflict<br /> Example: <code><on-conflict>merge</on-conflict></code></p> <h3 id="splitconfig">splitconfig</h3> <p>Parent element for all <code><split></code> elements.</p> <h3 id="split">split</h3> <p>Configures if and how files should be splitted into multiple parts on <em>push</em>.</p> <p>The blocksize element configures the size of each part.</p> <p>The elements filter and minsize specify, in which case the files should be splitted.</p> <p>Required elements: <code><blocksize></code><br /> Optional elements: <code><filter></code>, <code><minsize></code></p> <p>Example:</p> <pre><code><splitconfig> <!-- split all files with .vmdk file extension that are bigger than 100mb --> <split> <blocksize>10m</blocksize> <filter> <include>\.vmdk$</include> </filter> <minsize>100m</minsize> </split> </splitconfig></code></pre> <h3 id="blocksize">blocksize</h3> <p>Specifies the size of each file part.</p> <p>Type: size<br /> Example: <code><blocksize>100k</blocksize></code></p> <h3 id="minsize">minsize</h3> <p>Specifies the minimal size a file must have for enabling file splitting.</p> <p>Type: size<br /> Default: 0<br /> Example: <code><minsize>100m</minsize></code></p> <h3 id="filter">filter</h3> <p>With the filter element, include and exclude filters can be specified, to control which files are synchronized. The <em>pull</em>, <em>push</em> and <em>archive</em> command apply these filters to file paths. At first it is checked if a file is matching any include filter. If so only files matching not an exclude filter are further processed.</p> <p>It is also possible to filter resources by tags. Tags can dynamically be applied to individual files. The tag filter elements contains a tag filter expression. Only files that match the filter expression are synchronized.</p> <p>Note: The file path is relative to the directory path (and WebDAV collection) but always starts with an path separator.</p> <p>Optional elements: <code><include></code>, <code><exclude></code>, <code><tags></code></p> <h3 id="include">include</h3> <p>Controls which files will be included by <em>pull</em> and <em>push</em>. If an include filter is specified, only files matching this filter are included.</p> <p>Type: regex string<br /> Default: .*<br /> Example:</p> <pre><code><filter> <include>\.pdf$</include> </filter></code></pre> <h3 id="exclude">exclude</h3> <p>Controls which files will be excluded by <em>pull</em> and <em>push</em>.</p> <p>Type: regex string<br /> Example:</p> <pre><code><filter> <exclude>^/secretdir</exclude> <exclude>\.DS_Store$</exclude> </filter></code></pre> <h3 id="tags">tags</h3> <p>Filters resources by tags. Only resources, that are not a collection, are effected. If tags are not stored locally, the pull command still uses the filter.</p> <p>Filter Syntax:</p> <pre><code>filter ::= operator? , (tag_list | ("(" , filter , ")")+) tag_list ::= tag , ("," tag)* operator ::= "&" | "|" | "1" | "0"</code></pre> <p>Type: tag filter expression<br /> Example:</p> <pre><code><filter> <!-- sync only resources that have one of this tags --> <tags>| (tag1, tag2, tag3)</tags> </filter></code></pre> </div> <!-- end content --> </body> </html>