# HG changeset patch # User Valentin Bartenev # Date 1330361488 0 # Node ID 13e09cf11d4efdbac8dbee83bb521d89e25e5a81 # Parent 47ece881897857ba328efa1872d6bbfd7b9e80fe Disable symlinks: initialization of the "disable_symlinks" field in ngx_open_file_info_t moved to a separate function. This is preparation for the "from=" parameter implementation of the "disable_symlinks" directive. diff -r 47ece8818978 -r 13e09cf11d4e src/http/modules/ngx_http_flv_module.c --- a/src/http/modules/ngx_http_flv_module.c Mon Feb 27 16:46:57 2012 +0000 +++ b/src/http/modules/ngx_http_flv_module.c Mon Feb 27 16:51:28 2012 +0000 @@ -109,9 +109,10 @@ of.min_uses = clcf->open_file_cache_min_uses; of.errors = clcf->open_file_cache_errors; of.events = clcf->open_file_cache_events; -#if (NGX_HAVE_OPENAT) - of.disable_symlinks = clcf->disable_symlinks; -#endif + + if (ngx_http_set_disable_symlinks(r, clcf, &path, &of) != NGX_OK) { + return NGX_HTTP_INTERNAL_SERVER_ERROR; + } if (ngx_open_cached_file(clcf->open_file_cache, &path, &of, r->pool) != NGX_OK) diff -r 47ece8818978 -r 13e09cf11d4e src/http/modules/ngx_http_gzip_static_module.c --- a/src/http/modules/ngx_http_gzip_static_module.c Mon Feb 27 16:46:57 2012 +0000 +++ b/src/http/modules/ngx_http_gzip_static_module.c Mon Feb 27 16:51:28 2012 +0000 @@ -129,9 +129,10 @@ of.min_uses = clcf->open_file_cache_min_uses; of.errors = clcf->open_file_cache_errors; of.events = clcf->open_file_cache_events; -#if (NGX_HAVE_OPENAT) - of.disable_symlinks = clcf->disable_symlinks; -#endif + + if (ngx_http_set_disable_symlinks(r, clcf, &path, &of) != NGX_OK) { + return NGX_HTTP_INTERNAL_SERVER_ERROR; + } if (ngx_open_cached_file(clcf->open_file_cache, &path, &of, r->pool) != NGX_OK) diff -r 47ece8818978 -r 13e09cf11d4e src/http/modules/ngx_http_index_module.c --- a/src/http/modules/ngx_http_index_module.c Mon Feb 27 16:46:57 2012 +0000 +++ b/src/http/modules/ngx_http_index_module.c Mon Feb 27 16:51:28 2012 +0000 @@ -209,9 +209,10 @@ of.test_only = 1; of.errors = clcf->open_file_cache_errors; of.events = clcf->open_file_cache_events; -#if (NGX_HAVE_OPENAT) - of.disable_symlinks = clcf->disable_symlinks; -#endif + + if (ngx_http_set_disable_symlinks(r, clcf, &path, &of) != NGX_OK) { + return NGX_HTTP_INTERNAL_SERVER_ERROR; + } if (ngx_open_cached_file(clcf->open_file_cache, &path, &of, r->pool) != NGX_OK) @@ -307,9 +308,10 @@ of.test_only = 1; of.valid = clcf->open_file_cache_valid; of.errors = clcf->open_file_cache_errors; -#if (NGX_HAVE_OPENAT) - of.disable_symlinks = clcf->disable_symlinks; -#endif + + if (ngx_http_set_disable_symlinks(r, clcf, &dir, &of) != NGX_OK) { + return NGX_HTTP_INTERNAL_SERVER_ERROR; + } if (ngx_open_cached_file(clcf->open_file_cache, &dir, &of, r->pool) != NGX_OK) diff -r 47ece8818978 -r 13e09cf11d4e src/http/modules/ngx_http_log_module.c --- a/src/http/modules/ngx_http_log_module.c Mon Feb 27 16:46:57 2012 +0000 +++ b/src/http/modules/ngx_http_log_module.c Mon Feb 27 16:51:28 2012 +0000 @@ -394,9 +394,11 @@ of.test_only = 1; of.errors = clcf->open_file_cache_errors; of.events = clcf->open_file_cache_events; -#if (NGX_HAVE_OPENAT) - of.disable_symlinks = clcf->disable_symlinks; -#endif + + if (ngx_http_set_disable_symlinks(r, clcf, &path, &of) != NGX_OK) { + /* simulate successful logging */ + return len; + } if (ngx_open_cached_file(clcf->open_file_cache, &path, &of, r->pool) != NGX_OK) @@ -444,9 +446,11 @@ of.valid = llcf->open_file_cache_valid; of.min_uses = llcf->open_file_cache_min_uses; of.directio = NGX_OPEN_FILE_DIRECTIO_OFF; -#if (NGX_HAVE_OPENAT) - of.disable_symlinks = clcf->disable_symlinks; -#endif + + if (ngx_http_set_disable_symlinks(r, clcf, &log, &of) != NGX_OK) { + /* simulate successful logging */ + return len; + } if (ngx_open_cached_file(llcf->open_file_cache, &log, &of, r->pool) != NGX_OK) diff -r 47ece8818978 -r 13e09cf11d4e src/http/modules/ngx_http_mp4_module.c --- a/src/http/modules/ngx_http_mp4_module.c Mon Feb 27 16:46:57 2012 +0000 +++ b/src/http/modules/ngx_http_mp4_module.c Mon Feb 27 16:51:28 2012 +0000 @@ -440,9 +440,10 @@ of.min_uses = clcf->open_file_cache_min_uses; of.errors = clcf->open_file_cache_errors; of.events = clcf->open_file_cache_events; -#if (NGX_HAVE_OPENAT) - of.disable_symlinks = clcf->disable_symlinks; -#endif + + if (ngx_http_set_disable_symlinks(r, clcf, &path, &of) != NGX_OK) { + return NGX_HTTP_INTERNAL_SERVER_ERROR; + } if (ngx_open_cached_file(clcf->open_file_cache, &path, &of, r->pool) != NGX_OK) diff -r 47ece8818978 -r 13e09cf11d4e src/http/modules/ngx_http_static_module.c --- a/src/http/modules/ngx_http_static_module.c Mon Feb 27 16:46:57 2012 +0000 +++ b/src/http/modules/ngx_http_static_module.c Mon Feb 27 16:51:28 2012 +0000 @@ -94,9 +94,10 @@ of.min_uses = clcf->open_file_cache_min_uses; of.errors = clcf->open_file_cache_errors; of.events = clcf->open_file_cache_events; -#if (NGX_HAVE_OPENAT) - of.disable_symlinks = clcf->disable_symlinks; -#endif + + if (ngx_http_set_disable_symlinks(r, clcf, &path, &of) != NGX_OK) { + return NGX_HTTP_INTERNAL_SERVER_ERROR; + } if (ngx_open_cached_file(clcf->open_file_cache, &path, &of, r->pool) != NGX_OK) diff -r 47ece8818978 -r 13e09cf11d4e src/http/modules/perl/nginx.xs --- a/src/http/modules/perl/nginx.xs Mon Feb 27 16:46:57 2012 +0000 +++ b/src/http/modules/perl/nginx.xs Mon Feb 27 16:51:28 2012 +0000 @@ -662,9 +662,10 @@ of.min_uses = clcf->open_file_cache_min_uses; of.errors = clcf->open_file_cache_errors; of.events = clcf->open_file_cache_events; -#if (NGX_HAVE_OPENAT) - of.disable_symlinks = clcf->disable_symlinks; -#endif + + if (ngx_http_set_disable_symlinks(r, clcf, &path, &of) != NGX_OK) { + XSRETURN_EMPTY; + } if (ngx_open_cached_file(clcf->open_file_cache, &path, &of, r->pool) != NGX_OK) diff -r 47ece8818978 -r 13e09cf11d4e src/http/ngx_http_core_module.c --- a/src/http/ngx_http_core_module.c Mon Feb 27 16:46:57 2012 +0000 +++ b/src/http/ngx_http_core_module.c Mon Feb 27 16:51:28 2012 +0000 @@ -1320,9 +1320,11 @@ of.test_only = 1; of.errors = clcf->open_file_cache_errors; of.events = clcf->open_file_cache_events; -#if (NGX_HAVE_OPENAT) - of.disable_symlinks = clcf->disable_symlinks; -#endif + + if (ngx_http_set_disable_symlinks(r, clcf, &path, &of) != NGX_OK) { + ngx_http_finalize_request(r, NGX_HTTP_INTERNAL_SERVER_ERROR); + return NGX_OK; + } if (ngx_open_cached_file(clcf->open_file_cache, &path, &of, r->pool) != NGX_OK) @@ -2645,6 +2647,18 @@ } +ngx_int_t +ngx_http_set_disable_symlinks(ngx_http_request_t *r, + ngx_http_core_loc_conf_t *clcf, ngx_str_t *path, ngx_open_file_info_t *of) +{ +#if (NGX_HAVE_OPENAT) + of->disable_symlinks = clcf->disable_symlinks; +#endif + + return NGX_OK; +} + + static char * ngx_http_core_server(ngx_conf_t *cf, ngx_command_t *cmd, void *dummy) { diff -r 47ece8818978 -r 13e09cf11d4e src/http/ngx_http_core_module.h --- a/src/http/ngx_http_core_module.h Mon Feb 27 16:46:57 2012 +0000 +++ b/src/http/ngx_http_core_module.h Mon Feb 27 16:51:28 2012 +0000 @@ -509,6 +509,10 @@ ngx_int_t ngx_http_write_filter(ngx_http_request_t *r, ngx_chain_t *chain); +ngx_int_t ngx_http_set_disable_symlinks(ngx_http_request_t *r, + ngx_http_core_loc_conf_t *clcf, ngx_str_t *path, ngx_open_file_info_t *of); + + extern ngx_module_t ngx_http_core_module; extern ngx_uint_t ngx_http_max_module; diff -r 47ece8818978 -r 13e09cf11d4e src/http/ngx_http_script.c --- a/src/http/ngx_http_script.c Mon Feb 27 16:46:57 2012 +0000 +++ b/src/http/ngx_http_script.c Mon Feb 27 16:51:28 2012 +0000 @@ -1505,9 +1505,12 @@ of.test_only = 1; of.errors = clcf->open_file_cache_errors; of.events = clcf->open_file_cache_events; -#if (NGX_HAVE_OPENAT) - of.disable_symlinks = clcf->disable_symlinks; -#endif + + if (ngx_http_set_disable_symlinks(r, clcf, &path, &of) != NGX_OK) { + e->ip = ngx_http_script_exit; + e->status = NGX_HTTP_INTERNAL_SERVER_ERROR; + return; + } if (ngx_open_cached_file(clcf->open_file_cache, &path, &of, r->pool) != NGX_OK)