diff -ruN lighttpd-1.4.19.orig/src/mod_dirlisting.c lighttpd-1.4.19/src/mod_dirlisting.c --- lighttpd-1.4.19.orig/src/mod_dirlisting.c.orig 2007-08-18 14:25:52.000000000 +0200 +++ lighttpd-1.4.19/src/mod_dirlisting.c 2008-07-17 17:10:03.000000000 +0200 @@ -54,6 +54,8 @@ unsigned short hide_readme_file; unsigned short show_header; unsigned short hide_header_file; + unsigned short show_favicon; + unsigned short hide_favicon; excludes_buffer *excludes; @@ -241,6 +243,8 @@ #define CONFIG_HIDE_README_FILE "dir-listing.hide-readme-file" #define CONFIG_SHOW_HEADER "dir-listing.show-header" #define CONFIG_HIDE_HEADER_FILE "dir-listing.hide-header-file" +#define CONFIG_SHOW_FAVICON "dir-listing.show-favicon" +#define CONFIG_HIDE_FAVICON "dir-listing.hide-favicon" #define CONFIG_DIR_LISTING "server.dir-listing" #define CONFIG_SET_FOOTER "dir-listing.set-footer" @@ -259,8 +263,10 @@ { CONFIG_HIDE_README_FILE, NULL, T_CONFIG_BOOLEAN, T_CONFIG_SCOPE_CONNECTION }, /* 6 */ { CONFIG_SHOW_HEADER, NULL, T_CONFIG_BOOLEAN, T_CONFIG_SCOPE_CONNECTION }, /* 7 */ { CONFIG_HIDE_HEADER_FILE, NULL, T_CONFIG_BOOLEAN, T_CONFIG_SCOPE_CONNECTION }, /* 8 */ - { CONFIG_DIR_LISTING, NULL, T_CONFIG_BOOLEAN, T_CONFIG_SCOPE_CONNECTION }, /* 9 */ - { CONFIG_SET_FOOTER, NULL, T_CONFIG_STRING, T_CONFIG_SCOPE_CONNECTION }, /* 10 */ + { CONFIG_SHOW_FAVICON, NULL, T_CONFIG_BOOLEAN, T_CONFIG_SCOPE_CONNECTION }, /* 9 */ + { CONFIG_HIDE_FAVICON, NULL, T_CONFIG_BOOLEAN, T_CONFIG_SCOPE_CONNECTION }, /* 10 */ + { CONFIG_DIR_LISTING, NULL, T_CONFIG_BOOLEAN, T_CONFIG_SCOPE_CONNECTION }, /* 11 */ + { CONFIG_SET_FOOTER, NULL, T_CONFIG_STRING, T_CONFIG_SCOPE_CONNECTION }, /* 12 */ { NULL, NULL, T_CONFIG_UNSET, T_CONFIG_SCOPE_UNSET } }; @@ -282,6 +288,8 @@ s->hide_readme_file = 0; s->show_header = 0; s->hide_header_file = 0; + s->show_favicon = 0; + s->hide_favicon = 0; s->encoding = buffer_init(); s->set_footer = buffer_init(); @@ -294,8 +302,10 @@ cv[6].destination = &(s->hide_readme_file); cv[7].destination = &(s->show_header); cv[8].destination = &(s->hide_header_file); - cv[9].destination = &(s->dir_listing); /* old name */ - cv[10].destination = s->set_footer; + cv[9].destination = &(s->show_favicon); + cv[10].destination = &(s->hide_favicon); + cv[11].destination = &(s->dir_listing); /* old name */ + cv[12].destination = s->set_footer; p->config_storage[i] = s; ca = ((data_config *)srv->config_context->data[i])->value; @@ -324,6 +334,8 @@ PATCH(hide_readme_file); PATCH(show_header); PATCH(hide_header_file); + PATCH(show_favicon); + PATCH(hide_favicon); PATCH(excludes); PATCH(set_footer); @@ -356,6 +368,10 @@ PATCH(show_header); } else if (buffer_is_equal_string(du->key, CONST_STR_LEN(CONFIG_HIDE_HEADER_FILE))) { PATCH(hide_header_file); + } else if (buffer_is_equal_string(du->key, CONST_STR_LEN(CONFIG_SHOW_FAVICON))) { + PATCH(show_favicon); + } else if (buffer_is_equal_string(du->key, CONST_STR_LEN(CONFIG_HIDE_FAVICON))) { + PATCH(hide_favicon); } else if (buffer_is_equal_string(du->key, CONST_STR_LEN(CONFIG_SET_FOOTER))) { PATCH(set_footer); } else if (buffer_is_equal_string(du->key, CONST_STR_LEN(CONFIG_EXCLUDE))) { @@ -462,6 +478,20 @@ ); buffer_append_string_encoded(out, CONST_BUF_LEN(con->uri.path), ENCODING_MINIMAL_XML); BUFFER_APPEND_STRING_CONST(out, "\n"); + + if (p->conf.show_favicon) { + stream s; + /* if we have a favicon file, display it */ + + buffer_copy_string_buffer(p->tmp_buf, con->physical.path); + BUFFER_APPEND_SLASH(p->tmp_buf); + BUFFER_APPEND_STRING_CONST(p->tmp_buf, "favicon.ico"); + + if (-1 != stream_open(&s, p->tmp_buf)) { + BUFFER_APPEND_STRING_CONST(out, "\n"); + } + stream_close(&s); + } if (p->conf.external_css->used > 1) { BUFFER_APPEND_STRING_CONST(out, "d_name, "HEADER.txt") == 0) continue; } - + if (p->conf.hide_favicon) { + if (strcmp(dent->d_name, "favicon.ico") == 0) + continue; + } + /* compare d_name against excludes array * elements, skipping any that match. */