Commit 47ae05ff authored by 's avatar

Fixed a url quoting bug that affected DAV DELETE calls.

parent ac08b8ef
...@@ -85,12 +85,12 @@ ...@@ -85,12 +85,12 @@
"""WebDAV support - collection objects.""" """WebDAV support - collection objects."""
__version__='$Revision: 1.13 $'[11:-2] __version__='$Revision: 1.14 $'[11:-2]
import sys, os, string, Globals import sys, os, string, Globals
from common import urlfix, rfc1123_date from common import urlfix, rfc1123_date
from Resource import Resource from Resource import Resource
from urllib import unquote
class Collection(Resource): class Collection(Resource):
...@@ -104,7 +104,6 @@ class Collection(Resource): ...@@ -104,7 +104,6 @@ class Collection(Resource):
__ac_permissions__=( __ac_permissions__=(
('Add Documents, Images, and Files', ('PUT',)), ('Add Documents, Images, and Files', ('PUT',)),
# ('Add Folders', ('MKCOL',)),
('Delete objects', ('DELETE',)), ('Delete objects', ('DELETE',)),
) )
...@@ -136,7 +135,7 @@ class Collection(Resource): ...@@ -136,7 +135,7 @@ class Collection(Resource):
success. Note that in Zope a DELETE currently never returns 207.""" success. Note that in Zope a DELETE currently never returns 207."""
self.dav__init(REQUEST, RESPONSE) self.dav__init(REQUEST, RESPONSE)
url=urlfix(REQUEST['URL'], 'DELETE') url=urlfix(REQUEST['URL'], 'DELETE')
name=filter(None, string.split(url, '/'))[-1] name=unquote(filter(None, string.split(url, '/'))[-1])
# TODO: add lock checking here # TODO: add lock checking here
self.aq_parent._delObject(name) self.aq_parent._delObject(name)
RESPONSE.setStatus(204) RESPONSE.setStatus(204)
......
...@@ -85,10 +85,11 @@ ...@@ -85,10 +85,11 @@
"""WebDAV support - resource objects.""" """WebDAV support - resource objects."""
__version__='$Revision: 1.24 $'[11:-2] __version__='$Revision: 1.25 $'[11:-2]
import sys, os, string, mimetypes, davcmds, ExtensionClass import sys, os, string, mimetypes, davcmds, ExtensionClass
from common import absattr, aq_base, urlfix, rfc1123_date from common import absattr, aq_base, urlfix, rfc1123_date
from urllib import quote, unquote
import Globals import Globals
class Resource(ExtensionClass.Base): class Resource(ExtensionClass.Base):
...@@ -149,7 +150,7 @@ class Resource(ExtensionClass.Base): ...@@ -149,7 +150,7 @@ class Resource(ExtensionClass.Base):
RESPONSE.setHeader('Content-Type', absattr(self.content_type)) RESPONSE.setHeader('Content-Type', absattr(self.content_type))
else: else:
url=urlfix(REQUEST['URL'], 'HEAD') url=urlfix(REQUEST['URL'], 'HEAD')
name=filter(None, string.split(url, '/'))[-1] name=unquote(filter(None, string.split(url, '/'))[-1])
ct, ce=mimetypes.guess_type(name) ct, ce=mimetypes.guess_type(name)
# Could try harder here... # Could try harder here...
ct=ct or 'application/octet-stream' ct=ct or 'application/octet-stream'
...@@ -198,7 +199,7 @@ class Resource(ExtensionClass.Base): ...@@ -198,7 +199,7 @@ class Resource(ExtensionClass.Base):
return either 200 or 204 (No Content) to indicate success.""" return either 200 or 204 (No Content) to indicate success."""
self.dav__init(REQUEST, RESPONSE) self.dav__init(REQUEST, RESPONSE)
url=urlfix(REQUEST['URL'], 'DELETE') url=urlfix(REQUEST['URL'], 'DELETE')
name=filter(None, string.split(url, '/'))[-1] name=unquote(filter(None, string.split(url, '/'))[-1])
# TODO: add lock checking here # TODO: add lock checking here
self.aq_parent._delObject(name) self.aq_parent._delObject(name)
RESPONSE.setStatus(204) RESPONSE.setStatus(204)
...@@ -256,6 +257,7 @@ class Resource(ExtensionClass.Base): ...@@ -256,6 +257,7 @@ class Resource(ExtensionClass.Base):
if not oflag in ('T', 'F'): if not oflag in ('T', 'F'):
raise 'Bad Request', 'Invalid Overwrite header.' raise 'Bad Request', 'Invalid Overwrite header.'
path, name=os.path.split(dest) path, name=os.path.split(dest)
name=unquote(name)
try: parent=REQUEST.resolve_url(path) try: parent=REQUEST.resolve_url(path)
except ValueError: except ValueError:
raise 'Conflict', 'Attempt to copy to an unknown namespace.' raise 'Conflict', 'Attempt to copy to an unknown namespace.'
...@@ -312,6 +314,7 @@ class Resource(ExtensionClass.Base): ...@@ -312,6 +314,7 @@ class Resource(ExtensionClass.Base):
flag=string.upper(flag) flag=string.upper(flag)
body=REQUEST.get('BODY', '') body=REQUEST.get('BODY', '')
path, name=os.path.split(dest) path, name=os.path.split(dest)
name=unquote(name)
try: parent=REQUEST.resolve_url(path) try: parent=REQUEST.resolve_url(path)
except ValueError: except ValueError:
raise 'Conflict', 'Attempt to move to an unknown namespace.' raise 'Conflict', 'Attempt to move to an unknown namespace.'
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment