7

I just upgraded my test machine from Apache 2.2.29 to 2.4.10 and actually Im getting some issue with webdav module.

If I try to login to a webdav account it works but if I try to list my current directory I got a 405 error.

I know some config as change with this new version, I did some change to get my virtualhost compatible with 2.4.

I got 2 virtualhost actualy all of these are come from my 2.2 setup, I updated them a bit to be ready with 2.4. One of them works fine with webdav but the second one generate a 405 on listing directory.

Here is my virtualhost who is working:

Apache log :

10.19.87.87 - maxence [02/Jan/2015:16:30:12 +0100] "PROPFIND / HTTP/1.1" 207 6331 "-" "Cyberduck/4.6.1 (16121) (Windows 7/6.1) (x86)"

    <VirtualHost *:80>
    ServerAdmin info@test.com
    DocumentRoot /home/web/working/dev/

    ServerName webdav.working.test.net
    ServerAlias webdav.working.test.net

    ErrorLog /var/log/apache2/net.test.working.webdav-error.log
    CustomLog /var/log/apache2/net.test.working.webdav-access.log combined

    <Files ".ht*">
        allow from all
    </Files>

    <Directory />
        Options FollowSymLinks
        AllowOverride None
        Require all granted
    </Directory>

    <Location />
        DAV on
        AuthName "test WebDAV Storage - working"
        AuthType Basic
        AuthUserFile /etc/apache2/htpasswd-webdav
        <Limit GET POST PUT DELETE PROPFIND PROPPATCH MKCOL COPY DUPLICATE MOVE LOCK UNLOCK OPTIONS HEAD>
        Require valid-user
        </Limit>
        AddType text/html .php .phtml
    </Location>

</Virtualhost>

And now, the one who is not working :

Apache Log :

10.19.87.87 - maxence [02/Jan/2015:16:10:54 +0100] "PROPFIND / HTTP/1.1" 405 475 "-" "Cyberduck/4.6.1 (16121) (Windows 7/6.1) (x86)"

<VirtualHost *:80>
    ServerAdmin info@test.com
    DocumentRoot /home/web/notworking/dev/

    ServerName webdav.notworking.test.net
    ServerAlias webdav.notworking.test.net

    ErrorLog /var/log/apache2/net.test.notworking.webdav-error.log
    CustomLog /var/log/apache2/net.test.notworking.webdav-access.log combined

    <Files ".ht*">
        allow from all
    </Files>

    <Directory />
        Options FollowSymLinks
        AllowOverride None
        Require all granted
    </Directory>

    <Location />
        DAV on
        AuthName "test WebDAV Storage - notworking"
        AuthType Basic
        AuthUserFile /etc/apache2/htpasswd-webdav
        <Limit GET POST PUT DELETE PROPFIND PROPPATCH MKCOL COPY DUPLICATE MOVE LOCK UNLOCK OPTIONS HEAD>
        Require valid-user
        </Limit>
        AddType text/html .php .phtml
    </Location>

</Virtualhost>

As you can see my DAV config are exactly the same. Folders rigth got same configuration :

 drwxr-xr-x 7 www-data www-data      26 déc.  24 12:07 dev

If someone got any clue to know why I can't list my directory, it'll help me a lot :)

Maxence
  • 197
  • 1
  • 1
  • 12

2 Answers2

13

There seems to be a bunch of people who have come accross this issue after the last update.

I found my answer here: on the Dav on directories, disable the Directory index features with the following directive:

DirectoryIndex disabled

Of note: one of the websites I manage was defaced on January 7th through an "Hmei7" php attack on old copies of wordpress I had placed in an accessible place and forgotten about. Don't leave old php-based apps lurking around at visible places!

ThBB
  • 156
  • 1
  • 3
  • Your answer fixed the problem thanks :) (long version) It's never too late, almost 2 years ago, I planned to try again to pass to 2.4 and found this post, my post with your answer. – Maxence Nov 16 '16 at 16:50
1

As ThBB already pointed out, the DirectoryIndex is the problem, because the index script will receive the HTTP request and won't handle it.

In my case I need the index-feature, because I have a web app in the target directory. I have a deployment script which deletes the directory, creates it again and then uploads all files. To keep my deployment script working together with DirectoryIndex I simply had to place an additionaly DELETE request for the index file before the DELETE request for the containing directory:

DELETE /my-app/index.html
DELETE /my-app
MKCOL /my-app
POST /my-app/index.html
POST /my-app/foo.bar
... all other files ...
fishbone
  • 143
  • 6