25 | | |
26 | | |
27 | | == WebDAV support == |
28 | | |
29 | | Difficulty: medium - hard |
30 | | |
31 | | [http://allmydata.org/trac/tahoe-lafs/query?status=!closed&order=priority&keywords=~webdav Tickets labelled 'webdav'] |
32 | | |
33 | | WebDAV is a set of extensions to HTTP, specified in |
34 | | [http://tools.ietf.org/html/rfc2518.html RFC 2518] and |
35 | | [http://www.ics.uci.edu/~ejw/authoring/ a few other documents], |
36 | | that allow it to be used as a filesystem access protocol. |
37 | | Supporting WebDAV in Tahoe would mean extending the |
38 | | [source:/src/frontends/webapi.txt webapi frontend] to implement this |
39 | | protocol. |
40 | | |
41 | | The main attraction of implementing a WebDAV interface is that |
42 | | several operating systems have bundled and somewhat integrated support |
43 | | for it, including Mac OS X, Windows, and some Linux distributions. |
44 | | In fact WebDAV may turn out to be an easier alternative to |
45 | | [http://en.wikipedia.org/wiki/Server_Message_Block SMB/CIFS] |
46 | | for allowing filesystem access from Windows. |
47 | | |
48 | | However, there is currently no working WebDAV implementation in Twisted |
49 | | Python. There used to be one (the {{{web2.dav}}} package), |
50 | | [http://twistedmatrix.com/trac/ticket/3081 but it bitrotted]. |
51 | | You'll have to decide whether to help fix that implementation, use a |
52 | | non-Twisted implementation such as [http://code.google.com/p/wsgidav/ WsgiDAV] |
53 | | that might be more difficult to integrate wth the existing Tahoe code, |
54 | | or write your own. In any case, WebDAV is a complicated protocol and |
55 | | you will need to decide what subset of it gives most "bang for the buck" |
56 | | and is practical to support in the time available. For example, locking |
57 | | is optional in the WebDAV spec; is it needed to interoperate with commonly |
58 | | used WebDAV clients? |
59 | | |
60 | | Unlike most filesystems which are constrained to be trees, the structure |
61 | | of a Tahoe is in general a cyclic graph. |
62 | | [http://tools.ietf.org/html/draft-ietf-webdav-bind draft-ietf-webdav-bind] is |
63 | | an Internet Draft that clarifies how WebDAV servers should handle cycles. |
64 | | |
65 | | [http://savannah.nongnu.org/projects/davfs2 davfs2] is a FUSE-based |
66 | | WebDAV filesystem client for Linux. To ensure that this runs correctly |
67 | | over your implementation of WebDAV, you'll probably need to adapt the |
68 | | tests for the existing Tahoe |
69 | | [source:contrib/fuse/impl_c/blackmatch.py "blackmatch"] FUSE interface |
70 | | (this would not be redundant since the blackmatch implementation has |
71 | | limitations, especially for write access, that davfs2 would not have). |
72 | | |
73 | | The [http://en.wikipedia.org/wiki/WebDAV#Microsoft_Windows WebDAV mini-redirector] |
74 | | is the component of Windows providing its WebDAV filesystem support. It is |
75 | | actually the less buggy of |
76 | | [http://www.zorched.net/2006/03/01/more-webdav-tips-tricks-and-bugs/ two implementations], but it still has had |
77 | | [http://greenbytes.de/tech/webdav/webdav-redirector-list.html bugs] and |
78 | | [http://www.microsoft.com/technet/security/bulletin/MS08-007.mspx security vulnerabilities] |
79 | | that you may need to take into account. |