-
-
Notifications
You must be signed in to change notification settings - Fork 25
Description
(Formerly plone/plone.app.dexterity#327 )
Any HTTP PUT (e.g. with WebDAV or with basic curl) to a Dexterity folder receives a response HTTP 404 Not Found, but it's truly the most curious thing, because a PUT of the same file in the parent directory (Plone site) succeeds, and then a PUT of the same file in the current directory succeeds afterwards!
In the following example /manuelamador.name/ is a Plone site, and /manuelamador.name/intranet/ is a Dexterity container (regular Folder) added in the Plone site.
Listing collection `/manuelamador.name/intranet/': succeeded.
Coll: foldr 0 Apr 29 15:50
_data 0 Apr 29 16:00
dav:/manuelamador.name/intranet/> put abc.txt
Uploading abc.txt to `/manuelamador.name/intranet/abc.txt':
Progress: [=============================>] 100.0% of 15 bytes failed:
404 Not Found
dav:/manuelamador.name/intranet/> cd ..
dav:/manuelamador.name/> put abc.txt
Uploading abc.txt to `/manuelamador.name/abc.txt':
Progress: [=============================>] 100.0% of 15 bytes succeeded.
dav:/manuelamador.name/> cd intranet
dav:/manuelamador.name/intranet/> put abc.txt
Uploading abc.txt to `/manuelamador.name/intranet/abc.txt':
Progress: [=============================>] 100.0% of 15 bytes succeeded.
dav:/manuelamador.name/intranet/> rm ../abc.txt
Deleting `../abc.txt': succeeded.
dav:/manuelamador.name/intranet/> rm abc.txt
Deleting `abc.txt': succeeded.
dav:/manuelamador.name/intranet/> put abc.txt
Uploading abc.txt to `/manuelamador.name/intranet/abc.txt':
Progress: [=============================>] 100.0% of 15 bytes failed:
404 Not Found
dav:/manuelamador.name/intranet/>
This only happens with Dexterity containers. Regular Zope folders work well with HTTP PUT. So do Plone site roots.
Of course, this is bad because MKCOL inside a Plone site root creates a Dexterity container, so any new folders must be created through the ZMI. And using the ZMI is a non starter.
This appears to be caused by a defect in publishTraverse() of plone/dexterity/browser/traversal.py.
I will shortly fix it with a PR.
EDIT: I tried to fix it but I couldn't.