diff options
author | Valentin Bartenev <vbart@nginx.com> | 2012-02-27 16:46:57 +0000 |
---|---|---|
committer | Valentin Bartenev <vbart@nginx.com> | 2012-02-27 16:46:57 +0000 |
commit | 346791187f358f852c2434f29a86754e7ab10f5b (patch) | |
tree | 00a76bb7544987c8e932717687bdf8510253c634 /src | |
parent | 075e852a4eec38b59de233dc6cbc1704def3f29c (diff) | |
download | nginx-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.c | 25 | ||||
-rw-r--r-- | src/core/ngx_open_file_cache.h | 2 |
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 |