Webrick-webdav(gem) served files are mounted only read-only

while i easily get a webdav server up an running with

gem install webrick-webdav

and

require ‘webrick’
require ‘webrick/httpservlet/webdavhandler’

server = WEBrick::HTTPServer.new(context.values)
server.mount("/webdav", WEBrick::HTTPServlet::WebDAVHandler, Dir.pwd)

and can mount and read the files, i still can’t actually modify any of
the exported/mounted webdav files.

before i start diving into real problem tracking i would like to ask if
someone of you had the same problems? i export/mount on mac os x. might
this be a mac or a webrick-webdav problem? any tips welcomed,

have fun
dirk

Il giorno 03/nov/06, alle ore 10:11, Dirk Lüsebrink ha scritto:

server.mount("/webdav", WEBrick::HTTPServlet::WebDAVHandler,
this be a mac or a webrick-webdav problem? any tips welcomed,

have fun
dirk

Exactly, that’s a Mac OS X issue: webrick-webdav supports protocol
version 1.0, while Mac OS X wants the server to support v2.0 in order
to let you write on that share.
I had the same problem as yours, but I couldn’t find enough
documentation anywhere (about webrick-webdav or about the version
required by OS X) so I started reading webrick-webdav sources and
comparing the traffic dump with an apache webdav module and I found
out this version issue.
Actually I think that the only difference between 1.0 and 2.0 servers
is that the latter ones support LOCK methods, which allow to lock
files (exclusive or shared locks). I didn’t need this, so I just
inherited from WebDAVHandler:

module WEBrick
module HTTPServlet
class WebDAVHandlerVersion2 < WebDAVHandler
def do_OPTIONS(req, res)
super
res[“DAV”] = “1,2”
end
end
end
end

So I started using WebDAVHandlerVersion2 instead of WebDAVHandler. In
fact, on the source code of WebDAVHandler there is a commented out
‘res[“DAV”] = “1,2”’ line…
It worked, I’m quite sure I could write to that share, but right now
it seems like it doesn’t work very well with OS X: I get strange
errors when writing into a file or creating a new one.
Some time ago I wrote a page about my experiments with WebDAV, since
I couldn’t find enough documentation: http://gmarrone.objectblues.net/
cgi-bin/wiki/WebDAV_-_Linux_server%2c_Mac_OS_X_client .
I summed up almost everything in this mail, but maybe you can find
something useful over there :slight_smile:
It isn’t up to date, though: I don’t describe the errors I get now
with that solution.

Please let me know if your Mac OS X is able to write without any
error on that modified version of webrick-webdav :slight_smile:

Gabriele M. wrote:

Il giorno 03/nov/06, alle ore 10:11, Dirk Luesebrink ha scritto:

server.mount("/webdav", WEBrick::HTTPServlet::WebDAVHandler,
this be a mac or a webrick-webdav problem? any tips welcomed,

I had the same problem as yours, but I couldn’t find enough
documentation anywhere (about webrick-webdav or about the version
required by OS X) so I started reading webrick-webdav sources and
comparing the traffic dump with an apache webdav module and I found
out this version issue.

yes, i’ve also found the res[“DAV”] = “1,2” but uncommenting it did not
work for me at first. but than i found the HTTPS stuff on your
page(http://gmarrone.objectblues.net/cgi-bin/wiki/WebDAV_-_Linux_server%2C_Mac_OS_X_client)
and i could get it to work. The strange errors you got, i had also,
“(Error code, -50)”. I guess this is because of the missing UN/LOCK
implementation and so i tried putting an empty LOCK method in there:

class WebDAVHandlerVersion2
def do_LOCK req, res
puts “LOCK request: #{req}”
end
end

and this got me rid of the the ‘strange’ errors.

But now, what does it mean? What is UN/LOCK actually supposed to do?
(UNLOCK does not seem to be called at all?) Yeah, i could start looking
it up in the RFC, but i’m sick an tired of the Webdav promise. All could
have been so nice, when apple/microsoft/apache/etc would just have had
implemented what is written in the RFCs an i would not need to bother,
sigh. So, now i have a kind of working(kind of) webdav-webrick/version
2/read&write version server. lets see what happens next when putting it
into production use, hehe

thanx
dirk

Il giorno 07/nov/06, alle ore 23:07, Dirk Lüsebrink ha scritto:

def do_LOCK req, res
puts “LOCK request: #{req}”
end
end

and this got me rid of the the ‘strange’ errors.

Great work! :slight_smile:
I didn’t think about it.

into production use, hehe
I’ve just given a small peek at the RFC, looks like LOCK must return
a unique “lock token”, which should be a URI, associated to that lock.
I guess your empty implementation confuses Mac OS X a little bit,
which thinks the lock has succeded but isn’t going to UNLOCK since it
doesn’t know the lock token.

Well, I guess that’s fine for a single user webdav share :slight_smile:

Gabriele M. wrote:

Well, I guess that’s fine for a single user webdav share :slight_smile:

very well so! i took the time to pack the stuff and made it a gem so you
can easily install it and serve your file directly from the the
commandline.

http://www.sofasportler.de/dirk.blog/2007/01/01/webdav-exporter-ruby-gem-serve-files-from-the-commandline/

many thanks for your help and who knows? maybe one day we might even
sort out the DAV2 LOCK protocol issues. Until then,

thank you and happy new year

This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.

| Privacy Policy | Terms of Service | Remote Ruby Jobs