summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJo-Philipp Wich <jo@mein.io>2021-12-21 10:30:35 +0100
committerJo-Philipp Wich <jo@mein.io>2022-02-07 09:59:21 +0100
commit8b2868e20d6e9b5931a2153a0854228e8a62e0f0 (patch)
tree8ecd164d7e43ab6d1cccb4724479879206f931b5
parent3a5bd84489e3f76b8123fbae681bd08369c23b55 (diff)
file: specify UTF-8 as charset for dirlists, add option to override
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
-rw-r--r--file.c3
-rw-r--r--main.c7
-rw-r--r--uhttpd.h1
3 files changed, 9 insertions, 2 deletions
diff --git a/file.c b/file.c
index 85487f8..1548900 100644
--- a/file.c
+++ b/file.c
@@ -546,7 +546,8 @@ static void uh_file_dirlist(struct client *cl, struct path_info *pi)
}
uh_file_response_200(cl, NULL);
- ustream_printf(cl->us, "Content-Type: text/html\r\n\r\n");
+ ustream_printf(cl->us, "Content-Type: text/html; charset=%s\r\n\r\n",
+ conf.dirlist_charset ? conf.dirlist_charset : "UTF-8");
uh_chunk_printf(cl,
"<html><head><title>Index of %s</title></head>"
diff --git a/main.c b/main.c
index 893350a..d1aac09 100644
--- a/main.c
+++ b/main.c
@@ -144,6 +144,7 @@ static int usage(const char *name)
#endif
" -h directory Specify the document root, default is '.'\n"
" -E string Use given virtual URL as 404 error handler\n"
+ " -b string Use given charset for directory listings, default to UTF-8\n"
" -I string Use given filename as index for directories, multiple allowed\n"
" -S Do not follow symbolic links outside of the docroot\n"
" -D Do not allow directory listings, send 403 instead\n"
@@ -292,7 +293,7 @@ int main(int argc, char **argv)
init_defaults_pre();
signal(SIGPIPE, SIG_IGN);
- while ((ch = getopt(argc, argv, "A:aC:c:Dd:E:e:fh:H:I:i:K:k:L:l:m:N:n:O:o:P:p:qRr:Ss:T:t:U:u:Xx:y:")) != -1) {
+ while ((ch = getopt(argc, argv, "A:ab:C:c:Dd:E:e:fh:H:I:i:K:k:L:l:m:N:n:O:o:P:p:qRr:Ss:T:t:U:u:Xx:y:")) != -1) {
switch(ch) {
#ifdef HAVE_TLS
case 'C':
@@ -364,6 +365,10 @@ int main(int argc, char **argv)
uh_index_add(optarg);
break;
+ case 'b':
+ conf.dirlist_charset = optarg;
+ break;
+
case 'S':
conf.no_symlinks = 1;
break;
diff --git a/uhttpd.h b/uhttpd.h
index d230b31..c755df6 100644
--- a/uhttpd.h
+++ b/uhttpd.h
@@ -81,6 +81,7 @@ struct config {
const char *cgi_path;
const char *ubus_prefix;
const char *ubus_socket;
+ const char *dirlist_charset;
int no_symlinks;
int no_dirlists;
int network_timeout;