Core: WebDAV problem, external server lighttpd mod_webdav

Created on 21 Sep 2015  路  19Comments  路  Source: owncloud/core

Steps to reproduce

  1. enable external storage: WebDAV
  2. set up external server with WebDAV: Raspian 7; lighttpd; mod_webdav
  3. confirm WebDAV on external server to be working with Nautilus and Cadaver
  4. connect WebDAV in OwnCloud UI, green dot appears
  5. navigate to mounted drive: "unknown error"

    Expected behaviour

List all files and folders of mounted drive.

Actual behaviour

WebDAV web GUI shows green dot. Only directories listed, if files are in a directory "unknown error".
I tested it, if I only put directories in the mounted root, things work just fine.

Server configuration

Operating system:
Debian 7
Web server:
lighttpd
Database:
sqlite
PHP version:
5.4.45-0+deb7u1
ownCloud version: (see ownCloud admin page)
8.1.1
Updated from an older ownCloud or fresh install:
fresh install
List of activated apps:

External storage support  0.2.3

The content of config/config.php:

... needed?

Are you using external storage, if yes which one: local/smb/sftp/...
WebDAV
Are you using encryption: yes/no
no
Are you using an external user-backend, if yes which one: LDAP/ActiveDirectory/Webdav/...
no

Client configuration

Logs

Web server error log

... blank

ownCloud log (data/owncloud.log)

/eventsource.php:99) at \/var\/www\/owncloud\/lib\/private\/response.php#103","level":3,"time":"2015-09-21T07:57:28+00:00"}
{"reqId":"mrQH2LOK3WzkZCnE5euV","remoteAddr":"188.102.104.209","app":"index","message":"Exception: {\"Exception\":\"Sabre\\\\HTTP\\\\ClientHttpException\",\"Message\":\"Not Found\",\"Code\":404,\"Trace\":\"#0 \\\/var\\\/www\\\/owncloud\\\/3rdparty\\\/sabre\\\/dav\\\/lib\\\/DAV\\\/Client.php(235): Sabre\\\\HTTP\\\\Client->send(Object(Sabre\\\\HTTP\\\\Request))\\n#1 \\\/var\\\/www\\\/owncloud\\\/lib\\\/private\\\/files\\\/storage\\\/dav.php(262): Sabre\\\\DAV\\\\Client->propFind('Video\\\/Video', Array)\\n#2 \\\/var\\\/www\\\/owncloud\\\/lib\\\/private\\\/files\\\/storage\\\/dav.php(690): OC\\\\Files\\\\Storage\\\\DAV->propfind('Video\\\/Video')\\n#3 \\\/var\\\/www\\\/owncloud\\\/lib\\\/private\\\/files\\\/storage\\\/common.php(605): OC\\\\Files\\\\Storage\\\\DAV->getPermissions('Video\\\/Video')\\n#4 \\\/var\\\/www\\\/owncloud\\\/lib\\\/private\\\/files\\\/storage\\\/wrapper\\\/encryption.php(149): OC\\\\Files\\\\Storage\\\\Common->getMetaData('Video\\\/Video')\\n#5 \\\/var\\\/www\\\/owncloud\\\/lib\\\/private\\\/files\\\/storage\\\/wrapper\\\/wrapper.php(543): OC\\\\Files\\\\Storage\\\\Wrapper\\\\Encryption->getMetaData('Video\\\/Video')\\n#6 \\\/var\\\/www\\\/owncloud\\\/lib\\\/private\\\/files\\\/cache\\\/scanner.php(113): OC\\\\Files\\\\Storage\\\\Wrapper\\\\Wrapper->getMetaData('Video\\\/Video')\\n#7 \\\/var\\\/www\\\/owncloud\\\/lib\\\/private\\\/files\\\/cache\\\/scanner.php(141): OC\\\\Files\\\\Cache\\\\Scanner->getData('Video\\\/Video')\\n#8 \\\/var\\\/www\\\/owncloud\\\/lib\\\/private\\\/files\\\/cache\\\/scanner.php(344): OC\\\\Files\\\\Cache\\\\Scanner->scanFile('Video\\\/Video', 1, 425, NULL, true)\\n#9 \\\/var\\\/www\\\/owncloud\\\/lib\\\/private\\\/files\\\/cache\\\/scanner.php(267): OC\\\\Files\\\\Cache\\\\Scanner->scanChildren('Video', true, 1, Array, true)\\n#10 \\\/var\\\/www\\\/owncloud\\\/lib\\\/private\\\/files\\\/cache\\\/scanner.php(419): OC\\\\Files\\\\Cache\\\\Scanner->scan('Video', true, 1)\\n#11 \\\/var\\\/www\\\/owncloud\\\/lib\\\/private\\\/files\\\/utils\\\/scanner.php(124): OC\\\\Files\\\\Cache\\\\Scanner->backgroundScan()\\n#12 \\\/var\\\/www\\\/owncloud\\\/apps\\\/files\\\/ajax\\\/scan.php(55): OC\\\\Files\\\\Utils\\\\Scanner->backgroundScan('')\\n#13 \\\/var\\\/www\\\/owncloud\\\/lib\\\/private\\\/route\\\/route.php(154) : runtime-created function(1): require_once('\\\/var\\\/www\\\/ownclo...')\\n#14 [internal function]: __lambda_func(Array)\\n#15 \\\/var\\\/www\\\/owncloud\\\/lib\\\/private\\\/route\\\/router.php(274): call_user_func('\\\\x00lambda_157400', Array)\\n#16 \\\/var\\\/www\\\/owncloud\\\/lib\\\/base.php(873): OC\\\\Route\\\\Router->match('\\\/apps\\\/files\\\/aja...')\\n#17 \\\/var\\\/www\\\/owncloud\\\/index.php(40): OC::handleRequest()\\n#18 {main}\",\"File\":\"\\\/var\\\/www\\\/owncloud\\\/3rdparty\\\/sabre\\\/http\\\/lib\\\/Client.php\",\"Line\":154}","level":4,"time":"2015-09-21T07:57:32+00:00"}
{"reqId":"mrQH2LOK3WzkZCnE5euV","remoteAddr":"188.102.104.209","app":"PHP","message":"Cannot modify header information - headers already sent by (output started at \/var\/www\/owncloud\/lib\/private\/eventsource.php:99) at \/var\/www\/owncloud\/lib\/private\/response.php#103","level":3,"time":"2015-09-21T07:57:32+00:00"}
Bug files_external

Most helpful comment

FYI: lighttpd developer here. lighttpd has much improved WebDAV support since lighttpd 1.4.40, and lighttpd 1.4.44 supports Transfer-Encoding: chunked for file uploads. With the exception of WebDAV locking, all 'litmus' tests pass. See https://redmine.lighttpd.net/issues/1818 Issues with lighttpd can be submitted to https://github.com/lighttpd/lighttpd1.4/pulls

All 19 comments

Hi,

a first step to see if this is an issue within oC would be to test the external WebDAV server if its fully compliant to the WebDAV standards. This can be achieved with an tool like litmus like described here:

https://forum.owncloud.org/viewtopic.php?f=8&t=21185

Yeah ok some tests fail, any hint what to do. Not enough actions supported? Should I switch to owncloud implementing the webdav?

litmus http://188.123.123.123:8883/dav myuser password
-> running `basic':
 0. init.................. pass
 1. begin................. pass
 2. options............... pass
 3. put_get............... pass
 4. put_get_utf8_segment.. pass
 5. put_no_parent......... pass
 6. mkcol_over_plain...... pass
 7. delete................ pass
 8. delete_null........... pass
 9. delete_fragment....... WARNING: DELETE removed collection resource with Request-URI including fragment; unsafe
    ...................... pass (with 1 warning)
10. mkcol................. pass
11. mkcol_again........... pass
12. delete_coll........... pass
13. mkcol_no_parent....... pass
14. mkcol_with_body....... pass
15. finish................ pass
<- summary for `basic': of 16 tests run: 16 passed, 0 failed. 100.0%
-> 1 warning was issued.
-> running `copymove':
 0. init.................. pass
 1. begin................. pass
 2. copy_init............. pass
 3. copy_simple........... FAIL (simple resource COPY:
409 Conflict)
 4. copy_overwrite........ FAIL (COPY-on-existing with 'Overwrite: F' MUST fail with 412 (RFC4918:10.6):
409 Conflict)
 5. copy_nodestcoll....... pass
 6. copy_cleanup.......... pass
 7. copy_coll............. FAIL (collection COPY `/dav/litmus/ccsrc/' to `/dav/litmus/ccdest/': 403 Forbidden)
 8. copy_shallow.......... FAIL (MKCOL on `/dav/litmus/ccsrc/': 405 Method Not Allowed)
 9. move.................. FAIL (MOVE `/dav/litmus/move' to `/dav/litmus/movedest': 409 Conflict)
10. move_coll............. FAIL (collection COPY `/dav/litmus/mvsrc/' to `/dav/litmus/mvdest2/', depth infinity: 403 Forbidden)
11. move_cleanup.......... pass
12. finish................ pass
<- summary for `copymove': of 13 tests run: 7 passed, 6 failed. 53.8%
See debug.log for network/debug traces.

Hi,

yes there seems to be some verbs not correctly supported by the WebDAV module of lighttpd:

The WebDAV module is a very minimalistic implementation of RFC 2518. Minimalistic means that not all operations are implemented yet.

http://redmine.lighttpd.net/projects/1/wiki/Docs_ModWebDAV

I don't know which ones are needed for oC but using another webserver like nginx with WebDAV support to debug if this is an issue within lighttpd could be a starting point here.

Well I did not install lighttpd from scratch rather with

apt-get install lighttpd lighttpd-mod-webdav apache2-utils
...

Similar to the description here https://gist.github.com/huazhihao/3753705

So you say nginx, not sure if I have the energy to do that or rather revert to using owncloud in lighttpd to make it work. Sry

we do not support lighttpd -> closing

:'( but thanks for clarifying, maybe a little hint in the docs, since it cost me a bit of time to get this simple statement.

Hi,

you can post such enhancements to the documentation here: https://github.com/owncloud/documentation/issues

The dropped support was based on this discussion: https://github.com/owncloud/core/issues/13642 but it seems it hasn't found its way to the documentation.

The linked issues (and what @DeepDiver1975 mentioned) is about using Lighttpd to run ownCloud, but as I understand it you want to use a Lighttpd WebDAV external storage, similar to how one could use Apache's mod_dav as an external storage. There is no reason why this shouldn't be supported, assuming the WebDAV implementation is standards compliant. Given that Nautilus and Cadaver work with it, it seems that's certainly the case.

This is completely true, maybe confusing since I got lighttpd running on both servers. I now managed to get it working with owncloud on the external lighttpd but I would like to help you if you need support with some test of the lighttpd WebDAV setup, e.g. more litmus output.

So what is your current setup now? What web server is used to run ownCloud?

On my main server I run

ownCloud version: 8.1.1
Webserver: Lighttpd
Database: SQLite
OS: Linux Debian 7
PHP version: 5.4.45-0+deb7u1

and on my external storage i run

Webserver: Lighttpd
OS: Linux Raspian 7

with mod_webdav and the setup described above.

@select As stated above, ownCloud does not support running on Lighttpd. I believe that the issue here is more fundamental than just that though, but we have to start with a working base installation.

Well i can not run anything else on my vserver since it only hast 265 MB RAM, and I really doubt that the WebDAV connection has anything to do with the server setup. It is much more likely a communication problem from the WebDAV lib with the external WebDAV server.

@Xenopathic I could ceate an account on my external server so you can test with a different setup if you want to. Can only do it tonight though.

@select You may want to investigate nginx, it runs really well on low-memory devices. But to continue any further, we need to eliminate Lighttpd from the equation, as it's known to cause issues.

Closing due to lack of feedback.

You might want to try again with 9.1, some fixes were made to the Webdav external storage code.

FYI: lighttpd developer here. lighttpd has much improved WebDAV support since lighttpd 1.4.40, and lighttpd 1.4.44 supports Transfer-Encoding: chunked for file uploads. With the exception of WebDAV locking, all 'litmus' tests pass. See https://redmine.lighttpd.net/issues/1818 Issues with lighttpd can be submitted to https://github.com/lighttpd/lighttpd1.4/pulls

ownCloud doesn't use the web server's Webdav module but provides its own Webdav implementation (through the Sabre DAV library). The webdav module of the web server must be disabled for ownCloud to work properly and avoid potential conflicts.

This thread has been automatically locked since there has not been any recent activity after it was closed. Please open a new issue for related bugs.

Was this page helpful?
0 / 5 - 0 ratings

Related issues

tommis picture tommis  路  5Comments

michaelstingl picture michaelstingl  路  5Comments

rehoehle picture rehoehle  路  4Comments

PVince81 picture PVince81  路  4Comments

ho4ho picture ho4ho  路  3Comments