# HG changeset patch
# User Maciej Krüger <maciej@xeredo.it>
# Date 1638856063 -3600
# Tue Dec 07 06:47:43 2021 +0100
# Node ID 8c9f2abb0e4ee6302203e1fa3e63ad218d6251cb
# Parent a7a77549265ef46f1f0fdb3897f4beabf9e09c40
http: add autoindex_name_length
This adds an option to change the name length from the hardcoded 50
characters to whatever the user desires
In my case specifically it is the long filenames openwrt produces
that I need displayed properly, but others might have similar
usecases where having this option makes sense
Can be used like so
autoindex on;
autoindex_name_length 100;
diff -r a7a77549265e -r 8c9f2abb0e4e src/http/modules/ngx_http_autoindex_module.c
--- a/src/http/modules/ngx_http_autoindex_module.c Thu Nov 25 22:02:10 2021 +0300
+++ b/src/http/modules/ngx_http_autoindex_module.c Tue Dec 07 06:47:43 2021 +0100
@@ -42,6 +42,7 @@
ngx_uint_t format;
ngx_flag_t localtime;
ngx_flag_t exact_size;
+ ngx_uint_t name_length;
} ngx_http_autoindex_loc_conf_t;
@@ -50,10 +51,6 @@
#define NGX_HTTP_AUTOINDEX_JSONP 2
#define NGX_HTTP_AUTOINDEX_XML 3
-#define NGX_HTTP_AUTOINDEX_PREALLOCATE 50
-
-#define NGX_HTTP_AUTOINDEX_NAME_LEN 50
-
static ngx_buf_t *ngx_http_autoindex_html(ngx_http_request_t *r,
ngx_array_t *entries);
@@ -114,6 +111,13 @@
offsetof(ngx_http_autoindex_loc_conf_t, exact_size),
NULL },
+ { ngx_string("autoindex_name_length"),
+ NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_TAKE1,
+ ngx_conf_set_num_slot,
+ NGX_HTTP_LOC_CONF_OFFSET,
+ offsetof(ngx_http_autoindex_loc_conf_t, name_length),
+ NULL },
+
ngx_null_command
};
@@ -186,8 +190,7 @@
return rc;
}
- last = ngx_http_map_uri_to_path(r, &path, &root,
- NGX_HTTP_AUTOINDEX_PREALLOCATE);
+ last = ngx_http_map_uri_to_path(r, &path, &root, alcf->name_length);
if (last == NULL) {
return NGX_HTTP_INTERNAL_SERVER_ERROR;
}
@@ -324,7 +327,7 @@
if (path.len + 1 + len + 1 > allocated) {
allocated = path.len + 1 + len + 1
- + NGX_HTTP_AUTOINDEX_PREALLOCATE;
+ + alcf->name_length;
filename = ngx_pnalloc(pool, allocated);
if (filename == NULL) {
@@ -472,6 +475,8 @@
utf8 = 0;
}
+ alcf = ngx_http_get_module_loc_conf(r, ngx_http_autoindex_module);
+
escape_html = ngx_escape_html(NULL, r->uri.data, r->uri.len);
len = sizeof(title) - 1
@@ -505,7 +510,7 @@
+ sizeof("\">") - 1
+ entry[i].name.len - entry[i].utf_len
+ entry[i].escape_html
- + NGX_HTTP_AUTOINDEX_NAME_LEN + sizeof(">") - 2
+ + alcf->name_length + sizeof(">") - 2
+ sizeof("</a>") - 1
+ sizeof(" 28-Sep-1970 12:00 ") - 1
+ 20 /* the file size */
@@ -541,7 +546,6 @@
b->last = ngx_cpymem(b->last, "<hr><pre><a href=\"../\">../</a>" CRLF,
sizeof("<hr><pre><a href=\"../\">../</a>" CRLF) - 1);
- alcf = ngx_http_get_module_loc_conf(r, ngx_http_autoindex_module);
tp = ngx_timeofday();
for (i = 0; i < entries->nelts; i++) {
@@ -568,11 +572,11 @@
len = entry[i].utf_len;
if (entry[i].name.len != len) {
- if (len > NGX_HTTP_AUTOINDEX_NAME_LEN) {
- char_len = NGX_HTTP_AUTOINDEX_NAME_LEN - 3 + 1;
+ if (len > alcf->name_length) {
+ char_len = alcf->name_length - 3 + 1;
} else {
- char_len = NGX_HTTP_AUTOINDEX_NAME_LEN + 1;
+ char_len = alcf->name_length + 1;
}
last = b->last;
@@ -588,8 +592,8 @@
} else {
if (entry[i].escape_html) {
- if (len > NGX_HTTP_AUTOINDEX_NAME_LEN) {
- char_len = NGX_HTTP_AUTOINDEX_NAME_LEN - 3;
+ if (len > alcf->name_length) {
+ char_len = alcf->name_length - 3;
} else {
char_len = len;
@@ -601,25 +605,25 @@
} else {
b->last = ngx_cpystrn(b->last, entry[i].name.data,
- NGX_HTTP_AUTOINDEX_NAME_LEN + 1);
+ alcf->name_length + 1);
last = b->last - 3;
}
}
- if (len > NGX_HTTP_AUTOINDEX_NAME_LEN) {
+ if (len > alcf->name_length) {
b->last = ngx_cpymem(last, "..></a>", sizeof("..></a>") - 1);
} else {
- if (entry[i].dir && NGX_HTTP_AUTOINDEX_NAME_LEN - len > 0) {
+ if (entry[i].dir && alcf->name_length - len > 0) {
*b->last++ = '/';
len++;
}
b->last = ngx_cpymem(b->last, "</a>", sizeof("</a>") - 1);
- if (NGX_HTTP_AUTOINDEX_NAME_LEN - len > 0) {
- ngx_memset(b->last, ' ', NGX_HTTP_AUTOINDEX_NAME_LEN - len);
- b->last += NGX_HTTP_AUTOINDEX_NAME_LEN - len;
+ if (alcf->name_length - len > 0) {
+ ngx_memset(b->last, ' ', alcf->name_length - len);
+ b->last += alcf->name_length - len;
}
}
@@ -1048,6 +1052,7 @@
NGX_HTTP_AUTOINDEX_HTML);
ngx_conf_merge_value(conf->localtime, prev->localtime, 0);
ngx_conf_merge_value(conf->exact_size, prev->exact_size, 1);
+ ngx_conf_merge_uint_value(conf->name_length, prev->name_length, 50);
return NGX_CONF_OK;
}
_______________________________________________
nginx-devel mailing list
nginx-devel@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-devel