You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
adb febc99c0cf add nginx 4 weeks ago
debian v0.4.0 1 year ago
examples update docs and examples 3 years ago
fs_quota update to tokio 1.0 1 year ago
pam update to tokio 1.0 1 year ago
src config: hide-symlinks alias for hide_symlinks 9 months ago
.gitignore add debian packaging 3 years ago
Cargo.lock TLS server exit workaround 12 months ago
Cargo.toml TLS server exit workaround 12 months ago
Dockerfile fix Dockerfile; add docker-compose.yml 4 weeks ago Add dockerfile 2 months ago update TODO 3 years ago
docker-compose.yml add nginx 4 weeks ago
nginx.conf add nginx 4 weeks ago
rustfmt.toml run rustfmt 3 years ago
webdav-server.toml separate listen/tls_listen 12 months ago


An implementation of a webdav server with support for user accounts, and switching uid/gid to those users accounts. That last feature is Linux-only, since the server is threaded and no other OSes have support for thread-local credentials.

Uses PAM authentication and local unix accounts.

This server does not implement logging. For now, it is assumed that most users of this software want to put an NGNIX or Apache reverse-proxy in front of it anyway, and that frontend can implement TLS, logging, enforcing a maximum number of connections, and timeouts.

This crate uses futures 0.3 and async/await, so the minimum rust compiler version is 1.39.


  • RFC4918: webdav, full support
  • RFC4331: webdav quota support (linux quota, NFS quota, statfs)
  • locking support (fake locking, enough for macOS and Windows clients)
  • can be case insensitive for Windows clients
  • files starting with a dot get the HIDDEN attribute on windows
  • optimizations for macOS (spotlight indexing disabled, thumbnail previews disabled, some light directory caching for ._ files)
  • partial put support
  • tested with Windows, macOS, Linux clients


By default the server builds with pam and quota support. If your OS does not support these one of features, use cargo command line options to disable all features and enable only the ones your OS supports.

For example, to build on OpenBSD, which does not have pam:

cargo build --release --no-default-features --features=quota


See the example webdav-server.toml file

There is also an example nginx proxy configuration.


The built-in PAM client will add the client IP address to PAM requests. If the client IP adress is localhost (127/8 or ::1) then the content of the X-Forwarded-For header is used instead (if present) to allow for aforementioned frontend proxies.

Docker Usage

Docker image can be built using docker build -t webdav-server ., in order to configure it attach a volume to /data/ and edit the webdav-server.toml in there. It's recommended to change the and htpasswd (if set) to that directory as well to ensure persistent data.