adaviel has asked for the wisdom of the Perl Monks concerning the following question:

I'm using HTTP::DAV to upload files to Plone. It's pretty simple, and used to work in Plone3. Something like:

$dav = new HTTP::DAV; $dav->credentials("foo","bar",$url"); $dav->open($url); $dav->put($file);

If I try this with Cadaver in Plone4, I get an HTTP 500 error if I try to upload a file that does not exist on the server. If the file does exist; I get a 401 not authorized response, cadaver re-tries with the credentials and then presents the credentials on every subsequent request and is able to upload a file that does not already exist.

In HTTP::DAV, the credentials are never presented - at least in my simple calls - without a prior 401 response, so I can never upload a new file.

This is arguably a bug in Plone4, and I have reported it, but meanwhile my system is broken. Is there a way to tell HTTP::DAV to present credentials promiscuously ?

Replies are listed 'Best First'.
Re: Fine-tuning authentication in HTTP::DAV
by Corion (Patriarch) on Sep 24, 2014 at 07:31 UTC

    It seems that LWP::UserAgent only sends credentials in response to a 401. I think you could manually add the appropriate header to your requests in an request_preprepare or request_prepare handler maybe. In my opinion getting an error 500 for a non-existing resource is a bug on the server side, but maybe manually adding the header is a good workaround.

    Note that some authentication schemes are challenge/response, so you can't necessarily create a valid authentification header in advance.

Re: Fine-tuning authentication in HTTP::DAV
by Loops (Curate) on Sep 23, 2014 at 23:26 UTC

    You gave more complete details on the Plone CMS users mailing list.

    It does seem like a Plone issue. But as a hacky work around, could you upload a small existing file every time in order to get authenticated, and then do whatever other uploads are required?