summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authordarix <darix@152afb58-edef-0310-8abb-c4023f1b3aa9>2006-09-10 14:11:08 +0000
committerdarix <darix@152afb58-edef-0310-8abb-c4023f1b3aa9>2006-09-10 14:11:08 +0000
commitfcc2fb91c0369143bae58d8753c84839a95d3d54 (patch)
tree889b48b67435fca937c6418bb44ea1c60acefe46
parent98aa219162fb9084adab87c1b85128048399a464 (diff)
downloadlighttpd-fcc2fb91c0369143bae58d8753c84839a95d3d54.tar.gz
- only run symlink checks if we should not follow them.
git-svn-id: svn://svn.lighttpd.net/lighttpd/branches/lighttpd-1.4.11-ssl-fixes@1290 152afb58-edef-0310-8abb-c4023f1b3aa9
-rw-r--r--src/stat_cache.c62
1 files changed, 32 insertions, 30 deletions
diff --git a/src/stat_cache.c b/src/stat_cache.c
index 1c7f4b5a..c6cb3d2e 100644
--- a/src/stat_cache.c
+++ b/src/stat_cache.c
@@ -527,47 +527,49 @@ handler_t stat_cache_get_entry(server *srv, connection *con, buffer *name, stat_
* */
#ifdef HAVE_LSTAT
sce->is_symlink = 0;
- if (stat_cache_lstat(srv, name, &lst) == 0) {
+ if (!con->conf.follow_symlink) {
+ if (stat_cache_lstat(srv, name, &lst) == 0) {
#ifdef DEBUG_STAT_CACHE
- log_error_write(srv, __FILE__, __LINE__, "sb",
- "found symlink", name);
+ log_error_write(srv, __FILE__, __LINE__, "sb",
+ "found symlink", name);
#endif
- sce->is_symlink = 1;
- }
+ sce->is_symlink = 1;
+ }
- /*
- * we assume "/" can not be symlink, so
- * skip the symlink stuff if our path is /
- **/
- else if ((name->used > 2)) {
- buffer *dname;
- char *s_cur;
-
- dname = buffer_init();
- buffer_copy_string_buffer(dname, name);
-
- while ((s_cur = strrchr(dname->ptr,'/'))) {
- *s_cur = '\0';
- if (dname->ptr == s_cur) {
+ /*
+ * we assume "/" can not be symlink, so
+ * skip the symlink stuff if our path is /
+ **/
+ else if ((name->used > 2)) {
+ buffer *dname;
+ char *s_cur;
+
+ dname = buffer_init();
+ buffer_copy_string_buffer(dname, name);
+
+ while ((s_cur = strrchr(dname->ptr,'/'))) {
+ *s_cur = '\0';
+ if (dname->ptr == s_cur) {
#ifdef DEBUG_STAT_CACHE
- log_error_write(srv, __FILE__, __LINE__, "s", "reached /");
+ log_error_write(srv, __FILE__, __LINE__, "s", "reached /");
#endif
- break;
- }
+ break;
+ }
#ifdef DEBUG_STAT_CACHE
- log_error_write(srv, __FILE__, __LINE__, "sbs",
- "checking if", dname, "is a symlink");
+ log_error_write(srv, __FILE__, __LINE__, "sbs",
+ "checking if", dname, "is a symlink");
#endif
- if (stat_cache_lstat(srv, dname, &lst) == 0) {
- sce->is_symlink = 1;
+ if (stat_cache_lstat(srv, dname, &lst) == 0) {
+ sce->is_symlink = 1;
#ifdef DEBUG_STAT_CACHE
- log_error_write(srv, __FILE__, __LINE__, "sb",
- "found symlink", dname);
+ log_error_write(srv, __FILE__, __LINE__, "sb",
+ "found symlink", dname);
#endif
- break;
+ break;
+ };
};
+ buffer_free(dname);
};
- buffer_free(dname);
};
#endif