Download raw body.
PATCH: httpd: support gzip-static for directory index files
On 2/14/26 8:52 PM, Andrew Kloet wrote:
> On January 25, 2026 7:10:58 PM UTC, Andrew Kloet <andrew@kloet.net> wrote:
>> Hello,
>>
>> Currently, when gzip-static is enabled in httpd.conf, it does not work
>> for directory index files when the full path is not given.
>> (e.g., http://example.com/ instead of http://example.com/index.html).
>>
>> This problem was previously reported in 2023:
>> https://marc.info/?l=openbsd-misc&m=169957389612286&w=2
>>
>> The issue is in server_file_access(). When a directory is requested, the
>> function appends the index name and calls itself recursively. If the
>> recursive call finds a .gz file, it correctly sets up the response
>> headers and file descriptor. However, the parent call continues to
>> process the directory logic, fails to immediately propagate the
>> successful return code without further side effects, and handles the
>> directory file descriptor in a way that interferes with the final
>> response
>>
>> The following patch ensures that the result of the recursive index
>> lookup is propagated.
>>
>> Index: usr.sbin/httpd/server_file.c
>> ===================================================================
>> RCS file: /cvs/src/usr.sbin/httpd/server_file.c,v
>> diff -u -p -u -p -r1.80 server_file.c
>> --- usr.sbin/httpd/server_file.c 29 Apr 2024 16:17:46 -0000 1.80
>> +++ usr.sbin/httpd/server_file.c 25 Jan 2026 18:53:31 -0000
>> @@ -135,21 +135,14 @@ server_file_access(struct httpd *env, st
>> }
>>
>> ret = server_file_access(env, clt, path, len);
>> - if (ret == 404) {
>> - /*
>> - * Index file not found; fail if auto-indexing is
>> - * not enabled, otherwise return success but
>> - * indicate directory with S_ISDIR of the previous
>> - * stat.
>> - */
>> - if ((srv_conf->flags & SRVFLAG_AUTO_INDEX) == 0) {
>> - close(fd);
>> - return (403);
>> - }
>> -
>> + if (ret == 404 && (srv_conf->flags & SRVFLAG_AUTO_INDEX)) {
>> + /* Use the existing directory fd for indexing */
>> return (server_file_index(env, clt, fd, &st));
>> }
>> +
>> close(fd);
>> + if (ret == 404)
>> + return (403);
>> return (ret);
>> } else if (!S_ISREG(st.st_mode)) {
>> /* Don't follow symlinks and ignore special files */
>>
>
> Bumping this thread.
>
> To summarize: current server_file_access logic fails to propagate the
> gzip-static result during recursive directory index lookups. The patch
> ensures the recursive call's return code and file state are respected.
>
> Looking for feedback, thanks.
>
> Andrew
>
ping
PATCH: httpd: support gzip-static for directory index files