hi tobias

so the client side looks as follows:

- Netdrive sends a PROPFIND request to obtain the
  lock-token before any attempt is made to send the
  UNLOCK request.

- It probable expects that the lock-token to be
  provided (which is not the case).

- ... consequently doesn't even try to UNLOCK.

- maybe: Netdrive didn't remember the lock-token
  upon creating the lock and is therefore asking
  for it via PROPFIND.


the server side looks as follows:

- no session caching -> logout after each request.

- as discribed in my previous mail, the lock tokens
  are removed from the session to have the ability
  to attach them later on to a new session.

- JSR 170 mandates that the lock holder is not determined
  by a user identication but instead the lock holder
  can only be a single session object.
  thus: only the lock holding session can retrieve the token
        upon Lock#getLockToken().
  that's the reason why the token is not present in the
  PROPFIND response.

- if the client forgets the token the ability to unlock
  the node is lost (unless the impl. provides some sort
  of administrator that is always allowed to unlock).

for further reading you may also take a look at
http://issues.apache.org/jira/browse/JCR-779

with JSR 283 there will the possibility to specify
a timeout hint as suggested in JCR-779.

alternatively, you may provide a custom SessionProvider
upon SimpleWebdavServlet#getSessionProvider that is
able to return the same session through multiple requests
and defines some sort of automated logout after some
time of inactivity.

regards
angela


[EMAIL PROTECTED] wrote:
Hi Angela,

I had a look into the jackrabbit webdav api, to understand how things are done. So here are the request headers from performing an unlock by netdrive (that fails):

12:07:45,436 INFO [STDOUT] 23.10.2008 12:07:45 *INFO * SimpleWebdavServlet: [RequestMethod] PROPFIND (SimpleWebdavServlet.java, line 83) 12:07:45,437 INFO [STDOUT] 23.10.2008 12:07:45 *INFO * SimpleWebdavServlet: [RequestURI] /jackrabbit-webapp-1.4/repository/default/data/image.jpg (SimpleWebdavServlet.java, line 84) 12:07:45,437 INFO [STDOUT] 23.10.2008 12:07:45 *INFO * SimpleWebdavServlet: [RequestProtocol] HTTP/1.1 (SimpleWebdavServlet.java, line 85) 12:07:45,438 INFO [STDOUT] 23.10.2008 12:07:45 *INFO * SimpleWebdavServlet: [DavProperty] locktoken (SimpleWebdavServlet.java, line 93) 12:07:45,439 INFO [STDOUT] 23.10.2008 12:07:45 *INFO * SimpleWebdavServlet: [DavProperty] lockdiscovery (SimpleWebdavServlet.java, line 93) 12:07:45,439 INFO [STDOUT] 23.10.2008 12:07:45 *INFO * SimpleWebdavServlet: [Header] content-type: text/xml (SimpleWebdavServlet.java, line 105) 12:07:45,439 INFO [STDOUT] 23.10.2008 12:07:45 *INFO * SimpleWebdavServlet: [Header] depth: 0 (SimpleWebdavServlet.java, line 105) 12:07:45,440 INFO [STDOUT] 23.10.2008 12:07:45 *INFO * SimpleWebdavServlet: [Header] host: xxxx.de (SimpleWebdavServlet.java, line 105) 12:07:45,440 INFO [STDOUT] 23.10.2008 12:07:45 *INFO * SimpleWebdavServlet: [Header] user-agent: Microsoft Data Access Internet Publishing Provider DAV (SimpleWebdavServlet.java, line 105) 12:07:45,440 INFO [STDOUT] 23.10.2008 12:07:45 *INFO * SimpleWebdavServlet: [Header] accept-language: en-us (SimpleWebdavServlet.java, line 105) 12:07:45,441 INFO [STDOUT] 23.10.2008 12:07:45 *INFO * SimpleWebdavServlet: [Header] translate: f (SimpleWebdavServlet.java, line 105) 12:07:45,441 INFO [STDOUT] 23.10.2008 12:07:45 *INFO * SimpleWebdavServlet: [Header] pragma: no-cache (SimpleWebdavServlet.java, line 105) 12:07:45,441 INFO [STDOUT] 23.10.2008 12:07:45 *INFO * SimpleWebdavServlet: [Header] connection: close (SimpleWebdavServlet.java, line 105) 12:07:45,442 INFO [STDOUT] 23.10.2008 12:07:45 *INFO * SimpleWebdavServlet: [Header] authorization: Basic xxxx (SimpleWebdavServlet.java, line 105)

And here I have the webdav multistatus response:
<D:multistatus xmlns:D="DAV:">
  <D:response>
    <D:href>http://xxxxx.de/jackrabbit-webapp-1.4/repository/default/
data/image.jpg</D:href>
    <D:propstat>
      <D:prop>
        <D:getlastmodified>2008-08-18T14:04:47Z</D:getlastmodified>
        <D:getcontentlength>14177</D:getcontentlength>
        <D:getcontenttype>image/jpeg</D:getcontenttype>
        <D:creationdate>2008-10-21T09:48:45Z</D:creationdate>
        <D:getetag>"14177-1224582535208"</D:getetag>
        <D:displayname>image.jpg</D:displayname>
        <D:supportedlock>
          <D:lockentry>
            <D:lockscope>
              <D:exclusive/>
            </D:lockscope>
            <D:locktype>
              <D:write/>
            </D:locktype>
          </D:lockentry>
        </D:supportedlock>
        <D:resourcetype/>
        <D:lockdiscovery>
          <D:activelock>
            <D:lockscope>
              <D:exclusive/>
            </D:lockscope>
            <D:locktype>
              <D:write/>
            </D:locktype>
            <D:depth>infinity</D:depth>
            <D:timeout>Second-2147483</D:timeout>
            <D:owner>editor</D:owner>
          </D:activelock>
        </D:lockdiscovery>
        <D:iscollection>0</D:iscollection>
      </D:prop>
      <D:status>HTTP/1.1 200 OK</D:status>
    </D:propstat>
  </D:response>
</D:multistatus>

Having a look into rfc 2513 (
http://www.apps.ietf.org/rfc/rfc2518.html#sec-12.1.2) the response seems to be ok. There is just the lock token missing, because I can't see any lock related headers in the request of NetDrive.

Do you need more information?

Tobias


Angela Schreiber <[EMAIL PROTECTED]> wrote on 22.10.2008 14:47:12:

[image removed]
Re: unlock file **SPAM Verdacht**

Angela Schreiber
to:

users

22.10.2008 14:45

Please respond to users

hi

actually I don't think this is a webdav issue, it's more a question
about
unlocking files, locked by a previous session.
that's what the error says. but it can still be
a webdav issue.

with the default setup of the simple dav-servlet
the lock tokens get removed from the session before
it is logged out. if a new session is obtained the
lock-tokens retrieved from the dav-request headers
are put to the session.

thus: implicit lock token transfer.
the only thing that is required is, that the client
sends the correct lock token with a modification request
(If-Header) or an unlock request (Lock-Token header).

this is basically what i wanted to take a closer
look at in the conversation.

AFAIK I need the lock token for unlocking a file.
correct. as far as i know it is the client's
responsibility to send the lock token it
obtained from the LOCK request or a PROPFIND for
DAV:lockdiscovery

This token is hold by the session created this file.
is hold by the session that created the lock by
calling LOCK in webdav or (alternatively) interally
by calling javax.jcr.Node.lock().

What if the session has ended?
if the session has ended it depends on the type of
JCR lock you created:
- session-scoped locks are automatically removed
   (not used with the simple dav servlet)
- for open-scoped locks the lock token must be
   retrieved from the lock-holding session before.
   then removed from that session and later on
   added to second session to make the second
   become the lock-holder.
   -> see above for the logic implemented in the
      simple server.

So my question should be: How can I get the lock token from another
(maybe
allready ended) session?
yes, if you retrieved the lock token AND remove it
from the session that is going to be logged out.

see Session#getLockTokens/addLockToken/removeLockToken
for the corresponding instructions.

By the way, how can I trace the http conversion of a windows network drive?
i use to connect to a proxy that logs the conversation instead
of connecting to the server directly. i guess there is
some sort of free available equivalent to that helper.

angela



_________________________________________________________________

Sachsen DV Betriebs- und Servicegesellschaft mbH
Täubchenweg 26
04317 Leipzig
Amtsgericht Leipzig, HRB 18545

Geschäftsführer: Herbert Roller Brandão, Dr. Jean-Michael Pfitzner

Aufsichtsratsvorsitzender: Andreas Benninger

Reply via email to