]> git.kaiwu.me - nginx.git/commitdiff
Disable symlinks: added the "from" parameter support to the open file cache.
authorValentin Bartenev <vbart@nginx.com>
Mon, 27 Feb 2012 16:46:57 +0000 (16:46 +0000)
committerValentin Bartenev <vbart@nginx.com>
Mon, 27 Feb 2012 16:46:57 +0000 (16:46 +0000)
src/core/ngx_open_file_cache.c
src/core/ngx_open_file_cache.h

index e099f6764c6ec6b5585482124ab377ec6371e4db..73a2db0c8003602da8f6d1076ab35469832ed0b6 100644 (file)
@@ -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);
index 0ff3453186ab3a4d7946b0894f87d78ab2195984..d119c1296f422ab03261a893a0df96f0be2be513 100644 (file)
@@ -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