Bug 47719 - Broken symbolic link (symlink) causes wrong ErrorDocument to be returned
Summary: Broken symbolic link (symlink) causes wrong ErrorDocument to be returned
Status: REOPENED
Alias: None
Product: Apache httpd-2
Classification: Unclassified
Component: Core (show other bugs)
Version: 2.2.8
Hardware: Other Linux
: P2 enhancement (vote)
Target Milestone: ---
Assignee: Apache HTTPD Bugs Mailing List
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2009-08-20 17:37 UTC by Jeremy Grodberg
Modified: 2011-09-25 21:18 UTC (History)
1 user (show)



Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Jeremy Grodberg 2009-08-20 17:37:38 UTC
When a symbolic link is broken (points to a non-existent file), the ErrorDocument specified in the VirtualHost section is returned instead of the ErrorDocument specified in the Directory section.

Using out-of-the-box Unbutnu 8.04 server running Apache httpd 2.2.8.  Did not touch anything but Virtual Host config.  Here is the complete Virtual Host config:

NameVirtualHost *
<VirtualHost *>
        ErrorDocument 403 "Vhost 403"
        DocumentRoot /var/www/
        <Directory />
                ErrorDocument 403 "root 403"
                Options FollowSymLinks
                AllowOverride All
        </Directory>
        <Directory /var/www/>
                ErrorDocument 403 "/var/www 403"
                Options Indexes FollowSymLinks MultiViews
                AllowOverride None
        </Directory>
</VirtualHost>

I then went to /var/www which already had an index.html file in it and ran the following commands:

cp index.html noperm.html
chmod a-r noperm.html
ln -s noperm.html goodlink.html
ln -s broken badlink.html


This means:
* index.html is a valid, readable file
* noperm.html is a valid file but httpd does not have permission to read it
* goodlink.html is a valid symbolic link to noperm.html
* badlink.html is a symbolic link to a non-existent file in the same directory


Expected result:

http://localhost/index.html returns the contents of index.html
http://localhost/noperm.html returns "/var/www 403" and status code 403
http://localhost/goodlink.html returns "/var/www 403" and status code 403
http://localhost/badlink.html returns "/var/www 403" and status code 403
(I would actually prefer that badlink returns status code 404, but that is a battle I am not going to fight right now.)


Actual result:
Index, noperm, and goodlink work as expected.
http://localhost/badlink.html returns "Vhost 403" and status code 403


Note: setting EnableSendfile off does not change the results.
Comment 1 Jeremy Grodberg 2009-08-20 17:58:44 UTC
I forgot to mention this may be related to Bug 28515
Comment 2 Eric Covener 2011-09-25 18:12:43 UTC
IIUC The inaccessible link target stops the server from associating any file with the current request, so the per-directory config is not applicable to the error response.
Comment 3 Jeremy Grodberg 2011-09-25 19:30:48 UTC
Could you perhaps make this a feature request rather than "wontfix"?  I think the proper error handling of a broken symbolic link should be to handle it as a missing file in the same directory and with the same name as the symbolic link itself.    It should return a 404 as configured for that directory.