summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJan Kneschke <jan@kneschke.de>2005-10-09 20:49:02 +0000
committerJan Kneschke <jan@kneschke.de>2005-10-09 20:49:02 +0000
commit1f0174e9d1effeeaf61c7cd12cacf7802d2cffaa (patch)
tree92c6b80317f8b1e3f55a3fd3a3ee9f72c68ac58b
parentc4fa6928b6b60d379683d4c4b77014841e9497a5 (diff)
downloadlighttpd-git-1f0174e9d1effeeaf61c7cd12cacf7802d2cffaa.tar.gz
assume case-sensitive FS of upper + lower case result in the same filename (e.g. /1234/)
git-svn-id: svn://svn.lighttpd.net/lighttpd/branches/lighttpd-merge-1.4.x@783 152afb58-edef-0310-8abb-c4023f1b3aa9
-rw-r--r--src/configfile.c19
1 files changed, 15 insertions, 4 deletions
diff --git a/src/configfile.c b/src/configfile.c
index fe5f5b90..bdf5ee03 100644
--- a/src/configfile.c
+++ b/src/configfile.c
@@ -1062,15 +1062,26 @@ int config_set_defaults(server *srv) {
buffer_to_lower(srv->tmp_buf);
- if (0 == stat(srv->tmp_buf->ptr, &st1)) {
+ if (0 == stat(srv->tmp_buf->ptr, &st1)) {
+ int is_lower = 0;
- /* lower-case existed, check upper-case */
+ is_lower = buffer_is_equal(srv->tmp_buf, s->document_root);
+ /* lower-case existed, check upper-case */
buffer_copy_string_buffer(srv->tmp_buf, s->document_root);
buffer_to_upper(srv->tmp_buf);
-
- if (0 == stat(srv->tmp_buf->ptr, &st2)) {
+
+ /* we have to handle the special case that upper and lower-casing results in the same filename
+ * as in server.document-root = "/" or "/12345/" */
+
+ if (is_lower && buffer_is_equal(srv->tmp_buf, s->document_root)) {
+ /* lower-casing and upper-casing didn't result in
+ * an other filename, no need to stat(),
+ * just assume it is case-sensitive. */
+
+ s->force_lower_case = 0;
+ } else if (0 == stat(srv->tmp_buf->ptr, &st2)) {
/* upper case exists too, doesn't the FS handle this ? */