{"id":13514270,"url":"https://github.com/arut/nginx-dav-ext-module","last_synced_at":"2025-04-05T00:09:58.436Z","repository":{"id":42120652,"uuid":"3287337","full_name":"arut/nginx-dav-ext-module","owner":"arut","description":"nginx WebDAV PROPFIND,OPTIONS,LOCK,UNLOCK support","archived":false,"fork":false,"pushed_at":"2024-05-18T05:45:42.000Z","size":209,"stargazers_count":485,"open_issues_count":28,"forks_count":120,"subscribers_count":23,"default_branch":"master","last_synced_at":"2025-03-28T23:09:16.123Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"bsd-2-clause","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/arut.png","metadata":{"files":{"readme":"README.rst","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2012-01-27T23:57:17.000Z","updated_at":"2025-03-27T04:30:01.000Z","dependencies_parsed_at":"2024-06-18T22:49:13.180Z","dependency_job_id":"a9668d57-099a-4741-bb9c-f7d6f4e9b50f","html_url":"https://github.com/arut/nginx-dav-ext-module","commit_stats":{"total_commits":120,"total_committers":2,"mean_commits":60.0,"dds":0.06666666666666665,"last_synced_commit":"f5e30888a256136d9c550bf1ada77d6ea78a48af"},"previous_names":[],"tags_count":6,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/arut%2Fnginx-dav-ext-module","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/arut%2Fnginx-dav-ext-module/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/arut%2Fnginx-dav-ext-module/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/arut%2Fnginx-dav-ext-module/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/arut","download_url":"https://codeload.github.com/arut/nginx-dav-ext-module/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247266565,"owners_count":20910836,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-08-01T05:00:51.149Z","updated_at":"2025-04-05T00:09:58.421Z","avatar_url":"https://github.com/arut.png","language":"C","funding_links":[],"categories":["Servers","Third Modules","Third Party Modules","C"],"sub_categories":["Web servers","C Modules"],"readme":"********************\nnginx-dav-ext-module\n********************\n\nnginx_ WebDAV_ PROPFIND,OPTIONS,LOCK,UNLOCK support.\n\n.. contents::\n\n\nAbout\n=====\n\nThe standard ngx_http_dav_module_ provides partial WebDAV_ implementation and\nonly supports GET,HEAD,PUT,DELETE,MKCOL,COPY,MOVE methods.\n\nFor full WebDAV_ support in nginx_ you need to enable the standard\nngx_http_dav_module_ as well as this module for the missing methods.\n\n\nBuild\n=====\n\nBuilding nginx_ with the module:\n\n.. code-block:: bash\n\n    # static module\n    $ ./configure --with-http_dav_module --add-module=/path/to/nginx-dav-ext-module\n\n    # dynamic module\n    $ ./configure --with-http_dav_module --add-dynamic-module=/path/to/nginx-dav-ext-module\n\nTrying to compile nginx_ with this module but without ngx_http_dav_module_ will\nresult in compilation error.\n\n\nRequirements\n============\n\n- nginx_ version \u003e= 1.13.4\n- ``libxml2`` + ``libxslt``\n\nThe ``libxslt`` library is technically redundant and is only required since this\ncombination is supported by nginx_ for the xslt module.\nUsing builtin nginx mechanisms for linking against third-party libraries\nbrings certain compatibility benefits.\nHowever this redundancy can be easily eliminated in the ``config`` file.\n\n\nTesting\n=======\n\nThe module tests require standard nginx-tests_ and Perl ``HTTP::DAV`` library.\n\n.. code-block:: bash\n\n    $ export PERL5LIB=/path/to/nginx-tests/lib\n    $ export TEST_NGINX_BINARY=/path/to/nginx\n    $ prove t\n\n\nLocking\n=======\n\n- Only the exclusive write locks are supported, which is the only type of locks\n  described in the WebDAV_ specification.\n\n- All currently held locks are kept in a list.\n  Checking if an object is constrained by a lock requires O(n) operations.\n  A huge number of simultaneously held locks may degrade performance.\n  Thus it is not recommended to have a large lock timeout which would increase\n  the number of locks.\n\n\nDirectives\n==========\n\ndav_ext_methods\n---------------\n\n========== ====\n*Syntax:*  ``dav_ext_methods [PROPFIND] [OPTIONS] [LOCK] [UNLOCK]``\n*Context:* http, server, location\n========== ====\n\nEnables support for the specified WebDAV methods in the current scope.\n\ndav_ext_lock_zone\n-----------------\n\n========== ====\n*Syntax:*  ``dav_ext_lock_zone zone=NAME:SIZE [timeout=TIMEOUT]``\n*Context:* http\n========== ====\n\nDefines a shared zone for WebDAV locks with specified NAME and SIZE.\nAlso, defines a lock expiration TIMEOUT.\nDefault lock timeout value is 1 minute.\n\n\ndav_ext_lock\n------------\n\n========== ====\n*Syntax:*  ``dav_ext_lock zone=NAME``\n*Context:* http, server, location\n========== ====\n\nEnables WebDAV locking in the specified scope.\nLocks are stored in the shared zone specified by NAME.\nThis zone must be defined with the ``dav_ext_lock_zone`` directive.\n\nNote that even though this directive enables locking capabilities in the\ncurrent scope, HTTP methods LOCK and UNLOCK should also be explicitly specified\nin the ``dav_ext_methods``.\n\n\nExample 1\n=========\n\nSimple lockless example::\n\n    location / {\n        root /data/www;\n\n        dav_methods PUT DELETE MKCOL COPY MOVE;\n        dav_ext_methods PROPFIND OPTIONS;\n    }\n\n\nExample 2\n=========\n\nWebDAV with locking::\n\n    http {\n        dav_ext_lock_zone zone=foo:10m;\n\n        ...\n\n        server {\n            ...\n\n            location / {\n                root /data/www;\n\n                dav_methods PUT DELETE MKCOL COPY MOVE;\n                dav_ext_methods PROPFIND OPTIONS LOCK UNLOCK;\n                dav_ext_lock zone=foo;\n            }\n        }\n    }\n\n\nExample 3\n=========\n\nWebDAV with locking which works with MacOS client::\n\n    http {\n        dav_ext_lock_zone zone=foo:10m;\n\n        ...\n\n        server {\n            ...\n\n            location / {\n                root /data/www;\n\n                # enable creating directories without trailing slash\n                set $x $uri$request_method;\n                if ($x ~ [^/]MKCOL$) {\n                    rewrite ^(.*)$ $1/;\n                }\n\n                dav_methods PUT DELETE MKCOL COPY MOVE;\n                dav_ext_methods PROPFIND OPTIONS LOCK UNLOCK;\n                dav_ext_lock zone=foo;\n            }\n        }\n    }\n\n.. _ngx_http_dav_module: http://nginx.org/en/docs/http/ngx_http_dav_module.html\n.. _nginx-tests: http://hg.nginx.org/nginx-tests\n.. _nginx: http://nginx.org\n.. _WebDAV: https://tools.ietf.org/html/rfc4918\n.. _`RFC4918 If Header`: https://tools.ietf.org/html/rfc4918#section-10.4\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Farut%2Fnginx-dav-ext-module","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Farut%2Fnginx-dav-ext-module","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Farut%2Fnginx-dav-ext-module/lists"}