… is a Perl CGI script that enables the WebDAV protocol (class 1,2,3) for web server. If you need correct permissions for files and folders you can install this WebDAV CGI script and a UID/GID wrapper. The Apache module mod_dav does not support UID/GID wrapping, so this implementation fills up this gap as a (most complete) replacement.
Content of this topic:
Features
WebDAV CGI …
- supports WebDAV compliance classes 1, 2 and 3
- implements CGI interface
- offers a simple web interface for file/folder management
- is wrappable to change UID/GID for file permissions other than web server permissions
My test environment:
- Ubuntu 8.04 LTS
- Apache 2.2.x
- Perl 5.8.8
WebDAV CGI is tested with following WebDAV clients (licensing):
- Firefox web browser – for folder listing, POST uploads and download tests (free)
- M$ Internet Explorer 7 – for web interface tests (commercial)
- cadaver – a Linux command line WebDAV client (free)
- nautilus – the Gnome file manager (free)
- konqueror – the KDE browser (free)
- OpenOffice (free)
- Web Folders – Windows XP & Windows Vista (build-in)
- Novell netdrive (commercial)
- BitKinex WebDAV Client (free)
Known Problems:
- Windows Web Folder tries to read folders without ‘/’ at the end and Apache responses with a redirect (Workaround: use Apache rewrite rule instead of direct folder access)
- Windows 7 does not support SSL with Web Folders (yet) and has some trouble with HTTP Basic authentication (
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\WebClient\Parameters\BasicAuthLevel
should be2
(DWORD)) - Amaya upload does not work yet
- DAVExplorer has some trouble with XML parsing (PROPFIND) … sometimes.
- Adobe Dreamweaver has some trouble to read folders
- nautilus cannot copy folders via clipboard
Download
TuXxX Blog download : [filebase:file:file3]
Latest version: 0.3.3 (Changes: see webdav.pl)
- webdav.pl – the WebDAV CGI
Downloads: 35 - webdavwrapper.c – a sample UID/GID wrapper: takes UID from the file/folder or if file/folder does not exists takes the UID of the authenticated user (REMOTE_USER)
Downloads: 18
The latest BETA release is also available: webdav-beta.pl (Downloads: 8)
Installation
- install required CPAN modules (Debian/Ubuntu package name):
- CGI (libcgi-perl)
- DBI (libdbi-perl) and a database driver, e.g. DBD::SQLite (libdbd-sqlite3-perl)
- Date::Parse (libtimedate-perl)
- File::Copy::Recursive (libfile-copy-recursive-perl)
- OSSP::uuid (libossp-uuid-perl)
- XML::Simple (libxml-simple-perl)
You can do that with ‘
perl -MCPAN -e "install <ModuleName>"
‘ or with ‘apt-get install <PackageName>
‘. - compile your wrapper, change the permissions and put it into your cgi-bin, e.g:
1234567gcc -o webdavwrapper webdavwrapper.cstrip webdavwrapperchown root:root webdavwrapperchmod ug+s webdavwrappercp -p webdavwrapper /srv/www/cgi-bin/ - put the WebDAV CGI
webdav.pl
into your cgi-bin; edit webdav.pl to setup and change permissions, e.g:
123cp webdav.pl /srv/www/cgi-binvim webdav.plchmod a+rx webdav.pl - configure your web server:
- you can do that with rewrite rules
- or with a handler action
Here is an example Apache 2.x configuration:
12345678910111213141516Action webdav-cgi /cgi-bin/webdavwrapper<Location /mywebdavspace>SetHandler webdav-cgi#necessary for PUT, MKCOL and LOCK:ErrorDocument 404 /cgi-bin/webdavwrapper#fix Windows requests to folders without slash (handle redirects):ErrorDocument 301 /cgi-bin/webdavwrapperAuthType BasicAuthName "WebDAV space"AuthUserFile /path-to-my-auth-fileRequire valid-user</Location># if you want to map this to a real path, do that:# (end setup VIRTUAL_BASE)RewriteRule ^/mywebdavspace(.*) /cgi-bin/webdavwrapper \[L,E=PATH_TRANSLATED:/srv/www/htdocs$1]
Licensing
Links
- RFC4918 – WebDAV RFC