aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorValentin Bartenev <vbart@nginx.com>2012-02-27 16:46:57 +0000
committerValentin Bartenev <vbart@nginx.com>2012-02-27 16:46:57 +0000
commit346791187f358f852c2434f29a86754e7ab10f5b (patch)
tree00a76bb7544987c8e932717687bdf8510253c634 /src
parent075e852a4eec38b59de233dc6cbc1704def3f29c (diff)
downloadnginx-346791187f358f852c2434f29a86754e7ab10f5b.tar.gz
nginx-346791187f358f852c2434f29a86754e7ab10f5b.zip
Disable symlinks: added the "from" parameter support to the open file cache.
Diffstat (limited to 'src')
-rw-r--r--src/core/ngx_open_file_cache.c25
-rw-r--r--src/core/ngx_open_file_cache.h2
2 files changed, 26 insertions, 1 deletions
diff --git a/src/core/ngx_open_file_cache.c b/src/core/ngx_open_file_cache.c
index e099f6764..73a2db0c8 100644
--- a/src/core/ngx_open_file_cache.c
+++ b/src/core/ngx_open_file_cache.c
@@ -229,6 +229,7 @@ ngx_open_cached_file(ngx_open_file_cache_t *cache, ngx_str_t *name,
&& now - file->created < of->valid
#if (NGX_HAVE_OPENAT)
&& of->disable_symlinks == file->disable_symlinks
+ && of->disable_symlinks_from == file->disable_symlinks_from
#endif
))
{
@@ -395,6 +396,7 @@ update:
file->err = of->err;
#if (NGX_HAVE_OPENAT)
file->disable_symlinks = of->disable_symlinks;
+ file->disable_symlinks_from = of->disable_symlinks_from;
#endif
if (of->err == 0) {
@@ -583,7 +585,28 @@ ngx_open_file_wrapper(ngx_str_t *name, ngx_open_file_info_t *of,
at_name = *name;
- if (*p == '/') {
+ if (of->disable_symlinks_from) {
+
+ cp = p + of->disable_symlinks_from;
+
+ *cp = '\0';
+
+ at_fd = ngx_open_file(p, NGX_FILE_SEARCH|NGX_FILE_NONBLOCK,
+ NGX_FILE_OPEN, 0);
+
+ *cp = '/';
+
+ if (at_fd == NGX_INVALID_FILE) {
+ of->err = ngx_errno;
+ of->failed = ngx_open_file_n;
+ return NGX_INVALID_FILE;
+ }
+
+ at_name.len = of->disable_symlinks_from;
+ p = cp + 1;
+
+ } else if (*p == '/') {
+
at_fd = ngx_open_file("/",
NGX_FILE_SEARCH|NGX_FILE_NONBLOCK,
NGX_FILE_OPEN, 0);
diff --git a/src/core/ngx_open_file_cache.h b/src/core/ngx_open_file_cache.h
index 0ff345318..d119c1296 100644
--- a/src/core/ngx_open_file_cache.h
+++ b/src/core/ngx_open_file_cache.h
@@ -33,6 +33,7 @@ typedef struct {
ngx_uint_t min_uses;
#if (NGX_HAVE_OPENAT)
+ size_t disable_symlinks_from;
unsigned disable_symlinks:2;
#endif
@@ -69,6 +70,7 @@ struct ngx_cached_open_file_s {
uint32_t uses;
#if (NGX_HAVE_OPENAT)
+ size_t disable_symlinks_from;
unsigned disable_symlinks:2;
#endif