From e6a6e7eb2869fc07a96fc92f222f62a3976b6df8 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Elan=20Ruusam=C3=A4e?= Date: Wed, 13 Apr 2005 07:55:06 +0000 Subject: [PATCH] - dir-listing.hide patch Changed files: dirlist-hide.patch -> 1.1 --- dirlist-hide.patch | 150 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 150 insertions(+) create mode 100644 dirlist-hide.patch diff --git a/dirlist-hide.patch b/dirlist-hide.patch new file mode 100644 index 0000000..caf16db --- /dev/null +++ b/dirlist-hide.patch @@ -0,0 +1,150 @@ +Index: src/config.c +=================================================================== +--- src/config.c (revision 107) ++++ src/config.c (working copy) +@@ -74,6 +74,7 @@ + + { "dir-listing.hide-dotfiles", NULL, T_CONFIG_BOOLEAN, T_CONFIG_SCOPE_CONNECTION }, /* 39 */ + { "dir-listing.external-css", NULL, T_CONFIG_STRING, T_CONFIG_SCOPE_CONNECTION }, /* 40 */ ++ { "dir-listing.hide", NULL, T_CONFIG_ARRAY, T_CONFIG_SCOPE_CONNECTION }, /* 41 */ + + { "server.host", "use server.bind instead", T_CONFIG_DEPRECATED, T_CONFIG_SCOPE_UNSET }, + { "server.docroot", "use server.document-root instead", T_CONFIG_DEPRECATED, T_CONFIG_SCOPE_UNSET }, +@@ -120,6 +121,7 @@ + s->hide_dotfiles = 1; + s->indexfiles = array_init(); + s->mimetypes = array_init(); ++ s->dirlist_hide = array_init(); + s->server_name = buffer_init(); + s->ssl_pemfile = buffer_init(); + s->ssl_ca_file = buffer_init(); +@@ -173,6 +175,7 @@ + cv[38].destination = s->ssl_ca_file; + cv[39].destination = &(s->hide_dotfiles); + cv[40].destination = s->dirlist_css; ++ cv[41].destination = s->dirlist_hide; + + srv->config_storage[i] = s; + +@@ -196,6 +199,7 @@ + PATCH(dir_listing); + PATCH(dirlist_css); + PATCH(hide_dotfiles); ++ PATCH(dirlist_hide); + PATCH(indexfiles); + PATCH(max_keep_alive_requests); + PATCH(max_keep_alive_idle); +@@ -245,6 +249,8 @@ + PATCH(hide_dotfiles); + } else if (buffer_is_equal_string(du->key, CONST_STR_LEN("dir-listing.external-css"))) { + PATCH(dirlist_css); ++ } else if (buffer_is_equal_string(du->key, CONST_STR_LEN("dir-listing.hide"))) { ++ PATCH(dirlist_hide); + } else if (buffer_is_equal_string(du->key, CONST_STR_LEN("server.error-handler-404"))) { + PATCH(error_handler); + } else if (buffer_is_equal_string(du->key, CONST_STR_LEN("server.indexfiles"))) { +Index: src/base.h +=================================================================== +--- src/base.h (revision 107) ++++ src/base.h (working copy) +@@ -216,6 +216,7 @@ + typedef struct { + array *indexfiles; + array *mimetypes; ++ array *dirlist_hide; + + /* virtual-servers */ + buffer *document_root; +Index: src/response.c +=================================================================== +--- src/response.c (revision 107) ++++ src/response.c (working copy) +@@ -643,6 +643,29 @@ + ); + } + ++static int http_list_directory_ishidden(array *hidden, const char *filename, size_t len) { ++ size_t i; ++ size_t ct_len; ++ data_string *ds; ++ ++ for (i = 0; i < hidden->used; i++) { ++ ds = (data_string*) hidden->data[i]; ++ ++ if (ds->value->used == 0) ++ continue; ++ ++ ct_len = ds->value->used - 1; ++ if (len < ct_len) ++ continue; ++ ++ if (strncmp(filename + len - ct_len, ds->value->ptr, ct_len) == 0) { ++ return 1; ++ } ++ } ++ ++ return 0; ++} ++ + static int http_list_directory(server *srv, connection *con, buffer *dir) { + DIR *dp; + buffer *out; +@@ -656,6 +679,8 @@ + char sizebuf[sizeof("999.9K")]; + char datebuf[sizeof("2005-Jan-01 22:23:24")]; + size_t k; ++ size_t ct_len; ++ data_string *ds; + const char *content_type; + #ifdef HAVE_XATTR + char attrval[128]; +@@ -706,6 +731,10 @@ + i = strlen(dent->d_name); + if (i > NAME_MAX) + continue; ++ ++ if (http_list_directory_ishidden(con->conf.dirlist_hide, dent->d_name, i)) ++ continue; ++ + memcpy(path_file, dent->d_name, i + 1); + if (stat(path, &st) != 0) + continue; +@@ -780,8 +809,7 @@ + #endif + content_type = "application/octet-stream"; + for (k = 0; k < con->conf.mimetypes->used; k++) { +- data_string *ds = (data_string *)con->conf.mimetypes->data[k]; +- size_t ct_len; ++ ds = (data_string *)con->conf.mimetypes->data[k]; + + if (ds->key->used == 0) + continue; +Index: src/server.c +=================================================================== +--- src/server.c (revision 107) ++++ src/server.c (working copy) +@@ -244,6 +244,7 @@ + buffer_free(s->dirlist_css); + array_free(s->indexfiles); + array_free(s->mimetypes); ++ array_free(s->dirlist_hide); + + free(s); + } +Index: doc/configuration.txt +=================================================================== +--- doc/configuration.txt (revision 107) ++++ doc/configuration.txt (working copy) +@@ -191,6 +191,12 @@ + dir-listing.external-css + path to an external css stylesheet for the directory listing + ++dir-listing.hide ++ list of extensions to hide in directory listing. ++ e.g.: :: ++ ++ dir-listing.hide = ( "CVS", ".xyz" ) ++ + server.follow-symlink + allow to follow-symlinks + -- 2.44.0