Kentaro Hayashi
null+****@clear*****
Thu May 26 16:28:26 JST 2016
Kentaro Hayashi 2016-05-26 16:28:26 +0900 (Thu, 26 May 2016) New Revision: 736e679069e0c527ae5d9094cd8a874686739250 https://github.com/groonga/groonga/commit/736e679069e0c527ae5d9094cd8a874686739250 Message: nginx: use latest nginx % ./update_nginx.sh 1.11.0 Modified files: nginx_version Renamed files: vendor/nginx-1.11.0/auto/cc/acc (from vendor/nginx-1.9.15/auto/cc/acc) vendor/nginx-1.11.0/auto/cc/bcc (from vendor/nginx-1.9.15/auto/cc/bcc) vendor/nginx-1.11.0/auto/cc/ccc (from vendor/nginx-1.9.15/auto/cc/ccc) vendor/nginx-1.11.0/auto/cc/clang (from vendor/nginx-1.9.15/auto/cc/clang) vendor/nginx-1.11.0/auto/cc/conf (from vendor/nginx-1.9.15/auto/cc/conf) vendor/nginx-1.11.0/auto/cc/gcc (from vendor/nginx-1.9.15/auto/cc/gcc) vendor/nginx-1.11.0/auto/cc/icc (from vendor/nginx-1.9.15/auto/cc/icc) vendor/nginx-1.11.0/auto/cc/msvc (from vendor/nginx-1.9.15/auto/cc/msvc) vendor/nginx-1.11.0/auto/cc/name (from vendor/nginx-1.9.15/auto/cc/name) vendor/nginx-1.11.0/auto/cc/owc (from vendor/nginx-1.9.15/auto/cc/owc) vendor/nginx-1.11.0/auto/cc/sunc (from vendor/nginx-1.9.15/auto/cc/sunc) vendor/nginx-1.11.0/auto/configure (from vendor/nginx-1.9.15/auto/configure) vendor/nginx-1.11.0/auto/define (from vendor/nginx-1.9.15/auto/define) vendor/nginx-1.11.0/auto/endianness (from vendor/nginx-1.9.15/auto/endianness) vendor/nginx-1.11.0/auto/feature (from vendor/nginx-1.9.15/auto/feature) vendor/nginx-1.11.0/auto/have (from vendor/nginx-1.9.15/auto/have) vendor/nginx-1.11.0/auto/have_headers (from vendor/nginx-1.9.15/auto/have_headers) vendor/nginx-1.11.0/auto/headers (from vendor/nginx-1.9.15/auto/headers) vendor/nginx-1.11.0/auto/include (from vendor/nginx-1.9.15/auto/include) vendor/nginx-1.11.0/auto/init (from vendor/nginx-1.9.15/auto/init) vendor/nginx-1.11.0/auto/install (from vendor/nginx-1.9.15/auto/install) vendor/nginx-1.11.0/auto/lib/conf (from vendor/nginx-1.9.15/auto/lib/conf) vendor/nginx-1.11.0/auto/lib/geoip/conf (from vendor/nginx-1.9.15/auto/lib/geoip/conf) vendor/nginx-1.11.0/auto/lib/google-perftools/conf (from vendor/nginx-1.9.15/auto/lib/google-perftools/conf) vendor/nginx-1.11.0/auto/lib/libatomic/conf (from vendor/nginx-1.9.15/auto/lib/libatomic/conf) vendor/nginx-1.11.0/auto/lib/libatomic/make (from vendor/nginx-1.9.15/auto/lib/libatomic/make) vendor/nginx-1.11.0/auto/lib/libgd/conf (from vendor/nginx-1.9.15/auto/lib/libgd/conf) vendor/nginx-1.11.0/auto/lib/libxslt/conf (from vendor/nginx-1.9.15/auto/lib/libxslt/conf) vendor/nginx-1.11.0/auto/lib/make (from vendor/nginx-1.9.15/auto/lib/make) vendor/nginx-1.11.0/auto/lib/md5/conf (from vendor/nginx-1.9.15/auto/lib/md5/conf) vendor/nginx-1.11.0/auto/lib/md5/make (from vendor/nginx-1.9.15/auto/lib/md5/make) vendor/nginx-1.11.0/auto/lib/md5/makefile.bcc (from vendor/nginx-1.9.15/auto/lib/md5/makefile.bcc) vendor/nginx-1.11.0/auto/lib/md5/makefile.msvc (from vendor/nginx-1.9.15/auto/lib/md5/makefile.msvc) vendor/nginx-1.11.0/auto/lib/md5/makefile.owc (from vendor/nginx-1.9.15/auto/lib/md5/makefile.owc) vendor/nginx-1.11.0/auto/lib/openssl/conf (from vendor/nginx-1.9.15/auto/lib/openssl/conf) vendor/nginx-1.11.0/auto/lib/openssl/make (from vendor/nginx-1.9.15/auto/lib/openssl/make) vendor/nginx-1.11.0/auto/lib/openssl/makefile.bcc (from vendor/nginx-1.9.15/auto/lib/openssl/makefile.bcc) vendor/nginx-1.11.0/auto/lib/openssl/makefile.msvc (from vendor/nginx-1.9.15/auto/lib/openssl/makefile.msvc) vendor/nginx-1.11.0/auto/lib/pcre/conf (from vendor/nginx-1.9.15/auto/lib/pcre/conf) vendor/nginx-1.11.0/auto/lib/pcre/make (from vendor/nginx-1.9.15/auto/lib/pcre/make) vendor/nginx-1.11.0/auto/lib/pcre/makefile.bcc (from vendor/nginx-1.9.15/auto/lib/pcre/makefile.bcc) vendor/nginx-1.11.0/auto/lib/pcre/makefile.msvc (from vendor/nginx-1.9.15/auto/lib/pcre/makefile.msvc) vendor/nginx-1.11.0/auto/lib/pcre/makefile.owc (from vendor/nginx-1.9.15/auto/lib/pcre/makefile.owc) vendor/nginx-1.11.0/auto/lib/perl/conf (from vendor/nginx-1.9.15/auto/lib/perl/conf) vendor/nginx-1.11.0/auto/lib/perl/make (from vendor/nginx-1.9.15/auto/lib/perl/make) vendor/nginx-1.11.0/auto/lib/sha1/conf (from vendor/nginx-1.9.15/auto/lib/sha1/conf) vendor/nginx-1.11.0/auto/lib/sha1/make (from vendor/nginx-1.9.15/auto/lib/sha1/make) vendor/nginx-1.11.0/auto/lib/sha1/makefile.bcc (from vendor/nginx-1.9.15/auto/lib/sha1/makefile.bcc) vendor/nginx-1.11.0/auto/lib/sha1/makefile.msvc (from vendor/nginx-1.9.15/auto/lib/sha1/makefile.msvc) vendor/nginx-1.11.0/auto/lib/sha1/makefile.owc (from vendor/nginx-1.9.15/auto/lib/sha1/makefile.owc) vendor/nginx-1.11.0/auto/lib/test (from vendor/nginx-1.9.15/auto/lib/test) vendor/nginx-1.11.0/auto/lib/zlib/conf (from vendor/nginx-1.9.15/auto/lib/zlib/conf) vendor/nginx-1.11.0/auto/lib/zlib/make (from vendor/nginx-1.9.15/auto/lib/zlib/make) vendor/nginx-1.11.0/auto/lib/zlib/makefile.bcc (from vendor/nginx-1.9.15/auto/lib/zlib/makefile.bcc) vendor/nginx-1.11.0/auto/lib/zlib/makefile.msvc (from vendor/nginx-1.9.15/auto/lib/zlib/makefile.msvc) vendor/nginx-1.11.0/auto/lib/zlib/makefile.owc (from vendor/nginx-1.9.15/auto/lib/zlib/makefile.owc) vendor/nginx-1.11.0/auto/make (from vendor/nginx-1.9.15/auto/make) vendor/nginx-1.11.0/auto/module (from vendor/nginx-1.9.15/auto/module) vendor/nginx-1.11.0/auto/modules (from vendor/nginx-1.9.15/auto/modules) vendor/nginx-1.11.0/auto/nohave (from vendor/nginx-1.9.15/auto/nohave) vendor/nginx-1.11.0/auto/options (from vendor/nginx-1.9.15/auto/options) vendor/nginx-1.11.0/auto/os/conf (from vendor/nginx-1.9.15/auto/os/conf) vendor/nginx-1.11.0/auto/os/darwin (from vendor/nginx-1.9.15/auto/os/darwin) vendor/nginx-1.11.0/auto/os/freebsd (from vendor/nginx-1.9.15/auto/os/freebsd) vendor/nginx-1.11.0/auto/os/linux (from vendor/nginx-1.9.15/auto/os/linux) vendor/nginx-1.11.0/auto/os/solaris (from vendor/nginx-1.9.15/auto/os/solaris) vendor/nginx-1.11.0/auto/os/win32 (from vendor/nginx-1.9.15/auto/os/win32) vendor/nginx-1.11.0/auto/sources (from vendor/nginx-1.9.15/auto/sources) vendor/nginx-1.11.0/auto/stubs (from vendor/nginx-1.9.15/auto/stubs) vendor/nginx-1.11.0/auto/summary (from vendor/nginx-1.9.15/auto/summary) vendor/nginx-1.11.0/auto/threads (from vendor/nginx-1.9.15/auto/threads) vendor/nginx-1.11.0/auto/types/sizeof (from vendor/nginx-1.9.15/auto/types/sizeof) vendor/nginx-1.11.0/auto/types/typedef (from vendor/nginx-1.9.15/auto/types/typedef) vendor/nginx-1.11.0/auto/types/uintptr_t (from vendor/nginx-1.9.15/auto/types/uintptr_t) vendor/nginx-1.11.0/auto/types/value (from vendor/nginx-1.9.15/auto/types/value) vendor/nginx-1.11.0/auto/unix (from vendor/nginx-1.9.15/auto/unix) vendor/nginx-1.11.0/conf/fastcgi.conf (from vendor/nginx-1.9.15/conf/fastcgi.conf) vendor/nginx-1.11.0/conf/fastcgi_params (from vendor/nginx-1.9.15/conf/fastcgi_params) vendor/nginx-1.11.0/conf/koi-utf (from vendor/nginx-1.9.15/conf/koi-utf) vendor/nginx-1.11.0/conf/koi-win (from vendor/nginx-1.9.15/conf/koi-win) vendor/nginx-1.11.0/conf/mime.types (from vendor/nginx-1.9.15/conf/mime.types) vendor/nginx-1.11.0/conf/nginx.conf (from vendor/nginx-1.9.15/conf/nginx.conf) vendor/nginx-1.11.0/conf/scgi_params (from vendor/nginx-1.9.15/conf/scgi_params) vendor/nginx-1.11.0/conf/uwsgi_params (from vendor/nginx-1.9.15/conf/uwsgi_params) vendor/nginx-1.11.0/conf/win-utf (from vendor/nginx-1.9.15/conf/win-utf) vendor/nginx-1.11.0/contrib/README (from vendor/nginx-1.9.15/contrib/README) vendor/nginx-1.11.0/contrib/geo2nginx.pl (from vendor/nginx-1.9.15/contrib/geo2nginx.pl) vendor/nginx-1.11.0/contrib/unicode2nginx/koi-utf (from vendor/nginx-1.9.15/contrib/unicode2nginx/koi-utf) vendor/nginx-1.11.0/contrib/unicode2nginx/unicode-to-nginx.pl (from vendor/nginx-1.9.15/contrib/unicode2nginx/unicode-to-nginx.pl) vendor/nginx-1.11.0/contrib/unicode2nginx/win-utf (from vendor/nginx-1.9.15/contrib/unicode2nginx/win-utf) vendor/nginx-1.11.0/contrib/vim/ftdetect/nginx.vim (from vendor/nginx-1.9.15/contrib/vim/ftdetect/nginx.vim) vendor/nginx-1.11.0/contrib/vim/indent/nginx.vim (from vendor/nginx-1.9.15/contrib/vim/indent/nginx.vim) vendor/nginx-1.11.0/contrib/vim/syntax/nginx.vim (from vendor/nginx-1.9.15/contrib/vim/syntax/nginx.vim) vendor/nginx-1.11.0/docs/GNUmakefile (from vendor/nginx-1.9.15/docs/GNUmakefile) vendor/nginx-1.11.0/docs/dtd/change_log_conf.dtd (from vendor/nginx-1.9.15/docs/dtd/change_log_conf.dtd) vendor/nginx-1.11.0/docs/dtd/changes.dtd (from vendor/nginx-1.9.15/docs/dtd/changes.dtd) vendor/nginx-1.11.0/docs/html/50x.html (from vendor/nginx-1.9.15/docs/html/50x.html) vendor/nginx-1.11.0/docs/html/index.html (from vendor/nginx-1.9.15/docs/html/index.html) vendor/nginx-1.11.0/docs/man/nginx.8 (from vendor/nginx-1.9.15/docs/man/nginx.8) vendor/nginx-1.11.0/docs/text/LICENSE (from vendor/nginx-1.9.15/docs/text/LICENSE) vendor/nginx-1.11.0/docs/text/README (from vendor/nginx-1.9.15/docs/text/README) vendor/nginx-1.11.0/docs/xml/change_log_conf.xml (from vendor/nginx-1.9.15/docs/xml/change_log_conf.xml) vendor/nginx-1.11.0/docs/xml/nginx/changes.xml (from vendor/nginx-1.9.15/docs/xml/nginx/changes.xml) vendor/nginx-1.11.0/docs/xsls/changes.xsls (from vendor/nginx-1.9.15/docs/xsls/changes.xsls) vendor/nginx-1.11.0/docs/xslt/changes.xslt (from vendor/nginx-1.9.15/docs/xslt/changes.xslt) vendor/nginx-1.11.0/misc/GNUmakefile (from vendor/nginx-1.9.15/misc/GNUmakefile) vendor/nginx-1.11.0/misc/README (from vendor/nginx-1.9.15/misc/README) vendor/nginx-1.11.0/src/core/nginx.c (from vendor/nginx-1.9.15/src/core/nginx.c) vendor/nginx-1.11.0/src/core/nginx.h (from vendor/nginx-1.9.15/src/core/nginx.h) vendor/nginx-1.11.0/src/core/ngx_array.c (from vendor/nginx-1.9.15/src/core/ngx_array.c) vendor/nginx-1.11.0/src/core/ngx_array.h (from vendor/nginx-1.9.15/src/core/ngx_array.h) vendor/nginx-1.11.0/src/core/ngx_buf.c (from vendor/nginx-1.9.15/src/core/ngx_buf.c) vendor/nginx-1.11.0/src/core/ngx_buf.h (from vendor/nginx-1.9.15/src/core/ngx_buf.h) vendor/nginx-1.11.0/src/core/ngx_conf_file.c (from vendor/nginx-1.9.15/src/core/ngx_conf_file.c) vendor/nginx-1.11.0/src/core/ngx_conf_file.h (from vendor/nginx-1.9.15/src/core/ngx_conf_file.h) vendor/nginx-1.11.0/src/core/ngx_config.h (from vendor/nginx-1.9.15/src/core/ngx_config.h) vendor/nginx-1.11.0/src/core/ngx_connection.c (from vendor/nginx-1.9.15/src/core/ngx_connection.c) vendor/nginx-1.11.0/src/core/ngx_connection.h (from vendor/nginx-1.9.15/src/core/ngx_connection.h) vendor/nginx-1.11.0/src/core/ngx_core.h (from vendor/nginx-1.9.15/src/core/ngx_core.h) vendor/nginx-1.11.0/src/core/ngx_cpuinfo.c (from vendor/nginx-1.9.15/src/core/ngx_cpuinfo.c) vendor/nginx-1.11.0/src/core/ngx_crc.h (from vendor/nginx-1.9.15/src/core/ngx_crc.h) vendor/nginx-1.11.0/src/core/ngx_crc32.c (from vendor/nginx-1.9.15/src/core/ngx_crc32.c) vendor/nginx-1.11.0/src/core/ngx_crc32.h (from vendor/nginx-1.9.15/src/core/ngx_crc32.h) vendor/nginx-1.11.0/src/core/ngx_crypt.c (from vendor/nginx-1.9.15/src/core/ngx_crypt.c) vendor/nginx-1.11.0/src/core/ngx_crypt.h (from vendor/nginx-1.9.15/src/core/ngx_crypt.h) vendor/nginx-1.11.0/src/core/ngx_cycle.c (from vendor/nginx-1.9.15/src/core/ngx_cycle.c) vendor/nginx-1.11.0/src/core/ngx_cycle.h (from vendor/nginx-1.9.15/src/core/ngx_cycle.h) vendor/nginx-1.11.0/src/core/ngx_file.c (from vendor/nginx-1.9.15/src/core/ngx_file.c) vendor/nginx-1.11.0/src/core/ngx_file.h (from vendor/nginx-1.9.15/src/core/ngx_file.h) vendor/nginx-1.11.0/src/core/ngx_hash.c (from vendor/nginx-1.9.15/src/core/ngx_hash.c) vendor/nginx-1.11.0/src/core/ngx_hash.h (from vendor/nginx-1.9.15/src/core/ngx_hash.h) vendor/nginx-1.11.0/src/core/ngx_inet.c (from vendor/nginx-1.9.15/src/core/ngx_inet.c) vendor/nginx-1.11.0/src/core/ngx_inet.h (from vendor/nginx-1.9.15/src/core/ngx_inet.h) vendor/nginx-1.11.0/src/core/ngx_list.c (from vendor/nginx-1.9.15/src/core/ngx_list.c) vendor/nginx-1.11.0/src/core/ngx_list.h (from vendor/nginx-1.9.15/src/core/ngx_list.h) vendor/nginx-1.11.0/src/core/ngx_log.c (from vendor/nginx-1.9.15/src/core/ngx_log.c) vendor/nginx-1.11.0/src/core/ngx_log.h (from vendor/nginx-1.9.15/src/core/ngx_log.h) vendor/nginx-1.11.0/src/core/ngx_md5.c (from vendor/nginx-1.9.15/src/core/ngx_md5.c) vendor/nginx-1.11.0/src/core/ngx_md5.h (from vendor/nginx-1.9.15/src/core/ngx_md5.h) vendor/nginx-1.11.0/src/core/ngx_module.c (from vendor/nginx-1.9.15/src/core/ngx_module.c) vendor/nginx-1.11.0/src/core/ngx_module.h (from vendor/nginx-1.9.15/src/core/ngx_module.h) vendor/nginx-1.11.0/src/core/ngx_murmurhash.c (from vendor/nginx-1.9.15/src/core/ngx_murmurhash.c) vendor/nginx-1.11.0/src/core/ngx_murmurhash.h (from vendor/nginx-1.9.15/src/core/ngx_murmurhash.h) vendor/nginx-1.11.0/src/core/ngx_open_file_cache.c (from vendor/nginx-1.9.15/src/core/ngx_open_file_cache.c) vendor/nginx-1.11.0/src/core/ngx_open_file_cache.h (from vendor/nginx-1.9.15/src/core/ngx_open_file_cache.h) vendor/nginx-1.11.0/src/core/ngx_output_chain.c (from vendor/nginx-1.9.15/src/core/ngx_output_chain.c) vendor/nginx-1.11.0/src/core/ngx_palloc.c (from vendor/nginx-1.9.15/src/core/ngx_palloc.c) vendor/nginx-1.11.0/src/core/ngx_palloc.h (from vendor/nginx-1.9.15/src/core/ngx_palloc.h) vendor/nginx-1.11.0/src/core/ngx_parse.c (from vendor/nginx-1.9.15/src/core/ngx_parse.c) vendor/nginx-1.11.0/src/core/ngx_parse.h (from vendor/nginx-1.9.15/src/core/ngx_parse.h) vendor/nginx-1.11.0/src/core/ngx_parse_time.c (from vendor/nginx-1.9.15/src/core/ngx_parse_time.c) vendor/nginx-1.11.0/src/core/ngx_parse_time.h (from vendor/nginx-1.9.15/src/core/ngx_parse_time.h) vendor/nginx-1.11.0/src/core/ngx_proxy_protocol.c (from vendor/nginx-1.9.15/src/core/ngx_proxy_protocol.c) vendor/nginx-1.11.0/src/core/ngx_proxy_protocol.h (from vendor/nginx-1.9.15/src/core/ngx_proxy_protocol.h) vendor/nginx-1.11.0/src/core/ngx_queue.c (from vendor/nginx-1.9.15/src/core/ngx_queue.c) vendor/nginx-1.11.0/src/core/ngx_queue.h (from vendor/nginx-1.9.15/src/core/ngx_queue.h) vendor/nginx-1.11.0/src/core/ngx_radix_tree.c (from vendor/nginx-1.9.15/src/core/ngx_radix_tree.c) vendor/nginx-1.11.0/src/core/ngx_radix_tree.h (from vendor/nginx-1.9.15/src/core/ngx_radix_tree.h) vendor/nginx-1.11.0/src/core/ngx_rbtree.c (from vendor/nginx-1.9.15/src/core/ngx_rbtree.c) vendor/nginx-1.11.0/src/core/ngx_rbtree.h (from vendor/nginx-1.9.15/src/core/ngx_rbtree.h) vendor/nginx-1.11.0/src/core/ngx_regex.c (from vendor/nginx-1.9.15/src/core/ngx_regex.c) vendor/nginx-1.11.0/src/core/ngx_regex.h (from vendor/nginx-1.9.15/src/core/ngx_regex.h) vendor/nginx-1.11.0/src/core/ngx_resolver.c (from vendor/nginx-1.9.15/src/core/ngx_resolver.c) vendor/nginx-1.11.0/src/core/ngx_resolver.h (from vendor/nginx-1.9.15/src/core/ngx_resolver.h) vendor/nginx-1.11.0/src/core/ngx_rwlock.c (from vendor/nginx-1.9.15/src/core/ngx_rwlock.c) vendor/nginx-1.11.0/src/core/ngx_rwlock.h (from vendor/nginx-1.9.15/src/core/ngx_rwlock.h) vendor/nginx-1.11.0/src/core/ngx_sha1.h (from vendor/nginx-1.9.15/src/core/ngx_sha1.h) vendor/nginx-1.11.0/src/core/ngx_shmtx.c (from vendor/nginx-1.9.15/src/core/ngx_shmtx.c) vendor/nginx-1.11.0/src/core/ngx_shmtx.h (from vendor/nginx-1.9.15/src/core/ngx_shmtx.h) vendor/nginx-1.11.0/src/core/ngx_slab.c (from vendor/nginx-1.9.15/src/core/ngx_slab.c) vendor/nginx-1.11.0/src/core/ngx_slab.h (from vendor/nginx-1.9.15/src/core/ngx_slab.h) vendor/nginx-1.11.0/src/core/ngx_spinlock.c (from vendor/nginx-1.9.15/src/core/ngx_spinlock.c) vendor/nginx-1.11.0/src/core/ngx_string.c (from vendor/nginx-1.9.15/src/core/ngx_string.c) vendor/nginx-1.11.0/src/core/ngx_string.h (from vendor/nginx-1.9.15/src/core/ngx_string.h) vendor/nginx-1.11.0/src/core/ngx_syslog.c (from vendor/nginx-1.9.15/src/core/ngx_syslog.c) vendor/nginx-1.11.0/src/core/ngx_syslog.h (from vendor/nginx-1.9.15/src/core/ngx_syslog.h) vendor/nginx-1.11.0/src/core/ngx_thread_pool.c (from vendor/nginx-1.9.15/src/core/ngx_thread_pool.c) vendor/nginx-1.11.0/src/core/ngx_thread_pool.h (from vendor/nginx-1.9.15/src/core/ngx_thread_pool.h) vendor/nginx-1.11.0/src/core/ngx_times.c (from vendor/nginx-1.9.15/src/core/ngx_times.c) vendor/nginx-1.11.0/src/core/ngx_times.h (from vendor/nginx-1.9.15/src/core/ngx_times.h) vendor/nginx-1.11.0/src/event/modules/ngx_devpoll_module.c (from vendor/nginx-1.9.15/src/event/modules/ngx_devpoll_module.c) vendor/nginx-1.11.0/src/event/modules/ngx_epoll_module.c (from vendor/nginx-1.9.15/src/event/modules/ngx_epoll_module.c) vendor/nginx-1.11.0/src/event/modules/ngx_eventport_module.c (from vendor/nginx-1.9.15/src/event/modules/ngx_eventport_module.c) vendor/nginx-1.11.0/src/event/modules/ngx_iocp_module.c (from vendor/nginx-1.9.15/src/event/modules/ngx_iocp_module.c) vendor/nginx-1.11.0/src/event/modules/ngx_iocp_module.h (from vendor/nginx-1.9.15/src/event/modules/ngx_iocp_module.h) vendor/nginx-1.11.0/src/event/modules/ngx_kqueue_module.c (from vendor/nginx-1.9.15/src/event/modules/ngx_kqueue_module.c) vendor/nginx-1.11.0/src/event/modules/ngx_poll_module.c (from vendor/nginx-1.9.15/src/event/modules/ngx_poll_module.c) vendor/nginx-1.11.0/src/event/modules/ngx_select_module.c (from vendor/nginx-1.9.15/src/event/modules/ngx_select_module.c) vendor/nginx-1.11.0/src/event/modules/ngx_win32_select_module.c (from vendor/nginx-1.9.15/src/event/modules/ngx_win32_select_module.c) vendor/nginx-1.11.0/src/event/ngx_event.c (from vendor/nginx-1.9.15/src/event/ngx_event.c) vendor/nginx-1.11.0/src/event/ngx_event.h (from vendor/nginx-1.9.15/src/event/ngx_event.h) vendor/nginx-1.11.0/src/event/ngx_event_accept.c (from vendor/nginx-1.9.15/src/event/ngx_event_accept.c) vendor/nginx-1.11.0/src/event/ngx_event_acceptex.c (from vendor/nginx-1.9.15/src/event/ngx_event_acceptex.c) vendor/nginx-1.11.0/src/event/ngx_event_connect.c (from vendor/nginx-1.9.15/src/event/ngx_event_connect.c) vendor/nginx-1.11.0/src/event/ngx_event_connect.h (from vendor/nginx-1.9.15/src/event/ngx_event_connect.h) vendor/nginx-1.11.0/src/event/ngx_event_connectex.c (from vendor/nginx-1.9.15/src/event/ngx_event_connectex.c) vendor/nginx-1.11.0/src/event/ngx_event_openssl.c (from vendor/nginx-1.9.15/src/event/ngx_event_openssl.c) vendor/nginx-1.11.0/src/event/ngx_event_openssl.h (from vendor/nginx-1.9.15/src/event/ngx_event_openssl.h) vendor/nginx-1.11.0/src/event/ngx_event_openssl_stapling.c (from vendor/nginx-1.9.15/src/event/ngx_event_openssl_stapling.c) vendor/nginx-1.11.0/src/event/ngx_event_pipe.c (from vendor/nginx-1.9.15/src/event/ngx_event_pipe.c) vendor/nginx-1.11.0/src/event/ngx_event_pipe.h (from vendor/nginx-1.9.15/src/event/ngx_event_pipe.h) vendor/nginx-1.11.0/src/event/ngx_event_posted.c (from vendor/nginx-1.9.15/src/event/ngx_event_posted.c) vendor/nginx-1.11.0/src/event/ngx_event_posted.h (from vendor/nginx-1.9.15/src/event/ngx_event_posted.h) vendor/nginx-1.11.0/src/event/ngx_event_timer.c (from vendor/nginx-1.9.15/src/event/ngx_event_timer.c) vendor/nginx-1.11.0/src/event/ngx_event_timer.h (from vendor/nginx-1.9.15/src/event/ngx_event_timer.h) vendor/nginx-1.11.0/src/http/modules/ngx_http_access_module.c (from vendor/nginx-1.9.15/src/http/modules/ngx_http_access_module.c) vendor/nginx-1.11.0/src/http/modules/ngx_http_addition_filter_module.c (from vendor/nginx-1.9.15/src/http/modules/ngx_http_addition_filter_module.c) vendor/nginx-1.11.0/src/http/modules/ngx_http_auth_basic_module.c (from vendor/nginx-1.9.15/src/http/modules/ngx_http_auth_basic_module.c) vendor/nginx-1.11.0/src/http/modules/ngx_http_auth_request_module.c (from vendor/nginx-1.9.15/src/http/modules/ngx_http_auth_request_module.c) vendor/nginx-1.11.0/src/http/modules/ngx_http_autoindex_module.c (from vendor/nginx-1.9.15/src/http/modules/ngx_http_autoindex_module.c) vendor/nginx-1.11.0/src/http/modules/ngx_http_browser_module.c (from vendor/nginx-1.9.15/src/http/modules/ngx_http_browser_module.c) vendor/nginx-1.11.0/src/http/modules/ngx_http_charset_filter_module.c (from vendor/nginx-1.9.15/src/http/modules/ngx_http_charset_filter_module.c) vendor/nginx-1.11.0/src/http/modules/ngx_http_chunked_filter_module.c (from vendor/nginx-1.9.15/src/http/modules/ngx_http_chunked_filter_module.c) vendor/nginx-1.11.0/src/http/modules/ngx_http_dav_module.c (from vendor/nginx-1.9.15/src/http/modules/ngx_http_dav_module.c) vendor/nginx-1.11.0/src/http/modules/ngx_http_degradation_module.c (from vendor/nginx-1.9.15/src/http/modules/ngx_http_degradation_module.c) vendor/nginx-1.11.0/src/http/modules/ngx_http_empty_gif_module.c (from vendor/nginx-1.9.15/src/http/modules/ngx_http_empty_gif_module.c) vendor/nginx-1.11.0/src/http/modules/ngx_http_fastcgi_module.c (from vendor/nginx-1.9.15/src/http/modules/ngx_http_fastcgi_module.c) vendor/nginx-1.11.0/src/http/modules/ngx_http_flv_module.c (from vendor/nginx-1.9.15/src/http/modules/ngx_http_flv_module.c) vendor/nginx-1.11.0/src/http/modules/ngx_http_geo_module.c (from vendor/nginx-1.9.15/src/http/modules/ngx_http_geo_module.c) vendor/nginx-1.11.0/src/http/modules/ngx_http_geoip_module.c (from vendor/nginx-1.9.15/src/http/modules/ngx_http_geoip_module.c) vendor/nginx-1.11.0/src/http/modules/ngx_http_gunzip_filter_module.c (from vendor/nginx-1.9.15/src/http/modules/ngx_http_gunzip_filter_module.c) vendor/nginx-1.11.0/src/http/modules/ngx_http_gzip_filter_module.c (from vendor/nginx-1.9.15/src/http/modules/ngx_http_gzip_filter_module.c) vendor/nginx-1.11.0/src/http/modules/ngx_http_gzip_static_module.c (from vendor/nginx-1.9.15/src/http/modules/ngx_http_gzip_static_module.c) vendor/nginx-1.11.0/src/http/modules/ngx_http_headers_filter_module.c (from vendor/nginx-1.9.15/src/http/modules/ngx_http_headers_filter_module.c) vendor/nginx-1.11.0/src/http/modules/ngx_http_image_filter_module.c (from vendor/nginx-1.9.15/src/http/modules/ngx_http_image_filter_module.c) vendor/nginx-1.11.0/src/http/modules/ngx_http_index_module.c (from vendor/nginx-1.9.15/src/http/modules/ngx_http_index_module.c) vendor/nginx-1.11.0/src/http/modules/ngx_http_limit_conn_module.c (from vendor/nginx-1.9.15/src/http/modules/ngx_http_limit_conn_module.c) vendor/nginx-1.11.0/src/http/modules/ngx_http_limit_req_module.c (from vendor/nginx-1.9.15/src/http/modules/ngx_http_limit_req_module.c) vendor/nginx-1.11.0/src/http/modules/ngx_http_log_module.c (from vendor/nginx-1.9.15/src/http/modules/ngx_http_log_module.c) vendor/nginx-1.11.0/src/http/modules/ngx_http_map_module.c (from vendor/nginx-1.9.15/src/http/modules/ngx_http_map_module.c) vendor/nginx-1.11.0/src/http/modules/ngx_http_memcached_module.c (from vendor/nginx-1.9.15/src/http/modules/ngx_http_memcached_module.c) vendor/nginx-1.11.0/src/http/modules/ngx_http_mp4_module.c (from vendor/nginx-1.9.15/src/http/modules/ngx_http_mp4_module.c) vendor/nginx-1.11.0/src/http/modules/ngx_http_not_modified_filter_module.c (from vendor/nginx-1.9.15/src/http/modules/ngx_http_not_modified_filter_module.c) vendor/nginx-1.11.0/src/http/modules/ngx_http_proxy_module.c (from vendor/nginx-1.9.15/src/http/modules/ngx_http_proxy_module.c) vendor/nginx-1.11.0/src/http/modules/ngx_http_random_index_module.c (from vendor/nginx-1.9.15/src/http/modules/ngx_http_random_index_module.c) vendor/nginx-1.11.0/src/http/modules/ngx_http_range_filter_module.c (from vendor/nginx-1.9.15/src/http/modules/ngx_http_range_filter_module.c) vendor/nginx-1.11.0/src/http/modules/ngx_http_realip_module.c (from vendor/nginx-1.9.15/src/http/modules/ngx_http_realip_module.c) vendor/nginx-1.11.0/src/http/modules/ngx_http_referer_module.c (from vendor/nginx-1.9.15/src/http/modules/ngx_http_referer_module.c) vendor/nginx-1.11.0/src/http/modules/ngx_http_rewrite_module.c (from vendor/nginx-1.9.15/src/http/modules/ngx_http_rewrite_module.c) vendor/nginx-1.11.0/src/http/modules/ngx_http_scgi_module.c (from vendor/nginx-1.9.15/src/http/modules/ngx_http_scgi_module.c) vendor/nginx-1.11.0/src/http/modules/ngx_http_secure_link_module.c (from vendor/nginx-1.9.15/src/http/modules/ngx_http_secure_link_module.c) vendor/nginx-1.11.0/src/http/modules/ngx_http_slice_filter_module.c (from vendor/nginx-1.9.15/src/http/modules/ngx_http_slice_filter_module.c) vendor/nginx-1.11.0/src/http/modules/ngx_http_split_clients_module.c (from vendor/nginx-1.9.15/src/http/modules/ngx_http_split_clients_module.c) vendor/nginx-1.11.0/src/http/modules/ngx_http_ssi_filter_module.c (from vendor/nginx-1.9.15/src/http/modules/ngx_http_ssi_filter_module.c) vendor/nginx-1.11.0/src/http/modules/ngx_http_ssi_filter_module.h (from vendor/nginx-1.9.15/src/http/modules/ngx_http_ssi_filter_module.h) vendor/nginx-1.11.0/src/http/modules/ngx_http_ssl_module.c (from vendor/nginx-1.9.15/src/http/modules/ngx_http_ssl_module.c) vendor/nginx-1.11.0/src/http/modules/ngx_http_ssl_module.h (from vendor/nginx-1.9.15/src/http/modules/ngx_http_ssl_module.h) vendor/nginx-1.11.0/src/http/modules/ngx_http_static_module.c (from vendor/nginx-1.9.15/src/http/modules/ngx_http_static_module.c) vendor/nginx-1.11.0/src/http/modules/ngx_http_stub_status_module.c (from vendor/nginx-1.9.15/src/http/modules/ngx_http_stub_status_module.c) vendor/nginx-1.11.0/src/http/modules/ngx_http_sub_filter_module.c (from vendor/nginx-1.9.15/src/http/modules/ngx_http_sub_filter_module.c) vendor/nginx-1.11.0/src/http/modules/ngx_http_upstream_hash_module.c (from vendor/nginx-1.9.15/src/http/modules/ngx_http_upstream_hash_module.c) vendor/nginx-1.11.0/src/http/modules/ngx_http_upstream_ip_hash_module.c (from vendor/nginx-1.9.15/src/http/modules/ngx_http_upstream_ip_hash_module.c) vendor/nginx-1.11.0/src/http/modules/ngx_http_upstream_keepalive_module.c (from vendor/nginx-1.9.15/src/http/modules/ngx_http_upstream_keepalive_module.c) vendor/nginx-1.11.0/src/http/modules/ngx_http_upstream_least_conn_module.c (from vendor/nginx-1.9.15/src/http/modules/ngx_http_upstream_least_conn_module.c) vendor/nginx-1.11.0/src/http/modules/ngx_http_upstream_zone_module.c (from vendor/nginx-1.9.15/src/http/modules/ngx_http_upstream_zone_module.c) vendor/nginx-1.11.0/src/http/modules/ngx_http_userid_filter_module.c (from vendor/nginx-1.9.15/src/http/modules/ngx_http_userid_filter_module.c) vendor/nginx-1.11.0/src/http/modules/ngx_http_uwsgi_module.c (from vendor/nginx-1.9.15/src/http/modules/ngx_http_uwsgi_module.c) vendor/nginx-1.11.0/src/http/modules/ngx_http_xslt_filter_module.c (from vendor/nginx-1.9.15/src/http/modules/ngx_http_xslt_filter_module.c) vendor/nginx-1.11.0/src/http/modules/perl/Makefile.PL (from vendor/nginx-1.9.15/src/http/modules/perl/Makefile.PL) vendor/nginx-1.11.0/src/http/modules/perl/nginx.pm (from vendor/nginx-1.9.15/src/http/modules/perl/nginx.pm) vendor/nginx-1.11.0/src/http/modules/perl/nginx.xs (from vendor/nginx-1.9.15/src/http/modules/perl/nginx.xs) vendor/nginx-1.11.0/src/http/modules/perl/ngx_http_perl_module.c (from vendor/nginx-1.9.15/src/http/modules/perl/ngx_http_perl_module.c) vendor/nginx-1.11.0/src/http/modules/perl/ngx_http_perl_module.h (from vendor/nginx-1.9.15/src/http/modules/perl/ngx_http_perl_module.h) vendor/nginx-1.11.0/src/http/modules/perl/typemap (from vendor/nginx-1.9.15/src/http/modules/perl/typemap) vendor/nginx-1.11.0/src/http/ngx_http.c (from vendor/nginx-1.9.15/src/http/ngx_http.c) vendor/nginx-1.11.0/src/http/ngx_http.h (from vendor/nginx-1.9.15/src/http/ngx_http.h) vendor/nginx-1.11.0/src/http/ngx_http_cache.h (from vendor/nginx-1.9.15/src/http/ngx_http_cache.h) vendor/nginx-1.11.0/src/http/ngx_http_config.h (from vendor/nginx-1.9.15/src/http/ngx_http_config.h) vendor/nginx-1.11.0/src/http/ngx_http_copy_filter_module.c (from vendor/nginx-1.9.15/src/http/ngx_http_copy_filter_module.c) vendor/nginx-1.11.0/src/http/ngx_http_core_module.c (from vendor/nginx-1.9.15/src/http/ngx_http_core_module.c) vendor/nginx-1.11.0/src/http/ngx_http_core_module.h (from vendor/nginx-1.9.15/src/http/ngx_http_core_module.h) vendor/nginx-1.11.0/src/http/ngx_http_file_cache.c (from vendor/nginx-1.9.15/src/http/ngx_http_file_cache.c) vendor/nginx-1.11.0/src/http/ngx_http_header_filter_module.c (from vendor/nginx-1.9.15/src/http/ngx_http_header_filter_module.c) vendor/nginx-1.11.0/src/http/ngx_http_parse.c (from vendor/nginx-1.9.15/src/http/ngx_http_parse.c) vendor/nginx-1.11.0/src/http/ngx_http_postpone_filter_module.c (from vendor/nginx-1.9.15/src/http/ngx_http_postpone_filter_module.c) vendor/nginx-1.11.0/src/http/ngx_http_request.c (from vendor/nginx-1.9.15/src/http/ngx_http_request.c) vendor/nginx-1.11.0/src/http/ngx_http_request.h (from vendor/nginx-1.9.15/src/http/ngx_http_request.h) vendor/nginx-1.11.0/src/http/ngx_http_request_body.c (from vendor/nginx-1.9.15/src/http/ngx_http_request_body.c) vendor/nginx-1.11.0/src/http/ngx_http_script.c (from vendor/nginx-1.9.15/src/http/ngx_http_script.c) vendor/nginx-1.11.0/src/http/ngx_http_script.h (from vendor/nginx-1.9.15/src/http/ngx_http_script.h) vendor/nginx-1.11.0/src/http/ngx_http_special_response.c (from vendor/nginx-1.9.15/src/http/ngx_http_special_response.c) vendor/nginx-1.11.0/src/http/ngx_http_upstream.c (from vendor/nginx-1.9.15/src/http/ngx_http_upstream.c) vendor/nginx-1.11.0/src/http/ngx_http_upstream.h (from vendor/nginx-1.9.15/src/http/ngx_http_upstream.h) vendor/nginx-1.11.0/src/http/ngx_http_upstream_round_robin.c (from vendor/nginx-1.9.15/src/http/ngx_http_upstream_round_robin.c) vendor/nginx-1.11.0/src/http/ngx_http_upstream_round_robin.h (from vendor/nginx-1.9.15/src/http/ngx_http_upstream_round_robin.h) vendor/nginx-1.11.0/src/http/ngx_http_variables.c (from vendor/nginx-1.9.15/src/http/ngx_http_variables.c) vendor/nginx-1.11.0/src/http/ngx_http_variables.h (from vendor/nginx-1.9.15/src/http/ngx_http_variables.h) vendor/nginx-1.11.0/src/http/ngx_http_write_filter_module.c (from vendor/nginx-1.9.15/src/http/ngx_http_write_filter_module.c) vendor/nginx-1.11.0/src/http/v2/ngx_http_v2.c (from vendor/nginx-1.9.15/src/http/v2/ngx_http_v2.c) vendor/nginx-1.11.0/src/http/v2/ngx_http_v2.h (from vendor/nginx-1.9.15/src/http/v2/ngx_http_v2.h) vendor/nginx-1.11.0/src/http/v2/ngx_http_v2_filter_module.c (from vendor/nginx-1.9.15/src/http/v2/ngx_http_v2_filter_module.c) vendor/nginx-1.11.0/src/http/v2/ngx_http_v2_huff_decode.c (from vendor/nginx-1.9.15/src/http/v2/ngx_http_v2_huff_decode.c) vendor/nginx-1.11.0/src/http/v2/ngx_http_v2_huff_encode.c (from vendor/nginx-1.9.15/src/http/v2/ngx_http_v2_huff_encode.c) vendor/nginx-1.11.0/src/http/v2/ngx_http_v2_module.c (from vendor/nginx-1.9.15/src/http/v2/ngx_http_v2_module.c) vendor/nginx-1.11.0/src/http/v2/ngx_http_v2_module.h (from vendor/nginx-1.9.15/src/http/v2/ngx_http_v2_module.h) vendor/nginx-1.11.0/src/http/v2/ngx_http_v2_table.c (from vendor/nginx-1.9.15/src/http/v2/ngx_http_v2_table.c) vendor/nginx-1.11.0/src/mail/ngx_mail.c (from vendor/nginx-1.9.15/src/mail/ngx_mail.c) vendor/nginx-1.11.0/src/mail/ngx_mail.h (from vendor/nginx-1.9.15/src/mail/ngx_mail.h) vendor/nginx-1.11.0/src/mail/ngx_mail_auth_http_module.c (from vendor/nginx-1.9.15/src/mail/ngx_mail_auth_http_module.c) vendor/nginx-1.11.0/src/mail/ngx_mail_core_module.c (from vendor/nginx-1.9.15/src/mail/ngx_mail_core_module.c) vendor/nginx-1.11.0/src/mail/ngx_mail_handler.c (from vendor/nginx-1.9.15/src/mail/ngx_mail_handler.c) vendor/nginx-1.11.0/src/mail/ngx_mail_imap_handler.c (from vendor/nginx-1.9.15/src/mail/ngx_mail_imap_handler.c) vendor/nginx-1.11.0/src/mail/ngx_mail_imap_module.c (from vendor/nginx-1.9.15/src/mail/ngx_mail_imap_module.c) vendor/nginx-1.11.0/src/mail/ngx_mail_imap_module.h (from vendor/nginx-1.9.15/src/mail/ngx_mail_imap_module.h) vendor/nginx-1.11.0/src/mail/ngx_mail_parse.c (from vendor/nginx-1.9.15/src/mail/ngx_mail_parse.c) vendor/nginx-1.11.0/src/mail/ngx_mail_pop3_handler.c (from vendor/nginx-1.9.15/src/mail/ngx_mail_pop3_handler.c) vendor/nginx-1.11.0/src/mail/ngx_mail_pop3_module.c (from vendor/nginx-1.9.15/src/mail/ngx_mail_pop3_module.c) vendor/nginx-1.11.0/src/mail/ngx_mail_pop3_module.h (from vendor/nginx-1.9.15/src/mail/ngx_mail_pop3_module.h) vendor/nginx-1.11.0/src/mail/ngx_mail_proxy_module.c (from vendor/nginx-1.9.15/src/mail/ngx_mail_proxy_module.c) vendor/nginx-1.11.0/src/mail/ngx_mail_smtp_handler.c (from vendor/nginx-1.9.15/src/mail/ngx_mail_smtp_handler.c) vendor/nginx-1.11.0/src/mail/ngx_mail_smtp_module.c (from vendor/nginx-1.9.15/src/mail/ngx_mail_smtp_module.c) vendor/nginx-1.11.0/src/mail/ngx_mail_smtp_module.h (from vendor/nginx-1.9.15/src/mail/ngx_mail_smtp_module.h) vendor/nginx-1.11.0/src/mail/ngx_mail_ssl_module.c (from vendor/nginx-1.9.15/src/mail/ngx_mail_ssl_module.c) vendor/nginx-1.11.0/src/mail/ngx_mail_ssl_module.h (from vendor/nginx-1.9.15/src/mail/ngx_mail_ssl_module.h) vendor/nginx-1.11.0/src/misc/ngx_cpp_test_module.cpp (from vendor/nginx-1.9.15/src/misc/ngx_cpp_test_module.cpp) vendor/nginx-1.11.0/src/misc/ngx_google_perftools_module.c (from vendor/nginx-1.9.15/src/misc/ngx_google_perftools_module.c) vendor/nginx-1.11.0/src/os/unix/ngx_alloc.c (from vendor/nginx-1.9.15/src/os/unix/ngx_alloc.c) vendor/nginx-1.11.0/src/os/unix/ngx_alloc.h (from vendor/nginx-1.9.15/src/os/unix/ngx_alloc.h) vendor/nginx-1.11.0/src/os/unix/ngx_atomic.h (from vendor/nginx-1.9.15/src/os/unix/ngx_atomic.h) vendor/nginx-1.11.0/src/os/unix/ngx_channel.c (from vendor/nginx-1.9.15/src/os/unix/ngx_channel.c) vendor/nginx-1.11.0/src/os/unix/ngx_channel.h (from vendor/nginx-1.9.15/src/os/unix/ngx_channel.h) vendor/nginx-1.11.0/src/os/unix/ngx_daemon.c (from vendor/nginx-1.9.15/src/os/unix/ngx_daemon.c) vendor/nginx-1.11.0/src/os/unix/ngx_darwin.h (from vendor/nginx-1.9.15/src/os/unix/ngx_darwin.h) vendor/nginx-1.11.0/src/os/unix/ngx_darwin_config.h (from vendor/nginx-1.9.15/src/os/unix/ngx_darwin_config.h) vendor/nginx-1.11.0/src/os/unix/ngx_darwin_init.c (from vendor/nginx-1.9.15/src/os/unix/ngx_darwin_init.c) vendor/nginx-1.11.0/src/os/unix/ngx_darwin_sendfile_chain.c (from vendor/nginx-1.9.15/src/os/unix/ngx_darwin_sendfile_chain.c) vendor/nginx-1.11.0/src/os/unix/ngx_dlopen.c (from vendor/nginx-1.9.15/src/os/unix/ngx_dlopen.c) vendor/nginx-1.11.0/src/os/unix/ngx_dlopen.h (from vendor/nginx-1.9.15/src/os/unix/ngx_dlopen.h) vendor/nginx-1.11.0/src/os/unix/ngx_errno.c (from vendor/nginx-1.9.15/src/os/unix/ngx_errno.c) vendor/nginx-1.11.0/src/os/unix/ngx_errno.h (from vendor/nginx-1.9.15/src/os/unix/ngx_errno.h) vendor/nginx-1.11.0/src/os/unix/ngx_file_aio_read.c (from vendor/nginx-1.9.15/src/os/unix/ngx_file_aio_read.c) vendor/nginx-1.11.0/src/os/unix/ngx_files.c (from vendor/nginx-1.9.15/src/os/unix/ngx_files.c) vendor/nginx-1.11.0/src/os/unix/ngx_files.h (from vendor/nginx-1.9.15/src/os/unix/ngx_files.h) vendor/nginx-1.11.0/src/os/unix/ngx_freebsd.h (from vendor/nginx-1.9.15/src/os/unix/ngx_freebsd.h) vendor/nginx-1.11.0/src/os/unix/ngx_freebsd_config.h (from vendor/nginx-1.9.15/src/os/unix/ngx_freebsd_config.h) vendor/nginx-1.11.0/src/os/unix/ngx_freebsd_init.c (from vendor/nginx-1.9.15/src/os/unix/ngx_freebsd_init.c) vendor/nginx-1.11.0/src/os/unix/ngx_freebsd_sendfile_chain.c (from vendor/nginx-1.9.15/src/os/unix/ngx_freebsd_sendfile_chain.c) vendor/nginx-1.11.0/src/os/unix/ngx_gcc_atomic_amd64.h (from vendor/nginx-1.9.15/src/os/unix/ngx_gcc_atomic_amd64.h) vendor/nginx-1.11.0/src/os/unix/ngx_gcc_atomic_ppc.h (from vendor/nginx-1.9.15/src/os/unix/ngx_gcc_atomic_ppc.h) vendor/nginx-1.11.0/src/os/unix/ngx_gcc_atomic_sparc64.h (from vendor/nginx-1.9.15/src/os/unix/ngx_gcc_atomic_sparc64.h) vendor/nginx-1.11.0/src/os/unix/ngx_gcc_atomic_x86.h (from vendor/nginx-1.9.15/src/os/unix/ngx_gcc_atomic_x86.h) vendor/nginx-1.11.0/src/os/unix/ngx_linux.h (from vendor/nginx-1.9.15/src/os/unix/ngx_linux.h) vendor/nginx-1.11.0/src/os/unix/ngx_linux_aio_read.c (from vendor/nginx-1.9.15/src/os/unix/ngx_linux_aio_read.c) vendor/nginx-1.11.0/src/os/unix/ngx_linux_config.h (from vendor/nginx-1.9.15/src/os/unix/ngx_linux_config.h) vendor/nginx-1.11.0/src/os/unix/ngx_linux_init.c (from vendor/nginx-1.9.15/src/os/unix/ngx_linux_init.c) vendor/nginx-1.11.0/src/os/unix/ngx_linux_sendfile_chain.c (from vendor/nginx-1.9.15/src/os/unix/ngx_linux_sendfile_chain.c) vendor/nginx-1.11.0/src/os/unix/ngx_os.h (from vendor/nginx-1.9.15/src/os/unix/ngx_os.h) vendor/nginx-1.11.0/src/os/unix/ngx_posix_config.h (from vendor/nginx-1.9.15/src/os/unix/ngx_posix_config.h) vendor/nginx-1.11.0/src/os/unix/ngx_posix_init.c (from vendor/nginx-1.9.15/src/os/unix/ngx_posix_init.c) vendor/nginx-1.11.0/src/os/unix/ngx_process.c (from vendor/nginx-1.9.15/src/os/unix/ngx_process.c) vendor/nginx-1.11.0/src/os/unix/ngx_process.h (from vendor/nginx-1.9.15/src/os/unix/ngx_process.h) vendor/nginx-1.11.0/src/os/unix/ngx_process_cycle.c (from vendor/nginx-1.9.15/src/os/unix/ngx_process_cycle.c) vendor/nginx-1.11.0/src/os/unix/ngx_process_cycle.h (from vendor/nginx-1.9.15/src/os/unix/ngx_process_cycle.h) vendor/nginx-1.11.0/src/os/unix/ngx_readv_chain.c (from vendor/nginx-1.9.15/src/os/unix/ngx_readv_chain.c) vendor/nginx-1.11.0/src/os/unix/ngx_recv.c (from vendor/nginx-1.9.15/src/os/unix/ngx_recv.c) vendor/nginx-1.11.0/src/os/unix/ngx_send.c (from vendor/nginx-1.9.15/src/os/unix/ngx_send.c) vendor/nginx-1.11.0/src/os/unix/ngx_setaffinity.c (from vendor/nginx-1.9.15/src/os/unix/ngx_setaffinity.c) vendor/nginx-1.11.0/src/os/unix/ngx_setaffinity.h (from vendor/nginx-1.9.15/src/os/unix/ngx_setaffinity.h) vendor/nginx-1.11.0/src/os/unix/ngx_setproctitle.c (from vendor/nginx-1.9.15/src/os/unix/ngx_setproctitle.c) vendor/nginx-1.11.0/src/os/unix/ngx_setproctitle.h (from vendor/nginx-1.9.15/src/os/unix/ngx_setproctitle.h) vendor/nginx-1.11.0/src/os/unix/ngx_shmem.c (from vendor/nginx-1.9.15/src/os/unix/ngx_shmem.c) vendor/nginx-1.11.0/src/os/unix/ngx_shmem.h (from vendor/nginx-1.9.15/src/os/unix/ngx_shmem.h) vendor/nginx-1.11.0/src/os/unix/ngx_socket.c (from vendor/nginx-1.9.15/src/os/unix/ngx_socket.c) vendor/nginx-1.11.0/src/os/unix/ngx_socket.h (from vendor/nginx-1.9.15/src/os/unix/ngx_socket.h) vendor/nginx-1.11.0/src/os/unix/ngx_solaris.h (from vendor/nginx-1.9.15/src/os/unix/ngx_solaris.h) vendor/nginx-1.11.0/src/os/unix/ngx_solaris_config.h (from vendor/nginx-1.9.15/src/os/unix/ngx_solaris_config.h) vendor/nginx-1.11.0/src/os/unix/ngx_solaris_init.c (from vendor/nginx-1.9.15/src/os/unix/ngx_solaris_init.c) vendor/nginx-1.11.0/src/os/unix/ngx_solaris_sendfilev_chain.c (from vendor/nginx-1.9.15/src/os/unix/ngx_solaris_sendfilev_chain.c) vendor/nginx-1.11.0/src/os/unix/ngx_sunpro_amd64.il (from vendor/nginx-1.9.15/src/os/unix/ngx_sunpro_amd64.il) vendor/nginx-1.11.0/src/os/unix/ngx_sunpro_atomic_sparc64.h (from vendor/nginx-1.9.15/src/os/unix/ngx_sunpro_atomic_sparc64.h) vendor/nginx-1.11.0/src/os/unix/ngx_sunpro_sparc64.il (from vendor/nginx-1.9.15/src/os/unix/ngx_sunpro_sparc64.il) vendor/nginx-1.11.0/src/os/unix/ngx_sunpro_x86.il (from vendor/nginx-1.9.15/src/os/unix/ngx_sunpro_x86.il) vendor/nginx-1.11.0/src/os/unix/ngx_thread.h (from vendor/nginx-1.9.15/src/os/unix/ngx_thread.h) vendor/nginx-1.11.0/src/os/unix/ngx_thread_cond.c (from vendor/nginx-1.9.15/src/os/unix/ngx_thread_cond.c) vendor/nginx-1.11.0/src/os/unix/ngx_thread_id.c (from vendor/nginx-1.9.15/src/os/unix/ngx_thread_id.c) vendor/nginx-1.11.0/src/os/unix/ngx_thread_mutex.c (from vendor/nginx-1.9.15/src/os/unix/ngx_thread_mutex.c) vendor/nginx-1.11.0/src/os/unix/ngx_time.c (from vendor/nginx-1.9.15/src/os/unix/ngx_time.c) vendor/nginx-1.11.0/src/os/unix/ngx_time.h (from vendor/nginx-1.9.15/src/os/unix/ngx_time.h) vendor/nginx-1.11.0/src/os/unix/ngx_udp_recv.c (from vendor/nginx-1.9.15/src/os/unix/ngx_udp_recv.c) vendor/nginx-1.11.0/src/os/unix/ngx_udp_send.c (from vendor/nginx-1.9.15/src/os/unix/ngx_udp_send.c) vendor/nginx-1.11.0/src/os/unix/ngx_user.c (from vendor/nginx-1.9.15/src/os/unix/ngx_user.c) vendor/nginx-1.11.0/src/os/unix/ngx_user.h (from vendor/nginx-1.9.15/src/os/unix/ngx_user.h) vendor/nginx-1.11.0/src/os/unix/ngx_writev_chain.c (from vendor/nginx-1.9.15/src/os/unix/ngx_writev_chain.c) vendor/nginx-1.11.0/src/os/win32/nginx.ico (from vendor/nginx-1.9.15/src/os/win32/nginx.ico) vendor/nginx-1.11.0/src/os/win32/nginx.rc (from vendor/nginx-1.9.15/src/os/win32/nginx.rc) vendor/nginx-1.11.0/src/os/win32/nginx_icon16.xpm (from vendor/nginx-1.9.15/src/os/win32/nginx_icon16.xpm) vendor/nginx-1.11.0/src/os/win32/nginx_icon32.xpm (from vendor/nginx-1.9.15/src/os/win32/nginx_icon32.xpm) vendor/nginx-1.11.0/src/os/win32/nginx_icon48.xpm (from vendor/nginx-1.9.15/src/os/win32/nginx_icon48.xpm) vendor/nginx-1.11.0/src/os/win32/ngx_alloc.c (from vendor/nginx-1.9.15/src/os/win32/ngx_alloc.c) vendor/nginx-1.11.0/src/os/win32/ngx_alloc.h (from vendor/nginx-1.9.15/src/os/win32/ngx_alloc.h) vendor/nginx-1.11.0/src/os/win32/ngx_atomic.h (from vendor/nginx-1.9.15/src/os/win32/ngx_atomic.h) vendor/nginx-1.11.0/src/os/win32/ngx_dlopen.c (from vendor/nginx-1.9.15/src/os/win32/ngx_dlopen.c) vendor/nginx-1.11.0/src/os/win32/ngx_dlopen.h (from vendor/nginx-1.9.15/src/os/win32/ngx_dlopen.h) vendor/nginx-1.11.0/src/os/win32/ngx_errno.c (from vendor/nginx-1.9.15/src/os/win32/ngx_errno.c) vendor/nginx-1.11.0/src/os/win32/ngx_errno.h (from vendor/nginx-1.9.15/src/os/win32/ngx_errno.h) vendor/nginx-1.11.0/src/os/win32/ngx_event_log.c (from vendor/nginx-1.9.15/src/os/win32/ngx_event_log.c) vendor/nginx-1.11.0/src/os/win32/ngx_files.c (from vendor/nginx-1.9.15/src/os/win32/ngx_files.c) vendor/nginx-1.11.0/src/os/win32/ngx_files.h (from vendor/nginx-1.9.15/src/os/win32/ngx_files.h) vendor/nginx-1.11.0/src/os/win32/ngx_os.h (from vendor/nginx-1.9.15/src/os/win32/ngx_os.h) vendor/nginx-1.11.0/src/os/win32/ngx_process.c (from vendor/nginx-1.9.15/src/os/win32/ngx_process.c) vendor/nginx-1.11.0/src/os/win32/ngx_process.h (from vendor/nginx-1.9.15/src/os/win32/ngx_process.h) vendor/nginx-1.11.0/src/os/win32/ngx_process_cycle.c (from vendor/nginx-1.9.15/src/os/win32/ngx_process_cycle.c) vendor/nginx-1.11.0/src/os/win32/ngx_process_cycle.h (from vendor/nginx-1.9.15/src/os/win32/ngx_process_cycle.h) vendor/nginx-1.11.0/src/os/win32/ngx_service.c (from vendor/nginx-1.9.15/src/os/win32/ngx_service.c) vendor/nginx-1.11.0/src/os/win32/ngx_shmem.c (from vendor/nginx-1.9.15/src/os/win32/ngx_shmem.c) vendor/nginx-1.11.0/src/os/win32/ngx_shmem.h (from vendor/nginx-1.9.15/src/os/win32/ngx_shmem.h) vendor/nginx-1.11.0/src/os/win32/ngx_socket.c (from vendor/nginx-1.9.15/src/os/win32/ngx_socket.c) vendor/nginx-1.11.0/src/os/win32/ngx_socket.h (from vendor/nginx-1.9.15/src/os/win32/ngx_socket.h) vendor/nginx-1.11.0/src/os/win32/ngx_stat.c (from vendor/nginx-1.9.15/src/os/win32/ngx_stat.c) vendor/nginx-1.11.0/src/os/win32/ngx_thread.c (from vendor/nginx-1.9.15/src/os/win32/ngx_thread.c) vendor/nginx-1.11.0/src/os/win32/ngx_thread.h (from vendor/nginx-1.9.15/src/os/win32/ngx_thread.h) vendor/nginx-1.11.0/src/os/win32/ngx_time.c (from vendor/nginx-1.9.15/src/os/win32/ngx_time.c) vendor/nginx-1.11.0/src/os/win32/ngx_time.h (from vendor/nginx-1.9.15/src/os/win32/ngx_time.h) vendor/nginx-1.11.0/src/os/win32/ngx_udp_wsarecv.c (from vendor/nginx-1.9.15/src/os/win32/ngx_udp_wsarecv.c) vendor/nginx-1.11.0/src/os/win32/ngx_user.c (from vendor/nginx-1.9.15/src/os/win32/ngx_user.c) vendor/nginx-1.11.0/src/os/win32/ngx_user.h (from vendor/nginx-1.9.15/src/os/win32/ngx_user.h) vendor/nginx-1.11.0/src/os/win32/ngx_win32_config.h (from vendor/nginx-1.9.15/src/os/win32/ngx_win32_config.h) vendor/nginx-1.11.0/src/os/win32/ngx_win32_init.c (from vendor/nginx-1.9.15/src/os/win32/ngx_win32_init.c) vendor/nginx-1.11.0/src/os/win32/ngx_wsarecv.c (from vendor/nginx-1.9.15/src/os/win32/ngx_wsarecv.c) vendor/nginx-1.11.0/src/os/win32/ngx_wsarecv_chain.c (from vendor/nginx-1.9.15/src/os/win32/ngx_wsarecv_chain.c) vendor/nginx-1.11.0/src/os/win32/ngx_wsasend.c (from vendor/nginx-1.9.15/src/os/win32/ngx_wsasend.c) vendor/nginx-1.11.0/src/os/win32/ngx_wsasend_chain.c (from vendor/nginx-1.9.15/src/os/win32/ngx_wsasend_chain.c) vendor/nginx-1.11.0/src/stream/ngx_stream.c (from vendor/nginx-1.9.15/src/stream/ngx_stream.c) vendor/nginx-1.11.0/src/stream/ngx_stream.h (from vendor/nginx-1.9.15/src/stream/ngx_stream.h) vendor/nginx-1.11.0/src/stream/ngx_stream_access_module.c (from vendor/nginx-1.9.15/src/stream/ngx_stream_access_module.c) vendor/nginx-1.11.0/src/stream/ngx_stream_core_module.c (from vendor/nginx-1.9.15/src/stream/ngx_stream_core_module.c) vendor/nginx-1.11.0/src/stream/ngx_stream_handler.c (from vendor/nginx-1.9.15/src/stream/ngx_stream_handler.c) vendor/nginx-1.11.0/src/stream/ngx_stream_limit_conn_module.c (from vendor/nginx-1.9.15/src/stream/ngx_stream_limit_conn_module.c) vendor/nginx-1.11.0/src/stream/ngx_stream_proxy_module.c (from vendor/nginx-1.9.15/src/stream/ngx_stream_proxy_module.c) vendor/nginx-1.11.0/src/stream/ngx_stream_ssl_module.c (from vendor/nginx-1.9.15/src/stream/ngx_stream_ssl_module.c) vendor/nginx-1.11.0/src/stream/ngx_stream_ssl_module.h (from vendor/nginx-1.9.15/src/stream/ngx_stream_ssl_module.h) vendor/nginx-1.11.0/src/stream/ngx_stream_upstream.c (from vendor/nginx-1.9.15/src/stream/ngx_stream_upstream.c) vendor/nginx-1.11.0/src/stream/ngx_stream_upstream.h (from vendor/nginx-1.9.15/src/stream/ngx_stream_upstream.h) vendor/nginx-1.11.0/src/stream/ngx_stream_upstream_hash_module.c (from vendor/nginx-1.9.15/src/stream/ngx_stream_upstream_hash_module.c) vendor/nginx-1.11.0/src/stream/ngx_stream_upstream_least_conn_module.c (from vendor/nginx-1.9.15/src/stream/ngx_stream_upstream_least_conn_module.c) vendor/nginx-1.11.0/src/stream/ngx_stream_upstream_round_robin.c (from vendor/nginx-1.9.15/src/stream/ngx_stream_upstream_round_robin.c) vendor/nginx-1.11.0/src/stream/ngx_stream_upstream_round_robin.h (from vendor/nginx-1.9.15/src/stream/ngx_stream_upstream_round_robin.h) vendor/nginx-1.11.0/src/stream/ngx_stream_upstream_zone_module.c (from vendor/nginx-1.9.15/src/stream/ngx_stream_upstream_zone_module.c) Modified: nginx_version (+1 -1) =================================================================== --- nginx_version 2016-05-26 13:57:19 +0900 (1bcb9da) +++ nginx_version 2016-05-26 16:28:26 +0900 (1cac385) @@ -1 +1 @@ -1.9.15 +1.11.0 Renamed: vendor/nginx-1.11.0/auto/cc/acc (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/auto/cc/bcc (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/auto/cc/ccc (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/auto/cc/clang (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/auto/cc/conf (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/auto/cc/gcc (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/auto/cc/icc (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/auto/cc/msvc (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/auto/cc/name (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/auto/cc/owc (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/auto/cc/sunc (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/auto/configure (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/auto/define (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/auto/endianness (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/auto/feature (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/auto/have (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/auto/have_headers (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/auto/headers (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/auto/include (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/auto/init (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/auto/install (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/auto/lib/conf (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/auto/lib/geoip/conf (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/auto/lib/google-perftools/conf (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/auto/lib/libatomic/conf (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/auto/lib/libatomic/make (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/auto/lib/libgd/conf (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/auto/lib/libxslt/conf (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/auto/lib/make (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/auto/lib/md5/conf (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/auto/lib/md5/make (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/auto/lib/md5/makefile.bcc (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/auto/lib/md5/makefile.msvc (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/auto/lib/md5/makefile.owc (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/auto/lib/openssl/conf (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/auto/lib/openssl/make (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/auto/lib/openssl/makefile.bcc (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/auto/lib/openssl/makefile.msvc (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/auto/lib/pcre/conf (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/auto/lib/pcre/make (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/auto/lib/pcre/makefile.bcc (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/auto/lib/pcre/makefile.msvc (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/auto/lib/pcre/makefile.owc (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/auto/lib/perl/conf (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/auto/lib/perl/make (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/auto/lib/sha1/conf (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/auto/lib/sha1/make (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/auto/lib/sha1/makefile.bcc (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/auto/lib/sha1/makefile.msvc (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/auto/lib/sha1/makefile.owc (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/auto/lib/test (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/auto/lib/zlib/conf (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/auto/lib/zlib/make (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/auto/lib/zlib/makefile.bcc (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/auto/lib/zlib/makefile.msvc (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/auto/lib/zlib/makefile.owc (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/auto/make (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/auto/module (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/auto/modules (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/auto/nohave (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/auto/options (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/auto/os/conf (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/auto/os/darwin (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/auto/os/freebsd (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/auto/os/linux (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/auto/os/solaris (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/auto/os/win32 (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/auto/sources (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/auto/stubs (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/auto/summary (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/auto/threads (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/auto/types/sizeof (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/auto/types/typedef (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/auto/types/uintptr_t (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/auto/types/value (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/auto/unix (+38 -0) 96% =================================================================== --- vendor/nginx-1.9.15/auto/unix 2016-05-26 13:57:19 +0900 (8c0e813) +++ vendor/nginx-1.11.0/auto/unix 2016-05-26 16:28:26 +0900 (e6396ef) @@ -329,6 +329,44 @@ ngx_feature_test="setsockopt(0, SOL_SOCKET, SO_ACCEPTFILTER, NULL, 0)" . auto/feature +# NetBSD bind to any address for transparent proxying + +ngx_feature="SO_BINDANY" +ngx_feature_name="NGX_HAVE_TRANSPARENT_PROXY" +ngx_feature_run=no +ngx_feature_incs="#include <sys/socket.h>" +ngx_feature_path= +ngx_feature_libs= +ngx_feature_test="setsockopt(0, SOL_SOCKET, SO_BINDANY, NULL, 0)" +. auto/feature + + +# Linux transparent proxying + +ngx_feature="IP_TRANSPARENT" +ngx_feature_name="NGX_HAVE_TRANSPARENT_PROXY" +ngx_feature_run=no +ngx_feature_incs="#include <sys/socket.h> + #include <netinet/in.h>" +ngx_feature_path= +ngx_feature_libs= +ngx_feature_test="setsockopt(0, IPPROTO_IP, IP_TRANSPARENT, NULL, 0)" +. auto/feature + + +# FreeBSD bind to any address for transparent proxying + +ngx_feature="IP_BINDANY" +ngx_feature_name="NGX_HAVE_TRANSPARENT_PROXY" +ngx_feature_run=no +ngx_feature_incs="#include <sys/socket.h> + #include <netinet/in.h>" +ngx_feature_path= +ngx_feature_libs= +ngx_feature_test="setsockopt(0, IPPROTO_IP, IP_BINDANY, NULL, 0)" +. auto/feature + + # BSD way to get IPv4 datagram destination address ngx_feature="IP_RECVDSTADDR" Renamed: vendor/nginx-1.11.0/conf/fastcgi.conf (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/conf/fastcgi_params (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/conf/koi-utf (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/conf/koi-win (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/conf/mime.types (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/conf/nginx.conf (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/conf/scgi_params (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/conf/uwsgi_params (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/conf/win-utf (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/contrib/README (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/contrib/geo2nginx.pl (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/contrib/unicode2nginx/koi-utf (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/contrib/unicode2nginx/unicode-to-nginx.pl (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/contrib/unicode2nginx/win-utf (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/contrib/vim/ftdetect/nginx.vim (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/contrib/vim/indent/nginx.vim (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/contrib/vim/syntax/nginx.vim (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/docs/GNUmakefile (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/docs/dtd/change_log_conf.dtd (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/docs/dtd/changes.dtd (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/docs/html/50x.html (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/docs/html/index.html (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/docs/man/nginx.8 (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/docs/text/LICENSE (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/docs/text/README (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/docs/xml/change_log_conf.xml (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/docs/xml/nginx/changes.xml (+156 -0) 99% =================================================================== --- vendor/nginx-1.9.15/docs/xml/nginx/changes.xml 2016-05-26 13:57:19 +0900 (5f40bbc) +++ vendor/nginx-1.11.0/docs/xml/nginx/changes.xml 2016-05-26 16:28:26 +0900 (21edb22) @@ -5,6 +5,162 @@ <change_log title="nginx"> +<changes ver="1.11.0" date="24.05.2016"> + +<change type="feature"> +<para lang="ru"> +параметр transparent директив proxy_bind, fastcgi_bind, +memcached_bind, scgi_bind и uwsgi_bind. +</para> +<para lang="en"> +the "transparent" parameter of the "proxy_bind", "fastcgi_bind", +"memcached_bind", "scgi_bind", and "uwsgi_bind" directives. +</para> +</change> + +<change type="feature"> +<para lang="ru"> +переменная $request_id. +</para> +<para lang="en"> +the $request_id variable. +</para> +</change> + +<change type="feature"> +<para lang="ru"> +директива map поддерживает комбинации нескольких переменных +в качестве результирующих значений. +</para> +<para lang="en"> +the "map" directive supports combinations of multiple variables +as resulting values. +</para> +</change> + +<change type="feature"> +<para lang="ru"> +теперь при использовании метода epoll +nginx проверяет, поддерживает ли ядро события EPOLLRDHUP, +и соответственно оптимизирует обработку соединений. +</para> +<para lang="en"> +now nginx checks if EPOLLRDHUP events are supported by kernel, +and optimizes connection handling accordingly +if the "epoll" method is used. +</para> +</change> + +<change type="feature"> +<para lang="ru"> +директивы ssl_certificate и ssl_certificate_key +теперь можно указывать несколько раз +для загрузки сертификатов разных типов (например, RSA и ECDSA). +</para> +<para lang="en"> +the "ssl_certificate" and "ssl_certificate_key" directives +can be specified multiple times +to load certificates of different types (for example, RSA and ECDSA). +</para> +</change> + +<change type="feature"> +<para lang="ru"> +при использовании OpenSSL 1.0.2 и новее +с помощью директивы ssl_ecdh_curve теперь можно задать список кривых; +по умолчанию используется встроенный в OpenSSL список кривых. +</para> +<para lang="en"> +the "ssl_ecdh_curve" directive now allows specifying a list of curves +when using OpenSSL 1.0.2 or newer; +by default a list built into OpenSSL is used. +</para> +</change> + +<change type="change"> +<para lang="ru"> +для использования DHE-шифров теперь надо явно задавать файл параметров +с помощью директивы ssl_dhparam. +</para> +<para lang="en"> +to use DHE ciphers it is now required to specify parameters +using the "ssl_dhparam" directive. +</para> +</change> + +<change type="feature"> +<para lang="ru"> +переменная $proxy_protocol_port. +</para> +<para lang="en"> +the $proxy_protocol_port variable. +</para> +</change> + +<change type="feature"> +<para lang="ru"> +переменная $realip_remote_port в модуле ngx_http_realip_module. +</para> +<para lang="en"> +the $realip_remote_port variable in the ngx_http_realip_module. +</para> +</change> + +<change type="feature"> +<para lang="ru"> +модуль ngx_http_realip_module теперь позволяет устанавливать +не только адрес, но и порт клиента. +</para> +<para lang="en"> +the ngx_http_realip_module is now able to set the client port +in addition to the address. +</para> +</change> + +<change type="change"> +<para lang="ru"> +при попытке запросить виртуальный сервер, +отличающийся от согласованного в процессе SSL handshake, +теперь возвращается ответ "421 Misdirected Request"; +это улучшает совместимость с некоторыми HTTP/2-клиентами +в случае использования клиентских сертификатов. +</para> +<para lang="en"> +the "421 Misdirected Request" response now used +when rejecting requests to a virtual server +different from one negotiated during an SSL handshake; +this improves interoperability with some HTTP/2 clients +when using client certificates. +</para> +</change> + +<change type="change"> +<para lang="ru"> +HTTP/2-клиенты теперь могут сразу присылать тело запроса; +директива http2_body_preread_size позволяет указать размер буфера, который +будет использоваться до того, как nginx начнёт читать тело. +</para> +<para lang="en"> +HTTP/2 clients can now start sending request body immediately; +the "http2_body_preread_size" directive controls size of the buffer used +before nginx will start reading client request body. +</para> +</change> + +<change type="bugfix"> +<para lang="ru"> +при использовании директивы proxy_cache_bypass +не обновлялись закэшированные ошибочные ответы. +</para> +<para lang="en"> +cached error responses were not updated +when using the "proxy_cache_bypass" directive. +</para> +</change> + +</changes> + + <changes ver="1.9.15" date="19.04.2016"> <change type="bugfix"> Renamed: vendor/nginx-1.11.0/docs/xsls/changes.xsls (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/docs/xslt/changes.xslt (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/misc/GNUmakefile (+1 -1) 99% =================================================================== --- vendor/nginx-1.9.15/misc/GNUmakefile 2016-05-26 13:57:19 +0900 (1f021c5) +++ vendor/nginx-1.11.0/misc/GNUmakefile 2016-05-26 16:28:26 +0900 (ff9bee6) @@ -5,7 +5,7 @@ NGINX = nginx-$(VER) TEMP = tmp OBJS = objs.msvc8 -OPENSSL = openssl-1.0.2g +OPENSSL = openssl-1.0.2h ZLIB = zlib-1.2.8 PCRE = pcre-8.38 Renamed: vendor/nginx-1.11.0/misc/README (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/src/core/nginx.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/src/core/nginx.h (+2 -2) 85% =================================================================== --- vendor/nginx-1.9.15/src/core/nginx.h 2016-05-26 13:57:19 +0900 (ba8a9c2) +++ vendor/nginx-1.11.0/src/core/nginx.h 2016-05-26 16:28:26 +0900 (2e7cb4c) @@ -9,8 +9,8 @@ #define _NGINX_H_INCLUDED_ -#define nginx_version 1009015 -#define NGINX_VERSION "1.9.15" +#define nginx_version 1011000 +#define NGINX_VERSION "1.11.0" #define NGINX_VER "nginx/" NGINX_VERSION #ifdef NGX_BUILD Renamed: vendor/nginx-1.11.0/src/core/ngx_array.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/src/core/ngx_array.h (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/src/core/ngx_buf.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/src/core/ngx_buf.h (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/src/core/ngx_conf_file.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/src/core/ngx_conf_file.h (+0 -1) 99% =================================================================== --- vendor/nginx-1.9.15/src/core/ngx_conf_file.h 2016-05-26 13:57:19 +0900 (9ccee36) +++ vendor/nginx-1.11.0/src/core/ngx_conf_file.h 2016-05-26 16:28:26 +0900 (213611f) @@ -45,7 +45,6 @@ #define NGX_CONF_ANY 0x00000400 #define NGX_CONF_1MORE 0x00000800 #define NGX_CONF_2MORE 0x00001000 -#define NGX_CONF_MULTI 0x00000000 /* compatibility */ #define NGX_DIRECT_CONF 0x00010000 Renamed: vendor/nginx-1.11.0/src/core/ngx_config.h (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/src/core/ngx_connection.c (+7 -6) 99% =================================================================== --- vendor/nginx-1.9.15/src/core/ngx_connection.c 2016-05-26 13:57:19 +0900 (5a53bac) +++ vendor/nginx-1.11.0/src/core/ngx_connection.c 2016-05-26 16:28:26 +0900 (16ba630) @@ -17,7 +17,8 @@ static void ngx_drain_connections(void); ngx_listening_t * -ngx_create_listening(ngx_conf_t *cf, void *sockaddr, socklen_t socklen) +ngx_create_listening(ngx_conf_t *cf, struct sockaddr *sockaddr, + socklen_t socklen) { size_t len; ngx_listening_t *ls; @@ -150,12 +151,12 @@ ngx_set_inherited_sockets(ngx_cycle_t *cycle) ls = cycle->listening.elts; for (i = 0; i < cycle->listening.nelts; i++) { - ls[i].sockaddr = ngx_palloc(cycle->pool, NGX_SOCKADDRLEN); + ls[i].sockaddr = ngx_palloc(cycle->pool, sizeof(ngx_sockaddr_t)); if (ls[i].sockaddr == NULL) { return NGX_ERROR; } - ls[i].socklen = NGX_SOCKADDRLEN; + ls[i].socklen = sizeof(ngx_sockaddr_t); if (getsockname(ls[i].fd, ls[i].sockaddr, &ls[i].socklen) == -1) { ngx_log_error(NGX_LOG_CRIT, cycle->log, ngx_socket_errno, "getsockname() of the inherited " @@ -1277,7 +1278,7 @@ ngx_connection_local_sockaddr(ngx_connection_t *c, ngx_str_t *s, { socklen_t len; ngx_uint_t addr; - u_char sa[NGX_SOCKADDRLEN]; + ngx_sockaddr_t sa; struct sockaddr_in *sin; #if (NGX_HAVE_INET6) ngx_uint_t i; @@ -1315,9 +1316,9 @@ ngx_connection_local_sockaddr(ngx_connection_t *c, ngx_str_t *s, if (addr == 0) { - len = NGX_SOCKADDRLEN; + len = sizeof(ngx_sockaddr_t); - if (getsockname(c->fd, (struct sockaddr *) &sa, &len) == -1) { + if (getsockname(c->fd, &sa.sockaddr, &len) == -1) { ngx_connection_error(c, ngx_socket_errno, "getsockname() failed"); return NGX_ERROR; } Renamed: vendor/nginx-1.11.0/src/core/ngx_connection.h (+2 -2) 97% =================================================================== --- vendor/nginx-1.9.15/src/core/ngx_connection.h 2016-05-26 13:57:19 +0900 (b0d162a) +++ vendor/nginx-1.11.0/src/core/ngx_connection.h 2016-05-26 16:28:26 +0900 (b11e92b) @@ -149,6 +149,7 @@ struct ngx_connection_s { ngx_str_t addr_text; ngx_str_t proxy_protocol_addr; + in_port_t proxy_protocol_port; #if (NGX_SSL) ngx_ssl_connection_t *ssl; @@ -169,7 +170,6 @@ struct ngx_connection_s { unsigned log_error:3; /* ngx_connection_log_error_e */ - unsigned unexpected_eof:1; unsigned timedout:1; unsigned error:1; unsigned destroyed:1; @@ -211,7 +211,7 @@ struct ngx_connection_s { } -ngx_listening_t *ngx_create_listening(ngx_conf_t *cf, void *sockaddr, +ngx_listening_t *ngx_create_listening(ngx_conf_t *cf, struct sockaddr *sockaddr, socklen_t socklen); ngx_int_t ngx_clone_listening(ngx_conf_t *cf, ngx_listening_t *ls); ngx_int_t ngx_set_inherited_sockets(ngx_cycle_t *cycle); Renamed: vendor/nginx-1.11.0/src/core/ngx_core.h (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/src/core/ngx_cpuinfo.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/src/core/ngx_crc.h (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/src/core/ngx_crc32.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/src/core/ngx_crc32.h (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/src/core/ngx_crypt.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/src/core/ngx_crypt.h (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/src/core/ngx_cycle.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/src/core/ngx_cycle.h (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/src/core/ngx_file.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/src/core/ngx_file.h (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/src/core/ngx_hash.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/src/core/ngx_hash.h (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/src/core/ngx_inet.c (+112 -31) 91% =================================================================== --- vendor/nginx-1.9.15/src/core/ngx_inet.c 2016-05-26 13:57:19 +0900 (33b303d) +++ vendor/nginx-1.11.0/src/core/ngx_inet.c 2016-05-26 16:28:26 +0900 (873bf73) @@ -526,6 +526,85 @@ ngx_parse_addr(ngx_pool_t *pool, ngx_addr_t *addr, u_char *text, size_t len) ngx_int_t +ngx_parse_addr_port(ngx_pool_t *pool, ngx_addr_t *addr, u_char *text, + size_t len) +{ + u_char *p, *last; + size_t plen; + ngx_int_t rc, port; + struct sockaddr_in *sin; +#if (NGX_HAVE_INET6) + struct sockaddr_in6 *sin6; +#endif + + rc = ngx_parse_addr(pool, addr, text, len); + + if (rc != NGX_DECLINED) { + return rc; + } + + last = text + len; + +#if (NGX_HAVE_INET6) + if (len && text[0] == '[') { + + p = ngx_strlchr(text, last, ']'); + + if (p == NULL || p == last - 1 || *++p != ':') { + return NGX_DECLINED; + } + + text++; + len -= 2; + + } else +#endif + + { + p = ngx_strlchr(text, last, ':'); + + if (p == NULL) { + return NGX_DECLINED; + } + } + + p++; + plen = last - p; + + port = ngx_atoi(p, plen); + + if (port < 1 || port > 65535) { + return NGX_DECLINED; + } + + len -= plen + 1; + + rc = ngx_parse_addr(pool, addr, text, len); + + if (rc != NGX_OK) { + return rc; + } + + switch (addr->sockaddr->sa_family) { + +#if (NGX_HAVE_INET6) + case AF_INET6: + sin6 = (struct sockaddr_in6 *) addr->sockaddr; + sin6->sin6_port = htons((in_port_t) port); + break; +#endif + + default: /* AF_INET */ + sin = (struct sockaddr_in *) addr->sockaddr; + sin->sin_port = htons((in_port_t) port); + break; + } + + return NGX_OK; +} + + +ngx_int_t ngx_parse_url(ngx_pool_t *pool, ngx_url_t *u) { u_char *p; @@ -763,7 +842,7 @@ ngx_parse_inet_url(ngx_pool_t *pool, ngx_url_t *u) return NGX_ERROR; } - ngx_memcpy(sin, u->sockaddr, sizeof(struct sockaddr_in)); + ngx_memcpy(sin, &u->sockaddr, sizeof(struct sockaddr_in)); u->addrs[0].sockaddr = (struct sockaddr *) sin; u->addrs[0].socklen = sizeof(struct sockaddr_in); @@ -790,7 +869,7 @@ ngx_parse_inet_url(ngx_pool_t *pool, ngx_url_t *u) u->family = u->addrs[0].sockaddr->sa_family; u->socklen = u->addrs[0].socklen; - ngx_memcpy(u->sockaddr, u->addrs[0].sockaddr, u->addrs[0].socklen); + ngx_memcpy(&u->sockaddr, u->addrs[0].sockaddr, u->addrs[0].socklen); switch (u->family) { @@ -843,47 +922,49 @@ ngx_parse_inet6_url(ngx_pool_t *pool, ngx_url_t *u) return NGX_ERROR; } - if (last - p) { + port = p + 1; - port = p + 1; + uri = ngx_strlchr(port, last, '/'); - uri = ngx_strlchr(port, last, '/'); + if (uri) { + if (u->listen || !u->uri_part) { + u->err = "invalid host"; + return NGX_ERROR; + } - if (uri) { - if (u->listen || !u->uri_part) { - u->err = "invalid host"; - return NGX_ERROR; - } + u->uri.len = last - uri; + u->uri.data = uri; - u->uri.len = last - uri; - u->uri.data = uri; + last = uri; + } - last = uri; + if (port < last) { + if (*port != ':') { + u->err = "invalid host"; + return NGX_ERROR; } - if (*port == ':') { - port++; + port++; - len = last - port; + len = last - port; - n = ngx_atoi(port, len); + n = ngx_atoi(port, len); - if (n < 1 || n > 65535) { - u->err = "invalid port"; - return NGX_ERROR; - } + if (n < 1 || n > 65535) { + u->err = "invalid port"; + return NGX_ERROR; + } - u->port = (in_port_t) n; - sin6->sin6_port = htons((in_port_t) n); + u->port = (in_port_t) n; + sin6->sin6_port = htons((in_port_t) n); - u->port_text.len = len; - u->port_text.data = port; + u->port_text.len = len; + u->port_text.data = port; - } else { - u->no_port = 1; - u->port = u->default_port; - sin6->sin6_port = htons(u->default_port); - } + } else { + u->no_port = 1; + u->port = u->default_port; + sin6->sin6_port = htons(u->default_port); } len = p - host; @@ -918,7 +999,7 @@ ngx_parse_inet6_url(ngx_pool_t *pool, ngx_url_t *u) return NGX_ERROR; } - ngx_memcpy(sin6, u->sockaddr, sizeof(struct sockaddr_in6)); + ngx_memcpy(sin6, &u->sockaddr, sizeof(struct sockaddr_in6)); u->addrs[0].sockaddr = (struct sockaddr *) sin6; u->addrs[0].socklen = sizeof(struct sockaddr_in6); Renamed: vendor/nginx-1.11.0/src/core/ngx_inet.h (+18 -14) 83% =================================================================== --- vendor/nginx-1.9.15/src/core/ngx_inet.h 2016-05-26 13:57:19 +0900 (0555750) +++ vendor/nginx-1.11.0/src/core/ngx_inet.h 2016-05-26 16:28:26 +0900 (531d264) @@ -13,14 +13,6 @@ #include <ngx_core.h> -/* - * TODO: autoconfigure NGX_SOCKADDRLEN and NGX_SOCKADDR_STRLEN as - * sizeof(struct sockaddr_storage) - * sizeof(struct sockaddr_un) - * sizeof(struct sockaddr_in6) - * sizeof(struct sockaddr_in) - */ - #define NGX_INET_ADDRSTRLEN (sizeof("255.255.255.255") - 1) #define NGX_INET6_ADDRSTRLEN \ (sizeof("ffff:ffff:ffff:ffff:ffff:ffff:255.255.255.255") - 1) @@ -29,15 +21,26 @@ #if (NGX_HAVE_UNIX_DOMAIN) #define NGX_SOCKADDR_STRLEN (sizeof("unix:") - 1 + NGX_UNIX_ADDRSTRLEN) -#else +#elif (NGX_HAVE_INET6) #define NGX_SOCKADDR_STRLEN (NGX_INET6_ADDRSTRLEN + sizeof("[]:65535") - 1) +#else +#define NGX_SOCKADDR_STRLEN (NGX_INET_ADDRSTRLEN + sizeof(":65535") - 1) #endif +/* compatibility */ +#define NGX_SOCKADDRLEN sizeof(ngx_sockaddr_t) + + +typedef union { + struct sockaddr sockaddr; + struct sockaddr_in sockaddr_in; +#if (NGX_HAVE_INET6) + struct sockaddr_in6 sockaddr_in6; +#endif #if (NGX_HAVE_UNIX_DOMAIN) -#define NGX_SOCKADDRLEN sizeof(struct sockaddr_un) -#else -#define NGX_SOCKADDRLEN 512 + struct sockaddr_un sockaddr_un; #endif +} ngx_sockaddr_t; typedef struct { @@ -87,13 +90,12 @@ typedef struct { unsigned listen:1; unsigned uri_part:1; unsigned no_resolve:1; - unsigned one_addr:1; /* compatibility */ unsigned no_port:1; unsigned wildcard:1; socklen_t socklen; - u_char sockaddr[NGX_SOCKADDRLEN]; + ngx_sockaddr_t sockaddr; ngx_addr_t *addrs; ngx_uint_t naddrs; @@ -113,6 +115,8 @@ size_t ngx_inet_ntop(int family, void *addr, u_char *text, size_t len); ngx_int_t ngx_ptocidr(ngx_str_t *text, ngx_cidr_t *cidr); ngx_int_t ngx_parse_addr(ngx_pool_t *pool, ngx_addr_t *addr, u_char *text, size_t len); +ngx_int_t ngx_parse_addr_port(ngx_pool_t *pool, ngx_addr_t *addr, + u_char *text, size_t len); ngx_int_t ngx_parse_url(ngx_pool_t *pool, ngx_url_t *u); ngx_int_t ngx_inet_resolve_host(ngx_pool_t *pool, ngx_url_t *u); ngx_int_t ngx_cmp_sockaddr(struct sockaddr *sa1, socklen_t slen1, Renamed: vendor/nginx-1.11.0/src/core/ngx_list.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/src/core/ngx_list.h (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/src/core/ngx_log.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/src/core/ngx_log.h (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/src/core/ngx_md5.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/src/core/ngx_md5.h (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/src/core/ngx_module.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/src/core/ngx_module.h (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/src/core/ngx_murmurhash.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/src/core/ngx_murmurhash.h (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/src/core/ngx_open_file_cache.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/src/core/ngx_open_file_cache.h (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/src/core/ngx_output_chain.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/src/core/ngx_palloc.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/src/core/ngx_palloc.h (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/src/core/ngx_parse.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/src/core/ngx_parse.h (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/src/core/ngx_parse_time.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/src/core/ngx_parse_time.h (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/src/core/ngx_proxy_protocol.c (+37 -4) 81% =================================================================== --- vendor/nginx-1.9.15/src/core/ngx_proxy_protocol.c 2016-05-26 13:57:19 +0900 (f347e7f) +++ vendor/nginx-1.11.0/src/core/ngx_proxy_protocol.c 2016-05-26 16:28:26 +0900 (3e54d42) @@ -12,8 +12,9 @@ u_char * ngx_proxy_protocol_read(ngx_connection_t *c, u_char *buf, u_char *last) { - size_t len; - u_char ch, *p, *addr; + size_t len; + u_char ch, *p, *addr, *port; + ngx_int_t n; p = buf; len = last - buf; @@ -71,8 +72,40 @@ ngx_proxy_protocol_read(ngx_connection_t *c, u_char *buf, u_char *last) ngx_memcpy(c->proxy_protocol_addr.data, addr, len); c->proxy_protocol_addr.len = len; - ngx_log_debug1(NGX_LOG_DEBUG_CORE, c->log, 0, - "PROXY protocol address: \"%V\"", &c->proxy_protocol_addr); + for ( ;; ) { + if (p == last) { + goto invalid; + } + + if (*p++ == ' ') { + break; + } + } + + port = p; + + for ( ;; ) { + if (p == last) { + goto invalid; + } + + if (*p++ == ' ') { + break; + } + } + + len = p - port - 1; + + n = ngx_atoi(port, len); + + if (n < 0 || n > 65535) { + goto invalid; + } + + c->proxy_protocol_port = (in_port_t) n; + + ngx_log_debug2(NGX_LOG_DEBUG_CORE, c->log, 0, + "PROXY protocol address: %V %i", &c->proxy_protocol_addr, n); skip: Renamed: vendor/nginx-1.11.0/src/core/ngx_proxy_protocol.h (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/src/core/ngx_queue.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/src/core/ngx_queue.h (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/src/core/ngx_radix_tree.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/src/core/ngx_radix_tree.h (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/src/core/ngx_rbtree.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/src/core/ngx_rbtree.h (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/src/core/ngx_regex.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/src/core/ngx_regex.h (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/src/core/ngx_resolver.c (+21 -21) 99% =================================================================== --- vendor/nginx-1.9.15/src/core/ngx_resolver.c 2016-05-26 13:57:19 +0900 (e00fe22) +++ vendor/nginx-1.11.0/src/core/ngx_resolver.c 2016-05-26 16:28:26 +0900 (e06c2f8) @@ -2992,15 +2992,15 @@ failed: static void ngx_resolver_srv_names_handler(ngx_resolver_ctx_t *cctx) { - ngx_uint_t i; - u_char (*sockaddr)[NGX_SOCKADDRLEN]; - ngx_addr_t *addrs; - ngx_resolver_t *r; - struct sockaddr_in *sin; - ngx_resolver_ctx_t *ctx; - ngx_resolver_srv_name_t *srv; + ngx_uint_t i; + ngx_addr_t *addrs; + ngx_resolver_t *r; + ngx_sockaddr_t *sockaddr; + struct sockaddr_in *sin; + ngx_resolver_ctx_t *ctx; + ngx_resolver_srv_name_t *srv; #if (NGX_HAVE_INET6) - struct sockaddr_in6 *sin6; + struct sockaddr_in6 *sin6; #endif r = cctx->resolver; @@ -3026,7 +3026,7 @@ ngx_resolver_srv_names_handler(ngx_resolver_ctx_t *cctx) return; } - sockaddr = ngx_resolver_alloc(r, cctx->naddrs * NGX_SOCKADDRLEN); + sockaddr = ngx_resolver_alloc(r, cctx->naddrs * sizeof(ngx_sockaddr_t)); if (sockaddr == NULL) { ngx_resolver_free(r, addrs); ngx_resolve_name_done(cctx); @@ -3039,10 +3039,10 @@ ngx_resolver_srv_names_handler(ngx_resolver_ctx_t *cctx) } for (i = 0; i < cctx->naddrs; i++) { - addrs[i].sockaddr = (struct sockaddr *) sockaddr[i]; + addrs[i].sockaddr = &sockaddr[i].sockaddr; addrs[i].socklen = cctx->addrs[i].socklen; - ngx_memcpy(sockaddr[i], cctx->addrs[i].sockaddr, + ngx_memcpy(&sockaddr[i], cctx->addrs[i].sockaddr, addrs[i].socklen); switch (addrs[i].sockaddr->sa_family) { @@ -4161,14 +4161,14 @@ static ngx_resolver_addr_t * ngx_resolver_export(ngx_resolver_t *r, ngx_resolver_node_t *rn, ngx_uint_t rotate) { - ngx_uint_t d, i, j, n; - u_char (*sockaddr)[NGX_SOCKADDRLEN]; - in_addr_t *addr; - struct sockaddr_in *sin; - ngx_resolver_addr_t *dst; + ngx_uint_t d, i, j, n; + in_addr_t *addr; + ngx_sockaddr_t *sockaddr; + struct sockaddr_in *sin; + ngx_resolver_addr_t *dst; #if (NGX_HAVE_INET6) - struct in6_addr *addr6; - struct sockaddr_in6 *sin6; + struct in6_addr *addr6; + struct sockaddr_in6 *sin6; #endif n = rn->naddrs; @@ -4181,7 +4181,7 @@ ngx_resolver_export(ngx_resolver_t *r, ngx_resolver_node_t *rn, return NULL; } - sockaddr = ngx_resolver_calloc(r, n * NGX_SOCKADDRLEN); + sockaddr = ngx_resolver_calloc(r, n * sizeof(ngx_sockaddr_t)); if (sockaddr == NULL) { ngx_resolver_free(r, dst); return NULL; @@ -4196,7 +4196,7 @@ ngx_resolver_export(ngx_resolver_t *r, ngx_resolver_node_t *rn, addr = (rn->naddrs == 1) ? &rn->u.addr : rn->u.addrs; do { - sin = (struct sockaddr_in *) sockaddr[d]; + sin = &sockaddr[d].sockaddr_in; sin->sin_family = AF_INET; sin->sin_addr.s_addr = addr[j++]; dst[d].sockaddr = (struct sockaddr *) sin; @@ -4219,7 +4219,7 @@ ngx_resolver_export(ngx_resolver_t *r, ngx_resolver_node_t *rn, addr6 = (rn->naddrs6 == 1) ? &rn->u6.addr6 : rn->u6.addrs6; do { - sin6 = (struct sockaddr_in6 *) sockaddr[d]; + sin6 = &sockaddr[d].sockaddr_in6; sin6->sin6_family = AF_INET6; ngx_memcpy(sin6->sin6_addr.s6_addr, addr6[j++].s6_addr, 16); dst[d].sockaddr = (struct sockaddr *) sin6; Renamed: vendor/nginx-1.11.0/src/core/ngx_resolver.h (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/src/core/ngx_rwlock.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/src/core/ngx_rwlock.h (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/src/core/ngx_sha1.h (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/src/core/ngx_shmtx.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/src/core/ngx_shmtx.h (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/src/core/ngx_slab.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/src/core/ngx_slab.h (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/src/core/ngx_spinlock.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/src/core/ngx_string.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/src/core/ngx_string.h (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/src/core/ngx_syslog.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/src/core/ngx_syslog.h (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/src/core/ngx_thread_pool.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/src/core/ngx_thread_pool.h (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/src/core/ngx_times.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/src/core/ngx_times.h (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/src/event/modules/ngx_devpoll_module.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/src/event/modules/ngx_epoll_module.c (+79 -1) 92% =================================================================== --- vendor/nginx-1.9.15/src/event/modules/ngx_epoll_module.c 2016-05-26 13:57:19 +0900 (166c461) +++ vendor/nginx-1.11.0/src/event/modules/ngx_epoll_module.c 2016-05-26 16:28:26 +0900 (de5a942) @@ -105,6 +105,9 @@ static ngx_int_t ngx_epoll_init(ngx_cycle_t *cycle, ngx_msec_t timer); static ngx_int_t ngx_epoll_notify_init(ngx_log_t *log); static void ngx_epoll_notify_handler(ngx_event_t *ev); #endif +#if (NGX_HAVE_EPOLLRDHUP) +static void ngx_epoll_test_rdhup(ngx_cycle_t *cycle); +#endif static void ngx_epoll_done(ngx_cycle_t *cycle); static ngx_int_t ngx_epoll_add_event(ngx_event_t *ev, ngx_int_t event, ngx_uint_t flags); @@ -146,6 +149,10 @@ static ngx_connection_t ngx_eventfd_conn; #endif +#if (NGX_HAVE_EPOLLRDHUP) +ngx_uint_t ngx_use_epoll_rdhup; +#endif + static ngx_str_t epoll_name = ngx_string("epoll"); static ngx_command_t ngx_epoll_commands[] = { @@ -334,9 +341,11 @@ ngx_epoll_init(ngx_cycle_t *cycle, ngx_msec_t timer) #endif #if (NGX_HAVE_FILE_AIO) - ngx_epoll_aio_init(cycle, epcf); +#endif +#if (NGX_HAVE_EPOLLRDHUP) + ngx_epoll_test_rdhup(cycle); #endif } @@ -449,6 +458,73 @@ ngx_epoll_notify_handler(ngx_event_t *ev) #endif +#if (NGX_HAVE_EPOLLRDHUP) + +static void +ngx_epoll_test_rdhup(ngx_cycle_t *cycle) +{ + int s[2], events; + struct epoll_event ee; + + if (socketpair(AF_UNIX, SOCK_STREAM, 0, s) == -1) { + ngx_log_error(NGX_LOG_ALERT, cycle->log, ngx_errno, + "socketpair() failed"); + return; + } + + ee.events = EPOLLET|EPOLLIN|EPOLLRDHUP; + + if (epoll_ctl(ep, EPOLL_CTL_ADD, s[0], &ee) == -1) { + ngx_log_error(NGX_LOG_ALERT, cycle->log, ngx_errno, + "epoll_ctl() failed"); + goto failed; + } + + if (close(s[1]) == -1) { + ngx_log_error(NGX_LOG_ALERT, cycle->log, ngx_errno, + "close() failed"); + s[1] = -1; + goto failed; + } + + s[1] = -1; + + events = epoll_wait(ep, &ee, 1, 5000); + + if (events == -1) { + ngx_log_error(NGX_LOG_ALERT, cycle->log, ngx_errno, + "epoll_wait() failed"); + goto failed; + } + + if (events) { + ngx_use_epoll_rdhup = ee.events & EPOLLRDHUP; + + } else { + ngx_log_error(NGX_LOG_ALERT, cycle->log, NGX_ETIMEDOUT, + "epoll_wait() timed out"); + } + + ngx_log_debug1(NGX_LOG_DEBUG_EVENT, cycle->log, 0, + "testing the EPOLLRDHUP flag: %s", + ngx_use_epoll_rdhup ? "success" : "fail"); + +failed: + + if (s[1] != -1 && close(s[1]) == -1) { + ngx_log_error(NGX_LOG_ALERT, cycle->log, ngx_errno, + "close() failed"); + } + + if (close(s[0]) == -1) { + ngx_log_error(NGX_LOG_ALERT, cycle->log, ngx_errno, + "close() failed"); + } +} + +#endif + + static void ngx_epoll_done(ngx_cycle_t *cycle) { @@ -808,6 +884,8 @@ ngx_epoll_process_events(ngx_cycle_t *cycle, ngx_msec_t timer, ngx_uint_t flags) if (revents & EPOLLRDHUP) { rev->pending_eof = 1; } + + rev->available = 1; #endif rev->ready = 1; Renamed: vendor/nginx-1.11.0/src/event/modules/ngx_eventport_module.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/src/event/modules/ngx_iocp_module.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/src/event/modules/ngx_iocp_module.h (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/src/event/modules/ngx_kqueue_module.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/src/event/modules/ngx_poll_module.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/src/event/modules/ngx_select_module.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/src/event/modules/ngx_win32_select_module.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/src/event/ngx_event.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/src/event/ngx_event.h (+7 -0) 98% =================================================================== --- vendor/nginx-1.9.15/src/event/ngx_event.h 2016-05-26 13:57:19 +0900 (ed0682c) +++ vendor/nginx-1.11.0/src/event/ngx_event.h 2016-05-26 16:28:26 +0900 (1c7c148) @@ -96,6 +96,10 @@ struct ngx_event_s { * write: available space in buffer when event is ready * or lowat when event is set with NGX_LOWAT_EVENT flag * + * epoll with EPOLLRDHUP: + * accept: 1 if accept many, 0 otherwise + * read: 1 if there can be data to read, 0 otherwise + * * iocp: TODO * * otherwise: @@ -196,6 +200,9 @@ typedef struct { extern ngx_event_actions_t ngx_event_actions; +#if (NGX_HAVE_EPOLLRDHUP) +extern ngx_uint_t ngx_use_epoll_rdhup; +#endif /* Renamed: vendor/nginx-1.11.0/src/event/ngx_event_accept.c (+8 -11) 97% =================================================================== --- vendor/nginx-1.9.15/src/event/ngx_event_accept.c 2016-05-26 13:57:19 +0900 (1c87a34) +++ vendor/nginx-1.11.0/src/event/ngx_event_accept.c 2016-05-26 16:28:26 +0900 (4445adc) @@ -28,10 +28,10 @@ ngx_event_accept(ngx_event_t *ev) ngx_uint_t level; ngx_socket_t s; ngx_event_t *rev, *wev; + ngx_sockaddr_t sa; ngx_listening_t *ls; ngx_connection_t *c, *lc; ngx_event_conf_t *ecf; - u_char sa[NGX_SOCKADDRLEN]; #if (NGX_HAVE_ACCEPT4) static ngx_uint_t use_accept4 = 1; #endif @@ -58,17 +58,16 @@ ngx_event_accept(ngx_event_t *ev) "accept on %V, ready: %d", &ls->addr_text, ev->available); do { - socklen = NGX_SOCKADDRLEN; + socklen = sizeof(ngx_sockaddr_t); #if (NGX_HAVE_ACCEPT4) if (use_accept4) { - s = accept4(lc->fd, (struct sockaddr *) sa, &socklen, - SOCK_NONBLOCK); + s = accept4(lc->fd, &sa.sockaddr, &socklen, SOCK_NONBLOCK); } else { - s = accept(lc->fd, (struct sockaddr *) sa, &socklen); + s = accept(lc->fd, &sa.sockaddr, &socklen); } #else - s = accept(lc->fd, (struct sockaddr *) sa, &socklen); + s = accept(lc->fd, &sa.sockaddr, &socklen); #endif if (s == (ngx_socket_t) -1) { @@ -171,7 +170,7 @@ ngx_event_accept(ngx_event_t *ev) return; } - ngx_memcpy(c->sockaddr, sa, socklen); + ngx_memcpy(c->sockaddr, &sa, socklen); log = ngx_palloc(c->pool, sizeof(ngx_log_t)); if (log == NULL) { @@ -217,8 +216,6 @@ ngx_event_accept(ngx_event_t *ev) c->local_sockaddr = ls->sockaddr; c->local_socklen = ls->socklen; - c->unexpected_eof = 1; - #if (NGX_HAVE_UNIX_DOMAIN) if (c->sockaddr->sa_family == AF_UNIX) { c->tcp_nopush = NGX_TCP_NOPUSH_DISABLED; @@ -330,10 +327,10 @@ ngx_event_recvmsg(ngx_event_t *ev) ngx_event_t *rev, *wev; struct iovec iov[1]; struct msghdr msg; + ngx_sockaddr_t sa; ngx_listening_t *ls; ngx_event_conf_t *ecf; ngx_connection_t *c, *lc; - u_char sa[NGX_SOCKADDRLEN]; static u_char buffer[65535]; #if (NGX_HAVE_MSGHDR_MSG_CONTROL) @@ -378,7 +375,7 @@ ngx_event_recvmsg(ngx_event_t *ev) iov[0].iov_len = sizeof(buffer); msg.msg_name = &sa; - msg.msg_namelen = sizeof(sa); + msg.msg_namelen = sizeof(ngx_sockaddr_t); msg.msg_iov = iov; msg.msg_iovlen = 1; Renamed: vendor/nginx-1.11.0/src/event/ngx_event_acceptex.c (+0 -2) 99% =================================================================== --- vendor/nginx-1.9.15/src/event/ngx_event_acceptex.c 2016-05-26 13:57:19 +0900 (1dbfd6c) +++ vendor/nginx-1.11.0/src/event/ngx_event_acceptex.c 2016-05-26 16:28:26 +0900 (e414fe4) @@ -159,8 +159,6 @@ ngx_event_post_acceptex(ngx_listening_t *ls, ngx_uint_t n) c->recv_chain = ngx_recv_chain; c->send_chain = ngx_send_chain; - c->unexpected_eof = 1; - c->listening = ls; rev = c->read; Renamed: vendor/nginx-1.11.0/src/event/ngx_event_connect.c (+103 -0) 71% =================================================================== --- vendor/nginx-1.9.15/src/event/ngx_event_connect.c 2016-05-26 13:57:19 +0900 (8aca862) +++ vendor/nginx-1.11.0/src/event/ngx_event_connect.c 2016-05-26 16:28:26 +0900 (5de991e) @@ -11,6 +11,12 @@ #include <ngx_event_connect.h> +#if (NGX_HAVE_TRANSPARENT_PROXY) +static ngx_int_t ngx_event_connect_set_transparent(ngx_peer_connection_t *pc, + ngx_socket_t s); +#endif + + ngx_int_t ngx_event_connect_peer(ngx_peer_connection_t *pc) { @@ -72,6 +78,15 @@ ngx_event_connect_peer(ngx_peer_connection_t *pc) } if (pc->local) { + +#if (NGX_HAVE_TRANSPARENT_PROXY) + if (pc->transparent) { + if (ngx_event_connect_set_transparent(pc, s) != NGX_OK) { + goto failed; + } + } +#endif + if (bind(s, pc->local->sockaddr, pc->local->socklen) == -1) { ngx_log_error(NGX_LOG_CRIT, pc->log, ngx_socket_errno, "bind(%V) failed", &pc->local->name); @@ -249,6 +264,94 @@ failed: } +#if (NGX_HAVE_TRANSPARENT_PROXY) + +static ngx_int_t +ngx_event_connect_set_transparent(ngx_peer_connection_t *pc, ngx_socket_t s) +{ + int value; + + value = 1; + +#if defined(SO_BINDANY) + + if (setsockopt(s, SOL_SOCKET, SO_BINDANY, + (const void *) &value, sizeof(int)) == -1) + { + ngx_log_error(NGX_LOG_ALERT, pc->log, ngx_socket_errno, + "setsockopt(SO_BINDANY) failed"); + return NGX_ERROR; + } + +#else + + switch (pc->local->sockaddr->sa_family) { + + case AF_INET: + +#if defined(IP_TRANSPARENT) + + if (setsockopt(s, IPPROTO_IP, IP_TRANSPARENT, + (const void *) &value, sizeof(int)) == -1) + { + ngx_log_error(NGX_LOG_ALERT, pc->log, ngx_socket_errno, + "setsockopt(IP_TRANSPARENT) failed"); + return NGX_ERROR; + } + +#elif defined(IP_BINDANY) + + if (setsockopt(s, IPPROTO_IP, IP_BINDANY, + (const void *) &value, sizeof(int)) == -1) + { + ngx_log_error(NGX_LOG_ALERT, pc->log, ngx_socket_errno, + "setsockopt(IP_BINDANY) failed"); + return NGX_ERROR; + } + +#endif + + break; + +#if (NGX_HAVE_INET6) + + case AF_INET6: + +#if defined(IPV6_TRANSPARENT) + + if (setsockopt(s, IPPROTO_IPV6, IPV6_TRANSPARENT, + (const void *) &value, sizeof(int)) == -1) + { + ngx_log_error(NGX_LOG_ALERT, pc->log, ngx_socket_errno, + "setsockopt(IPV6_TRANSPARENT) failed"); + return NGX_ERROR; + } + +#elif defined(IPV6_BINDANY) + + if (setsockopt(s, IPPROTO_IPV6, IPV6_BINDANY, + (const void *) &value, sizeof(int)) == -1) + { + ngx_log_error(NGX_LOG_ALERT, pc->log, ngx_socket_errno, + "setsockopt(IPV6_BINDANY) failed"); + return NGX_ERROR; + } + +#endif + break; + +#endif /* NGX_HAVE_INET6 */ + + } + +#endif /* SO_BINDANY */ + + return NGX_OK; +} + +#endif + + ngx_int_t ngx_event_get_peer(ngx_peer_connection_t *pc, void *data) { Renamed: vendor/nginx-1.11.0/src/event/ngx_event_connect.h (+3 -0) 95% =================================================================== --- vendor/nginx-1.9.15/src/event/ngx_event_connect.h 2016-05-26 13:57:19 +0900 (1bacf82) +++ vendor/nginx-1.11.0/src/event/ngx_event_connect.h 2016-05-26 16:28:26 +0900 (10b72a1) @@ -61,6 +61,9 @@ struct ngx_peer_connection_s { ngx_log_t *log; unsigned cached:1; +#if (NGX_HAVE_TRANSPARENT_PROXY) + unsigned transparent:1; +#endif /* ngx_connection_log_error_e */ unsigned log_error:2; Renamed: vendor/nginx-1.11.0/src/event/ngx_event_connectex.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/src/event/ngx_event_openssl.c (+145 -71) 95% =================================================================== --- vendor/nginx-1.9.15/src/event/ngx_event_openssl.c 2016-05-26 13:57:19 +0900 (de10296) +++ vendor/nginx-1.11.0/src/event/ngx_event_openssl.c 2016-05-26 16:28:26 +0900 (810c469) @@ -105,6 +105,7 @@ int ngx_ssl_server_conf_index; int ngx_ssl_session_cache_index; int ngx_ssl_session_ticket_keys_index; int ngx_ssl_certificate_index; +int ngx_ssl_next_certificate_index; int ngx_ssl_stapling_index; @@ -187,11 +188,17 @@ ngx_ssl_init(ngx_log_t *log) return NGX_ERROR; } - ngx_ssl_stapling_index = SSL_CTX_get_ex_new_index(0, NULL, NULL, NULL, - NULL); + ngx_ssl_next_certificate_index = X509_get_ex_new_index(0, NULL, NULL, NULL, + NULL); + if (ngx_ssl_next_certificate_index == -1) { + ngx_ssl_error(NGX_LOG_ALERT, log, 0, "X509_get_ex_new_index() failed"); + return NGX_ERROR; + } + + ngx_ssl_stapling_index = X509_get_ex_new_index(0, NULL, NULL, NULL, NULL); + if (ngx_ssl_stapling_index == -1) { - ngx_ssl_error(NGX_LOG_ALERT, log, 0, - "SSL_CTX_get_ex_new_index() failed"); + ngx_ssl_error(NGX_LOG_ALERT, log, 0, "X509_get_ex_new_index() failed"); return NGX_ERROR; } @@ -215,6 +222,12 @@ ngx_ssl_create(ngx_ssl_t *ssl, ngx_uint_t protocols, void *data) return NGX_ERROR; } + if (SSL_CTX_set_ex_data(ssl->ctx, ngx_ssl_certificate_index, NULL) == 0) { + ngx_ssl_error(NGX_LOG_EMERG, ssl->log, 0, + "SSL_CTX_set_ex_data() failed"); + return NGX_ERROR; + } + ssl->buffer_size = NGX_SSL_BUFSIZE; /* client side options */ @@ -309,6 +322,29 @@ ngx_ssl_create(ngx_ssl_t *ssl, ngx_uint_t protocols, void *data) ngx_int_t +ngx_ssl_certificates(ngx_conf_t *cf, ngx_ssl_t *ssl, ngx_array_t *certs, + ngx_array_t *keys, ngx_array_t *passwords) +{ + ngx_str_t *cert, *key; + ngx_uint_t i; + + cert = certs->elts; + key = keys->elts; + + for (i = 0; i < certs->nelts; i++) { + + if (ngx_ssl_certificate(cf, ssl, &cert[i], &key[i], passwords) + != NGX_OK) + { + return NGX_ERROR; + } + } + + return NGX_OK; +} + + +ngx_int_t ngx_ssl_certificate(ngx_conf_t *cf, ngx_ssl_t *ssl, ngx_str_t *cert, ngx_str_t *key, ngx_array_t *passwords) { @@ -351,6 +387,16 @@ ngx_ssl_certificate(ngx_conf_t *cf, ngx_ssl_t *ssl, ngx_str_t *cert, return NGX_ERROR; } + if (X509_set_ex_data(x509, ngx_ssl_next_certificate_index, + SSL_CTX_get_ex_data(ssl->ctx, ngx_ssl_certificate_index)) + == 0) + { + ngx_ssl_error(NGX_LOG_EMERG, ssl->log, 0, "X509_set_ex_data() failed"); + X509_free(x509); + BIO_free(bio); + return NGX_ERROR; + } + if (SSL_CTX_set_ex_data(ssl->ctx, ngx_ssl_certificate_index, x509) == 0) { @@ -361,8 +407,6 @@ ngx_ssl_certificate(ngx_conf_t *cf, ngx_ssl_t *ssl, ngx_str_t *cert, return NGX_ERROR; } - X509_free(x509); - /* read rest of the chain */ for ( ;; ) { @@ -387,6 +431,24 @@ ngx_ssl_certificate(ngx_conf_t *cf, ngx_ssl_t *ssl, ngx_str_t *cert, return NGX_ERROR; } +#ifdef SSL_CTRL_CHAIN_CERT + + /* + * SSL_CTX_add0_chain_cert() is needed to add chain to + * a particular certificate when multiple certificates are used; + * only available in OpenSSL 1.0.2+ + */ + + if (SSL_CTX_add0_chain_cert(ssl->ctx, x509) == 0) { + ngx_ssl_error(NGX_LOG_EMERG, ssl->log, 0, + "SSL_CTX_add0_chain_cert(\"%s\") failed", + cert->data); + X509_free(x509); + BIO_free(bio); + return NGX_ERROR; + } + +#else if (SSL_CTX_add_extra_chain_cert(ssl->ctx, x509) == 0) { ngx_ssl_error(NGX_LOG_EMERG, ssl->log, 0, "SSL_CTX_add_extra_chain_cert(\"%s\") failed", @@ -395,6 +457,7 @@ ngx_ssl_certificate(ngx_conf_t *cf, ngx_ssl_t *ssl, ngx_str_t *cert, BIO_free(bio); return NGX_ERROR; } +#endif } BIO_free(bio); @@ -918,52 +981,7 @@ ngx_ssl_dhparam(ngx_conf_t *cf, ngx_ssl_t *ssl, ngx_str_t *file) DH *dh; BIO *bio; - /* - * -----BEGIN DH PARAMETERS----- - * MIGHAoGBALu8LcrYRnSQfEP89YDpz9vZWKP1aLQtSwju1OsPs1BMbAMCducQgAxc - * y7qokiYUxb7spWWl/fHSh6K8BJvmd4Bg6RqSp1fjBI9osHb302zI8pul34HcLKcl - * 7OZicMyaUDXYzs7vnqAnSmOrHlj6/UmI0PZdFGdX2gcd8EXP4WubAgEC - * -----END DH PARAMETERS----- - */ - - static unsigned char dh1024_p[] = { - 0xBB, 0xBC, 0x2D, 0xCA, 0xD8, 0x46, 0x74, 0x90, 0x7C, 0x43, 0xFC, 0xF5, - 0x80, 0xE9, 0xCF, 0xDB, 0xD9, 0x58, 0xA3, 0xF5, 0x68, 0xB4, 0x2D, 0x4B, - 0x08, 0xEE, 0xD4, 0xEB, 0x0F, 0xB3, 0x50, 0x4C, 0x6C, 0x03, 0x02, 0x76, - 0xE7, 0x10, 0x80, 0x0C, 0x5C, 0xCB, 0xBA, 0xA8, 0x92, 0x26, 0x14, 0xC5, - 0xBE, 0xEC, 0xA5, 0x65, 0xA5, 0xFD, 0xF1, 0xD2, 0x87, 0xA2, 0xBC, 0x04, - 0x9B, 0xE6, 0x77, 0x80, 0x60, 0xE9, 0x1A, 0x92, 0xA7, 0x57, 0xE3, 0x04, - 0x8F, 0x68, 0xB0, 0x76, 0xF7, 0xD3, 0x6C, 0xC8, 0xF2, 0x9B, 0xA5, 0xDF, - 0x81, 0xDC, 0x2C, 0xA7, 0x25, 0xEC, 0xE6, 0x62, 0x70, 0xCC, 0x9A, 0x50, - 0x35, 0xD8, 0xCE, 0xCE, 0xEF, 0x9E, 0xA0, 0x27, 0x4A, 0x63, 0xAB, 0x1E, - 0x58, 0xFA, 0xFD, 0x49, 0x88, 0xD0, 0xF6, 0x5D, 0x14, 0x67, 0x57, 0xDA, - 0x07, 0x1D, 0xF0, 0x45, 0xCF, 0xE1, 0x6B, 0x9B - }; - - static unsigned char dh1024_g[] = { 0x02 }; - - if (file->len == 0) { - - dh = DH_new(); - if (dh == NULL) { - ngx_ssl_error(NGX_LOG_EMERG, ssl->log, 0, "DH_new() failed"); - return NGX_ERROR; - } - - dh->p = BN_bin2bn(dh1024_p, sizeof(dh1024_p), NULL); - dh->g = BN_bin2bn(dh1024_g, sizeof(dh1024_g), NULL); - - if (dh->p == NULL || dh->g == NULL) { - ngx_ssl_error(NGX_LOG_EMERG, ssl->log, 0, "BN_bin2bn() failed"); - DH_free(dh); - return NGX_ERROR; - } - - SSL_CTX_set_tmp_dh(ssl->ctx, dh); - - DH_free(dh); - return NGX_OK; } @@ -1000,27 +1018,69 @@ ngx_ssl_ecdh_curve(ngx_conf_t *cf, ngx_ssl_t *ssl, ngx_str_t *name) { #if OPENSSL_VERSION_NUMBER >= 0x0090800fL #ifndef OPENSSL_NO_ECDH - int nid; - EC_KEY *ecdh; /* * Elliptic-Curve Diffie-Hellman parameters are either "named curves" * from RFC 4492 section 5.1.1, or explicitly described curves over - * binary fields. OpenSSL only supports the "named curves", which provide + * binary fields. OpenSSL only supports the "named curves", which provide * maximum interoperability. */ - nid = OBJ_sn2nid((const char *) name->data); +#ifdef SSL_CTRL_SET_CURVES_LIST + + /* + * OpenSSL 1.0.2+ allows configuring a curve list instead of a single + * curve previously supported. By default an internal list is used, + * with prime256v1 being preferred by server in OpenSSL 1.0.2b+ + * and X25519 in OpenSSL 1.1.0+. + * + * By default a curve preferred by the client will be used for + * key exchange. The SSL_OP_CIPHER_SERVER_PREFERENCE option can + * be used to prefer server curves instead, similar to what it + * does for ciphers. + */ + + SSL_CTX_set_options(ssl->ctx, SSL_OP_SINGLE_ECDH_USE); + +#if SSL_CTRL_SET_ECDH_AUTO + /* not needed in OpenSSL 1.1.0+ */ + SSL_CTX_set_ecdh_auto(ssl->ctx, 1); +#endif + + if (ngx_strcmp(name->data, "auto") == 0) { + return NGX_OK; + } + + if (SSL_CTX_set1_curves_list(ssl->ctx, (char *) name->data) == 0) { + ngx_ssl_error(NGX_LOG_EMERG, ssl->log, 0, + "SSL_CTX_set1_curves_list(\"%s\") failed", name->data); + return NGX_ERROR; + } + +#else + + int nid; + char *curve; + EC_KEY *ecdh; + + if (ngx_strcmp(name->data, "auto") == 0) { + curve = "prime256v1"; + + } else { + curve = (char *) name->data; + } + + nid = OBJ_sn2nid(curve); if (nid == 0) { ngx_ssl_error(NGX_LOG_EMERG, ssl->log, 0, - "Unknown curve name \"%s\"", name->data); + "OBJ_sn2nid(\"%s\") failed: unknown curve", curve); return NGX_ERROR; } ecdh = EC_KEY_new_by_curve_name(nid); if (ecdh == NULL) { ngx_ssl_error(NGX_LOG_EMERG, ssl->log, 0, - "Unable to create curve \"%s\"", name->data); + "EC_KEY_new_by_curve_name(\"%s\") failed", curve); return NGX_ERROR; } @@ -1031,6 +1091,7 @@ ngx_ssl_ecdh_curve(ngx_conf_t *cf, ngx_ssl_t *ssl, ngx_str_t *name) EC_KEY_free(ecdh); #endif #endif +#endif return NGX_OK; } @@ -2102,7 +2163,7 @@ ngx_ssl_session_cache(ngx_ssl_t *ssl, ngx_str_t *sess_ctx, * session reuse (see SSL_SESS_CACHE_OFF above), then * Outlook Express fails to upload a sent email to * the Sent Items folder on the IMAP server via a separate IMAP - * connection in the background. Therefore we have a special + * connection in the background. Therefore we have a special * mode (SSL_SESS_CACHE_SERVER|SSL_SESS_CACHE_NO_INTERNAL_STORE) * where the server pretends that it supports session reuse, * but it does not actually store any session. @@ -2164,7 +2225,7 @@ ngx_ssl_session_id_context(ngx_ssl_t *ssl, ngx_str_t *sess_ctx) /* * Session ID context is set based on the string provided, - * the server certificate, and the client CA list. + * the server certificates, and the client CA list. */ md = EVP_MD_CTX_create(); @@ -2184,18 +2245,21 @@ ngx_ssl_session_id_context(ngx_ssl_t *ssl, ngx_str_t *sess_ctx) goto failed; } - cert = SSL_CTX_get_ex_data(ssl->ctx, ngx_ssl_certificate_index); - - if (X509_digest(cert, EVP_sha1(), buf, &len) == 0) { - ngx_ssl_error(NGX_LOG_EMERG, ssl->log, 0, - "X509_digest() failed"); - goto failed; - } + for (cert = SSL_CTX_get_ex_data(ssl->ctx, ngx_ssl_certificate_index); + cert; + cert = X509_get_ex_data(cert, ngx_ssl_next_certificate_index)) + { + if (X509_digest(cert, EVP_sha1(), buf, &len) == 0) { + ngx_ssl_error(NGX_LOG_EMERG, ssl->log, 0, + "X509_digest() failed"); + goto failed; + } - if (EVP_DigestUpdate(md, buf, len) == 0) { - ngx_ssl_error(NGX_LOG_EMERG, ssl->log, 0, - "EVP_DigestUpdate() failed"); - goto failed; + if (EVP_DigestUpdate(md, buf, len) == 0) { + ngx_ssl_error(NGX_LOG_EMERG, ssl->log, 0, + "EVP_DigestUpdate() failed"); + goto failed; + } } list = SSL_CTX_get_client_CA_list(ssl->ctx); @@ -2951,6 +3015,16 @@ ngx_ssl_cleanup_ctx(void *data) { ngx_ssl_t *ssl = data; + X509 *cert, *next; + + cert = SSL_CTX_get_ex_data(ssl->ctx, ngx_ssl_certificate_index); + + while (cert) { + next = X509_get_ex_data(cert, ngx_ssl_next_certificate_index); + X509_free(cert); + cert = next; + } + SSL_CTX_free(ssl->ctx); } @@ -3526,7 +3600,7 @@ ngx_openssl_engine(ngx_conf_t *cf, ngx_command_t *cmd, void *conf) value = cf->args->elts; - engine = ENGINE_by_id((const char *) value[1].data); + engine = ENGINE_by_id((char *) value[1].data); if (engine == NULL) { ngx_ssl_error(NGX_LOG_WARN, cf->log, 0, Renamed: vendor/nginx-1.11.0/src/event/ngx_event_openssl.h (+3 -0) 97% =================================================================== --- vendor/nginx-1.9.15/src/event/ngx_event_openssl.h 2016-05-26 13:57:19 +0900 (09654db) +++ vendor/nginx-1.11.0/src/event/ngx_event_openssl.h 2016-05-26 16:28:26 +0900 (fc9ec05) @@ -140,6 +140,8 @@ typedef struct { ngx_int_t ngx_ssl_init(ngx_log_t *log); ngx_int_t ngx_ssl_create(ngx_ssl_t *ssl, ngx_uint_t protocols, void *data); +ngx_int_t ngx_ssl_certificates(ngx_conf_t *cf, ngx_ssl_t *ssl, + ngx_array_t *certs, ngx_array_t *keys, ngx_array_t *passwords); ngx_int_t ngx_ssl_certificate(ngx_conf_t *cf, ngx_ssl_t *ssl, ngx_str_t *cert, ngx_str_t *key, ngx_array_t *passwords); ngx_int_t ngx_ssl_client_certificate(ngx_conf_t *cf, ngx_ssl_t *ssl, @@ -227,6 +229,7 @@ extern int ngx_ssl_server_conf_index; extern int ngx_ssl_session_cache_index; extern int ngx_ssl_session_ticket_keys_index; extern int ngx_ssl_certificate_index; +extern int ngx_ssl_next_certificate_index; extern int ngx_ssl_stapling_index; Renamed: vendor/nginx-1.11.0/src/event/ngx_event_openssl_stapling.c (+86 -50) 93% =================================================================== --- vendor/nginx-1.9.15/src/event/ngx_event_openssl_stapling.c 2016-05-26 13:57:19 +0900 (5322b1b) +++ vendor/nginx-1.11.0/src/event/ngx_event_openssl_stapling.c 2016-05-26 16:28:26 +0900 (49762eb) @@ -83,11 +83,14 @@ struct ngx_ssl_ocsp_ctx_s { }; +static ngx_int_t ngx_ssl_stapling_certificate(ngx_conf_t *cf, ngx_ssl_t *ssl, + X509 *cert, ngx_str_t *file, ngx_str_t *responder, ngx_uint_t verify); static ngx_int_t ngx_ssl_stapling_file(ngx_conf_t *cf, ngx_ssl_t *ssl, - ngx_str_t *file); -static ngx_int_t ngx_ssl_stapling_issuer(ngx_conf_t *cf, ngx_ssl_t *ssl); + ngx_ssl_stapling_t *staple, ngx_str_t *file); +static ngx_int_t ngx_ssl_stapling_issuer(ngx_conf_t *cf, ngx_ssl_t *ssl, + ngx_ssl_stapling_t *staple); static ngx_int_t ngx_ssl_stapling_responder(ngx_conf_t *cf, ngx_ssl_t *ssl, - ngx_str_t *responder); + ngx_ssl_stapling_t *staple, ngx_str_t *responder); static int ngx_ssl_certificate_status_callback(ngx_ssl_conn_t *ssl_conn, void *data); @@ -121,9 +124,32 @@ ngx_int_t ngx_ssl_stapling(ngx_conf_t *cf, ngx_ssl_t *ssl, ngx_str_t *file, ngx_str_t *responder, ngx_uint_t verify) { - ngx_int_t rc; - ngx_pool_cleanup_t *cln; - ngx_ssl_stapling_t *staple; + X509 *cert; + + for (cert = SSL_CTX_get_ex_data(ssl->ctx, ngx_ssl_certificate_index); + cert; + cert = X509_get_ex_data(cert, ngx_ssl_next_certificate_index)) + { + if (ngx_ssl_stapling_certificate(cf, ssl, cert, file, responder, verify) + != NGX_OK) + { + return NGX_ERROR; + } + } + + SSL_CTX_set_tlsext_status_cb(ssl->ctx, ngx_ssl_certificate_status_callback); + + return NGX_OK; +} + + +static ngx_int_t +ngx_ssl_stapling_certificate(ngx_conf_t *cf, ngx_ssl_t *ssl, X509 *cert, + ngx_str_t *file, ngx_str_t *responder, ngx_uint_t verify) +{ + ngx_int_t rc; + ngx_pool_cleanup_t *cln; + ngx_ssl_stapling_t *staple; staple = ngx_pcalloc(cf->pool, sizeof(ngx_ssl_stapling_t)); if (staple == NULL) { @@ -138,29 +164,27 @@ ngx_ssl_stapling(ngx_conf_t *cf, ngx_ssl_t *ssl, ngx_str_t *file, cln->handler = ngx_ssl_stapling_cleanup; cln->data = staple; - if (SSL_CTX_set_ex_data(ssl->ctx, ngx_ssl_stapling_index, staple) - == 0) - { - ngx_ssl_error(NGX_LOG_EMERG, ssl->log, 0, - "SSL_CTX_set_ex_data() failed"); + if (X509_set_ex_data(cert, ngx_ssl_stapling_index, staple) == 0) { + ngx_ssl_error(NGX_LOG_EMERG, ssl->log, 0, "X509_set_ex_data() failed"); return NGX_ERROR; } staple->ssl_ctx = ssl->ctx; staple->timeout = 60000; staple->verify = verify; + staple->cert = cert; if (file->len) { /* use OCSP response from the file */ - if (ngx_ssl_stapling_file(cf, ssl, file) != NGX_OK) { + if (ngx_ssl_stapling_file(cf, ssl, staple, file) != NGX_OK) { return NGX_ERROR; } - goto done; + return NGX_OK; } - rc = ngx_ssl_stapling_issuer(cf, ssl); + rc = ngx_ssl_stapling_issuer(cf, ssl, staple); if (rc == NGX_DECLINED) { return NGX_OK; @@ -170,7 +194,7 @@ ngx_ssl_stapling(ngx_conf_t *cf, ngx_ssl_t *ssl, ngx_str_t *file, return NGX_ERROR; } - rc = ngx_ssl_stapling_responder(cf, ssl, responder); + rc = ngx_ssl_stapling_responder(cf, ssl, staple, responder); if (rc == NGX_DECLINED) { return NGX_OK; @@ -180,25 +204,18 @@ ngx_ssl_stapling(ngx_conf_t *cf, ngx_ssl_t *ssl, ngx_str_t *file, return NGX_ERROR; } -done: - - SSL_CTX_set_tlsext_status_cb(ssl->ctx, ngx_ssl_certificate_status_callback); - SSL_CTX_set_tlsext_status_arg(ssl->ctx, staple); - return NGX_OK; } static ngx_int_t -ngx_ssl_stapling_file(ngx_conf_t *cf, ngx_ssl_t *ssl, ngx_str_t *file) +ngx_ssl_stapling_file(ngx_conf_t *cf, ngx_ssl_t *ssl, + ngx_ssl_stapling_t *staple, ngx_str_t *file) { - BIO *bio; - int len; - u_char *p, *buf; - OCSP_RESPONSE *response; - ngx_ssl_stapling_t *staple; - - staple = SSL_CTX_get_ex_data(ssl->ctx, ngx_ssl_stapling_index); + BIO *bio; + int len; + u_char *p, *buf; + OCSP_RESPONSE *response; if (ngx_conf_full_name(cf->cycle, file, 1) != NGX_OK) { return NGX_ERROR; @@ -259,19 +276,24 @@ failed: static ngx_int_t -ngx_ssl_stapling_issuer(ngx_conf_t *cf, ngx_ssl_t *ssl) +ngx_ssl_stapling_issuer(ngx_conf_t *cf, ngx_ssl_t *ssl, + ngx_ssl_stapling_t *staple) { - int i, n, rc; - X509 *cert, *issuer; - X509_STORE *store; - X509_STORE_CTX *store_ctx; - STACK_OF(X509) *chain; - ngx_ssl_stapling_t *staple; + int i, n, rc; + X509 *cert, *issuer; + X509_STORE *store; + X509_STORE_CTX *store_ctx; + STACK_OF(X509) *chain; + + cert = staple->cert; - staple = SSL_CTX_get_ex_data(ssl->ctx, ngx_ssl_stapling_index); - cert = SSL_CTX_get_ex_data(ssl->ctx, ngx_ssl_certificate_index); +#ifdef SSL_CTRL_SELECT_CURRENT_CERT + /* OpenSSL 1.0.2+ */ + SSL_CTX_select_current_cert(ssl->ctx, cert); +#endif -#if OPENSSL_VERSION_NUMBER >= 0x10001000L +#ifdef SSL_CTRL_GET_EXTRA_CHAIN_CERTS + /* OpenSSL 1.0.1+ */ SSL_CTX_get_extra_chain_certs(ssl->ctx, &chain); #else chain = ssl->ctx->extra_certs; @@ -294,7 +316,6 @@ ngx_ssl_stapling_issuer(ngx_conf_t *cf, ngx_ssl_t *ssl) ngx_log_debug1(NGX_LOG_DEBUG_EVENT, ssl->log, 0, "SSL get issuer: found %p in extra certs", issuer); - staple->cert = cert; staple->issuer = issuer; return NGX_OK; @@ -343,7 +364,6 @@ ngx_ssl_stapling_issuer(ngx_conf_t *cf, ngx_ssl_t *ssl) ngx_log_debug1(NGX_LOG_DEBUG_EVENT, ssl->log, 0, "SSL get issuer: found %p in cert store", issuer); - staple->cert = cert; staple->issuer = issuer; return NGX_OK; @@ -351,15 +371,13 @@ ngx_ssl_stapling_issuer(ngx_conf_t *cf, ngx_ssl_t *ssl) static ngx_int_t -ngx_ssl_stapling_responder(ngx_conf_t *cf, ngx_ssl_t *ssl, ngx_str_t *responder) +ngx_ssl_stapling_responder(ngx_conf_t *cf, ngx_ssl_t *ssl, + ngx_ssl_stapling_t *staple, ngx_str_t *responder) { ngx_url_t u; char *s; - ngx_ssl_stapling_t *staple; STACK_OF(OPENSSL_STRING) *aia; - staple = SSL_CTX_get_ex_data(ssl->ctx, ngx_ssl_stapling_index); - if (responder->len == 0) { /* extract OCSP responder URL from certificate */ @@ -443,12 +461,17 @@ ngx_int_t ngx_ssl_stapling_resolver(ngx_conf_t *cf, ngx_ssl_t *ssl, ngx_resolver_t *resolver, ngx_msec_t resolver_timeout) { + X509 *cert; ngx_ssl_stapling_t *staple; - staple = SSL_CTX_get_ex_data(ssl->ctx, ngx_ssl_stapling_index); - - staple->resolver = resolver; - staple->resolver_timeout = resolver_timeout; + for (cert = SSL_CTX_get_ex_data(ssl->ctx, ngx_ssl_certificate_index); + cert; + cert = X509_get_ex_data(cert, ngx_ssl_next_certificate_index)) + { + staple = X509_get_ex_data(cert, ngx_ssl_stapling_index); + staple->resolver = resolver; + staple->resolver_timeout = resolver_timeout; + } return NGX_OK; } @@ -458,6 +481,7 @@ static int ngx_ssl_certificate_status_callback(ngx_ssl_conn_t *ssl_conn, void *data) { int rc; + X509 *cert; u_char *p; ngx_connection_t *c; ngx_ssl_stapling_t *staple; @@ -467,9 +491,15 @@ ngx_ssl_certificate_status_callback(ngx_ssl_conn_t *ssl_conn, void *data) ngx_log_debug0(NGX_LOG_DEBUG_EVENT, c->log, 0, "SSL certificate status callback"); - staple = data; rc = SSL_TLSEXT_ERR_NOACK; + cert = SSL_get_certificate(ssl_conn); + staple = X509_get_ex_data(cert, ngx_ssl_stapling_index); + + if (staple == NULL) { + return rc; + } + if (staple->staple.len && staple->valid >= ngx_time()) { @@ -597,7 +627,13 @@ ngx_ssl_stapling_ocsp_handler(ngx_ssl_ocsp_ctx_t *ctx) goto error; } -#if OPENSSL_VERSION_NUMBER >= 0x10001000L +#ifdef SSL_CTRL_SELECT_CURRENT_CERT + /* OpenSSL 1.0.2+ */ + SSL_CTX_select_current_cert(staple->ssl_ctx, ctx->cert); +#endif + +#ifdef SSL_CTRL_GET_EXTRA_CHAIN_CERTS + /* OpenSSL 1.0.1+ */ SSL_CTX_get_extra_chain_certs(staple->ssl_ctx, &chain); #else chain = staple->ssl_ctx->extra_certs; Renamed: vendor/nginx-1.11.0/src/event/ngx_event_pipe.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/src/event/ngx_event_pipe.h (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/src/event/ngx_event_posted.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/src/event/ngx_event_posted.h (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/src/event/ngx_event_timer.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/src/event/ngx_event_timer.h (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/src/http/modules/ngx_http_access_module.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/src/http/modules/ngx_http_addition_filter_module.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/src/http/modules/ngx_http_auth_basic_module.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/src/http/modules/ngx_http_auth_request_module.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/src/http/modules/ngx_http_autoindex_module.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/src/http/modules/ngx_http_browser_module.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/src/http/modules/ngx_http_charset_filter_module.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/src/http/modules/ngx_http_chunked_filter_module.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/src/http/modules/ngx_http_dav_module.c (+6 -0) 99% =================================================================== --- vendor/nginx-1.9.15/src/http/modules/ngx_http_dav_module.c 2016-05-26 13:57:19 +0900 (3600265) +++ vendor/nginx-1.11.0/src/http/modules/ngx_http_dav_module.c 2016-05-26 16:28:26 +0900 (012a0fb) @@ -161,6 +161,12 @@ ngx_http_dav_handler(ngx_http_request_t *r) return NGX_HTTP_CONFLICT; } + if (r->headers_in.content_range) { + ngx_log_error(NGX_LOG_ERR, r->connection->log, 0, + "PUT with range is unsupported"); + return NGX_HTTP_NOT_IMPLEMENTED; + } + r->request_body_in_file_only = 1; r->request_body_in_persistent_file = 1; r->request_body_in_clean_file = 1; Renamed: vendor/nginx-1.11.0/src/http/modules/ngx_http_degradation_module.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/src/http/modules/ngx_http_empty_gif_module.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/src/http/modules/ngx_http_fastcgi_module.c (+1 -1) 99% =================================================================== --- vendor/nginx-1.9.15/src/http/modules/ngx_http_fastcgi_module.c 2016-05-26 13:57:19 +0900 (2d288ce) +++ vendor/nginx-1.11.0/src/http/modules/ngx_http_fastcgi_module.c 2016-05-26 16:28:26 +0900 (62502b0) @@ -279,7 +279,7 @@ static ngx_command_t ngx_http_fastcgi_commands[] = { NULL }, { ngx_string("fastcgi_bind"), - NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_TAKE1, + NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_TAKE12, ngx_http_upstream_bind_set_slot, NGX_HTTP_LOC_CONF_OFFSET, offsetof(ngx_http_fastcgi_loc_conf_t, upstream.local), Renamed: vendor/nginx-1.11.0/src/http/modules/ngx_http_flv_module.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/src/http/modules/ngx_http_geo_module.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/src/http/modules/ngx_http_geoip_module.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/src/http/modules/ngx_http_gunzip_filter_module.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/src/http/modules/ngx_http_gzip_filter_module.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/src/http/modules/ngx_http_gzip_static_module.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/src/http/modules/ngx_http_headers_filter_module.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/src/http/modules/ngx_http_image_filter_module.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/src/http/modules/ngx_http_index_module.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/src/http/modules/ngx_http_limit_conn_module.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/src/http/modules/ngx_http_limit_req_module.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/src/http/modules/ngx_http_log_module.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/src/http/modules/ngx_http_map_module.c (+67 -59) 88% =================================================================== --- vendor/nginx-1.9.15/src/http/modules/ngx_http_map_module.c 2016-05-26 13:57:19 +0900 (091ff09) +++ vendor/nginx-1.11.0/src/http/modules/ngx_http_map_module.c 2016-05-26 16:28:26 +0900 (732aa5d) @@ -20,7 +20,6 @@ typedef struct { ngx_hash_keys_arrays_t keys; ngx_array_t *values_hash; - ngx_array_t var_values; #if (NGX_PCRE) ngx_array_t regexes; #endif @@ -110,7 +109,8 @@ ngx_http_map_variable(ngx_http_request_t *r, ngx_http_variable_value_t *v, { ngx_http_map_ctx_t *map = (ngx_http_map_ctx_t *) data; - ngx_str_t val; + ngx_str_t val, str; + ngx_http_complex_value_t *cv; ngx_http_variable_value_t *value; ngx_log_debug0(NGX_LOG_DEBUG_HTTP, r->connection->log, 0, @@ -131,14 +131,21 @@ ngx_http_map_variable(ngx_http_request_t *r, ngx_http_variable_value_t *v, } if (!value->valid) { - value = ngx_http_get_flushed_variable(r, (uintptr_t) value->data); + cv = (ngx_http_complex_value_t *) value->data; - if (value == NULL || value->not_found) { - value = &ngx_http_variable_null_value; + if (ngx_http_complex_value(r, cv, &str) != NGX_OK) { + return NGX_ERROR; } - } - *v = *value; + v->valid = 1; + v->no_cacheable = 0; + v->not_found = 0; + v->len = str.len; + v->data = str.data; + + } else { + *v = *value; + } ngx_log_debug2(NGX_LOG_DEBUG_HTTP, r->connection->log, 0, "http map: \"%V\" \"%v\"", &val, v); @@ -246,14 +253,6 @@ ngx_http_map_block(ngx_conf_t *cf, ngx_command_t *cmd, void *conf) return NGX_CONF_ERROR; } - if (ngx_array_init(&ctx.var_values, cf->pool, 2, - sizeof(ngx_http_variable_value_t)) - != NGX_OK) - { - ngx_destroy_pool(pool); - return NGX_CONF_ERROR; - } - #if (NGX_PCRE) if (ngx_array_init(&ctx.regexes, cf->pool, 2, sizeof(ngx_http_map_regex_t)) != NGX_OK) @@ -375,11 +374,15 @@ ngx_http_map_cmp_dns_wildcards(const void *one, const void *two) static char * ngx_http_map(ngx_conf_t *cf, ngx_command_t *dummy, void *conf) { - ngx_int_t rv, index; - ngx_str_t *value, name; - ngx_uint_t i, key; - ngx_http_map_conf_ctx_t *ctx; - ngx_http_variable_value_t *var, **vp; + u_char *data; + size_t len; + ngx_int_t rv; + ngx_str_t *value, v; + ngx_uint_t i, key; + ngx_http_map_conf_ctx_t *ctx; + ngx_http_complex_value_t cv, *cvp; + ngx_http_variable_value_t *var, **vp; + ngx_http_compile_complex_value_t ccv; ctx = cf->ctx; @@ -401,39 +404,6 @@ ngx_http_map(ngx_conf_t *cf, ngx_command_t *dummy, void *conf) return ngx_conf_include(cf, dummy, conf); } - if (value[1].data[0] == '$') { - name = value[1]; - name.len--; - name.data++; - - index = ngx_http_get_variable_index(ctx->cf, &name); - if (index == NGX_ERROR) { - return NGX_CONF_ERROR; - } - - var = ctx->var_values.elts; - - for (i = 0; i < ctx->var_values.nelts; i++) { - if (index == (intptr_t) var[i].data) { - var = &var[i]; - goto found; - } - } - - var = ngx_array_push(&ctx->var_values); - if (var == NULL) { - return NGX_CONF_ERROR; - } - - var->valid = 0; - var->no_cacheable = 0; - var->not_found = 0; - var->len = 0; - var->data = (u_char *) (intptr_t) index; - - goto found; - } - key = 0; for (i = 0; i < value[1].len; i++) { @@ -446,11 +416,22 @@ ngx_http_map(ngx_conf_t *cf, ngx_command_t *dummy, void *conf) if (vp) { for (i = 0; i < ctx->values_hash[key].nelts; i++) { - if (value[1].len != (size_t) vp[i]->len) { + + if (vp[i]->valid) { + data = vp[i]->data; + len = vp[i]->len; + + } else { + cvp = (ngx_http_complex_value_t *) vp[i]->data; + data = cvp->value.data; + len = cvp->value.len; + } + + if (value[1].len != len) { continue; } - if (ngx_strncmp(value[1].data, vp[i]->data, value[1].len) == 0) { + if (ngx_strncmp(value[1].data, data, len) == 0) { var = vp[i]; goto found; } @@ -470,13 +451,40 @@ ngx_http_map(ngx_conf_t *cf, ngx_command_t *dummy, void *conf) return NGX_CONF_ERROR; } - var->len = value[1].len; - var->data = ngx_pstrdup(ctx->keys.pool, &value[1]); - if (var->data == NULL) { + v.len = value[1].len; + v.data = ngx_pstrdup(ctx->keys.pool, &value[1]); + if (v.data == NULL) { + return NGX_CONF_ERROR; + } + + ngx_memzero(&ccv, sizeof(ngx_http_compile_complex_value_t)); + + ccv.cf = ctx->cf; + ccv.value = &v; + ccv.complex_value = &cv; + + if (ngx_http_compile_complex_value(&ccv) != NGX_OK) { return NGX_CONF_ERROR; } - var->valid = 1; + if (cv.lengths != NULL) { + cvp = ngx_palloc(ctx->keys.pool, sizeof(ngx_http_complex_value_t)); + if (cvp == NULL) { + return NGX_CONF_ERROR; + } + + *cvp = cv; + + var->len = 0; + var->data = (u_char *) cvp; + var->valid = 0; + + } else { + var->len = v.len; + var->data = v.data; + var->valid = 1; + } + var->no_cacheable = 0; var->not_found = 0; Renamed: vendor/nginx-1.11.0/src/http/modules/ngx_http_memcached_module.c (+1 -1) 99% =================================================================== --- vendor/nginx-1.9.15/src/http/modules/ngx_http_memcached_module.c 2016-05-26 13:57:19 +0900 (d31996a) +++ vendor/nginx-1.11.0/src/http/modules/ngx_http_memcached_module.c 2016-05-26 16:28:26 +0900 (69f28fa) @@ -61,7 +61,7 @@ static ngx_command_t ngx_http_memcached_commands[] = { NULL }, { ngx_string("memcached_bind"), - NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_TAKE1, + NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_TAKE12, ngx_http_upstream_bind_set_slot, NGX_HTTP_LOC_CONF_OFFSET, offsetof(ngx_http_memcached_loc_conf_t, upstream.local), Renamed: vendor/nginx-1.11.0/src/http/modules/ngx_http_mp4_module.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/src/http/modules/ngx_http_not_modified_filter_module.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/src/http/modules/ngx_http_proxy_module.c (+1 -1) 99% =================================================================== --- vendor/nginx-1.9.15/src/http/modules/ngx_http_proxy_module.c 2016-05-26 13:57:19 +0900 (c24ef17) +++ vendor/nginx-1.11.0/src/http/modules/ngx_http_proxy_module.c 2016-05-26 16:28:26 +0900 (5efee7b) @@ -316,7 +316,7 @@ static ngx_command_t ngx_http_proxy_commands[] = { NULL }, { ngx_string("proxy_bind"), - NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_TAKE1, + NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_TAKE12, ngx_http_upstream_bind_set_slot, NGX_HTTP_LOC_CONF_OFFSET, offsetof(ngx_http_proxy_loc_conf_t, upstream.local), Renamed: vendor/nginx-1.11.0/src/http/modules/ngx_http_random_index_module.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/src/http/modules/ngx_http_range_filter_module.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/src/http/modules/ngx_http_realip_module.c (+97 -4) 84% =================================================================== --- vendor/nginx-1.9.15/src/http/modules/ngx_http_realip_module.c 2016-05-26 13:57:19 +0900 (b7befe6) +++ vendor/nginx-1.11.0/src/http/modules/ngx_http_realip_module.c 2016-05-26 16:28:26 +0900 (fca81eb) @@ -45,10 +45,14 @@ static char *ngx_http_realip_merge_loc_conf(ngx_conf_t *cf, void *parent, void *child); static ngx_int_t ngx_http_realip_add_variables(ngx_conf_t *cf); static ngx_int_t ngx_http_realip_init(ngx_conf_t *cf); +static ngx_http_realip_ctx_t *ngx_http_realip_get_module_ctx( + ngx_http_request_t *r); static ngx_int_t ngx_http_realip_remote_addr_variable(ngx_http_request_t *r, ngx_http_variable_value_t *v, uintptr_t data); +static ngx_int_t ngx_http_realip_remote_port_variable(ngx_http_request_t *r, + ngx_http_variable_value_t *v, uintptr_t data); static ngx_command_t ngx_http_realip_commands[] = { @@ -115,6 +119,9 @@ static ngx_http_variable_t ngx_http_realip_vars[] = { { ngx_string("realip_remote_addr"), NULL, ngx_http_realip_remote_addr_variable, 0, 0, 0 }, + { ngx_string("realip_remote_port"), NULL, + ngx_http_realip_remote_port_variable, 0, 0, 0 }, + { ngx_null_string, NULL, NULL, 0, 0, 0 } }; @@ -131,6 +138,10 @@ ngx_http_realip_handler(ngx_http_request_t *r) ngx_list_part_t *part; ngx_table_elt_t *header; ngx_connection_t *c; + struct sockaddr_in *sin; +#if (NGX_HAVE_INET6) + struct sockaddr_in6 *sin6; +#endif ngx_http_realip_ctx_t *ctx; ngx_http_realip_loc_conf_t *rlcf; @@ -230,6 +241,24 @@ found: rlcf->recursive) != NGX_DECLINED) { + if (rlcf->type == NGX_HTTP_REALIP_PROXY) { + + switch (addr.sockaddr->sa_family) { + +#if (NGX_HAVE_INET6) + case AF_INET6: + sin6 = (struct sockaddr_in6 *) addr.sockaddr; + sin6->sin6_port = htons(c->proxy_protocol_port); + break; +#endif + + default: /* AF_INET */ + sin = (struct sockaddr_in *) addr.sockaddr; + sin->sin_port = htons(c->proxy_protocol_port); + break; + } + } + return ngx_http_realip_set_addr(r, &addr); } @@ -358,6 +387,10 @@ ngx_http_realip(ngx_conf_t *cf, ngx_command_t *cmd, void *conf) ngx_str_t *value; + if (rlcf->type != NGX_CONF_UNSET_UINT) { + return "is duplicate"; + } + value = cf->args->elts; if (ngx_strcmp(value[1].data, "X-Real-IP") == 0) { @@ -475,11 +508,9 @@ ngx_http_realip_init(ngx_conf_t *cf) } -static ngx_int_t -ngx_http_realip_remote_addr_variable(ngx_http_request_t *r, - ngx_http_variable_value_t *v, uintptr_t data) +static ngx_http_realip_ctx_t * +ngx_http_realip_get_module_ctx(ngx_http_request_t *r) { - ngx_str_t *addr_text; ngx_pool_cleanup_t *cln; ngx_http_realip_ctx_t *ctx; @@ -500,6 +531,19 @@ ngx_http_realip_remote_addr_variable(ngx_http_request_t *r, } } + return ctx; +} + + +static ngx_int_t +ngx_http_realip_remote_addr_variable(ngx_http_request_t *r, + ngx_http_variable_value_t *v, uintptr_t data) +{ + ngx_str_t *addr_text; + ngx_http_realip_ctx_t *ctx; + + ctx = ngx_http_realip_get_module_ctx(r); + addr_text = ctx ? &ctx->addr_text : &r->connection->addr_text; v->len = addr_text->len; @@ -510,3 +554,52 @@ ngx_http_realip_remote_addr_variable(ngx_http_request_t *r, return NGX_OK; } + + +static ngx_int_t +ngx_http_realip_remote_port_variable(ngx_http_request_t *r, + ngx_http_variable_value_t *v, uintptr_t data) +{ + ngx_uint_t port; + struct sockaddr *sa; + ngx_http_realip_ctx_t *ctx; + + ctx = ngx_http_realip_get_module_ctx(r); + + sa = ctx ? ctx->sockaddr : r->connection->sockaddr; + + v->len = 0; + v->valid = 1; + v->no_cacheable = 0; + v->not_found = 0; + + v->data = ngx_pnalloc(r->pool, sizeof("65535") - 1); + if (v->data == NULL) { + return NGX_ERROR; + } + + switch (sa->sa_family) { + +#if (NGX_HAVE_INET6) + case AF_INET6: + port = ntohs(((struct sockaddr_in6 *) sa)->sin6_port); + break; +#endif + +#if (NGX_HAVE_UNIX_DOMAIN) + case AF_UNIX: + port = 0; + break; +#endif + + default: /* AF_INET */ + port = ntohs(((struct sockaddr_in *) sa)->sin_port); + break; + } + + if (port > 0 && port < 65536) { + v->len = ngx_sprintf(v->data, "%ui", port) - v->data; + } + + return NGX_OK; +} Renamed: vendor/nginx-1.11.0/src/http/modules/ngx_http_referer_module.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/src/http/modules/ngx_http_rewrite_module.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/src/http/modules/ngx_http_scgi_module.c (+1 -1) 99% =================================================================== --- vendor/nginx-1.9.15/src/http/modules/ngx_http_scgi_module.c 2016-05-26 13:57:19 +0900 (f09617e) +++ vendor/nginx-1.11.0/src/http/modules/ngx_http_scgi_module.c 2016-05-26 16:28:26 +0900 (36656ec) @@ -136,7 +136,7 @@ static ngx_command_t ngx_http_scgi_commands[] = { NULL }, { ngx_string("scgi_bind"), - NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_TAKE1, + NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_TAKE12, ngx_http_upstream_bind_set_slot, NGX_HTTP_LOC_CONF_OFFSET, offsetof(ngx_http_scgi_loc_conf_t, upstream.local), Renamed: vendor/nginx-1.11.0/src/http/modules/ngx_http_secure_link_module.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/src/http/modules/ngx_http_slice_filter_module.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/src/http/modules/ngx_http_split_clients_module.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/src/http/modules/ngx_http_ssi_filter_module.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/src/http/modules/ngx_http_ssi_filter_module.h (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/src/http/modules/ngx_http_ssl_module.c (+32 -16) 94% =================================================================== --- vendor/nginx-1.9.15/src/http/modules/ngx_http_ssl_module.c 2016-05-26 13:57:19 +0900 (6a4108c) +++ vendor/nginx-1.11.0/src/http/modules/ngx_http_ssl_module.c 2016-05-26 16:28:26 +0900 (7f23c86) @@ -15,7 +15,7 @@ typedef ngx_int_t (*ngx_ssl_variable_handler_pt)(ngx_connection_t *c, #define NGX_DEFAULT_CIPHERS "HIGH:!aNULL:!MD5" -#define NGX_DEFAULT_ECDH_CURVE "prime256v1" +#define NGX_DEFAULT_ECDH_CURVE "auto" #define NGX_HTTP_NPN_ADVERTISE "\x08http/1.1" @@ -81,16 +81,16 @@ static ngx_command_t ngx_http_ssl_commands[] = { { ngx_string("ssl_certificate"), NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_CONF_TAKE1, - ngx_conf_set_str_slot, + ngx_conf_set_str_array_slot, NGX_HTTP_SRV_CONF_OFFSET, - offsetof(ngx_http_ssl_srv_conf_t, certificate), + offsetof(ngx_http_ssl_srv_conf_t, certificates), NULL }, { ngx_string("ssl_certificate_key"), NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_CONF_TAKE1, - ngx_conf_set_str_slot, + ngx_conf_set_str_array_slot, NGX_HTTP_SRV_CONF_OFFSET, - offsetof(ngx_http_ssl_srv_conf_t, certificate_key), + offsetof(ngx_http_ssl_srv_conf_t, certificate_keys), NULL }, { ngx_string("ssl_password_file"), @@ -508,8 +508,6 @@ ngx_http_ssl_create_srv_conf(ngx_conf_t *cf) * set by ngx_pcalloc(): * * sscf->protocols = 0; - * sscf->certificate = { 0, NULL }; - * sscf->certificate_key = { 0, NULL }; * sscf->dhparam = { 0, NULL }; * sscf->ecdh_curve = { 0, NULL }; * sscf->client_certificate = { 0, NULL }; @@ -526,6 +524,8 @@ ngx_http_ssl_create_srv_conf(ngx_conf_t *cf) sscf->buffer_size = NGX_CONF_UNSET_SIZE; sscf->verify = NGX_CONF_UNSET_UINT; sscf->verify_depth = NGX_CONF_UNSET_UINT; + sscf->certificates = NGX_CONF_UNSET_PTR; + sscf->certificate_keys = NGX_CONF_UNSET_PTR; sscf->passwords = NGX_CONF_UNSET_PTR; sscf->builtin_session_cache = NGX_CONF_UNSET; sscf->session_timeout = NGX_CONF_UNSET; @@ -573,8 +573,9 @@ ngx_http_ssl_merge_srv_conf(ngx_conf_t *cf, void *parent, void *child) ngx_conf_merge_uint_value(conf->verify, prev->verify, 0); ngx_conf_merge_uint_value(conf->verify_depth, prev->verify_depth, 1); - ngx_conf_merge_str_value(conf->certificate, prev->certificate, ""); - ngx_conf_merge_str_value(conf->certificate_key, prev->certificate_key, ""); + ngx_conf_merge_ptr_value(conf->certificates, prev->certificates, NULL); + ngx_conf_merge_ptr_value(conf->certificate_keys, prev->certificate_keys, + NULL); ngx_conf_merge_ptr_value(conf->passwords, prev->passwords, NULL); @@ -601,7 +602,7 @@ ngx_http_ssl_merge_srv_conf(ngx_conf_t *cf, void *parent, void *child) if (conf->enable) { - if (conf->certificate.len == 0) { + if (conf->certificates == NULL) { ngx_log_error(NGX_LOG_EMERG, cf->log, 0, "no \"ssl_certificate\" is defined for " "the \"ssl\" directive in %s:%ui", @@ -609,7 +610,7 @@ ngx_http_ssl_merge_srv_conf(ngx_conf_t *cf, void *parent, void *child) return NGX_CONF_ERROR; } - if (conf->certificate_key.len == 0) { + if (conf->certificate_keys == NULL) { ngx_log_error(NGX_LOG_EMERG, cf->log, 0, "no \"ssl_certificate_key\" is defined for " "the \"ssl\" directive in %s:%ui", @@ -617,16 +618,31 @@ ngx_http_ssl_merge_srv_conf(ngx_conf_t *cf, void *parent, void *child) return NGX_CONF_ERROR; } + if (conf->certificate_keys->nelts < conf->certificates->nelts) { + ngx_log_error(NGX_LOG_EMERG, cf->log, 0, + "no \"ssl_certificate_key\" is defined " + "for certificate \"%V\" and " + "the \"ssl\" directive in %s:%ui", + ((ngx_str_t *) conf->certificates->elts) + + conf->certificates->nelts - 1, + conf->file, conf->line); + return NGX_CONF_ERROR; + } + } else { - if (conf->certificate.len == 0) { + if (conf->certificates == NULL) { return NGX_CONF_OK; } - if (conf->certificate_key.len == 0) { + if (conf->certificate_keys == NULL + || conf->certificate_keys->nelts < conf->certificates->nelts) + { ngx_log_error(NGX_LOG_EMERG, cf->log, 0, "no \"ssl_certificate_key\" is defined " - "for certificate \"%V\"", &conf->certificate); + "for certificate \"%V\"", + ((ngx_str_t *) conf->certificates->elts) + + conf->certificates->nelts - 1); return NGX_CONF_ERROR; } } @@ -666,8 +682,8 @@ ngx_http_ssl_merge_srv_conf(ngx_conf_t *cf, void *parent, void *child) cln->handler = ngx_ssl_cleanup_ctx; cln->data = &conf->ssl; - if (ngx_ssl_certificate(cf, &conf->ssl, &conf->certificate, - &conf->certificate_key, conf->passwords) + if (ngx_ssl_certificates(cf, &conf->ssl, conf->certificates, + conf->certificate_keys, conf->passwords) != NGX_OK) { return NGX_CONF_ERROR; Renamed: vendor/nginx-1.11.0/src/http/modules/ngx_http_ssl_module.h (+3 -2) 93% =================================================================== --- vendor/nginx-1.9.15/src/http/modules/ngx_http_ssl_module.h 2016-05-26 13:57:19 +0900 (8e69e9e) +++ vendor/nginx-1.11.0/src/http/modules/ngx_http_ssl_module.h 2016-05-26 16:28:26 +0900 (57f5941) @@ -32,8 +32,9 @@ typedef struct { time_t session_timeout; - ngx_str_t certificate; - ngx_str_t certificate_key; + ngx_array_t *certificates; + ngx_array_t *certificate_keys; + ngx_str_t dhparam; ngx_str_t ecdh_curve; ngx_str_t client_certificate; Renamed: vendor/nginx-1.11.0/src/http/modules/ngx_http_static_module.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/src/http/modules/ngx_http_stub_status_module.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/src/http/modules/ngx_http_sub_filter_module.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/src/http/modules/ngx_http_upstream_hash_module.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/src/http/modules/ngx_http_upstream_ip_hash_module.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/src/http/modules/ngx_http_upstream_keepalive_module.c (+1 -1) 99% =================================================================== --- vendor/nginx-1.9.15/src/http/modules/ngx_http_upstream_keepalive_module.c 2016-05-26 13:57:19 +0900 (85bfcdb) +++ vendor/nginx-1.11.0/src/http/modules/ngx_http_upstream_keepalive_module.c 2016-05-26 16:28:26 +0900 (0048e6b) @@ -29,7 +29,7 @@ typedef struct { ngx_connection_t *connection; socklen_t socklen; - u_char sockaddr[NGX_SOCKADDRLEN]; + ngx_sockaddr_t sockaddr; } ngx_http_upstream_keepalive_cache_t; Renamed: vendor/nginx-1.11.0/src/http/modules/ngx_http_upstream_least_conn_module.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/src/http/modules/ngx_http_upstream_zone_module.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/src/http/modules/ngx_http_userid_filter_module.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/src/http/modules/ngx_http_uwsgi_module.c (+1 -1) 99% =================================================================== --- vendor/nginx-1.9.15/src/http/modules/ngx_http_uwsgi_module.c 2016-05-26 13:57:19 +0900 (fef2c46) +++ vendor/nginx-1.11.0/src/http/modules/ngx_http_uwsgi_module.c 2016-05-26 16:28:26 +0900 (a03c6f6) @@ -196,7 +196,7 @@ static ngx_command_t ngx_http_uwsgi_commands[] = { NULL }, { ngx_string("uwsgi_bind"), - NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_TAKE1, + NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_TAKE12, ngx_http_upstream_bind_set_slot, NGX_HTTP_LOC_CONF_OFFSET, offsetof(ngx_http_uwsgi_loc_conf_t, upstream.local), Renamed: vendor/nginx-1.11.0/src/http/modules/ngx_http_xslt_filter_module.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/src/http/modules/perl/Makefile.PL (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/src/http/modules/perl/nginx.pm (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/src/http/modules/perl/nginx.xs (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/src/http/modules/perl/ngx_http_perl_module.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/src/http/modules/perl/ngx_http_perl_module.h (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/src/http/modules/perl/typemap (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/src/http/ngx_http.c (+12 -39) 98% =================================================================== --- vendor/nginx-1.9.15/src/http/ngx_http.c 2016-05-26 13:57:19 +0900 (0ceb613) +++ vendor/nginx-1.11.0/src/http/ngx_http.c 2016-05-26 16:28:26 +0900 (13d497c) @@ -1161,13 +1161,13 @@ ngx_http_add_listen(ngx_conf_t *cf, ngx_http_core_srv_conf_t *cscf, } } - sa = &lsopt->u.sockaddr; + sa = &lsopt->sockaddr.sockaddr; switch (sa->sa_family) { #if (NGX_HAVE_INET6) case AF_INET6: - sin6 = &lsopt->u.sockaddr_in6; + sin6 = &lsopt->sockaddr.sockaddr_in6; p = sin6->sin6_port; break; #endif @@ -1179,7 +1179,7 @@ ngx_http_add_listen(ngx_conf_t *cf, ngx_http_core_srv_conf_t *cscf, #endif default: /* AF_INET */ - sin = &lsopt->u.sockaddr_in; + sin = &lsopt->sockaddr.sockaddr_in; p = sin->sin_port; break; } @@ -1215,14 +1215,8 @@ static ngx_int_t ngx_http_add_addresses(ngx_conf_t *cf, ngx_http_core_srv_conf_t *cscf, ngx_http_conf_port_t *port, ngx_http_listen_opt_t *lsopt) { - u_char *p; - size_t len, off; ngx_uint_t i, default_server, proxy_protocol; - struct sockaddr *sa; ngx_http_conf_addr_t *addr; -#if (NGX_HAVE_UNIX_DOMAIN) - struct sockaddr_un *saun; -#endif #if (NGX_HTTP_SSL) ngx_uint_t ssl; #endif @@ -1235,37 +1229,15 @@ ngx_http_add_addresses(ngx_conf_t *cf, ngx_http_core_srv_conf_t *cscf, * may fill some fields in inherited sockaddr struct's */ - sa = &lsopt->u.sockaddr; - - switch (sa->sa_family) { - -#if (NGX_HAVE_INET6) - case AF_INET6: - off = offsetof(struct sockaddr_in6, sin6_addr); - len = 16; - break; -#endif - -#if (NGX_HAVE_UNIX_DOMAIN) - case AF_UNIX: - off = offsetof(struct sockaddr_un, sun_path); - len = sizeof(saun->sun_path); - break; -#endif - - default: /* AF_INET */ - off = offsetof(struct sockaddr_in, sin_addr); - len = 4; - break; - } - - p = lsopt->u.sockaddr_data + off; - addr = port->addrs.elts; for (i = 0; i < port->addrs.nelts; i++) { - if (ngx_memcmp(p, addr[i].opt.u.sockaddr_data + off, len) != 0) { + if (ngx_cmp_sockaddr(&lsopt->sockaddr.sockaddr, lsopt->socklen, + &addr[i].opt.sockaddr.sockaddr, + addr[i].opt.socklen, 0) + != NGX_OK) + { continue; } @@ -1756,7 +1728,8 @@ ngx_http_add_listening(ngx_conf_t *cf, ngx_http_conf_addr_t *addr) ngx_http_core_loc_conf_t *clcf; ngx_http_core_srv_conf_t *cscf; - ls = ngx_create_listening(cf, &addr->opt.u.sockaddr, addr->opt.socklen); + ls = ngx_create_listening(cf, &addr->opt.sockaddr.sockaddr, + addr->opt.socklen); if (ls == NULL) { return NULL; } @@ -1846,7 +1819,7 @@ ngx_http_add_addrs(ngx_conf_t *cf, ngx_http_port_t *hport, for (i = 0; i < hport->naddrs; i++) { - sin = &addr[i].opt.u.sockaddr_in; + sin = &addr[i].opt.sockaddr.sockaddr_in; addrs[i].addr = sin->sin_addr.s_addr; addrs[i].conf.default_server = addr[i].default_server; #if (NGX_HTTP_SSL) @@ -1911,7 +1884,7 @@ ngx_http_add_addrs6(ngx_conf_t *cf, ngx_http_port_t *hport, for (i = 0; i < hport->naddrs; i++) { - sin6 = &addr[i].opt.u.sockaddr_in6; + sin6 = &addr[i].opt.sockaddr.sockaddr_in6; addrs6[i].addr6 = sin6->sin6_addr; addrs6[i].conf.default_server = addr[i].default_server; #if (NGX_HTTP_SSL) Renamed: vendor/nginx-1.11.0/src/http/ngx_http.h (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/src/http/ngx_http_cache.h (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/src/http/ngx_http_config.h (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/src/http/ngx_http_copy_filter_module.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/src/http/ngx_http_core_module.c (+9 -9) 99% =================================================================== --- vendor/nginx-1.9.15/src/http/ngx_http_core_module.c 2016-05-26 13:57:19 +0900 (bd36aec) +++ vendor/nginx-1.11.0/src/http/ngx_http_core_module.c 2016-05-26 16:28:26 +0900 (76917bb) @@ -793,8 +793,6 @@ ngx_http_handler(ngx_http_request_t *r) r->connection->log->action = NULL; - r->connection->unexpected_eof = 0; - if (!r->internal) { switch (r->headers_in.connection_type) { case 0: @@ -2912,7 +2910,9 @@ ngx_http_get_forwarded_addr_internal(ngx_http_request_t *r, ngx_addr_t *addr, } } - if (ngx_parse_addr(r->pool, &paddr, p, xfflen - (p - xff)) != NGX_OK) { + if (ngx_parse_addr_port(r->pool, &paddr, p, xfflen - (p - xff)) + != NGX_OK) + { return NGX_DECLINED; } @@ -3032,7 +3032,7 @@ ngx_http_core_server(ngx_conf_t *cf, ngx_command_t *cmd, void *dummy) if (rv == NGX_CONF_OK && !cscf->listen) { ngx_memzero(&lsopt, sizeof(ngx_http_listen_opt_t)); - sin = &lsopt.u.sockaddr_in; + sin = &lsopt.sockaddr.sockaddr_in; sin->sin_family = AF_INET; #if (NGX_WIN32) @@ -3055,8 +3055,8 @@ ngx_http_core_server(ngx_conf_t *cf, ngx_command_t *cmd, void *dummy) #endif lsopt.wildcard = 1; - (void) ngx_sock_ntop(&lsopt.u.sockaddr, lsopt.socklen, lsopt.addr, - NGX_SOCKADDR_STRLEN, 1); + (void) ngx_sock_ntop(&lsopt.sockaddr.sockaddr, lsopt.socklen, + lsopt.addr, NGX_SOCKADDR_STRLEN, 1); if (ngx_http_add_listen(cf, cscf, &lsopt) != NGX_OK) { return NGX_CONF_ERROR; @@ -4000,7 +4000,7 @@ ngx_http_core_listen(ngx_conf_t *cf, ngx_command_t *cmd, void *conf) ngx_memzero(&lsopt, sizeof(ngx_http_listen_opt_t)); - ngx_memcpy(&lsopt.u.sockaddr, u.sockaddr, u.socklen); + ngx_memcpy(&lsopt.sockaddr.sockaddr, &u.sockaddr, u.socklen); lsopt.socklen = u.socklen; lsopt.backlog = NGX_LISTEN_BACKLOG; @@ -4017,7 +4017,7 @@ ngx_http_core_listen(ngx_conf_t *cf, ngx_command_t *cmd, void *conf) lsopt.ipv6only = 1; #endif - (void) ngx_sock_ntop(&lsopt.u.sockaddr, lsopt.socklen, lsopt.addr, + (void) ngx_sock_ntop(&lsopt.sockaddr.sockaddr, lsopt.socklen, lsopt.addr, NGX_SOCKADDR_STRLEN, 1); for (n = 2; n < cf->args->nelts; n++) { @@ -4146,7 +4146,7 @@ ngx_http_core_listen(ngx_conf_t *cf, ngx_command_t *cmd, void *conf) #if (NGX_HAVE_INET6 && defined IPV6_V6ONLY) struct sockaddr *sa; - sa = &lsopt.u.sockaddr; + sa = &lsopt.sockaddr.sockaddr; if (sa->sa_family == AF_INET6) { Renamed: vendor/nginx-1.11.0/src/http/ngx_http_core_module.h (+1 -12) 98% =================================================================== --- vendor/nginx-1.9.15/src/http/ngx_http_core_module.h 2016-05-26 13:57:19 +0900 (6c446a0) +++ vendor/nginx-1.11.0/src/http/ngx_http_core_module.h 2016-05-26 16:28:26 +0900 (773c215) @@ -58,18 +58,7 @@ typedef struct ngx_http_core_loc_conf_s ngx_http_core_loc_conf_t; typedef struct { - union { - struct sockaddr sockaddr; - struct sockaddr_in sockaddr_in; -#if (NGX_HAVE_INET6) - struct sockaddr_in6 sockaddr_in6; -#endif -#if (NGX_HAVE_UNIX_DOMAIN) - struct sockaddr_un sockaddr_un; -#endif - u_char sockaddr_data[NGX_SOCKADDRLEN]; - } u; - + ngx_sockaddr_t sockaddr; socklen_t socklen; unsigned set:1; Renamed: vendor/nginx-1.11.0/src/http/ngx_http_file_cache.c (+1 -0) 99% =================================================================== --- vendor/nginx-1.9.15/src/http/ngx_http_file_cache.c 2016-05-26 13:57:19 +0900 (37cd377) +++ vendor/nginx-1.11.0/src/http/ngx_http_file_cache.c 2016-05-26 16:28:26 +0900 (38b695e) @@ -1403,6 +1403,7 @@ ngx_http_file_cache_update(ngx_http_request_t *r, ngx_temp_file_t *tf) ngx_shmtx_lock(&cache->shpool->mutex); c->node->count--; + c->node->error = 0; c->node->uniq = uniq; c->node->body_start = c->body_start; Renamed: vendor/nginx-1.11.0/src/http/ngx_http_header_filter_module.c (+7 -7) 98% =================================================================== --- vendor/nginx-1.9.15/src/http/ngx_http_header_filter_module.c 2016-05-26 13:57:19 +0900 (507dc93) +++ vendor/nginx-1.11.0/src/http/ngx_http_header_filter_module.c 2016-05-26 16:28:26 +0900 (2cf1205) @@ -95,17 +95,17 @@ static ngx_str_t ngx_http_status_lines[] = { ngx_string("414 Request-URI Too Large"), ngx_string("415 Unsupported Media Type"), ngx_string("416 Requested Range Not Satisfiable"), + ngx_null_string, /* "417 Expectation Failed" */ + ngx_null_string, /* "418 unused" */ + ngx_null_string, /* "419 unused" */ + ngx_null_string, /* "420 unused" */ + ngx_string("421 Misdirected Request"), - /* ngx_null_string, */ /* "417 Expectation Failed" */ - /* ngx_null_string, */ /* "418 unused" */ - /* ngx_null_string, */ /* "419 unused" */ - /* ngx_null_string, */ /* "420 unused" */ - /* ngx_null_string, */ /* "421 unused" */ /* ngx_null_string, */ /* "422 Unprocessable Entity" */ /* ngx_null_string, */ /* "423 Locked" */ /* ngx_null_string, */ /* "424 Failed Dependency" */ -#define NGX_HTTP_LAST_4XX 417 +#define NGX_HTTP_LAST_4XX 422 #define NGX_HTTP_OFF_5XX (NGX_HTTP_LAST_4XX - 400 + NGX_HTTP_OFF_4XX) ngx_string("500 Internal Server Error"), @@ -113,10 +113,10 @@ static ngx_str_t ngx_http_status_lines[] = { ngx_string("502 Bad Gateway"), ngx_string("503 Service Temporarily Unavailable"), ngx_string("504 Gateway Time-out"), - ngx_null_string, /* "505 HTTP Version Not Supported" */ ngx_null_string, /* "506 Variant Also Negotiates" */ ngx_string("507 Insufficient Storage"), + /* ngx_null_string, */ /* "508 unused" */ /* ngx_null_string, */ /* "509 unused" */ /* ngx_null_string, */ /* "510 Not Extended" */ Renamed: vendor/nginx-1.11.0/src/http/ngx_http_parse.c (+16 -0) 99% =================================================================== --- vendor/nginx-1.9.15/src/http/ngx_http_parse.c 2016-05-26 13:57:19 +0900 (0e0b3a2) +++ vendor/nginx-1.11.0/src/http/ngx_http_parse.c 2016-05-26 16:28:26 +0900 (59aa1fe) @@ -737,6 +737,10 @@ ngx_http_parse_request_line(ngx_http_request_t *r, ngx_buf_t *b) return NGX_HTTP_PARSE_INVALID_REQUEST; } + if (r->http_major > 99) { + return NGX_HTTP_PARSE_INVALID_REQUEST; + } + r->http_major = r->http_major * 10 + ch - '0'; break; @@ -770,6 +774,10 @@ ngx_http_parse_request_line(ngx_http_request_t *r, ngx_buf_t *b) return NGX_HTTP_PARSE_INVALID_REQUEST; } + if (r->http_minor > 99) { + return NGX_HTTP_PARSE_INVALID_REQUEST; + } + r->http_minor = r->http_minor * 10 + ch - '0'; break; @@ -1680,6 +1688,10 @@ ngx_http_parse_status_line(ngx_http_request_t *r, ngx_buf_t *b, return NGX_ERROR; } + if (r->http_major > 99) { + return NGX_ERROR; + } + r->http_major = r->http_major * 10 + ch - '0'; break; @@ -1704,6 +1716,10 @@ ngx_http_parse_status_line(ngx_http_request_t *r, ngx_buf_t *b, return NGX_ERROR; } + if (r->http_minor > 99) { + return NGX_ERROR; + } + r->http_minor = r->http_minor * 10 + ch - '0'; break; Renamed: vendor/nginx-1.11.0/src/http/ngx_http_postpone_filter_module.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/src/http/ngx_http_request.c (+10 -2) 99% =================================================================== --- vendor/nginx-1.9.15/src/http/ngx_http_request.c 2016-05-26 13:57:19 +0900 (7d6cada) +++ vendor/nginx-1.11.0/src/http/ngx_http_request.c 2016-05-26 16:28:26 +0900 (31e3539) @@ -110,6 +110,10 @@ ngx_http_header_t ngx_http_headers_in[] = { offsetof(ngx_http_headers_in_t, content_length), ngx_http_process_unique_header_line }, + { ngx_string("Content-Range"), + offsetof(ngx_http_headers_in_t, content_range), + ngx_http_process_unique_header_line }, + { ngx_string("Content-Type"), offsetof(ngx_http_headers_in_t, content_type), ngx_http_process_header_line }, @@ -2065,7 +2069,7 @@ ngx_http_set_virtual_server(ngx_http_request_t *r, ngx_str_t *host) ngx_log_error(NGX_LOG_INFO, r->connection->log, 0, "client attempted to request the server name " "different from that one was negotiated"); - ngx_http_finalize_request(r, NGX_HTTP_BAD_REQUEST); + ngx_http_finalize_request(r, NGX_HTTP_MISDIRECTED_REQUEST); return NGX_ERROR; } } @@ -2752,9 +2756,13 @@ ngx_http_test_reading(ngx_http_request_t *r) #if (NGX_HAVE_EPOLLRDHUP) - if ((ngx_event_flags & NGX_USE_EPOLL_EVENT) && rev->pending_eof) { + if ((ngx_event_flags & NGX_USE_EPOLL_EVENT) && ngx_use_epoll_rdhup) { socklen_t len; + if (!rev->pending_eof) { + return; + } + rev->eof = 1; c->error = 1; Renamed: vendor/nginx-1.11.0/src/http/ngx_http_request.h (+2 -0) 99% =================================================================== --- vendor/nginx-1.9.15/src/http/ngx_http_request.h 2016-05-26 13:57:19 +0900 (cfde7dc) +++ vendor/nginx-1.11.0/src/http/ngx_http_request.h 2016-05-26 16:28:26 +0900 (499c1ef) @@ -95,6 +95,7 @@ #define NGX_HTTP_REQUEST_URI_TOO_LARGE 414 #define NGX_HTTP_UNSUPPORTED_MEDIA_TYPE 415 #define NGX_HTTP_RANGE_NOT_SATISFIABLE 416 +#define NGX_HTTP_MISDIRECTED_REQUEST 421 /* Our own HTTP codes */ @@ -182,6 +183,7 @@ typedef struct { ngx_table_elt_t *user_agent; ngx_table_elt_t *referer; ngx_table_elt_t *content_length; + ngx_table_elt_t *content_range; ngx_table_elt_t *content_type; ngx_table_elt_t *range; Renamed: vendor/nginx-1.11.0/src/http/ngx_http_request_body.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/src/http/ngx_http_script.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/src/http/ngx_http_script.h (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/src/http/ngx_http_special_response.c (+14 -1) 97% =================================================================== --- vendor/nginx-1.9.15/src/http/ngx_http_special_response.c 2016-05-26 13:57:19 +0900 (2771e58) +++ vendor/nginx-1.11.0/src/http/ngx_http_special_response.c 2016-05-26 16:28:26 +0900 (64e5acd) @@ -210,6 +210,14 @@ static char ngx_http_error_416_page[] = ; +static char ngx_http_error_421_page[] = +"<html>" CRLF +"<head><title>421 Misdirected Request</title></head>" CRLF +"<body bgcolor=\"white\">" CRLF +"<center><h1>421 Misdirected Request</h1></center>" CRLF +; + + static char ngx_http_error_494_page[] = "<html>" CRLF "<head><title>400 Request Header Or Cookie Too Large</title></head>" @@ -334,8 +342,13 @@ static ngx_str_t ngx_http_error_pages[] = { ngx_string(ngx_http_error_414_page), ngx_string(ngx_http_error_415_page), ngx_string(ngx_http_error_416_page), + ngx_null_string, /* 417 */ + ngx_null_string, /* 418 */ + ngx_null_string, /* 419 */ + ngx_null_string, /* 420 */ + ngx_string(ngx_http_error_421_page), -#define NGX_HTTP_LAST_4XX 417 +#define NGX_HTTP_LAST_4XX 422 #define NGX_HTTP_OFF_5XX (NGX_HTTP_LAST_4XX - 400 + NGX_HTTP_OFF_4XX) ngx_string(ngx_http_error_494_page), /* 494, request header too large */ Renamed: vendor/nginx-1.11.0/src/http/ngx_http_upstream.c (+69 -39) 98% =================================================================== --- vendor/nginx-1.9.15/src/http/ngx_http_upstream.c 2016-05-26 13:57:19 +0900 (1386bdb) +++ vendor/nginx-1.11.0/src/http/ngx_http_upstream.c 2016-05-26 16:28:26 +0900 (89b2160) @@ -165,8 +165,8 @@ static char *ngx_http_upstream(ngx_conf_t *cf, ngx_command_t *cmd, void *dummy); static char *ngx_http_upstream_server(ngx_conf_t *cf, ngx_command_t *cmd, void *conf); -static ngx_addr_t *ngx_http_upstream_get_local(ngx_http_request_t *r, - ngx_http_upstream_local_t *local); +static ngx_int_t ngx_http_upstream_set_local(ngx_http_request_t *r, + ngx_http_upstream_t *u, ngx_http_upstream_local_t *local); static void *ngx_http_upstream_create_main_conf(ngx_conf_t *cf); static char *ngx_http_upstream_init_main_conf(ngx_conf_t *cf, void *conf); @@ -588,7 +588,10 @@ ngx_http_upstream_init_request(ngx_http_request_t *r) return; } - u->peer.local = ngx_http_upstream_get_local(r, u->conf->local); + if (ngx_http_upstream_set_local(r, u, u->conf->local) != NGX_OK) { + ngx_http_finalize_request(r, NGX_HTTP_INTERNAL_SERVER_ERROR); + return; + } clcf = ngx_http_get_module_loc_conf(r, ngx_http_core_module); @@ -1219,9 +1222,13 @@ ngx_http_upstream_check_broken_connection(ngx_http_request_t *r, #if (NGX_HAVE_EPOLLRDHUP) - if ((ngx_event_flags & NGX_USE_EPOLL_EVENT) && ev->pending_eof) { + if ((ngx_event_flags & NGX_USE_EPOLL_EVENT) && ngx_use_epoll_rdhup) { socklen_t len; + if (!ev->pending_eof) { + return; + } + ev->eof = 1; c->error = 1; @@ -5785,7 +5792,7 @@ ngx_http_upstream_bind_set_slot(ngx_conf_t *cf, ngx_command_t *cmd, value = cf->args->elts; - if (ngx_strcmp(value[1].data, "off") == 0) { + if (cf->args->nelts == 2 && ngx_strcmp(value[1].data, "off") == 0) { *plocal = NULL; return NGX_CONF_OK; } @@ -5815,34 +5822,51 @@ ngx_http_upstream_bind_set_slot(ngx_conf_t *cf, ngx_command_t *cmd, *local->value = cv; - return NGX_CONF_OK; - } + } else { + local->addr = ngx_palloc(cf->pool, sizeof(ngx_addr_t)); + if (local->addr == NULL) { + return NGX_CONF_ERROR; + } - local->addr = ngx_palloc(cf->pool, sizeof(ngx_addr_t)); - if (local->addr == NULL) { - return NGX_CONF_ERROR; - } + rc = ngx_parse_addr(cf->pool, local->addr, value[1].data, value[1].len); - rc = ngx_parse_addr(cf->pool, local->addr, value[1].data, value[1].len); + switch (rc) { + case NGX_OK: + local->addr->name = value[1]; + break; - switch (rc) { - case NGX_OK: - local->addr->name = value[1]; - return NGX_CONF_OK; + case NGX_DECLINED: + ngx_conf_log_error(NGX_LOG_EMERG, cf, 0, + "invalid address \"%V\"", &value[1]); + /* fall through */ - case NGX_DECLINED: - ngx_conf_log_error(NGX_LOG_EMERG, cf, 0, - "invalid address \"%V\"", &value[1]); - /* fall through */ + default: + return NGX_CONF_ERROR; + } + } - default: - return NGX_CONF_ERROR; + if (cf->args->nelts > 2) { + if (ngx_strcmp(value[2].data, "transparent") == 0) { +#if (NGX_HAVE_TRANSPARENT_PROXY) + local->transparent = 1; +#else + ngx_conf_log_error(NGX_LOG_EMERG, cf, 0, + "transparent proxying is not supported " + "on this platform, ignored"); +#endif + } else { + ngx_conf_log_error(NGX_LOG_EMERG, cf, 0, + "invalid parameter \"%V\"", &value[2]); + return NGX_CONF_ERROR; + } } + + return NGX_CONF_OK; } -static ngx_addr_t * -ngx_http_upstream_get_local(ngx_http_request_t *r, +static ngx_int_t +ngx_http_upstream_set_local(ngx_http_request_t *r, ngx_http_upstream_t *u, ngx_http_upstream_local_t *local) { ngx_int_t rc; @@ -5850,41 +5874,47 @@ ngx_http_upstream_get_local(ngx_http_request_t *r, ngx_addr_t *addr; if (local == NULL) { - return NULL; + u->peer.local = NULL; + return NGX_OK; } +#if (NGX_HAVE_TRANSPARENT_PROXY) + u->peer.transparent = local->transparent; +#endif + if (local->value == NULL) { - return local->addr; + u->peer.local = local->addr; + return NGX_OK; } if (ngx_http_complex_value(r, local->value, &val) != NGX_OK) { - return NULL; + return NGX_ERROR; } if (val.len == 0) { - return NULL; + return NGX_OK; } addr = ngx_palloc(r->pool, sizeof(ngx_addr_t)); if (addr == NULL) { - return NULL; + return NGX_ERROR; } rc = ngx_parse_addr(r->pool, addr, val.data, val.len); + if (rc == NGX_ERROR) { + return NGX_ERROR; + } - switch (rc) { - case NGX_OK: - addr->name = val; - return addr; - - case NGX_DECLINED: + if (rc != NGX_OK) { ngx_log_error(NGX_LOG_ERR, r->connection->log, 0, "invalid local address \"%V\"", &val); - /* fall through */ - - default: - return NULL; + return NGX_OK; } + + addr->name = val; + u->peer.local = addr; + + return NGX_OK; } Renamed: vendor/nginx-1.11.0/src/http/ngx_http_upstream.h (+3 -0) 99% =================================================================== --- vendor/nginx-1.9.15/src/http/ngx_http_upstream.h 2016-05-26 13:57:19 +0900 (7595dcf) +++ vendor/nginx-1.11.0/src/http/ngx_http_upstream.h 2016-05-26 16:28:26 +0900 (b288f28) @@ -133,6 +133,9 @@ struct ngx_http_upstream_srv_conf_s { typedef struct { ngx_addr_t *addr; ngx_http_complex_value_t *value; +#if (NGX_HAVE_TRANSPARENT_PROXY) + ngx_uint_t transparent; /* unsigned transparent:1; */ +#endif } ngx_http_upstream_local_t; Renamed: vendor/nginx-1.11.0/src/http/ngx_http_upstream_round_robin.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/src/http/ngx_http_upstream_round_robin.h (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/src/http/ngx_http_variables.c (+78 -0) 97% =================================================================== --- vendor/nginx-1.9.15/src/http/ngx_http_variables.c 2016-05-26 13:57:19 +0900 (f8271ab) +++ vendor/nginx-1.11.0/src/http/ngx_http_variables.c 2016-05-26 16:28:26 +0900 (d310d32) @@ -58,6 +58,8 @@ static ngx_int_t ngx_http_variable_remote_port(ngx_http_request_t *r, ngx_http_variable_value_t *v, uintptr_t data); static ngx_int_t ngx_http_variable_proxy_protocol_addr(ngx_http_request_t *r, ngx_http_variable_value_t *v, uintptr_t data); +static ngx_int_t ngx_http_variable_proxy_protocol_port(ngx_http_request_t *r, + ngx_http_variable_value_t *v, uintptr_t data); static ngx_int_t ngx_http_variable_server_addr(ngx_http_request_t *r, ngx_http_variable_value_t *v, uintptr_t data); static ngx_int_t ngx_http_variable_server_port(ngx_http_request_t *r, @@ -98,6 +100,8 @@ static ngx_int_t ngx_http_variable_request_length(ngx_http_request_t *r, ngx_http_variable_value_t *v, uintptr_t data); static ngx_int_t ngx_http_variable_request_time(ngx_http_request_t *r, ngx_http_variable_value_t *v, uintptr_t data); +static ngx_int_t ngx_http_variable_request_id(ngx_http_request_t *r, + ngx_http_variable_value_t *v, uintptr_t data); static ngx_int_t ngx_http_variable_status(ngx_http_request_t *r, ngx_http_variable_value_t *v, uintptr_t data); @@ -192,6 +196,9 @@ static ngx_http_variable_t ngx_http_core_variables[] = { { ngx_string("proxy_protocol_addr"), NULL, ngx_http_variable_proxy_protocol_addr, 0, 0, 0 }, + { ngx_string("proxy_protocol_port"), NULL, + ngx_http_variable_proxy_protocol_port, 0, 0, 0 }, + { ngx_string("server_addr"), NULL, ngx_http_variable_server_addr, 0, 0, 0 }, { ngx_string("server_port"), NULL, ngx_http_variable_server_port, 0, 0, 0 }, @@ -274,6 +281,10 @@ static ngx_http_variable_t ngx_http_core_variables[] = { { ngx_string("request_time"), NULL, ngx_http_variable_request_time, 0, NGX_HTTP_VAR_NOCACHEABLE, 0 }, + { ngx_string("request_id"), NULL, + ngx_http_variable_request_id, + 0, 0, 0 }, + { ngx_string("status"), NULL, ngx_http_variable_status, 0, NGX_HTTP_VAR_NOCACHEABLE, 0 }, @@ -1250,6 +1261,32 @@ ngx_http_variable_proxy_protocol_addr(ngx_http_request_t *r, static ngx_int_t +ngx_http_variable_proxy_protocol_port(ngx_http_request_t *r, + ngx_http_variable_value_t *v, uintptr_t data) +{ + ngx_uint_t port; + + v->len = 0; + v->valid = 1; + v->no_cacheable = 0; + v->not_found = 0; + + v->data = ngx_pnalloc(r->pool, sizeof("65535") - 1); + if (v->data == NULL) { + return NGX_ERROR; + } + + port = r->connection->proxy_protocol_port; + + if (port > 0 && port < 65536) { + v->len = ngx_sprintf(v->data, "%ui", port) - v->data; + } + + return NGX_OK; +} + + +static ngx_int_t ngx_http_variable_server_addr(ngx_http_request_t *r, ngx_http_variable_value_t *v, uintptr_t data) { @@ -2068,6 +2105,47 @@ ngx_http_variable_request_time(ngx_http_request_t *r, static ngx_int_t +ngx_http_variable_request_id(ngx_http_request_t *r, + ngx_http_variable_value_t *v, uintptr_t data) +{ + u_char *id; + +#if (NGX_OPENSSL) + u_char random_bytes[16]; +#endif + + id = ngx_pnalloc(r->pool, 32); + if (id == NULL) { + return NGX_ERROR; + } + + v->valid = 1; + v->no_cacheable = 0; + v->not_found = 0; + + v->len = 32; + v->data = id; + +#if (NGX_OPENSSL) + + if (RAND_bytes(random_bytes, 16) == 1) { + ngx_hex_dump(id, random_bytes, 16); + return NGX_OK; + } + + ngx_ssl_error(NGX_LOG_ERR, r->connection->log, 0, "RAND_bytes() failed"); + +#endif + + ngx_sprintf(id, "%08xD%08xD%08xD%08xD", + (uint32_t) ngx_random(), (uint32_t) ngx_random(), + (uint32_t) ngx_random(), (uint32_t) ngx_random()); + + return NGX_OK; +} + + +static ngx_int_t ngx_http_variable_connection(ngx_http_request_t *r, ngx_http_variable_value_t *v, uintptr_t data) { Renamed: vendor/nginx-1.11.0/src/http/ngx_http_variables.h (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/src/http/ngx_http_write_filter_module.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/src/http/v2/ngx_http_v2.c (+109 -43) 96% =================================================================== --- vendor/nginx-1.9.15/src/http/v2/ngx_http_v2.c 2016-05-26 13:57:19 +0900 (278c9ab) +++ vendor/nginx-1.11.0/src/http/v2/ngx_http_v2.c 2016-05-26 16:28:26 +0900 (cd0243c) @@ -48,11 +48,6 @@ #define NGX_HTTP_V2_DEFAULT_FRAME_SIZE (1 << 14) -#define NGX_HTTP_V2_MAX_WINDOW ((1U << 31) - 1) -#define NGX_HTTP_V2_DEFAULT_WINDOW 65535 - -#define NGX_HTTP_V2_INITIAL_WINDOW 0 - #define NGX_HTTP_V2_ROOT (void *) -1 @@ -879,8 +874,6 @@ ngx_http_v2_state_data(ngx_http_v2_connection_t *h2c, u_char *pos, u_char *end) return ngx_http_v2_state_skip_padded(h2c, pos, end); } - stream->in_closed = h2c->state.flags & NGX_HTTP_V2_END_STREAM_FLAG; - h2c->state.stream = stream; return ngx_http_v2_state_read_data(h2c, pos, end); @@ -891,10 +884,12 @@ static u_char * ngx_http_v2_state_read_data(ngx_http_v2_connection_t *h2c, u_char *pos, u_char *end) { - size_t size; - ngx_int_t rc; - ngx_uint_t last; - ngx_http_v2_stream_t *stream; + size_t size; + ngx_buf_t *buf; + ngx_int_t rc; + ngx_http_request_t *r; + ngx_http_v2_stream_t *stream; + ngx_http_v2_srv_conf_t *h2scf; stream = h2c->state.stream; @@ -913,17 +908,42 @@ ngx_http_v2_state_read_data(ngx_http_v2_connection_t *h2c, u_char *pos, if (size >= h2c->state.length) { size = h2c->state.length; - last = stream->in_closed; - - } else { - last = 0; + stream->in_closed = h2c->state.flags & NGX_HTTP_V2_END_STREAM_FLAG; } - rc = ngx_http_v2_process_request_body(stream->request, pos, size, last); + r = stream->request; - if (rc != NGX_OK) { - stream->skip_data = 1; - ngx_http_finalize_request(stream->request, rc); + if (r->request_body) { + rc = ngx_http_v2_process_request_body(r, pos, size, stream->in_closed); + + if (rc != NGX_OK) { + stream->skip_data = 1; + ngx_http_finalize_request(r, rc); + } + + } else if (size) { + buf = stream->preread; + + if (buf == NULL) { + h2scf = ngx_http_get_module_srv_conf(r, ngx_http_v2_module); + + buf = ngx_create_temp_buf(r->pool, h2scf->preread_size); + if (buf == NULL) { + return ngx_http_v2_connection_error(h2c, + NGX_HTTP_V2_INTERNAL_ERROR); + } + + stream->preread = buf; + } + + if (size > (size_t) (buf->end - buf->last)) { + ngx_log_error(NGX_LOG_ALERT, h2c->connection->log, 0, + "http2 preread buffer overflow"); + return ngx_http_v2_connection_error(h2c, + NGX_HTTP_V2_INTERNAL_ERROR); + } + + buf->last = ngx_cpymem(buf->last, pos, size); } pos += size; @@ -1058,7 +1078,9 @@ ngx_http_v2_state_headers(ngx_http_v2_connection_t *h2c, u_char *pos, goto rst_stream; } - if (!h2c->settings_ack && !(h2c->state.flags & NGX_HTTP_V2_END_STREAM_FLAG)) + if (!h2c->settings_ack + && !(h2c->state.flags & NGX_HTTP_V2_END_STREAM_FLAG) + && h2scf->preread_size < NGX_HTTP_V2_DEFAULT_WINDOW) { ngx_log_error(NGX_LOG_INFO, h2c->connection->log, 0, "client sent stream with data " @@ -2434,8 +2456,7 @@ ngx_http_v2_send_settings(ngx_http_v2_connection_t *h2c, ngx_uint_t ack) buf->last = ngx_http_v2_write_uint16(buf->last, NGX_HTTP_V2_INIT_WINDOW_SIZE_SETTING); - buf->last = ngx_http_v2_write_uint32(buf->last, - NGX_HTTP_V2_INITIAL_WINDOW); + buf->last = ngx_http_v2_write_uint32(buf->last, h2scf->preread_size); buf->last = ngx_http_v2_write_uint16(buf->last, NGX_HTTP_V2_MAX_FRAME_SIZE_SETTING); @@ -2643,6 +2664,7 @@ ngx_http_v2_create_stream(ngx_http_v2_connection_t *h2c) ngx_http_log_ctx_t *ctx; ngx_http_request_t *r; ngx_http_v2_stream_t *stream; + ngx_http_v2_srv_conf_t *h2scf; ngx_http_core_srv_conf_t *cscf; fc = h2c->free_fake_connections; @@ -2756,8 +2778,10 @@ ngx_http_v2_create_stream(ngx_http_v2_connection_t *h2c) stream->request = r; stream->connection = h2c; + h2scf = ngx_http_get_module_srv_conf(r, ngx_http_v2_module); + stream->send_window = h2c->init_window; - stream->recv_window = NGX_HTTP_V2_INITIAL_WINDOW; + stream->recv_window = h2scf->preread_size; h2c->processing++; @@ -3411,7 +3435,11 @@ ngx_http_v2_read_request_body(ngx_http_request_t *r, ngx_http_client_body_handler_pt post_handler) { off_t len; + size_t size; + ngx_buf_t *buf; + ngx_int_t rc; ngx_http_v2_stream_t *stream; + ngx_http_v2_srv_conf_t *h2scf; ngx_http_request_body_t *rb; ngx_http_core_loc_conf_t *clcf; ngx_http_v2_connection_t *h2c; @@ -3444,24 +3472,34 @@ ngx_http_v2_read_request_body(ngx_http_request_t *r, r->request_body = rb; + h2scf = ngx_http_get_module_srv_conf(r, ngx_http_v2_module); clcf = ngx_http_get_module_loc_conf(r, ngx_http_core_module); len = r->headers_in.content_length_n; if (r->request_body_no_buffering && !stream->in_closed) { - r->request_body_in_file_only = 0; if (len < 0 || len > (off_t) clcf->client_body_buffer_size) { len = clcf->client_body_buffer_size; } + /* + * We need a room to store data up to the stream's initial window size, + * at least until this window will be exhausted. + */ + + if (len < (off_t) h2scf->preread_size) { + len = h2scf->preread_size; + } + if (len > NGX_HTTP_V2_MAX_WINDOW) { len = NGX_HTTP_V2_MAX_WINDOW; } - } - if (len >= 0 && len <= (off_t) clcf->client_body_buffer_size - && !r->request_body_in_file_only) + rb->buf = ngx_create_temp_buf(r->pool, (size_t) len); + + } else if (len >= 0 && len <= (off_t) clcf->client_body_buffer_size + && !r->request_body_in_file_only) { rb->buf = ngx_create_temp_buf(r->pool, (size_t) len); @@ -3478,22 +3516,44 @@ ngx_http_v2_read_request_body(ngx_http_request_t *r, return NGX_HTTP_INTERNAL_SERVER_ERROR; } + buf = stream->preread; + if (stream->in_closed) { r->request_body_no_buffering = 0; + + if (buf) { + rc = ngx_http_v2_process_request_body(r, buf->pos, + buf->last - buf->pos, 1); + ngx_pfree(r->pool, buf->start); + return rc; + } + return ngx_http_v2_process_request_body(r, NULL, 0, 1); } - if (len) { - if (r->request_body_no_buffering) { - stream->recv_window = (size_t) len; + if (buf) { + rc = ngx_http_v2_process_request_body(r, buf->pos, + buf->last - buf->pos, 0); - } else { - stream->no_flow_control = 1; - stream->recv_window = NGX_HTTP_V2_MAX_WINDOW; + ngx_pfree(r->pool, buf->start); + + if (rc != NGX_OK) { + stream->skip_data = 1; + return rc; } + } - if (ngx_http_v2_send_window_update(stream->connection, stream->node->id, - stream->recv_window) + if (r->request_body_no_buffering) { + size = len - h2scf->preread_size; + + } else { + stream->no_flow_control = 1; + size = NGX_HTTP_V2_MAX_WINDOW - stream->recv_window; + } + + if (size) { + if (ngx_http_v2_send_window_update(stream->connection, + stream->node->id, size) == NGX_ERROR) { stream->skip_data = 1; @@ -3508,9 +3568,13 @@ ngx_http_v2_read_request_body(ngx_http_request_t *r, return NGX_HTTP_INTERNAL_SERVER_ERROR; } } + + stream->recv_window += size; } - ngx_add_timer(r->connection->read, clcf->client_body_timeout); + if (!buf) { + ngx_add_timer(r->connection->read, clcf->client_body_timeout); + } r->read_event_handler = ngx_http_v2_read_client_request_body_handler; r->write_event_handler = ngx_http_request_empty_handler; @@ -3529,13 +3593,8 @@ ngx_http_v2_process_request_body(ngx_http_request_t *r, u_char *pos, ngx_http_request_body_t *rb; ngx_http_core_loc_conf_t *clcf; - rb = r->request_body; - - if (rb == NULL) { - return NGX_OK; - } - fc = r->connection; + rb = r->request_body; buf = rb->buf; if (size) { @@ -3789,7 +3848,14 @@ ngx_http_v2_read_unbuffered_request_body(ngx_http_request_t *r) window -= h2c->state.length; } - if (window == stream->recv_window) { + if (window <= stream->recv_window) { + if (window < stream->recv_window) { + ngx_log_error(NGX_LOG_ALERT, r->connection->log, 0, + "http2 negative window update"); + stream->skip_data = 1; + return NGX_HTTP_INTERNAL_SERVER_ERROR; + } + return NGX_AGAIN; } Renamed: vendor/nginx-1.11.0/src/http/v2/ngx_http_v2.h (+5 -0) 98% =================================================================== --- vendor/nginx-1.9.15/src/http/v2/ngx_http_v2.h 2016-05-26 13:57:19 +0900 (1adf8de) +++ vendor/nginx-1.11.0/src/http/v2/ngx_http_v2.h 2016-05-26 16:28:26 +0900 (9e738aa) @@ -46,6 +46,9 @@ #define NGX_HTTP_V2_PADDED_FLAG 0x08 #define NGX_HTTP_V2_PRIORITY_FLAG 0x20 +#define NGX_HTTP_V2_MAX_WINDOW ((1U << 31) - 1) +#define NGX_HTTP_V2_DEFAULT_WINDOW 65535 + typedef struct ngx_http_v2_connection_s ngx_http_v2_connection_t; typedef struct ngx_http_v2_node_s ngx_http_v2_node_t; @@ -174,6 +177,8 @@ struct ngx_http_v2_stream_s { ssize_t send_window; size_t recv_window; + ngx_buf_t *preread; + ngx_http_v2_out_frame_t *free_frames; ngx_chain_t *free_frame_headers; ngx_chain_t *free_bufs; Renamed: vendor/nginx-1.11.0/src/http/v2/ngx_http_v2_filter_module.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/src/http/v2/ngx_http_v2_huff_decode.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/src/http/v2/ngx_http_v2_huff_encode.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/src/http/v2/ngx_http_v2_module.c (+31 -0) 93% =================================================================== --- vendor/nginx-1.9.15/src/http/v2/ngx_http_v2_module.c 2016-05-26 13:57:19 +0900 (5a4561c) +++ vendor/nginx-1.11.0/src/http/v2/ngx_http_v2_module.c 2016-05-26 16:28:26 +0900 (b7d99e0) @@ -30,6 +30,7 @@ static char *ngx_http_v2_merge_loc_conf(ngx_conf_t *cf, void *parent, static char *ngx_http_v2_recv_buffer_size(ngx_conf_t *cf, void *post, void *data); static char *ngx_http_v2_pool_size(ngx_conf_t *cf, void *post, void *data); +static char *ngx_http_v2_preread_size(ngx_conf_t *cf, void *post, void *data); static char *ngx_http_v2_streams_index_mask(ngx_conf_t *cf, void *post, void *data); static char *ngx_http_v2_chunk_size(ngx_conf_t *cf, void *post, void *data); @@ -41,6 +42,8 @@ static ngx_conf_post_t ngx_http_v2_recv_buffer_size_post = { ngx_http_v2_recv_buffer_size }; static ngx_conf_post_t ngx_http_v2_pool_size_post = { ngx_http_v2_pool_size }; +static ngx_conf_post_t ngx_http_v2_preread_size_post = + { ngx_http_v2_preread_size }; static ngx_conf_post_t ngx_http_v2_streams_index_mask_post = { ngx_http_v2_streams_index_mask }; static ngx_conf_post_t ngx_http_v2_chunk_size_post = @@ -84,6 +87,13 @@ static ngx_command_t ngx_http_v2_commands[] = { offsetof(ngx_http_v2_srv_conf_t, max_header_size), NULL }, + { ngx_string("http2_body_preread_size"), + NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_CONF_TAKE1, + ngx_conf_set_size_slot, + NGX_HTTP_SRV_CONF_OFFSET, + offsetof(ngx_http_v2_srv_conf_t, preread_size), + &ngx_http_v2_preread_size_post }, + { ngx_string("http2_streams_index_size"), NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_CONF_TAKE1, ngx_conf_set_num_slot, @@ -316,6 +326,8 @@ ngx_http_v2_create_srv_conf(ngx_conf_t *cf) h2scf->max_field_size = NGX_CONF_UNSET_SIZE; h2scf->max_header_size = NGX_CONF_UNSET_SIZE; + h2scf->preread_size = NGX_CONF_UNSET_SIZE; + h2scf->streams_index_mask = NGX_CONF_UNSET_UINT; h2scf->recv_timeout = NGX_CONF_UNSET_MSEC; @@ -341,6 +353,8 @@ ngx_http_v2_merge_srv_conf(ngx_conf_t *cf, void *parent, void *child) ngx_conf_merge_size_value(conf->max_header_size, prev->max_header_size, 16384); + ngx_conf_merge_size_value(conf->preread_size, prev->preread_size, 65536); + ngx_conf_merge_uint_value(conf->streams_index_mask, prev->streams_index_mask, 32 - 1); @@ -420,6 +434,23 @@ ngx_http_v2_pool_size(ngx_conf_t *cf, void *post, void *data) static char * +ngx_http_v2_preread_size(ngx_conf_t *cf, void *post, void *data) +{ + size_t *sp = data; + + if (*sp > NGX_HTTP_V2_MAX_WINDOW) { + ngx_conf_log_error(NGX_LOG_EMERG, cf, 0, + "the maximum body preread buffer size is %uz", + NGX_HTTP_V2_MAX_WINDOW); + + return NGX_CONF_ERROR; + } + + return NGX_CONF_OK; +} + + +static char * ngx_http_v2_streams_index_mask(ngx_conf_t *cf, void *post, void *data) { ngx_uint_t *np = data; Renamed: vendor/nginx-1.11.0/src/http/v2/ngx_http_v2_module.h (+1 -0) 95% =================================================================== --- vendor/nginx-1.9.15/src/http/v2/ngx_http_v2_module.h 2016-05-26 13:57:19 +0900 (95cc7d8) +++ vendor/nginx-1.11.0/src/http/v2/ngx_http_v2_module.h 2016-05-26 16:28:26 +0900 (91f97c2) @@ -25,6 +25,7 @@ typedef struct { ngx_uint_t concurrent_streams; size_t max_field_size; size_t max_header_size; + size_t preread_size; ngx_uint_t streams_index_mask; ngx_msec_t recv_timeout; ngx_msec_t idle_timeout; Renamed: vendor/nginx-1.11.0/src/http/v2/ngx_http_v2_table.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/src/mail/ngx_mail.c (+10 -10) 95% =================================================================== --- vendor/nginx-1.9.15/src/mail/ngx_mail.c 2016-05-26 13:57:19 +0900 (6ad5a67) +++ vendor/nginx-1.11.0/src/mail/ngx_mail.c 2016-05-26 16:28:26 +0900 (78cbe01) @@ -235,13 +235,13 @@ ngx_mail_add_ports(ngx_conf_t *cf, ngx_array_t *ports, struct sockaddr_in6 *sin6; #endif - sa = &listen->u.sockaddr; + sa = &listen->sockaddr.sockaddr; switch (sa->sa_family) { #if (NGX_HAVE_INET6) case AF_INET6: - sin6 = &listen->u.sockaddr_in6; + sin6 = &listen->sockaddr.sockaddr_in6; p = sin6->sin6_port; break; #endif @@ -253,7 +253,7 @@ ngx_mail_add_ports(ngx_conf_t *cf, ngx_array_t *ports, #endif default: /* AF_INET */ - sin = &listen->u.sockaddr_in; + sin = &listen->sockaddr.sockaddr_in; p = sin->sin_port; break; } @@ -340,7 +340,7 @@ ngx_mail_optimize_servers(ngx_conf_t *cf, ngx_array_t *ports) continue; } - ls = ngx_create_listening(cf, &addr[i].opt.u.sockaddr, + ls = ngx_create_listening(cf, &addr[i].opt.sockaddr.sockaddr, addr[i].opt.socklen); if (ls == NULL) { return NGX_CONF_ERROR; @@ -423,7 +423,7 @@ ngx_mail_add_addrs(ngx_conf_t *cf, ngx_mail_port_t *mport, for (i = 0; i < mport->naddrs; i++) { - sin = &addr[i].opt.u.sockaddr_in; + sin = &addr[i].opt.sockaddr.sockaddr_in; addrs[i].addr = sin->sin_addr.s_addr; addrs[i].conf.ctx = addr[i].opt.ctx; @@ -431,8 +431,8 @@ ngx_mail_add_addrs(ngx_conf_t *cf, ngx_mail_port_t *mport, addrs[i].conf.ssl = addr[i].opt.ssl; #endif - len = ngx_sock_ntop(&addr[i].opt.u.sockaddr, addr[i].opt.socklen, buf, - NGX_SOCKADDR_STRLEN, 1); + len = ngx_sock_ntop(&addr[i].opt.sockaddr.sockaddr, addr[i].opt.socklen, + buf, NGX_SOCKADDR_STRLEN, 1); p = ngx_pnalloc(cf->pool, len); if (p == NULL) { @@ -472,7 +472,7 @@ ngx_mail_add_addrs6(ngx_conf_t *cf, ngx_mail_port_t *mport, for (i = 0; i < mport->naddrs; i++) { - sin6 = &addr[i].opt.u.sockaddr_in6; + sin6 = &addr[i].opt.sockaddr.sockaddr_in6; addrs6[i].addr6 = sin6->sin6_addr; addrs6[i].conf.ctx = addr[i].opt.ctx; @@ -480,8 +480,8 @@ ngx_mail_add_addrs6(ngx_conf_t *cf, ngx_mail_port_t *mport, addrs6[i].conf.ssl = addr[i].opt.ssl; #endif - len = ngx_sock_ntop(&addr[i].opt.u.sockaddr, addr[i].opt.socklen, buf, - NGX_SOCKADDR_STRLEN, 1); + len = ngx_sock_ntop(&addr[i].opt.sockaddr.sockaddr, addr[i].opt.socklen, + buf, NGX_SOCKADDR_STRLEN, 1); p = ngx_pnalloc(cf->pool, len); if (p == NULL) { Renamed: vendor/nginx-1.11.0/src/mail/ngx_mail.h (+1 -12) 97% =================================================================== --- vendor/nginx-1.9.15/src/mail/ngx_mail.h 2016-05-26 13:57:19 +0900 (bfbf768) +++ vendor/nginx-1.11.0/src/mail/ngx_mail.h 2016-05-26 16:28:26 +0900 (ae1aa41) @@ -27,18 +27,7 @@ typedef struct { typedef struct { - union { - struct sockaddr sockaddr; - struct sockaddr_in sockaddr_in; -#if (NGX_HAVE_INET6) - struct sockaddr_in6 sockaddr_in6; -#endif -#if (NGX_HAVE_UNIX_DOMAIN) - struct sockaddr_un sockaddr_un; -#endif - u_char sockaddr_data[NGX_SOCKADDRLEN]; - } u; - + ngx_sockaddr_t sockaddr; socklen_t socklen; /* server ctx */ Renamed: vendor/nginx-1.11.0/src/mail/ngx_mail_auth_http_module.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/src/mail/ngx_mail_core_module.c (+7 -51) 92% =================================================================== --- vendor/nginx-1.9.15/src/mail/ngx_mail_core_module.c 2016-05-26 13:57:19 +0900 (8ea8ea9) +++ vendor/nginx-1.11.0/src/mail/ngx_mail_core_module.c 2016-05-26 16:28:26 +0900 (d992402) @@ -288,19 +288,12 @@ ngx_mail_core_listen(ngx_conf_t *cf, ngx_command_t *cmd, void *conf) { ngx_mail_core_srv_conf_t *cscf = conf; - size_t len, off; - in_port_t port; ngx_str_t *value; ngx_url_t u; ngx_uint_t i, m; - struct sockaddr *sa; ngx_mail_listen_t *ls; ngx_mail_module_t *module; - struct sockaddr_in *sin; ngx_mail_core_main_conf_t *cmcf; -#if (NGX_HAVE_INET6) - struct sockaddr_in6 *sin6; -#endif value = cf->args->elts; @@ -325,49 +318,13 @@ ngx_mail_core_listen(ngx_conf_t *cf, ngx_command_t *cmd, void *conf) for (i = 0; i < cmcf->listen.nelts; i++) { - sa = &ls[i].u.sockaddr; - - if (sa->sa_family != u.family) { - continue; - } - - switch (sa->sa_family) { - -#if (NGX_HAVE_INET6) - case AF_INET6: - off = offsetof(struct sockaddr_in6, sin6_addr); - len = 16; - sin6 = &ls[i].u.sockaddr_in6; - port = ntohs(sin6->sin6_port); - break; -#endif - -#if (NGX_HAVE_UNIX_DOMAIN) - case AF_UNIX: - off = offsetof(struct sockaddr_un, sun_path); - len = sizeof(((struct sockaddr_un *) sa)->sun_path); - port = 0; - break; -#endif - - default: /* AF_INET */ - off = offsetof(struct sockaddr_in, sin_addr); - len = 4; - sin = &ls[i].u.sockaddr_in; - port = ntohs(sin->sin_port); - break; - } - - if (ngx_memcmp(ls[i].u.sockaddr_data + off, u.sockaddr + off, len) - != 0) + if (ngx_cmp_sockaddr(&ls[i].sockaddr.sockaddr, ls[i].socklen, + (struct sockaddr *) &u.sockaddr, u.socklen, 1) + != NGX_OK) { continue; } - if (port != u.port) { - continue; - } - ngx_conf_log_error(NGX_LOG_EMERG, cf, 0, "duplicate \"%V\" address and port pair", &u.url); return NGX_CONF_ERROR; @@ -380,7 +337,7 @@ ngx_mail_core_listen(ngx_conf_t *cf, ngx_command_t *cmd, void *conf) ngx_memzero(ls, sizeof(ngx_mail_listen_t)); - ngx_memcpy(&ls->u.sockaddr, u.sockaddr, u.socklen); + ngx_memcpy(&ls->sockaddr.sockaddr, &u.sockaddr, u.socklen); ls->socklen = u.socklen; ls->backlog = NGX_LISTEN_BACKLOG; @@ -434,11 +391,10 @@ ngx_mail_core_listen(ngx_conf_t *cf, ngx_command_t *cmd, void *conf) if (ngx_strncmp(value[i].data, "ipv6only=o", 10) == 0) { #if (NGX_HAVE_INET6 && defined IPV6_V6ONLY) + size_t len; u_char buf[NGX_SOCKADDR_STRLEN]; - sa = &ls->u.sockaddr; - - if (sa->sa_family == AF_INET6) { + if (ls->sockaddr.sockaddr.sa_family == AF_INET6) { if (ngx_strcmp(&value[i].data[10], "n") == 0) { ls->ipv6only = 1; @@ -456,7 +412,7 @@ ngx_mail_core_listen(ngx_conf_t *cf, ngx_command_t *cmd, void *conf) ls->bind = 1; } else { - len = ngx_sock_ntop(sa, ls->socklen, buf, + len = ngx_sock_ntop(&ls->sockaddr.sockaddr, ls->socklen, buf, NGX_SOCKADDR_STRLEN, 1); ngx_conf_log_error(NGX_LOG_EMERG, cf, 0, Renamed: vendor/nginx-1.11.0/src/mail/ngx_mail_handler.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/src/mail/ngx_mail_imap_handler.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/src/mail/ngx_mail_imap_module.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/src/mail/ngx_mail_imap_module.h (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/src/mail/ngx_mail_parse.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/src/mail/ngx_mail_pop3_handler.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/src/mail/ngx_mail_pop3_module.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/src/mail/ngx_mail_pop3_module.h (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/src/mail/ngx_mail_proxy_module.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/src/mail/ngx_mail_smtp_handler.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/src/mail/ngx_mail_smtp_module.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/src/mail/ngx_mail_smtp_module.h (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/src/mail/ngx_mail_ssl_module.c (+31 -16) 92% =================================================================== --- vendor/nginx-1.9.15/src/mail/ngx_mail_ssl_module.c 2016-05-26 13:57:19 +0900 (ff5c141) +++ vendor/nginx-1.11.0/src/mail/ngx_mail_ssl_module.c 2016-05-26 16:28:26 +0900 (83cffb8) @@ -11,7 +11,7 @@ #define NGX_DEFAULT_CIPHERS "HIGH:!aNULL:!MD5" -#define NGX_DEFAULT_ECDH_CURVE "prime256v1" +#define NGX_DEFAULT_ECDH_CURVE "auto" static void *ngx_mail_ssl_create_conf(ngx_conf_t *cf); @@ -73,16 +73,16 @@ static ngx_command_t ngx_mail_ssl_commands[] = { { ngx_string("ssl_certificate"), NGX_MAIL_MAIN_CONF|NGX_MAIL_SRV_CONF|NGX_CONF_TAKE1, - ngx_conf_set_str_slot, + ngx_conf_set_str_array_slot, NGX_MAIL_SRV_CONF_OFFSET, - offsetof(ngx_mail_ssl_conf_t, certificate), + offsetof(ngx_mail_ssl_conf_t, certificates), NULL }, { ngx_string("ssl_certificate_key"), NGX_MAIL_MAIN_CONF|NGX_MAIL_SRV_CONF|NGX_CONF_TAKE1, - ngx_conf_set_str_slot, + ngx_conf_set_str_array_slot, NGX_MAIL_SRV_CONF_OFFSET, - offsetof(ngx_mail_ssl_conf_t, certificate_key), + offsetof(ngx_mail_ssl_conf_t, certificate_keys), NULL }, { ngx_string("ssl_password_file"), @@ -238,8 +238,6 @@ ngx_mail_ssl_create_conf(ngx_conf_t *cf) * set by ngx_pcalloc(): * * scf->protocols = 0; - * scf->certificate = { 0, NULL }; - * scf->certificate_key = { 0, NULL }; * scf->dhparam = { 0, NULL }; * scf->ecdh_curve = { 0, NULL }; * scf->client_certificate = { 0, NULL }; @@ -251,6 +249,8 @@ ngx_mail_ssl_create_conf(ngx_conf_t *cf) scf->enable = NGX_CONF_UNSET; scf->starttls = NGX_CONF_UNSET_UINT; + scf->certificates = NGX_CONF_UNSET_PTR; + scf->certificate_keys = NGX_CONF_UNSET_PTR; scf->passwords = NGX_CONF_UNSET_PTR; scf->prefer_server_ciphers = NGX_CONF_UNSET; scf->verify = NGX_CONF_UNSET_UINT; @@ -290,8 +290,9 @@ ngx_mail_ssl_merge_conf(ngx_conf_t *cf, void *parent, void *child) ngx_conf_merge_uint_value(conf->verify, prev->verify, 0); ngx_conf_merge_uint_value(conf->verify_depth, prev->verify_depth, 1); - ngx_conf_merge_str_value(conf->certificate, prev->certificate, ""); - ngx_conf_merge_str_value(conf->certificate_key, prev->certificate_key, ""); + ngx_conf_merge_ptr_value(conf->certificates, prev->certificates, NULL); + ngx_conf_merge_ptr_value(conf->certificate_keys, prev->certificate_keys, + NULL); ngx_conf_merge_ptr_value(conf->passwords, prev->passwords, NULL); @@ -328,7 +329,7 @@ ngx_mail_ssl_merge_conf(ngx_conf_t *cf, void *parent, void *child) if (*mode) { - if (conf->certificate.len == 0) { + if (conf->certificates == NULL) { ngx_log_error(NGX_LOG_EMERG, cf->log, 0, "no \"ssl_certificate\" is defined for " "the \"%s\" directive in %s:%ui", @@ -336,7 +337,7 @@ ngx_mail_ssl_merge_conf(ngx_conf_t *cf, void *parent, void *child) return NGX_CONF_ERROR; } - if (conf->certificate_key.len == 0) { + if (conf->certificate_keys == NULL) { ngx_log_error(NGX_LOG_EMERG, cf->log, 0, "no \"ssl_certificate_key\" is defined for " "the \"%s\" directive in %s:%ui", @@ -344,17 +345,31 @@ ngx_mail_ssl_merge_conf(ngx_conf_t *cf, void *parent, void *child) return NGX_CONF_ERROR; } + if (conf->certificate_keys->nelts < conf->certificates->nelts) { + ngx_log_error(NGX_LOG_EMERG, cf->log, 0, + "no \"ssl_certificate_key\" is defined " + "for certificate \"%V\" and " + "the \"ssl\" directive in %s:%ui", + ((ngx_str_t *) conf->certificates->elts) + + conf->certificates->nelts - 1, + conf->file, conf->line); + return NGX_CONF_ERROR; + } + } else { - if (conf->certificate.len == 0) { + if (conf->certificates == NULL) { return NGX_CONF_OK; } - if (conf->certificate_key.len == 0) { + if (conf->certificate_keys == NULL + || conf->certificate_keys->nelts < conf->certificates->nelts) + { ngx_log_error(NGX_LOG_EMERG, cf->log, 0, "no \"ssl_certificate_key\" is defined " "for certificate \"%V\"", - &conf->certificate); + ((ngx_str_t *) conf->certificates->elts) + + conf->certificates->nelts - 1); return NGX_CONF_ERROR; } } @@ -371,8 +386,8 @@ ngx_mail_ssl_merge_conf(ngx_conf_t *cf, void *parent, void *child) cln->handler = ngx_ssl_cleanup_ctx; cln->data = &conf->ssl; - if (ngx_ssl_certificate(cf, &conf->ssl, &conf->certificate, - &conf->certificate_key, conf->passwords) + if (ngx_ssl_certificates(cf, &conf->ssl, conf->certificates, + conf->certificate_keys, conf->passwords) != NGX_OK) { return NGX_CONF_ERROR; Renamed: vendor/nginx-1.11.0/src/mail/ngx_mail_ssl_module.h (+3 -2) 93% =================================================================== --- vendor/nginx-1.9.15/src/mail/ngx_mail_ssl_module.h 2016-05-26 13:57:19 +0900 (296a6a2) +++ vendor/nginx-1.11.0/src/mail/ngx_mail_ssl_module.h 2016-05-26 16:28:26 +0900 (26628d5) @@ -35,8 +35,9 @@ typedef struct { time_t session_timeout; - ngx_str_t certificate; - ngx_str_t certificate_key; + ngx_array_t *certificates; + ngx_array_t *certificate_keys; + ngx_str_t dhparam; ngx_str_t ecdh_curve; ngx_str_t client_certificate; Renamed: vendor/nginx-1.11.0/src/misc/ngx_cpp_test_module.cpp (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/src/misc/ngx_google_perftools_module.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/src/os/unix/ngx_alloc.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/src/os/unix/ngx_alloc.h (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/src/os/unix/ngx_atomic.h (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/src/os/unix/ngx_channel.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/src/os/unix/ngx_channel.h (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/src/os/unix/ngx_daemon.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/src/os/unix/ngx_darwin.h (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/src/os/unix/ngx_darwin_config.h (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/src/os/unix/ngx_darwin_init.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/src/os/unix/ngx_darwin_sendfile_chain.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/src/os/unix/ngx_dlopen.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/src/os/unix/ngx_dlopen.h (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/src/os/unix/ngx_errno.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/src/os/unix/ngx_errno.h (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/src/os/unix/ngx_file_aio_read.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/src/os/unix/ngx_files.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/src/os/unix/ngx_files.h (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/src/os/unix/ngx_freebsd.h (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/src/os/unix/ngx_freebsd_config.h (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/src/os/unix/ngx_freebsd_init.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/src/os/unix/ngx_freebsd_sendfile_chain.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/src/os/unix/ngx_gcc_atomic_amd64.h (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/src/os/unix/ngx_gcc_atomic_ppc.h (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/src/os/unix/ngx_gcc_atomic_sparc64.h (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/src/os/unix/ngx_gcc_atomic_x86.h (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/src/os/unix/ngx_linux.h (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/src/os/unix/ngx_linux_aio_read.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/src/os/unix/ngx_linux_config.h (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/src/os/unix/ngx_linux_init.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/src/os/unix/ngx_linux_sendfile_chain.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/src/os/unix/ngx_os.h (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/src/os/unix/ngx_posix_config.h (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/src/os/unix/ngx_posix_init.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/src/os/unix/ngx_process.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/src/os/unix/ngx_process.h (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/src/os/unix/ngx_process_cycle.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/src/os/unix/ngx_process_cycle.h (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/src/os/unix/ngx_readv_chain.c (+32 -0) 84% =================================================================== --- vendor/nginx-1.9.15/src/os/unix/ngx_readv_chain.c 2016-05-26 13:57:19 +0900 (d23508e) +++ vendor/nginx-1.11.0/src/os/unix/ngx_readv_chain.c 2016-05-26 16:28:26 +0900 (454cfdc) @@ -53,6 +53,20 @@ ngx_readv_chain(ngx_connection_t *c, ngx_chain_t *chain, off_t limit) #endif +#if (NGX_HAVE_EPOLLRDHUP) + + if (ngx_event_flags & NGX_USE_EPOLL_EVENT) { + ngx_log_debug2(NGX_LOG_DEBUG_EVENT, c->log, 0, + "readv: eof:%d, avail:%d", + rev->pending_eof, rev->available); + + if (!rev->available && !rev->pending_eof) { + return NGX_AGAIN; + } + } + +#endif + prev = NULL; iov = NULL; size = 0; @@ -151,6 +165,24 @@ ngx_readv_chain(ngx_connection_t *c, ngx_chain_t *chain, off_t limit) #endif +#if (NGX_HAVE_EPOLLRDHUP) + + if ((ngx_event_flags & NGX_USE_EPOLL_EVENT) + && ngx_use_epoll_rdhup) + { + if (n < size) { + if (!rev->pending_eof) { + rev->ready = 0; + } + + rev->available = 0; + } + + return n; + } + +#endif + if (n < size && !(ngx_event_flags & NGX_USE_GREEDY_EVENT)) { rev->ready = 0; } Renamed: vendor/nginx-1.11.0/src/os/unix/ngx_recv.c (+33 -0) 79% =================================================================== --- vendor/nginx-1.9.15/src/os/unix/ngx_recv.c 2016-05-26 13:57:19 +0900 (5013ae3) +++ vendor/nginx-1.11.0/src/os/unix/ngx_recv.c 2016-05-26 16:28:26 +0900 (c85fd45) @@ -50,6 +50,21 @@ ngx_unix_recv(ngx_connection_t *c, u_char *buf, size_t size) #endif +#if (NGX_HAVE_EPOLLRDHUP) + + if (ngx_event_flags & NGX_USE_EPOLL_EVENT) { + ngx_log_debug2(NGX_LOG_DEBUG_EVENT, c->log, 0, + "recv: eof:%d, avail:%d", + rev->pending_eof, rev->available); + + if (!rev->available && !rev->pending_eof) { + rev->ready = 0; + return NGX_AGAIN; + } + } + +#endif + do { n = recv(c->fd, buf, size, 0); @@ -101,6 +116,24 @@ ngx_unix_recv(ngx_connection_t *c, u_char *buf, size_t size) #endif +#if (NGX_HAVE_EPOLLRDHUP) + + if ((ngx_event_flags & NGX_USE_EPOLL_EVENT) + && ngx_use_epoll_rdhup) + { + if ((size_t) n < size) { + if (!rev->pending_eof) { + rev->ready = 0; + } + + rev->available = 0; + } + + return n; + } + +#endif + if ((size_t) n < size && !(ngx_event_flags & NGX_USE_GREEDY_EVENT)) { Renamed: vendor/nginx-1.11.0/src/os/unix/ngx_send.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/src/os/unix/ngx_setaffinity.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/src/os/unix/ngx_setaffinity.h (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/src/os/unix/ngx_setproctitle.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/src/os/unix/ngx_setproctitle.h (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/src/os/unix/ngx_shmem.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/src/os/unix/ngx_shmem.h (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/src/os/unix/ngx_socket.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/src/os/unix/ngx_socket.h (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/src/os/unix/ngx_solaris.h (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/src/os/unix/ngx_solaris_config.h (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/src/os/unix/ngx_solaris_init.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/src/os/unix/ngx_solaris_sendfilev_chain.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/src/os/unix/ngx_sunpro_amd64.il (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/src/os/unix/ngx_sunpro_atomic_sparc64.h (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/src/os/unix/ngx_sunpro_sparc64.il (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/src/os/unix/ngx_sunpro_x86.il (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/src/os/unix/ngx_thread.h (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/src/os/unix/ngx_thread_cond.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/src/os/unix/ngx_thread_id.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/src/os/unix/ngx_thread_mutex.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/src/os/unix/ngx_time.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/src/os/unix/ngx_time.h (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/src/os/unix/ngx_udp_recv.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/src/os/unix/ngx_udp_send.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/src/os/unix/ngx_user.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/src/os/unix/ngx_user.h (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/src/os/unix/ngx_writev_chain.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/src/os/win32/nginx.ico (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/src/os/win32/nginx.rc (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/src/os/win32/nginx_icon16.xpm (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/src/os/win32/nginx_icon32.xpm (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/src/os/win32/nginx_icon48.xpm (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/src/os/win32/ngx_alloc.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/src/os/win32/ngx_alloc.h (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/src/os/win32/ngx_atomic.h (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/src/os/win32/ngx_dlopen.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/src/os/win32/ngx_dlopen.h (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/src/os/win32/ngx_errno.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/src/os/win32/ngx_errno.h (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/src/os/win32/ngx_event_log.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/src/os/win32/ngx_files.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/src/os/win32/ngx_files.h (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/src/os/win32/ngx_os.h (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/src/os/win32/ngx_process.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/src/os/win32/ngx_process.h (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/src/os/win32/ngx_process_cycle.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/src/os/win32/ngx_process_cycle.h (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/src/os/win32/ngx_service.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/src/os/win32/ngx_shmem.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/src/os/win32/ngx_shmem.h (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/src/os/win32/ngx_socket.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/src/os/win32/ngx_socket.h (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/src/os/win32/ngx_stat.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/src/os/win32/ngx_thread.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/src/os/win32/ngx_thread.h (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/src/os/win32/ngx_time.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/src/os/win32/ngx_time.h (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/src/os/win32/ngx_udp_wsarecv.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/src/os/win32/ngx_user.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/src/os/win32/ngx_user.h (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/src/os/win32/ngx_win32_config.h (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/src/os/win32/ngx_win32_init.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/src/os/win32/ngx_wsarecv.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/src/os/win32/ngx_wsarecv_chain.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/src/os/win32/ngx_wsasend.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/src/os/win32/ngx_wsasend_chain.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/src/stream/ngx_stream.c (+10 -10) 95% =================================================================== --- vendor/nginx-1.9.15/src/stream/ngx_stream.c 2016-05-26 13:57:19 +0900 (3bd8f6d) +++ vendor/nginx-1.11.0/src/stream/ngx_stream.c 2016-05-26 16:28:26 +0900 (055622d) @@ -250,13 +250,13 @@ ngx_stream_add_ports(ngx_conf_t *cf, ngx_array_t *ports, struct sockaddr_in6 *sin6; #endif - sa = &listen->u.sockaddr; + sa = &listen->sockaddr.sockaddr; switch (sa->sa_family) { #if (NGX_HAVE_INET6) case AF_INET6: - sin6 = &listen->u.sockaddr_in6; + sin6 = &listen->sockaddr.sockaddr_in6; p = sin6->sin6_port; break; #endif @@ -268,7 +268,7 @@ ngx_stream_add_ports(ngx_conf_t *cf, ngx_array_t *ports, #endif default: /* AF_INET */ - sin = &listen->u.sockaddr_in; + sin = &listen->sockaddr.sockaddr_in; p = sin->sin_port; break; } @@ -359,7 +359,7 @@ ngx_stream_optimize_servers(ngx_conf_t *cf, ngx_array_t *ports) continue; } - ls = ngx_create_listening(cf, &addr[i].opt.u.sockaddr, + ls = ngx_create_listening(cf, &addr[i].opt.sockaddr.sockaddr, addr[i].opt.socklen); if (ls == NULL) { return NGX_CONF_ERROR; @@ -453,7 +453,7 @@ ngx_stream_add_addrs(ngx_conf_t *cf, ngx_stream_port_t *stport, for (i = 0; i < stport->naddrs; i++) { - sin = &addr[i].opt.u.sockaddr_in; + sin = &addr[i].opt.sockaddr.sockaddr_in; addrs[i].addr = sin->sin_addr.s_addr; addrs[i].conf.ctx = addr[i].opt.ctx; @@ -461,8 +461,8 @@ ngx_stream_add_addrs(ngx_conf_t *cf, ngx_stream_port_t *stport, addrs[i].conf.ssl = addr[i].opt.ssl; #endif - len = ngx_sock_ntop(&addr[i].opt.u.sockaddr, addr[i].opt.socklen, buf, - NGX_SOCKADDR_STRLEN, 1); + len = ngx_sock_ntop(&addr[i].opt.sockaddr.sockaddr, addr[i].opt.socklen, + buf, NGX_SOCKADDR_STRLEN, 1); p = ngx_pnalloc(cf->pool, len); if (p == NULL) { @@ -502,7 +502,7 @@ ngx_stream_add_addrs6(ngx_conf_t *cf, ngx_stream_port_t *stport, for (i = 0; i < stport->naddrs; i++) { - sin6 = &addr[i].opt.u.sockaddr_in6; + sin6 = &addr[i].opt.sockaddr.sockaddr_in6; addrs6[i].addr6 = sin6->sin6_addr; addrs6[i].conf.ctx = addr[i].opt.ctx; @@ -510,8 +510,8 @@ ngx_stream_add_addrs6(ngx_conf_t *cf, ngx_stream_port_t *stport, addrs6[i].conf.ssl = addr[i].opt.ssl; #endif - len = ngx_sock_ntop(&addr[i].opt.u.sockaddr, addr[i].opt.socklen, buf, - NGX_SOCKADDR_STRLEN, 1); + len = ngx_sock_ntop(&addr[i].opt.sockaddr.sockaddr, addr[i].opt.socklen, + buf, NGX_SOCKADDR_STRLEN, 1); p = ngx_pnalloc(cf->pool, len); if (p == NULL) { Renamed: vendor/nginx-1.11.0/src/stream/ngx_stream.h (+1 -12) 94% =================================================================== --- vendor/nginx-1.9.15/src/stream/ngx_stream.h 2016-05-26 13:57:19 +0900 (49efa45) +++ vendor/nginx-1.11.0/src/stream/ngx_stream.h 2016-05-26 16:28:26 +0900 (1c35173) @@ -31,18 +31,7 @@ typedef struct { typedef struct { - union { - struct sockaddr sockaddr; - struct sockaddr_in sockaddr_in; -#if (NGX_HAVE_INET6) - struct sockaddr_in6 sockaddr_in6; -#endif -#if (NGX_HAVE_UNIX_DOMAIN) - struct sockaddr_un sockaddr_un; -#endif - u_char sockaddr_data[NGX_SOCKADDRLEN]; - } u; - + ngx_sockaddr_t sockaddr; socklen_t socklen; /* server ctx */ Renamed: vendor/nginx-1.11.0/src/stream/ngx_stream_access_module.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/src/stream/ngx_stream_core_module.c (+24 -65) 90% =================================================================== --- vendor/nginx-1.9.15/src/stream/ngx_stream_core_module.c 2016-05-26 13:57:19 +0900 (ebc2b1c) +++ vendor/nginx-1.11.0/src/stream/ngx_stream_core_module.c 2016-05-26 16:28:26 +0900 (075db82) @@ -248,18 +248,11 @@ ngx_stream_core_server(ngx_conf_t *cf, ngx_command_t *cmd, void *conf) static char * ngx_stream_core_listen(ngx_conf_t *cf, ngx_command_t *cmd, void *conf) { - size_t len, off; - in_port_t port; ngx_str_t *value; ngx_url_t u; ngx_uint_t i, backlog; - struct sockaddr *sa; - struct sockaddr_in *sin; - ngx_stream_listen_t *ls; + ngx_stream_listen_t *ls, *als; ngx_stream_core_main_conf_t *cmcf; -#if (NGX_HAVE_INET6) - struct sockaddr_in6 *sin6; -#endif value = cf->args->elts; @@ -280,58 +273,6 @@ ngx_stream_core_listen(ngx_conf_t *cf, ngx_command_t *cmd, void *conf) cmcf = ngx_stream_conf_get_module_main_conf(cf, ngx_stream_core_module); - ls = cmcf->listen.elts; - - for (i = 0; i < cmcf->listen.nelts; i++) { - - sa = &ls[i].u.sockaddr; - - if (sa->sa_family != u.family) { - continue; - } - - switch (sa->sa_family) { - -#if (NGX_HAVE_INET6) - case AF_INET6: - off = offsetof(struct sockaddr_in6, sin6_addr); - len = 16; - sin6 = &ls[i].u.sockaddr_in6; - port = sin6->sin6_port; - break; -#endif - -#if (NGX_HAVE_UNIX_DOMAIN) - case AF_UNIX: - off = offsetof(struct sockaddr_un, sun_path); - len = sizeof(((struct sockaddr_un *) sa)->sun_path); - port = 0; - break; -#endif - - default: /* AF_INET */ - off = offsetof(struct sockaddr_in, sin_addr); - len = 4; - sin = &ls[i].u.sockaddr_in; - port = sin->sin_port; - break; - } - - if (ngx_memcmp(ls[i].u.sockaddr_data + off, u.sockaddr + off, len) - != 0) - { - continue; - } - - if (port != u.port) { - continue; - } - - ngx_conf_log_error(NGX_LOG_EMERG, cf, 0, - "duplicate \"%V\" address and port pair", &u.url); - return NGX_CONF_ERROR; - } - ls = ngx_array_push(&cmcf->listen); if (ls == NULL) { return NGX_CONF_ERROR; @@ -339,7 +280,7 @@ ngx_stream_core_listen(ngx_conf_t *cf, ngx_command_t *cmd, void *conf) ngx_memzero(ls, sizeof(ngx_stream_listen_t)); - ngx_memcpy(&ls->u.sockaddr, u.sockaddr, u.socklen); + ngx_memcpy(&ls->sockaddr.sockaddr, &u.sockaddr, u.socklen); ls->socklen = u.socklen; ls->backlog = NGX_LISTEN_BACKLOG; @@ -384,11 +325,10 @@ ngx_stream_core_listen(ngx_conf_t *cf, ngx_command_t *cmd, void *conf) if (ngx_strncmp(value[i].data, "ipv6only=o", 10) == 0) { #if (NGX_HAVE_INET6 && defined IPV6_V6ONLY) + size_t len; u_char buf[NGX_SOCKADDR_STRLEN]; - sa = &ls->u.sockaddr; - - if (sa->sa_family == AF_INET6) { + if (ls->sockaddr.sockaddr.sa_family == AF_INET6) { if (ngx_strcmp(&value[i].data[10], "n") == 0) { ls->ipv6only = 1; @@ -406,7 +346,7 @@ ngx_stream_core_listen(ngx_conf_t *cf, ngx_command_t *cmd, void *conf) ls->bind = 1; } else { - len = ngx_sock_ntop(sa, ls->socklen, buf, + len = ngx_sock_ntop(&ls->sockaddr.sockaddr, ls->socklen, buf, NGX_SOCKADDR_STRLEN, 1); ngx_conf_log_error(NGX_LOG_EMERG, cf, 0, @@ -558,5 +498,24 @@ ngx_stream_core_listen(ngx_conf_t *cf, ngx_command_t *cmd, void *conf) } } + als = cmcf->listen.elts; + + for (i = 0; i < cmcf->listen.nelts - 1; i++) { + if (ls->type != als[i].type) { + continue; + } + + if (ngx_cmp_sockaddr(&als[i].sockaddr.sockaddr, als[i].socklen, + &ls->sockaddr.sockaddr, ls->socklen, 1) + != NGX_OK) + { + continue; + } + + ngx_conf_log_error(NGX_LOG_EMERG, cf, 0, + "duplicate \"%V\" address and port pair", &u.url); + return NGX_CONF_ERROR; + } + return NGX_CONF_OK; } Renamed: vendor/nginx-1.11.0/src/stream/ngx_stream_handler.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/src/stream/ngx_stream_limit_conn_module.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/src/stream/ngx_stream_proxy_module.c (+127 -19) 92% =================================================================== --- vendor/nginx-1.9.15/src/stream/ngx_stream_proxy_module.c 2016-05-26 13:57:19 +0900 (6c535fd) +++ vendor/nginx-1.11.0/src/stream/ngx_stream_proxy_module.c 2016-05-26 16:28:26 +0900 (d4fa994) @@ -11,6 +11,14 @@ typedef struct { + ngx_addr_t *addr; +#if (NGX_HAVE_TRANSPARENT_PROXY) + ngx_uint_t transparent; /* unsigned transparent:1; */ +#endif +} ngx_stream_upstream_local_t; + + +typedef struct { ngx_msec_t connect_timeout; ngx_msec_t timeout; ngx_msec_t next_upstream_timeout; @@ -21,7 +29,7 @@ typedef struct { ngx_uint_t next_upstream_tries; ngx_flag_t next_upstream; ngx_flag_t proxy_protocol; - ngx_addr_t *local; + ngx_stream_upstream_local_t *local; #if (NGX_STREAM_SSL) ngx_flag_t ssl_enable; @@ -47,6 +55,8 @@ typedef struct { static void ngx_stream_proxy_handler(ngx_stream_session_t *s); +static ngx_int_t ngx_stream_proxy_set_local(ngx_stream_session_t *s, + ngx_stream_upstream_t *u, ngx_stream_upstream_local_t *local); static void ngx_stream_proxy_connect(ngx_stream_session_t *s); static void ngx_stream_proxy_init_upstream(ngx_stream_session_t *s); static void ngx_stream_proxy_upstream_handler(ngx_event_t *ev); @@ -113,7 +123,7 @@ static ngx_command_t ngx_stream_proxy_commands[] = { NULL }, { ngx_string("proxy_bind"), - NGX_STREAM_MAIN_CONF|NGX_STREAM_SRV_CONF|NGX_CONF_TAKE1, + NGX_STREAM_MAIN_CONF|NGX_STREAM_SRV_CONF|NGX_CONF_TAKE12, ngx_stream_proxy_bind, NGX_STREAM_SRV_CONF_OFFSET, 0, @@ -358,7 +368,11 @@ ngx_stream_proxy_handler(ngx_stream_session_t *s) u->peer.log = c->log; u->peer.log_error = NGX_ERROR_ERR; - u->peer.local = pscf->local; + if (ngx_stream_proxy_set_local(s, u, pscf->local) != NGX_OK) { + ngx_stream_proxy_finalize(s, NGX_ERROR); + return; + } + u->peer.type = c->type; uscf = pscf->upstream; @@ -428,6 +442,71 @@ ngx_stream_proxy_handler(ngx_stream_session_t *s) } +static ngx_int_t +ngx_stream_proxy_set_local(ngx_stream_session_t *s, ngx_stream_upstream_t *u, + ngx_stream_upstream_local_t *local) +{ + ngx_addr_t *addr; + ngx_connection_t *c; + struct sockaddr_in *sin; +#if (NGX_HAVE_INET6) + struct sockaddr_in6 *sin6; +#endif + + if (local == NULL) { + u->peer.local = NULL; + return NGX_OK; + } + +#if (NGX_HAVE_TRANSPARENT_PROXY) + u->peer.transparent = local->transparent; +#endif + + if (local->addr) { + u->peer.local = local->addr; + return NGX_OK; + } + + /* $remote_addr */ + + c = s->connection; + + addr = ngx_palloc(c->pool, sizeof(ngx_addr_t)); + if (addr == NULL) { + return NGX_ERROR; + } + + addr->socklen = c->socklen; + + addr->sockaddr = ngx_palloc(c->pool, addr->socklen); + if (addr->sockaddr == NULL) { + return NGX_ERROR; + } + + ngx_memcpy(addr->sockaddr, c->sockaddr, c->socklen); + + switch (addr->sockaddr->sa_family) { + + case AF_INET: + sin = (struct sockaddr_in *) addr->sockaddr; + sin->sin_port = 0; + break; + +#if (NGX_HAVE_INET6) + case AF_INET6: + sin6 = (struct sockaddr_in6 *) addr->sockaddr; + sin6->sin6_port = 0; + break; +#endif + } + + addr->name = c->addr_text; + u->peer.local = addr; + + return NGX_OK; +} + + static void ngx_stream_proxy_connect(ngx_stream_session_t *s) { @@ -1637,8 +1716,9 @@ ngx_stream_proxy_bind(ngx_conf_t *cf, ngx_command_t *cmd, void *conf) { ngx_stream_proxy_srv_conf_t *pscf = conf; - ngx_int_t rc; - ngx_str_t *value; + ngx_int_t rc; + ngx_str_t *value; + ngx_stream_upstream_local_t *local; if (pscf->local != NGX_CONF_UNSET_PTR) { return "is duplicate"; @@ -1646,29 +1726,57 @@ ngx_stream_proxy_bind(ngx_conf_t *cf, ngx_command_t *cmd, void *conf) value = cf->args->elts; - if (ngx_strcmp(value[1].data, "off") == 0) { + if (cf->args->nelts == 2 && ngx_strcmp(value[1].data, "off") == 0) { pscf->local = NULL; return NGX_CONF_OK; } - pscf->local = ngx_palloc(cf->pool, sizeof(ngx_addr_t)); - if (pscf->local == NULL) { + local = ngx_palloc(cf->pool, sizeof(ngx_stream_upstream_local_t)); + if (local == NULL) { return NGX_CONF_ERROR; } - rc = ngx_parse_addr(cf->pool, pscf->local, value[1].data, value[1].len); + pscf->local = local; - switch (rc) { - case NGX_OK: - pscf->local->name = value[1]; - return NGX_CONF_OK; + if (ngx_strcmp(value[1].data, "$remote_addr") != 0) { + local->addr = ngx_palloc(cf->pool, sizeof(ngx_addr_t)); + if (local->addr == NULL) { + return NGX_CONF_ERROR; + } - case NGX_DECLINED: - ngx_conf_log_error(NGX_LOG_EMERG, cf, 0, - "invalid address \"%V\"", &value[1]); - /* fall through */ + rc = ngx_parse_addr(cf->pool, local->addr, value[1].data, value[1].len); - default: - return NGX_CONF_ERROR; + switch (rc) { + case NGX_OK: + local->addr->name = value[1]; + break; + + case NGX_DECLINED: + ngx_conf_log_error(NGX_LOG_EMERG, cf, 0, + "invalid address \"%V\"", &value[1]); + /* fall through */ + + default: + return NGX_CONF_ERROR; + } + } + + if (cf->args->nelts > 2) { + if (ngx_strcmp(value[2].data, "transparent") == 0) { +#if (NGX_HAVE_TRANSPARENT_PROXY) + local->transparent = 1; + +#else + ngx_conf_log_error(NGX_LOG_EMERG, cf, 0, + "transparent proxying is not supported " + "on this platform, ignored"); +#endif + } else { + ngx_conf_log_error(NGX_LOG_EMERG, cf, 0, + "invalid parameter \"%V\"", &value[2]); + return NGX_CONF_ERROR; + } } + + return NGX_CONF_OK; } Renamed: vendor/nginx-1.11.0/src/stream/ngx_stream_ssl_module.c (+18 -14) 93% =================================================================== --- vendor/nginx-1.9.15/src/stream/ngx_stream_ssl_module.c 2016-05-26 13:57:19 +0900 (e12da1b) +++ vendor/nginx-1.11.0/src/stream/ngx_stream_ssl_module.c 2016-05-26 16:28:26 +0900 (2d2f3ca) @@ -11,7 +11,7 @@ #define NGX_DEFAULT_CIPHERS "HIGH:!aNULL:!MD5" -#define NGX_DEFAULT_ECDH_CURVE "prime256v1" +#define NGX_DEFAULT_ECDH_CURVE "auto" static void *ngx_stream_ssl_create_conf(ngx_conf_t *cf); @@ -45,16 +45,16 @@ static ngx_command_t ngx_stream_ssl_commands[] = { { ngx_string("ssl_certificate"), NGX_STREAM_MAIN_CONF|NGX_STREAM_SRV_CONF|NGX_CONF_TAKE1, - ngx_conf_set_str_slot, + ngx_conf_set_str_array_slot, NGX_STREAM_SRV_CONF_OFFSET, - offsetof(ngx_stream_ssl_conf_t, certificate), + offsetof(ngx_stream_ssl_conf_t, certificates), NULL }, { ngx_string("ssl_certificate_key"), NGX_STREAM_MAIN_CONF|NGX_STREAM_SRV_CONF|NGX_CONF_TAKE1, - ngx_conf_set_str_slot, + ngx_conf_set_str_array_slot, NGX_STREAM_SRV_CONF_OFFSET, - offsetof(ngx_stream_ssl_conf_t, certificate_key), + offsetof(ngx_stream_ssl_conf_t, certificate_keys), NULL }, { ngx_string("ssl_password_file"), @@ -175,8 +175,6 @@ ngx_stream_ssl_create_conf(ngx_conf_t *cf) * set by ngx_pcalloc(): * * scf->protocols = 0; - * scf->certificate = { 0, NULL }; - * scf->certificate_key = { 0, NULL }; * scf->dhparam = { 0, NULL }; * scf->ecdh_curve = { 0, NULL }; * scf->ciphers = { 0, NULL }; @@ -184,6 +182,8 @@ ngx_stream_ssl_create_conf(ngx_conf_t *cf) */ scf->handshake_timeout = NGX_CONF_UNSET_MSEC; + scf->certificates = NGX_CONF_UNSET_PTR; + scf->certificate_keys = NGX_CONF_UNSET_PTR; scf->passwords = NGX_CONF_UNSET_PTR; scf->prefer_server_ciphers = NGX_CONF_UNSET; scf->builtin_session_cache = NGX_CONF_UNSET; @@ -216,8 +216,9 @@ ngx_stream_ssl_merge_conf(ngx_conf_t *cf, void *parent, void *child) (NGX_CONF_BITMASK_SET|NGX_SSL_TLSv1 |NGX_SSL_TLSv1_1|NGX_SSL_TLSv1_2)); - ngx_conf_merge_str_value(conf->certificate, prev->certificate, ""); - ngx_conf_merge_str_value(conf->certificate_key, prev->certificate_key, ""); + ngx_conf_merge_ptr_value(conf->certificates, prev->certificates, NULL); + ngx_conf_merge_ptr_value(conf->certificate_keys, prev->certificate_keys, + NULL); ngx_conf_merge_ptr_value(conf->passwords, prev->passwords, NULL); @@ -231,15 +232,18 @@ ngx_stream_ssl_merge_conf(ngx_conf_t *cf, void *parent, void *child) conf->ssl.log = cf->log; - if (conf->certificate.len == 0) { + if (conf->certificates == NULL) { return NGX_CONF_OK; } - if (conf->certificate_key.len == 0) { + if (conf->certificate_keys == NULL + || conf->certificate_keys->nelts < conf->certificates->nelts) + { ngx_log_error(NGX_LOG_EMERG, cf->log, 0, "no \"ssl_certificate_key\" is defined " "for certificate \"%V\"", - &conf->certificate); + ((ngx_str_t *) conf->certificates->elts) + + conf->certificates->nelts - 1); return NGX_CONF_ERROR; } @@ -255,8 +259,8 @@ ngx_stream_ssl_merge_conf(ngx_conf_t *cf, void *parent, void *child) cln->handler = ngx_ssl_cleanup_ctx; cln->data = &conf->ssl; - if (ngx_ssl_certificate(cf, &conf->ssl, &conf->certificate, - &conf->certificate_key, conf->passwords) + if (ngx_ssl_certificates(cf, &conf->ssl, conf->certificates, + conf->certificate_keys, conf->passwords) != NGX_OK) { return NGX_CONF_ERROR; Renamed: vendor/nginx-1.11.0/src/stream/ngx_stream_ssl_module.h (+3 -2) 91% =================================================================== --- vendor/nginx-1.9.15/src/stream/ngx_stream_ssl_module.h 2016-05-26 13:57:19 +0900 (85e8b6e) +++ vendor/nginx-1.11.0/src/stream/ngx_stream_ssl_module.h 2016-05-26 16:28:26 +0900 (9b1c41a) @@ -27,8 +27,9 @@ typedef struct { time_t session_timeout; - ngx_str_t certificate; - ngx_str_t certificate_key; + ngx_array_t *certificates; + ngx_array_t *certificate_keys; + ngx_str_t dhparam; ngx_str_t ecdh_curve; Renamed: vendor/nginx-1.11.0/src/stream/ngx_stream_upstream.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/src/stream/ngx_stream_upstream.h (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/src/stream/ngx_stream_upstream_hash_module.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/src/stream/ngx_stream_upstream_least_conn_module.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/src/stream/ngx_stream_upstream_round_robin.c (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/src/stream/ngx_stream_upstream_round_robin.h (+0 -0) 100% =================================================================== Renamed: vendor/nginx-1.11.0/src/stream/ngx_stream_upstream_zone_module.c (+0 -0) 100% ===================================================================