Compare commits

..

425 Commits

Author SHA1 Message Date
8c37412c31 disable win32 in nginx-1.27.1-proc_exit_handler.patch. 2024-10-10 11:41:03 +08:00
c41a1ae6b9 update lua-resty-core to v0.1.30. 2024-10-10 10:01:26 +08:00
120ad62721 feature: update lua-resty-lurcache to 0.15. 2024-10-10 08:58:21 +08:00
5ef14281cd feature: add openssl-3.0.15-sess_set_get_cb_yield.patch. 2024-09-14 19:49:08 +08:00
efc930249e feat: bump openssl-1.1.1f-sess_set_get_cb_yield.patch to 3.0.12. 2024-09-14 12:49:51 +08:00
c58d90ce11 patch: add NGX_HAVE_PROC_EXIT for proc_exit_handler. 2024-08-21 09:20:41 +08:00
27303d2fd0 feature: add proc_exit_handler. 2024-08-20 20:17:08 +08:00
347c47c784 win32: update pcre to pcre2-10.44. 2024-08-20 17:54:06 +08:00
476b640fbb test: fixed travis.yml. 2024-08-20 10:52:31 +08:00
a8f26b9419 feature: upgrade the nginx core to 1.27.1. 2024-08-20 09:48:42 +08:00
0b57c3b04a bumped openresty to v1.27.1.1. 2024-08-19 11:48:21 +08:00
9fb4098d72 feature: add patches for nginx-1.27.1. (#999) 2024-08-16 21:50:43 +08:00
2d1e490fa0 feature: update luajit to v20240815. 2024-08-15 09:42:32 +08:00
af1f50b320 formal release 1.27.0.1. 2024-08-14 22:00:58 +08:00
d3a190467e feature: bumped lua-resty-redis to 0.31. 2024-08-08 23:47:00 +08:00
4da52a0574 patches: added initialize_quic_transport_id_variable.patch for nginx >= 1.27.0. (#993) 2024-08-06 22:41:40 +08:00
8b119bceb7 win32: upgraded deps zlib to 1.3.1. 2024-07-09 17:27:25 +08:00
cc86d58043 feature: more patch for balancer_pool_max_retry. 2024-07-09 11:41:35 +08:00
3636b199e5 bugfix: respect max retry after using balancer pool.
Signed-off-by: tzssangglass <tzssangglass@gmail.com>
2024-07-08 22:20:47 +08:00
09efae3e6a tests: update tests. 2024-06-26 14:44:22 +08:00
00d11dd647 feature: update luajit to v2.1-20240626. 2024-06-26 13:37:15 +08:00
cdd227a4f6 feature: upgrade the nginx core to 1.27.0. 2024-06-26 13:36:22 +08:00
9c9495b6f9 bugfix: backport fixes for CVE-2024-24989 and CVE-2024-24990. 2024-05-01 10:11:04 +08:00
7b7fcbe078 tests: fixed failed test introduced by commit ad33f56e91. 2024-01-13 10:16:10 +08:00
478d980900 changes: remove the pcre2 disable config. 2024-01-12 22:13:21 +08:00
ad33f56e91 change: Makefile: added new INSTALL variable that can be overridden from the make command line.
Also fixed compatibility with Android Termux's install utility.
2024-01-09 22:59:56 -08:00
8978f0426f formal release 1.25.3.1. (#952) 2024-01-04 11:43:38 +08:00
a71e039a0d updated the default index page and 50x error page. (#949) 2024-01-04 10:57:01 +08:00
8760b0af4a win32: upgraded deps openssl to 1.1.1w and zlib to 1.3. (#950) 2023-12-31 10:02:42 +08:00
6fe9e3f7e6 feature: release openresty-1.25.3rc1.
Co-authored-by: jiahao <wangjiahao@openresty.com>
2023-12-29 16:14:01 +08:00
aecf396061 feature: add patch for nginx-1.25.3. 2023-11-23 18:09:34 +08:00
348fcffc2b tests: update test expectation. 2023-10-27 18:23:24 +08:00
5196b0d9ac bumped headers-more-nginx-module to v0.35. 2023-10-27 10:45:32 +08:00
2f97ded92b bugfix: applied the patch for secrity advisory to NGINX cores (CVE-2023-44487). (#931) 2023-10-18 15:00:46 +08:00
d086dbcfc5 bugfix: make no_error_pages patch more accurate to ensure work properly on macOS. 2023-08-28 23:04:49 +08:00
6278b1aeae feature: upgrade nginx core to 1.25.1 which supports HTTP3. 2023-08-05 23:18:27 +08:00
cf8c2f827e change: dist-check: close nginx using PID file instead of killall. (#916) 2023-07-17 16:49:36 +08:00
cd976f9286 bumped ngx_lua to 0.10.25, lua-resty-core to 0.1.27.
bumped version to 1.21.4.2.
2023-06-21 21:19:59 +08:00
dfbc003724 bugfix: dist-check: avoid killall nginx. 2023-04-17 10:24:06 -07:00
a1730aba13 upgraded luajit2 to 2.1-20230410. (#903) 2023-04-14 17:02:57 +08:00
055e86bff2 rc1 comes first. 2023-03-30 15:44:48 -07:00
f8e47102b7 bumped ngx_lua to 0.10.24, ngx_stream_lua to 0.0.13, lua-resty-core to 0.1.26. (#898)
* bumped lua-resty-upstream-healthcheck version to 0.08.

* tests: disable ipv6 for linux s390x.

* bumped version to 1.21.4.2.
2023-03-23 18:23:03 +08:00
0d32bd9bdb win32: upgraded deps openssl, zlib, and pcre. 2023-03-08 15:23:08 -08:00
9fcf59d7b2 bumped ngx_lua version to 0.10.23. (#897) 2023-03-08 15:10:14 +08:00
3c838ca999 upgraded ngx_lua to 0.10.23rc3. (#896) 2023-03-07 16:23:52 +08:00
222b48ab61 bumped version to 1.21.4.2rc1. (#895) 2023-03-07 12:25:28 +08:00
3e4114a5f6 updated the default index page and 50x error page. 2023-03-04 13:39:35 -08:00
7a923b387d upgraded ngx_lua to 0.10.23. (#890)
* upgraded stream_ngx_lua to 0.0.12.
* upgraded srcache-nginx-module to 0.33.
* upgraded lua-resty-memcached to 0.17.
* upgraded lua-resty-mysql to 0.26.
* upgraded lua-resty-upload to 0.11.
* upgraded lua-resty-websocket to 0.10.
* upgraded lua-resty-core to 0.1.25.
2023-02-16 11:10:23 +08:00
d5c5ccbad2 upgraded ngx_lua to 0.10.23rc2. (#889)
upgraded lua-resty-core to 0.1.25rc2.
2023-02-09 11:23:08 +08:00
21eb0377ac travis: upgraded OpenSSL to 1.1.1s. 2023-01-19 22:01:10 +08:00
4e6a67922c tests: fixed tests to reflect component version bumps for 1.21.4.2. 2023-01-19 17:56:23 +08:00
6b8e60f250 upgraded luajit2 to 2.1-20230119. 2023-01-19 16:18:23 +08:00
9c7427f75f upgraded lua-resty-websocket to 0.10rc1. 2023-01-19 16:14:23 +08:00
95f7d3297f upgraded rds-json-nginx-module to 0.16. 2023-01-19 16:14:23 +08:00
b14716be04 upgraded ngx_devel_kit to 0.3.2. 2023-01-19 16:14:22 +08:00
acfb47448b upgraded headers-more-nginx-module to 0.34. 2023-01-19 16:14:22 +08:00
0eae2a784b upgraded lua-nginx-module to 0.10.23rc1. 2023-01-19 16:14:22 +08:00
05362687c2 upgraded resty-cli to 0.29. 2023-01-19 16:14:22 +08:00
965ccfb230 upgraded lua-resty-mysql to 0.26rc1. 2023-01-19 16:14:19 +08:00
56acc7b9c2 upgraded lua-resty-upload to 0.11rc1. 2023-01-19 16:13:58 +08:00
f5eaffb12a upgraded lua-resty-memcached to 0.17rc1. 2023-01-19 16:13:54 +08:00
86267fc022 upgraded echo-nginx-module to 0.63. 2023-01-19 11:37:20 +08:00
90363486a5 upgraded drizzle-nginx-module to 0.1.12. 2023-01-19 11:36:32 +08:00
eaa41a295a upgraded lua-resty-lrucache to 0.13. 2023-01-19 11:32:04 +08:00
adae554762 upgraded lua-cjson to 2.1.0.11. 2023-01-19 11:30:12 +08:00
691cddfe90 upgraded srcache-nginx-module to 0.33rc1. 2023-01-19 11:26:49 +08:00
3b626720b2 upgraded stream-lua-nginx-module to 0.0.12rc1. 2023-01-19 11:03:03 +08:00
42e8796c67 upgraded lua-resty-core to 0.1.25rc1. 2023-01-19 11:01:12 +08:00
7043c6b9b7 upgraded opm to 0.0.7. 2023-01-19 10:59:28 +08:00
3aec27a4e8 upgraded lua-resty-lock to 0.09. 2023-01-19 10:54:22 +08:00
d1846b1c9d upgraded lua-resty-upstream-healthcheck to 0.07. 2023-01-19 10:53:06 +08:00
369f93ccbd upgraded array-var-nginx-module to 0.06. 2023-01-19 10:47:50 +08:00
e7e21f9b40 Refresh check-spelling workflow (#865) 2022-09-23 20:41:48 +08:00
21c58ae1f5 bumped version to 1.21.4.2. (#863) 2022-09-15 20:09:17 +08:00
0d3f8f0a0b bugfix:tarballs add privileged agent threadpool (#848) 2022-07-16 17:03:33 +08:00
d0a77980eb patches: add privileged agent thread pool (#847) 2022-07-13 23:34:54 +08:00
47eb6f3962 style: add a way to check PR title automatically (#846)
Signed-off-by: spacewander <spacewanderlzx@gmail.com>
2022-07-04 21:09:21 +08:00
546175e3c5 ci: upgraded OpenSSL to 1.1.1p. (#844)
* win32/win64: upgraded openssl to 1.1.1p.
2022-07-02 10:49:28 +08:00
ae42a6bd86 upgrade nginx core to 1.23.0. (#839) 2022-06-27 15:17:19 +08:00
37fe0d4314 bumped version to 1.21.4.1. (#832) 2022-05-13 15:04:38 +08:00
e699097b04 bumped version to 1.21.4.1rc3. (#828) 2022-04-14 18:25:19 +08:00
74d747d9b4 tests: 002-reuseport-close-unused-fds.t: the order of the logs generated by multiple processes is uncertain. (#827) 2022-04-12 23:25:45 +08:00
733ab1d043 win32/win64: upgrade zlib to 1.2.12. (#823) 2022-04-11 20:37:22 +08:00
4082fb0d1d upgraded luajit to 2.1-20220411. (#826) 2022-04-11 17:20:43 +08:00
fb254e1ff6 win32/win64: upgraded openssl to 1.1.1n. (#820) 2022-03-22 22:41:50 +08:00
202d218840 bumped version to 1.21.4.1rc2. 2022-03-11 12:21:51 +08:00
1b145ac3ca upgraded luajit to 2.1-20220310. 2022-03-10 17:26:14 +08:00
5c9d9661c7 upgraded ngx_lua to 0.10.21rc2. 2022-03-02 14:57:46 +08:00
231eebec0b tests: actually run testing on s390x. (#812)
Signed-off-by: Artiom Vaskov <Artiom.Vaskov@ibm.com>
2022-02-06 15:41:46 +08:00
fa95e176fb travis: added spelling check workflow. (#811) 2022-01-29 20:46:37 +08:00
f6b6f10fc0 win32/win64: upgraded openssl to 1.1.1m. 2022-01-26 12:00:54 -08:00
e44c540725 tests: fixed tests to reflect LuaJIT version bumps. (#810) 2022-01-26 23:43:44 +08:00
d84bf6756d upgraded luajit to 2.1-20220111. (#806) 2022-01-11 23:42:38 +08:00
a7142a8934 bugfix: fixed typo in no-pool patch of 1.21.4. (#799) 2021-12-22 12:09:58 +08:00
f3a85d860f upgraded ngx_lua to 0.10.21rc1, ngx_stream_lua to 0.0.11rc1, lua-resty-core to 0.1.23rc1, ... (#795)
luajit to 2.1-20211210, lua-resty-websocket to 0.09rc1, lua-resty-redis to 0.30rc1, lua-resty-limit-traffic to 0.08rc1, lua-resty-mysql to 0.25rc1, set-misc-nginx-module to 0.33, encrypted-session-nginx-module to 0.09, lua-resty-string to 0.15, lua-cjson to 2.1.0.10rc1
2021-12-11 09:19:56 +08:00
0c2d10af40 bugfix: echoed the wrong message when applying ssl_client_hello_cb_yield.patch (#789) 2021-11-29 23:56:07 +08:00
7e1cf985cf bugfix: check if the worker_connections is 0 before privileged agent spawning. (#786)
The core dump may occur during initialization

    Program terminated with signal SIGSEGV, Segmentation fault.
    #0  0x0000000000441711 in ngx_event_process_init (cycle=0x1e93cc0) at src/event/ngx_event.c:807
    801         i = cycle->connection_n;
    802         next = NULL;
    803
    804         do {
    805             i--;
    806
    807             c[i].data = next;
    #1  0x000000000044abb9 in ngx_worker_process_init (cycle=cycle@entry=0x1e93cc0, worker=worker@entry=-1) at src/os/unix/ngx_process_cycle.c:968
2021-11-09 14:23:33 +08:00
4a092bb740 travis-ci: updated ftp.pcre.org to sourceforge mirror to download pcre. (#784) 2021-11-05 22:47:25 +08:00
6568f3f2f1 travis-ci: fixed warnings on .travis.yml. 2021-11-05 16:18:52 +08:00
9781850623 travis-ci: remove unnecessary ones from the test matrix. 2021-11-05 15:05:00 +08:00
7df6239881 upgrade the nginx core to 1.21.4. 2021-11-05 11:59:23 +08:00
72ca953bf2 mirror-tarballs: fixed the directory deletion errors. 2021-10-29 09:25:55 +08:00
5c7ad29352 upgrade the nginx core to 1.21.3. (#779) 2021-10-26 16:07:59 +08:00
c2bf0b421c travis-ci: upgrade dist of travis-ci to ubuntu bionic. (#778) 2021-10-16 14:34:50 +08:00
9fa420424a patches: added the nginx-1.19.9-ssl_client_hello_cb_yield patch. 2021-09-20 18:31:15 +08:00
c7a3cfe57f travis-ci: enable ci test for ppc64le.
This PR fixes issue #731
For every PR, an equivalent Travis job is triggered for ppc64le architecture.

Signed-off-by: Krishna Harsha Voora <krishvoor@in.ibm.com>
2021-09-13 15:42:24 +08:00
ab5a632278 win32: upgraded openssl to 1.1.1l. (#773) 2021-09-11 15:34:57 +08:00
1befa30baa upgraded ngx_http_redis module to 0.3.9. (#754) 2021-08-13 14:01:00 +08:00
df4d005211 Merge branch 'v1.19.9.x' 2021-08-06 14:17:32 -07:00
04ef2ec590 bumped version to 1.19.9.1. 2021-08-05 18:28:44 -07:00
f39a584775 chore: fix spelling 2021-07-23 20:03:20 +08:00
c93ef77262 change: introduce a new patch for privileged agent process connections. (#751) 2021-07-19 18:34:46 +08:00
174f72b95c feature: add config ability for privileged connections number. 2021-07-13 12:47:57 +08:00
ee23eb4a51 upgraded lua-resty-signal to 0.03. 2021-06-30 15:27:07 +08:00
6aeb03501f upgraded lua-resty-core to 0.1.22. 2021-06-30 15:24:19 +08:00
805df3d657 upgraded lua-resty-lrucache to 0.11. 2021-06-30 15:21:05 +08:00
077b4dcef8 upgraded lua-resty-string to 0.14. 2021-06-30 15:17:37 +08:00
4933c6f612 upgraded lua-resty-mysql to 0.24. 2021-06-30 15:15:50 +08:00
ca141a4b66 upgraded lua-resty-memcached to 0.16. 2021-06-30 15:06:23 +08:00
13700cacb6 upgraded lua-resty-dns to 0.22. 2021-06-30 14:45:54 +08:00
9d1eb80e1e upgraded opm to 0.0.6. 2021-06-30 14:43:37 +08:00
826e7286e0 upgraded resty-cli to 0.28. 2021-06-30 14:39:36 +08:00
4b99fd3c0e upgraded ngx_stream_lua to 0.0.10. 2021-06-30 14:36:42 +08:00
66a8c85811 upgraded ngx_lua to 0.10.20. 2021-06-30 14:24:26 +08:00
46610182dd travis-ci: upgraded OpenSSL to 1.1.1k. (#743) 2021-06-01 12:20:27 +08:00
4b5ec7edd7 bugfix: applied the patch for security advisory to NGINX cores >= 0.6.18 and <= 1.20.0 (CVE-2021-23017). (#739) 2021-05-28 10:25:01 +08:00
42410a71cd upgraded ngx_stream_lua to 0.0.10rc2. 2021-05-12 10:58:38 +08:00
fcac763f22 win32: upgraded openssl to 1.1.1k. (#730) 2021-05-11 23:07:37 +08:00
b3c6965092 upgraded LuaJIT to 2.1-20210510. 2021-05-10 14:31:22 +08:00
e51b659141 upgraded lua-tablepool to 0.02. 2021-05-07 23:29:20 +08:00
e06dd8ff32 upgraded lua-resty-signal to 0.03rc1. 2021-05-07 23:08:41 +08:00
c5c858bbca upgraded lua-resty-core to 0.1.22rc1. 2021-05-07 22:17:38 +08:00
34645f7dc8 upgraded ngx_stream_lua to 0.0.10rc1. 2021-05-07 22:14:49 +08:00
7586293fe7 upgraded ngx_lua to 0.10.20rc1. 2021-05-07 22:11:49 +08:00
99d01cdc1c upgraded opm to 0.0.6rc1. 2021-05-07 19:34:02 +08:00
bd1b387c3d upgraded resty-cli to 0.28rc1. 2021-05-07 19:31:58 +08:00
12db974fc0 upgraded lua-resty-dns to 0.22rc1. 2021-05-07 19:29:43 +08:00
7d262c5c8d upgraded lua-resty-mysql to 0.24rc1. 2021-05-07 19:27:17 +08:00
b9a6f107e2 upgraded lua-resty-string to 0.14rc1. 2021-05-07 19:24:35 +08:00
2be7ad590e upgraded lua-resty-lrucache to 0.11rc1. 2021-05-07 19:21:12 +08:00
6cd17e53fa upgraded lua-resty-memcached to v0.16rc1. 2021-05-07 19:17:04 +08:00
e0eb531243 doc: fixed misspelling. (#693) 2021-05-07 17:32:19 +08:00
40104504e5 build-win32.sh: removed redundant configuration '--with-ipv6'. (#696) 2021-05-07 17:30:35 +08:00
b4592301ad tests: fixed tests to reflect nginx version bumps. (#718) 2021-04-01 18:25:47 +08:00
1562e11be5 upgraded the nginx core to 1.19.9. (#717) 2021-04-01 18:20:03 +08:00
3abb2c7fae upgraded the nginx core to 1.19.8. (#715) 2021-03-29 12:36:42 +08:00
de3e659ef5 bumped version to 1.19.3.1. 2020-11-06 12:18:13 -08:00
1c4063664e upgraded lua-resty-mysql to 0.23. 2020-11-04 11:14:07 +08:00
72d8adc75c tests: fixed tests to reflect component version bumps. 2020-11-03 16:19:48 +08:00
d5f130fbff upgraded lua-resty-core to 0.1.21. 2020-11-03 16:18:44 +08:00
934a3102dc upgraded ngx_lua to 0.10.19. 2020-11-03 16:18:25 +08:00
b9bc185f79 upgraded lua-resty-websocket to 0.08. 2020-10-30 16:41:34 +08:00
f43cd23f83 upgraded resty-cli to 0.27. 2020-10-30 16:40:47 +08:00
0e1cad8190 upgraded lua-resty-core to 0.1.20. 2020-10-30 16:40:12 +08:00
ce740cba10 upgraded ngx_stream_lua to v0.0.9. 2020-10-30 16:39:22 +08:00
8fa9533c5e upgraded ngx_lua to 0.10.18. 2020-10-30 16:38:52 +08:00
29b901d4cd change: ./configure: we no longer need to pass in -msse4.2 with the latest LuaJIT. 2020-10-27 01:06:41 -07:00
fcee0d36da bumped version to 1.19.3.1 RC2. 2020-10-27 00:37:39 -07:00
bae27d3eff updated tests to reflect the new luajit. 2020-10-27 00:36:28 -07:00
931adca76a upgraded LuaJIT to 2.1-20201027. 2020-10-27 00:35:54 -07:00
62c3cb72a1 bumped version to 1.19.3.1 RC1. 2020-10-24 12:55:08 -07:00
8a4605a933 upgraded lua-resty-core to 0.1.20rc3. 2020-10-24 04:48:18 -05:00
a8696337a6 upgraded ngx_lua to 0.10.18rc4. 2020-10-24 04:48:09 -05:00
771e9e678e style: remove useless trailing spaces. (#665) 2020-10-18 10:40:49 +08:00
f9634628c1 tests: fixed tests to reflect component version bumps. (#666)
upgraded LuaJIT to 2.1-20201012-2.
2020-10-13 16:55:16 +08:00
2d5e6626ba upgraded LuaJIT to 2.1-20201012-2. 2020-10-12 18:13:44 -07:00
917e5ec2ac upgraded LuaJIT to 2.1-20201012. 2020-10-12 17:48:04 -07:00
083f003647 tests: fixed tests to reflect component version bumps. (#662) 2020-10-12 16:23:58 +08:00
3d99a48000 upgraded ngx_lua to 0.10.18rc3. (#663) 2020-10-12 12:29:42 +08:00
3f4dc6dd9e upgraded ngx_stream_lua to v0.0.9rc3. (#664) 2020-10-12 12:29:30 +08:00
9db4ad6a87 upgraded lua-resty-mysql to 0.23rc1. 2020-10-10 22:39:19 +08:00
2e3312a46e upgraded lua-resty-websocket to v0.08rc1. 2020-10-10 22:39:00 +08:00
20d2bd74bf upgraded lua-resty-redis to v0.29 2020-10-10 14:23:17 +08:00
d60de6c3c5 upgraded lua-resty-core to v0.1.20rc2. 2020-10-09 00:16:53 -07:00
5301a3193f upgraded ngx_stream_lua to =0.0.9rc2. 2020-10-09 00:15:37 -07:00
0b73295f36 upgraded ngx_lua to 0.10.18rc2. 2020-10-09 00:14:26 -07:00
4eab59c2f4 upgraded LuaJIT to 2.1-20201008. 2020-10-09 00:13:40 -07:00
97a49f7644 upgraded lua-resty-core to 0.1.20rc1, ngx_lua to 0.10.18rc1, and ngx_stream_lua to 0.0.9rc1. 2020-10-08 00:45:08 -07:00
b73e42d86a upgraded resty-cli to 0.27rc4.
bugfix: util/dist-check: did not work with the latest resty-cli bundled.
2020-10-01 23:09:45 -07:00
54f2309e2b upgraded resty-cli to 0.27rc3. 2020-10-01 23:01:25 -07:00
865a672104 upgraded LuaJIT to v2.1-20201002. 2020-10-01 23:00:01 -07:00
fbe8117d57 upgraded LuaJIT to v2.1-20201001. 2020-10-01 21:12:51 -07:00
eb1ea4aac3 upgraded resty-cli to 0.27rc2. 2020-09-30 21:53:28 -07:00
275739cf1f upgraded the nginx core to 1.19.3. 2020-09-29 20:58:19 -07:00
5d118a38a6 upgrade the nginx core to 1.19.2. 2020-09-28 12:42:57 -07:00
a2996edf22 minor fixes in static html pages. 2020-09-28 11:28:39 -07:00
1dfcf81667 added more links to the default index page and 50x page. 2020-09-16 17:56:51 -07:00
b236f833b4 added more links to our default html pages. 2020-09-16 16:22:28 -07:00
b78c057b6f default index page: added our openresty blog site. 2020-09-04 17:19:16 -07:00
4a006e09b4 bugfix: fixed a typo in configure. 2020-08-26 00:08:44 +08:00
51b70c82b8 bumped version to 1.17.8.2. 2020-07-13 10:52:04 -07:00
f12147f5f4 do not remove directories and files aggressively. 2020-07-13 10:50:42 -07:00
d017d4cf24 bugfix: avoided excluding .md/.markdown files and .pm files (the latter breaks the std ngx_http_perl_module build. 2020-07-10 20:43:36 -07:00
2894a41f02 upgraded lua-resty-limit-traffic to 0.07 2020-07-08 09:25:11 +08:00
3fd2b53ccb tests: fixed tests to reflect component version bumps. 2020-07-03 17:30:07 -07:00
156fd1fcf9 win32: avoided applying a patch for openssl 1.1.1g since it was already applied. 2020-07-03 17:27:32 -07:00
13b879394a win32: fixed the patch version for openssl 1.1.1g. 2020-07-03 17:01:39 -07:00
90894b2b48 win32: upgraded openssl to 1.1.1g. 2020-07-03 16:56:14 -07:00
1aa7a2bcd3 bumped version to 1.17.8.1. 2020-07-03 16:21:30 -07:00
f85fe22ac2 upgraded ngx_lua to 0.10.17 and lua-resty-core to 0.1.19. 2020-07-03 16:17:57 -07:00
11fbbe5c62 upgraded echo-nginx-module to 0.62, ngx_devel_kit to 0.3.1, lua-nginx-module to 0.10.16, stream-lua-nginx-module to 0.0.8, srcache-nginx-module to 0.32, resty-cli to 0.25, lua-cjson to 2.1.0.8, lua-resty-redis to 0.28, lua-resty-string to 0.12, lua-resty-lrucache to 0.10, lua-resty-core to 0.1.18, lua-resty-shell to 0.03 2020-07-03 15:35:07 +08:00
cee71edf71 upgraded resty-cli to 0.25rc3. 2020-06-30 14:04:24 -07:00
50717794af bugfix: nginx would crash when receiving SIGHUP in the single process mode.
Signed-off-by: Yichun Zhang (agentzh) <yichun@openresty.com>
2020-06-29 22:59:05 -07:00
6985198d46 bugfix: ngx_http_static_module: the 'Locatoin' response header value was not properly encoded by URI rules.
This may impose security vulnerabilities for Location values from
untrusted sources.

The corresponding tests are in the lua-nginx-module repo.
2020-06-25 16:50:22 -07:00
4568281eaf skipped the problematic pg_config test case. 2020-06-25 00:09:08 -07:00
afa9800e79 tests: updated tests to reflect recent changes. 2020-06-24 20:05:59 -07:00
5a03142ec3 configure: removed outdated '--with-luajit' option (always the default).
* keep the option to avoid the script from producing an error - it NOPs.
* removed a dead branch of code since it is now impossible for the
  `luajit` and `luajit_path` options to be both enabled at once.
* update `--help` output to remove mentions of PUC-Rio Lua
2020-06-24 20:02:44 -07:00
e3615c3522 configure: removed dead code since PUC-Lua isn't supported anymore. 2020-06-24 20:02:11 -07:00
947365b3b1 configure: updated options inherited from NGINX 1.17.8.
* removed duplicated `--without-stream_ssl_module` option
* removed obsolete `--with-pcre-conf-opt` option
* added "(defautl on) description to `--with-http_ssl_module` option
* moved `--without-stream` option to OpenResty's section
2020-06-24 20:01:28 -07:00
61f6ecb419 feature: passed C compiler option -g by default for statically linked openssl, pcre, and zlib libraries to enable debuginfo. 2020-06-24 19:59:32 -07:00
fc17ac5bc2 upgraded lua-resty-memcached to v0.15. 2020-05-11 13:01:13 -07:00
463d3e1de9 travis-ci: upgraded PCRE to 8.44. 2020-04-02 20:45:05 -07:00
e48becb75d travis-ci: upgraded OpenSSL to 1.1.1f, 1.0.2q, 1.1.0l, and fixed older versions downloads. 2020-04-02 20:45:05 -07:00
549d68b71b tests: sanity.t: fixed (again) test cases failing due to the last few commits.
Yet another fix for this test case. The util/fix-tests script seems to
be working fine and preserving the `--- out_like` section, so I honestly
have no idea why it keeps being overridden.
2020-04-01 13:42:52 -07:00
4debfd5a3c upgraded lua-cjson to 2.1.0.8rc1. 2020-04-01 11:46:56 -07:00
4b5cb7a546 patches: added the openssl-1.1.1f-sess_set_get_cb_yield patch. 2020-03-31 17:06:26 -07:00
7ed8526af7 upgraded lua-resty-core to 0.1.18rc4. 2020-03-19 21:55:30 -07:00
563ecc30f7 upgraded lua-resty-core to 0.1.18rc3. 2020-03-19 21:25:19 -07:00
7dfeed5921 win32/win64: added new patch to fix openssl compilation on windows via the mingw64 toolchain. 2020-03-19 20:06:42 -07:00
05db2b8e84 build-win32.sh: fixed a syntax error. 2020-03-19 19:47:00 -07:00
4ee261201d win32/win64: downgraded openssl from 1.1.1e to 1.1.1d since the former has known issues. 2020-03-19 19:39:08 -07:00
6b71480115 win32/win64: fixed patching procedure openssl 1.1.1e. 2020-03-19 15:33:17 -07:00
8cf88e3b13 upgraded ngx_stream_lua to 0.0.8rc3 and ngx_http_lua to 0.10.16rc5.
bugfix: now we avoid introducing double quotes or single quotes in CFLAGS variable values. Fix #587.

win32/win64: upgraded openssl to 1.1.1e.
2020-03-19 15:22:40 -07:00
2ac0ad9f03 feature: fixed compatibility with macOS 11.15+.
bumped version to 1.17.8.1 RC1.

win32/win64: upgraded pcre to 8.44 and openssl to 1.1.1d.
2020-03-19 14:17:48 -07:00
721d7dacc4 patches: added the openssl-1.1.1e-sess_set_get_cb_yield patch. 2020-03-18 21:48:45 -07:00
9e1d025f80 tests: updated tests to reflect recent changes. 2020-02-26 16:55:25 -08:00
e40f1ccb4a bumped ngx_http_lua to 0.10.16rc4. 2020-02-25 14:56:35 -08:00
56bfefd625 Adding support for s390x builds 2020-02-21 12:11:11 -08:00
a89a0a54b8 mirror-tarballs: we must remove any existing ngx_devel_kit* tarballs from local cache directories. 2020-02-20 22:40:22 -08:00
23f96dc81e bumped ngx_http_lua to 0.10.16rc3 and ngx_stream_lua to 0.0.8rc2. 2020-02-13 15:07:35 -08:00
2991c49b69 bumped ngx_http_lua to 0.10.16rc2. 2020-02-06 14:23:56 -08:00
c1a0a9ad8f bugfix: fixed a memory leak in the OpenSSL 1.1.1 sess_set_get_cb_yield patch.
This memory leak was found by running the Valgrind testing mode against
lua-resty-core's `ssl-session-fetch.t` test suite:

    TEST 5: yield during doing handshake with client which uses low version OpenSSL

    ==16956== 64 (32 direct, 32 indirect) bytes in 1 blocks are definitely lost in loss record 5 of 15
    ==16956== at 0x4C2B002: malloc (vg_replace_malloc.c:298)
    ==16956== by 0x5FFC868: CRYPTO_malloc (mem.c:222)
    ==16956== by 0x5FFC96F: CRYPTO_zalloc (mem.c:230)
    ==16956== by 0x603C54A: OPENSSL_sk_new_reserve (stack.c:209)
    ==16956== by 0x603C597: OPENSSL_sk_new_null (stack.c:118)
    ==16956== by 0x5C94A86: sk_SSL_CIPHER_new_null (ssl.h:960)
    ==16956== by 0x5C94A86: bytes_to_cipher_list (ssl_lib.c:5361)
    ==16956== by 0x5CB52E9: tls_early_post_process_client_hello (statem_srvr.c:1713)
    ==16956== by 0x5CB52E9: tls_post_process_client_hello (statem_srvr.c:2231)
    ==16956== by 0x5CB6F39: ossl_statem_server_post_process_message (statem_srvr.c:1218)
    ==16956== by 0x5CA4C11: read_state_machine (statem.c:664)
    ==16956== by 0x5CA4C11: state_machine (statem.c:434)
    ==16956== by 0x5CA538A: ossl_statem_accept (statem.c:255)
    ==16956== by 0x5C91759: SSL_do_handshake (ssl_lib.c:3609)
    ==16956== by 0x45456B: ngx_ssl_handshake (ngx_event_openssl.c:1606)
    ==16956== by 0x4698D3: ngx_http_ssl_handshake (ngx_http_request.c:751)
    ==16956== by 0x44ECA8: ngx_epoll_process_events (ngx_epoll_module.c:901)
    ==16956== by 0x443E94: ngx_process_events_and_timers (ngx_event.c:257)
    ==16956== by 0x44DC25: ngx_single_process_cycle (ngx_process_cycle.c:333)
    ==16956== by 0x4236AB: main (nginx.c:382)
    ==16956==
    {
    <insert_a_suppression_name_here>
    Memcheck:Leak
    match-leak-kinds: definite
    fun:malloc
    fun:CRYPTO_malloc
    fun:CRYPTO_zalloc
    fun:OPENSSL_sk_new_reserve
    fun:OPENSSL_sk_new_null
    fun:sk_SSL_CIPHER_new_null
    fun:bytes_to_cipher_list
    fun:tls_early_post_process_client_hello
    fun:tls_post_process_client_hello
    fun:ossl_statem_server_post_process_message
    fun:read_state_machine
    fun:state_machine
    fun:ossl_statem_accept
    fun:SSL_do_handshake
    fun:ngx_ssl_handshake
    fun:ngx_http_ssl_handshake
    fun:ngx_epoll_process_events
    fun:ngx_process_events_and_timers
    fun:ngx_single_process_cycle
    fun:main
    }

    ==16956== 368 (32 direct, 336 indirect) bytes in 1 blocks are definitely lost in loss record 8 of 15
    ==16956== at 0x4C2B002: malloc (vg_replace_malloc.c:298)
    ==16956== by 0x5FFC868: CRYPTO_malloc (mem.c:222)
    ==16956== by 0x5FFC96F: CRYPTO_zalloc (mem.c:230)
    ==16956== by 0x603C54A: OPENSSL_sk_new_reserve (stack.c:209)
    ==16956== by 0x603C597: OPENSSL_sk_new_null (stack.c:118)
    ==16956== by 0x5C94A79: sk_SSL_CIPHER_new_null (ssl.h:960)
    ==16956== by 0x5C94A79: bytes_to_cipher_list (ssl_lib.c:5360)
    ==16956== by 0x5CB52E9: tls_early_post_process_client_hello (statem_srvr.c:1713)
    ==16956== by 0x5CB52E9: tls_post_process_client_hello (statem_srvr.c:2231)
    ==16956== by 0x5CB6F39: ossl_statem_server_post_process_message (statem_srvr.c:1218)
    ==16956== by 0x5CA4C11: read_state_machine (statem.c:664)
    ==16956== by 0x5CA4C11: state_machine (statem.c:434)
    ==16956== by 0x5CA538A: ossl_statem_accept (statem.c:255)
    ==16956== by 0x5C91759: SSL_do_handshake (ssl_lib.c:3609)
    ==16956== by 0x45456B: ngx_ssl_handshake (ngx_event_openssl.c:1606)
    ==16956== by 0x4698D3: ngx_http_ssl_handshake (ngx_http_request.c:751)
    ==16956== by 0x44ECA8: ngx_epoll_process_events (ngx_epoll_module.c:901)
    ==16956== by 0x443E94: ngx_process_events_and_timers (ngx_event.c:257)
    ==16956== by 0x44DC25: ngx_single_process_cycle (ngx_process_cycle.c:333)
    ==16956== by 0x4236AB: main (nginx.c:382)
    ==16956==
    {
    <insert_a_suppression_name_here>
    Memcheck:Leak
    match-leak-kinds: definite
    fun:malloc
    fun:CRYPTO_malloc
    fun:CRYPTO_zalloc
    fun:OPENSSL_sk_new_reserve
    fun:OPENSSL_sk_new_null
    fun:sk_SSL_CIPHER_new_null
    fun:bytes_to_cipher_list
    fun:tls_early_post_process_client_hello
    fun:tls_post_process_client_hello
    fun:ossl_statem_server_post_process_message
    fun:read_state_machine
    fun:state_machine
    fun:ossl_statem_accept
    fun:SSL_do_handshake
    fun:ngx_ssl_handshake
    fun:ngx_http_ssl_handshake
    fun:ngx_epoll_process_events
    fun:ngx_process_events_and_timers
    fun:ngx_single_process_cycle
    fun:main
    }
2020-02-05 15:24:20 -08:00
d856e2bf4b bugfix: mirror-tarballs: updated ngx_devel_kit's GitHub owner org to vision5.
The script started failing with:

    mv: cannot stat 'simplresty-ngx_devel_kit-*': No such file or directory

Since the GitHub organization owning the ngx_devel_kit repository was
updated to be 'vision5' instead of 'simplresty'.
2020-01-23 15:36:25 -08:00
82cd12a2ae upgraded ngx_http_lua to 0.10.16rc1, ngx_stream_lua to 0.0.8rc1, lua-resty-core to 0.1.18rc1, lua-resty-redis to 0.28rc1, lua-resty-lrucache to 0.10rc1, lua-resty-shell to 0.03rc1. 2020-01-23 12:10:42 -08:00
28f76c1d27 upgraded the NGINX core to 1.17.8. 2020-01-22 16:02:49 -08:00
268229af83 misc: removed the gcc-maybe-uninitialized-warning patch.
This was fixed in the 1.5.10 release. We unconditionally remove it since
we only support NGINX cores 1.6.0 and above.
2020-01-21 11:25:56 -08:00
6d7249f1c4 configure: updated '--without-luajit-gc64' to follow Mike Pall's commit which enables GC64 by default on x64 platforms.
See openresty/luajit2@bd00094
2020-01-20 15:18:26 -08:00
d6ff771c82 tests: sanity.t: fixed (again) test cases failing due to the last few commits.
This failure was first fixed in
1f3cf84a8a, but mistakenly reverted in
395bed2b14, causing Travis-CI to fail on
this test again.

It was then reverted again in 41abd0f3b5,
and now fixed one more time.
2020-01-20 14:26:21 -08:00
41abd0f3b5 bugfix: updated the ./configure --help usage text output for the latest nginx version. 2020-01-02 20:58:30 -08:00
29af6de924 tests: updated tests to reflect recent changes. 2020-01-02 20:39:26 -08:00
f17fe6edc1 change: we no longer maintain the nginx dtrace patch. 2020-01-02 20:35:41 -08:00
3a630bb020 upgraded ngx_echo to 0.62rc1 and ngx_srcache to 0.32rc1. 2020-01-02 20:26:14 -08:00
d4d86a8b0c upgraded LuaJIT to 2.1-20200102. 2020-01-02 20:18:29 -08:00
7508c18522 upgraded the NGINX core to 1.17.4. 2019-09-30 15:08:42 -07:00
df6c3bcdcb change: util/dist-check: removed 'without FFI' tests.
We also don't try to delete <prefix>/lua anymore since it does not
exist.
2019-09-30 15:06:16 -07:00
9b1dbb6027 tweak: mirror-tarballs: removed obsolete or copy-pasted code. 2019-09-30 15:06:16 -07:00
01f212ce9f optimize: mirror-tarballs: ensured all OpenSSL patches are included in the tarball. 2019-09-30 15:06:16 -07:00
a5248e03d5 optimize: mirror-tarballs: removed many non-source files from the final tarball.
This reduces the size of the release tarball from 4.7MB down to 3.5MB.

Diff of openresty-tarball-master (prior) and openresty-tarball-refactor
(after this patch) with NGINX core 1.17.1:

    Only in ./openresty-tarball-master/bundle/array-var-nginx-module-0.05: .gitattributes
    Only in ./openresty-tarball-master/bundle/array-var-nginx-module-0.05: .gitignore
    Only in ./openresty-tarball-master/bundle/array-var-nginx-module-0.05: t
    Only in ./openresty-tarball-master/bundle/array-var-nginx-module-0.05: util
    Only in ./openresty-tarball-master/bundle/array-var-nginx-module-0.05: valgrind.suppress
    Only in ./openresty-tarball-master/bundle/drizzle-nginx-module-0.1.11: .gitattributes
    Only in ./openresty-tarball-master/bundle/drizzle-nginx-module-0.1.11: .gitignore
    Only in ./openresty-tarball-master/bundle/drizzle-nginx-module-0.1.11: t
    Only in ./openresty-tarball-master/bundle/drizzle-nginx-module-0.1.11: .travis.yml
    Only in ./openresty-tarball-master/bundle/drizzle-nginx-module-0.1.11: util
    Only in ./openresty-tarball-master/bundle/drizzle-nginx-module-0.1.11: valgrind.suppress
    Only in ./openresty-tarball-master/bundle/echo-nginx-module-0.61: .gitattributes
    Only in ./openresty-tarball-master/bundle/echo-nginx-module-0.61: .gitignore
    Only in ./openresty-tarball-master/bundle/echo-nginx-module-0.61: t
    Only in ./openresty-tarball-master/bundle/echo-nginx-module-0.61: .travis.yml
    Only in ./openresty-tarball-master/bundle/echo-nginx-module-0.61: util
    Only in ./openresty-tarball-master/bundle/echo-nginx-module-0.61: valgrind.suppress
    Only in ./openresty-tarball-master/bundle/encrypted-session-nginx-module-0.08: .gitattributes
    Only in ./openresty-tarball-master/bundle/encrypted-session-nginx-module-0.08: .gitignore
    Only in ./openresty-tarball-master/bundle/encrypted-session-nginx-module-0.08: t
    Only in ./openresty-tarball-master/bundle/encrypted-session-nginx-module-0.08: .travis.yml
    Only in ./openresty-tarball-master/bundle/encrypted-session-nginx-module-0.08: util
    Only in ./openresty-tarball-master/bundle/encrypted-session-nginx-module-0.08: valgrind.suppress
    Only in ./openresty-tarball-master/bundle/form-input-nginx-module-0.12: .gitignore
    Only in ./openresty-tarball-master/bundle/form-input-nginx-module-0.12: t
    Only in ./openresty-tarball-master/bundle/form-input-nginx-module-0.12: util
    Only in ./openresty-tarball-master/bundle/form-input-nginx-module-0.12: valgrind.suppress
    Only in ./openresty-tarball-master/bundle/headers-more-nginx-module-0.33: .gitattributes
    Only in ./openresty-tarball-master/bundle/headers-more-nginx-module-0.33: .gitignore
    Only in ./openresty-tarball-master/bundle/headers-more-nginx-module-0.33: t
    Only in ./openresty-tarball-master/bundle/headers-more-nginx-module-0.33: .travis.yml
    Only in ./openresty-tarball-master/bundle/headers-more-nginx-module-0.33: util
    Only in ./openresty-tarball-master/bundle/headers-more-nginx-module-0.33: valgrind.suppress
    Only in ./openresty-tarball-master/bundle/iconv-nginx-module-0.14: .gitignore
    Only in ./openresty-tarball-master/bundle/iconv-nginx-module-0.14: t
    Only in ./openresty-tarball-master/bundle/iconv-nginx-module-0.14: util
    Only in ./openresty-tarball-master/bundle/iconv-nginx-module-0.14: valgrind.suppress
    Only in ./openresty-tarball-master/bundle/LuaJIT-2.1-20190912: doc
    Only in ./openresty-tarball-master/bundle/LuaJIT-2.1-20190912: .gitignore
    Only in ./openresty-tarball-master/bundle/LuaJIT-2.1-20190912/src: .gitignore
    Only in ./openresty-tarball-master/bundle/LuaJIT-2.1-20190912/src/host: .gitignore
    Only in ./openresty-tarball-master/bundle/LuaJIT-2.1-20190912/src/jit: .gitignore
    Only in ./openresty-tarball-master/bundle/LuaJIT-2.1-20190912: t
    Only in ./openresty-tarball-master/bundle/LuaJIT-2.1-20190912: .travis.yml
    Only in ./openresty-tarball-master/bundle/lua-rds-parser-0.06: .gitignore
    Only in ./openresty-tarball-master/bundle/lua-rds-parser-0.06: t
    Only in ./openresty-tarball-master/bundle/lua-redis-parser-0.13: .gitattributes
    Only in ./openresty-tarball-master/bundle/lua-redis-parser-0.13: .gitignore
    Only in ./openresty-tarball-master/bundle/lua-redis-parser-0.13: t
    Only in ./openresty-tarball-master/bundle/lua-redis-parser-0.13: .travis.yml
    Only in ./openresty-tarball-master/bundle/lua-resty-core-0.1.17: dist.ini
    Only in ./openresty-tarball-master/bundle/lua-resty-core-0.1.17: .gitattributes
    Only in ./openresty-tarball-master/bundle/lua-resty-core-0.1.17: .github
    Only in ./openresty-tarball-master/bundle/lua-resty-core-0.1.17: .gitignore
    Only in ./openresty-tarball-master/bundle/lua-resty-core-0.1.17: .luacheckrc
    Only in ./openresty-tarball-master/bundle/lua-resty-core-0.1.17: t
    Only in ./openresty-tarball-master/bundle/lua-resty-core-0.1.17: .travis.yml
    Only in ./openresty-tarball-master/bundle/lua-resty-core-0.1.17: valgrind.suppress
    Only in ./openresty-tarball-master/bundle/lua-resty-dns-0.21: dist.ini
    Only in ./openresty-tarball-master/bundle/lua-resty-dns-0.21: .gitattributes
    Only in ./openresty-tarball-master/bundle/lua-resty-dns-0.21: .gitignore
    Only in ./openresty-tarball-master/bundle/lua-resty-dns-0.21: t
    Only in ./openresty-tarball-master/bundle/lua-resty-dns-0.21: .travis.yml
    Only in ./openresty-tarball-master/bundle/lua-resty-dns-0.21: valgrind.suppress
    Only in ./openresty-tarball-master/bundle/lua-resty-limit-traffic-0.06: dist.ini
    Only in ./openresty-tarball-master/bundle/lua-resty-limit-traffic-0.06: .gitattributes
    Only in ./openresty-tarball-master/bundle/lua-resty-limit-traffic-0.06: .gitignore
    Only in ./openresty-tarball-master/bundle/lua-resty-limit-traffic-0.06: t
    Only in ./openresty-tarball-master/bundle/lua-resty-limit-traffic-0.06: .travis.yml
    Only in ./openresty-tarball-master/bundle/lua-resty-limit-traffic-0.06: valgrind.suppress
    Only in ./openresty-tarball-master/bundle/lua-resty-lock-0.08: dist.ini
    Only in ./openresty-tarball-master/bundle/lua-resty-lock-0.08: .gitattributes
    Only in ./openresty-tarball-master/bundle/lua-resty-lock-0.08: .gitignore
    Only in ./openresty-tarball-master/bundle/lua-resty-lock-0.08: t
    Only in ./openresty-tarball-master/bundle/lua-resty-lock-0.08: .travis.yml
    Only in ./openresty-tarball-master/bundle/lua-resty-lock-0.08: valgrind.suppress
    Only in ./openresty-tarball-master/bundle/lua-resty-lrucache-0.09: dist.ini
    Only in ./openresty-tarball-master/bundle/lua-resty-lrucache-0.09: .gitattributes
    Only in ./openresty-tarball-master/bundle/lua-resty-lrucache-0.09: .gitignore
    Only in ./openresty-tarball-master/bundle/lua-resty-lrucache-0.09: t
    Only in ./openresty-tarball-master/bundle/lua-resty-lrucache-0.09: .travis.yml
    Only in ./openresty-tarball-master/bundle/lua-resty-lrucache-0.09: valgrind.suppress
    Only in ./openresty-tarball-master/bundle/lua-resty-memcached-0.14: .gitattributes
    Only in ./openresty-tarball-master/bundle/lua-resty-memcached-0.14: .gitignore
    Only in ./openresty-tarball-master/bundle/lua-resty-memcached-0.14: t
    Only in ./openresty-tarball-master/bundle/lua-resty-memcached-0.14: valgrind.suppress
    Only in ./openresty-tarball-master/bundle/lua-resty-mysql-0.21: dist.ini
    Only in ./openresty-tarball-master/bundle/lua-resty-mysql-0.21: .gitattributes
    Only in ./openresty-tarball-master/bundle/lua-resty-mysql-0.21: .github
    Only in ./openresty-tarball-master/bundle/lua-resty-mysql-0.21: .gitignore
    Only in ./openresty-tarball-master/bundle/lua-resty-mysql-0.21: t
    Only in ./openresty-tarball-master/bundle/lua-resty-mysql-0.21: .travis.yml
    Only in ./openresty-tarball-master/bundle/lua-resty-mysql-0.21: valgrind.suppress
    Only in ./openresty-tarball-master/bundle/lua-resty-redis-0.27: dist.ini
    Only in ./openresty-tarball-master/bundle/lua-resty-redis-0.27: .gitattributes
    Only in ./openresty-tarball-master/bundle/lua-resty-redis-0.27: .gitignore
    Only in ./openresty-tarball-master/bundle/lua-resty-redis-0.27: t
    Only in ./openresty-tarball-master/bundle/lua-resty-redis-0.27: .travis.yml
    Only in ./openresty-tarball-master/bundle/lua-resty-redis-0.27: valgrind.suppress
    Only in ./openresty-tarball-master/bundle/lua-resty-shell-0.02: .gitignore
    Only in ./openresty-tarball-master/bundle/lua-resty-shell-0.02: t
    Only in ./openresty-tarball-master/bundle/lua-resty-shell-0.02: .travis.yml
    Only in ./openresty-tarball-master/bundle/lua-resty-shell-0.02: valgrind.suppress
    Only in ./openresty-tarball-master/bundle/lua-resty-signal-0.02: .gitignore
    Only in ./openresty-tarball-master/bundle/lua-resty-signal-0.02: t
    Only in ./openresty-tarball-master/bundle/lua-resty-signal-0.02: .travis.yml
    Only in ./openresty-tarball-master/bundle/lua-resty-signal-0.02: valgrind.suppress
    Only in ./openresty-tarball-master/bundle/lua-resty-string-0.12rc1: dist.ini
    Only in ./openresty-tarball-master/bundle/lua-resty-string-0.12rc1: .gitattributes
    Only in ./openresty-tarball-master/bundle/lua-resty-string-0.12rc1: .gitignore
    Only in ./openresty-tarball-master/bundle/lua-resty-string-0.12rc1: t
    Only in ./openresty-tarball-master/bundle/lua-resty-string-0.12rc1: .travis.yml
    Only in ./openresty-tarball-master/bundle/lua-resty-string-0.12rc1: valgrind.suppress
    Only in ./openresty-tarball-master/bundle/lua-resty-upload-0.10: dist.ini
    Only in ./openresty-tarball-master/bundle/lua-resty-upload-0.10: .gitattributes
    Only in ./openresty-tarball-master/bundle/lua-resty-upload-0.10: .gitignore
    Only in ./openresty-tarball-master/bundle/lua-resty-upload-0.10: t
    Only in ./openresty-tarball-master/bundle/lua-resty-upload-0.10: .travis.yml
    Only in ./openresty-tarball-master/bundle/lua-resty-upload-0.10: valgrind.suppress
    Only in ./openresty-tarball-master/bundle/lua-resty-upstream-healthcheck-0.06: dist.ini
    Only in ./openresty-tarball-master/bundle/lua-resty-upstream-healthcheck-0.06: .gitattributes
    Only in ./openresty-tarball-master/bundle/lua-resty-upstream-healthcheck-0.06: .gitignore
    Only in ./openresty-tarball-master/bundle/lua-resty-upstream-healthcheck-0.06: t
    Only in ./openresty-tarball-master/bundle/lua-resty-upstream-healthcheck-0.06: .travis.yml
    Only in ./openresty-tarball-master/bundle/lua-resty-upstream-healthcheck-0.06: valgrind.suppress
    Only in ./openresty-tarball-master/bundle/lua-resty-websocket-0.07: dist.ini
    Only in ./openresty-tarball-master/bundle/lua-resty-websocket-0.07: .gitattributes
    Only in ./openresty-tarball-master/bundle/lua-resty-websocket-0.07: .gitignore
    Only in ./openresty-tarball-master/bundle/lua-resty-websocket-0.07: t
    Only in ./openresty-tarball-master/bundle/lua-resty-websocket-0.07: .travis.yml
    Only in ./openresty-tarball-master/bundle/lua-resty-websocket-0.07: valgrind.suppress
    Only in ./openresty-tarball-master/bundle/lua-tablepool-0.01: .gitignore
    Only in ./openresty-tarball-master/bundle/memc-nginx-module-0.19: .gitattributes
    Only in ./openresty-tarball-master/bundle/memc-nginx-module-0.19: .gitignore
    Only in ./openresty-tarball-master/bundle/memc-nginx-module-0.19: t
    Only in ./openresty-tarball-master/bundle/memc-nginx-module-0.19: .travis.yml
    Only in ./openresty-tarball-master/bundle/memc-nginx-module-0.19: util
    Only in ./openresty-tarball-master/bundle/memc-nginx-module-0.19: valgrind.suppress
    Only in ./openresty-tarball-master/bundle/nginx-1.17.1/auto/cc: clang.orig
    Only in ./openresty-tarball-master/bundle/nginx-1.17.1/auto/cc: conf.orig
    Only in ./openresty-tarball-master/bundle/nginx-1.17.1/auto/cc: gcc.orig
    Only in ./openresty-tarball-master/bundle/nginx-1.17.1/auto/cc: icc.orig
    Only in ./openresty-tarball-master/bundle/nginx-1.17.1/auto: options.orig
    Only in ./openresty-tarball-master/bundle/nginx-1.17.1/auto/os: linux.orig
    Only in ./openresty-tarball-master/bundle/nginx-1.17.1/auto: sources.orig
    Only in ./openresty-tarball-master/bundle/nginx-1.17.1/auto: unix.orig
    Only in ./openresty-tarball-master/bundle/nginx-1.17.1/src/core: nginx.c.orig
    Only in ./openresty-tarball-master/bundle/nginx-1.17.1/src/core: ngx_connection.c.orig
    Only in ./openresty-tarball-master/bundle/nginx-1.17.1/src/core: ngx_cycle.h.orig
    Only in ./openresty-tarball-master/bundle/nginx-1.17.1/src/core: ngx_log.h.orig
    Only in ./openresty-tarball-master/bundle/nginx-1.17.1/src/core: ngx_resolver.c.orig
    Only in ./openresty-tarball-master/bundle/nginx-1.17.1/src/dtrace: nginx.stp
    Only in ./openresty-tarball-master/bundle/nginx-1.17.1/src/event: ngx_event_accept.c.orig
    Only in ./openresty-tarball-master/bundle/nginx-1.17.1/src/event: ngx_event_connect.c.orig
    Only in ./openresty-tarball-master/bundle/nginx-1.17.1/src/event: ngx_event.c.orig
    Only in ./openresty-tarball-master/bundle/nginx-1.17.1/src/event: ngx_event_openssl.c.orig
    Only in ./openresty-tarball-master/bundle/nginx-1.17.1/src/http/modules: ngx_http_log_module.c.orig
    Only in ./openresty-tarball-master/bundle/nginx-1.17.1/src/http/modules: ngx_http_proxy_module.c.orig
    Only in ./openresty-tarball-master/bundle/nginx-1.17.1/src/http/modules/perl: nginx.pm
    Only in ./openresty-tarball-master/bundle/nginx-1.17.1/src/http: ngx_http_core_module.c.orig
    Only in ./openresty-tarball-master/bundle/nginx-1.17.1/src/http: ngx_http_request.c.orig
    Only in ./openresty-tarball-master/bundle/nginx-1.17.1/src/http: ngx_http_special_response.c.orig
    Only in ./openresty-tarball-master/bundle/nginx-1.17.1/src/http: ngx_http_upstream.c.orig
    Only in ./openresty-tarball-master/bundle/nginx-1.17.1/src/http: ngx_http_upstream.h.orig
    Only in ./openresty-tarball-master/bundle/nginx-1.17.1/src/http/v2: ngx_http_v2_filter_module.c.orig
    Only in ./openresty-tarball-master/bundle/nginx-1.17.1/src/os/unix: ngx_process_cycle.c.orig
    Only in ./openresty-tarball-master/bundle/nginx-1.17.1/src/stream: ngx_stream.h.orig
    Only in ./openresty-tarball-master/bundle/nginx-1.17.1/src/stream: ngx_stream_proxy_module.c.orig
    Only in ./openresty-tarball-master/bundle/nginx-1.17.1/src/stream: ngx_stream_ssl_preread_module.c.orig
    Only in ./openresty-tarball-master/bundle/nginx-1.17.1/src/stream: ngx_stream_upstream.h.orig
    Only in ./openresty-tarball-master/bundle/nginx-1.17.1/src/stream: ngx_stream_upstream_round_robin.c.orig
    Only in ./openresty-tarball-master/bundle/ngx_coolkit-0.2: .gitignore
    Only in ./openresty-tarball-master/bundle/ngx_coolkit-0.2: t
    Only in ./openresty-tarball-master/bundle/ngx_coolkit-0.2: valgrind.suppress
    Only in ./openresty-tarball-master/bundle/ngx_devel_kit-0.3.1rc1: .gitignore
    Only in ./openresty-tarball-master/bundle/ngx_lua-0.10.15: .gitattributes
    Only in ./openresty-tarball-master/bundle/ngx_lua-0.10.15: .github
    Only in ./openresty-tarball-master/bundle/ngx_lua-0.10.15: .gitignore
    Only in ./openresty-tarball-master/bundle/ngx_lua-0.10.15/misc/recv-until-pm/lib: RecvUntil.pm
    Only in ./openresty-tarball-master/bundle/ngx_lua-0.10.15/misc/recv-until-pm: t
    Only in ./openresty-tarball-master/bundle/ngx_lua-0.10.15: t
    Only in ./openresty-tarball-master/bundle/ngx_lua-0.10.15/tapset: ngx_lua.stp
    Only in ./openresty-tarball-master/bundle/ngx_lua-0.10.15: .travis.yml
    Only in ./openresty-tarball-master/bundle/ngx_lua-0.10.15: util
    Only in ./openresty-tarball-master/bundle/ngx_lua-0.10.15: valgrind.suppress
    Only in ./openresty-tarball-master/bundle/ngx_lua_upstream-0.07: .gitattributes
    Only in ./openresty-tarball-master/bundle/ngx_lua_upstream-0.07: .gitignore
    Only in ./openresty-tarball-master/bundle/ngx_lua_upstream-0.07: t
    Only in ./openresty-tarball-master/bundle/ngx_lua_upstream-0.07: .travis.yml
    Only in ./openresty-tarball-master/bundle/ngx_lua_upstream-0.07: util
    Only in ./openresty-tarball-master/bundle/ngx_lua_upstream-0.07: valgrind.suppress
    Only in ./openresty-tarball-master/bundle/ngx_postgres-1.0: .gitignore
    Only in ./openresty-tarball-master/bundle/ngx_postgres-1.0: t
    Only in ./openresty-tarball-master/bundle/ngx_postgres-1.0: valgrind.suppress
    Only in ./openresty-tarball-master/bundle/ngx_stream_lua-0.0.7: .gitattributes
    Only in ./openresty-tarball-master/bundle/ngx_stream_lua-0.0.7: .gitignore
    Only in ./openresty-tarball-master/bundle/ngx_stream_lua-0.0.7: t
    Only in ./openresty-tarball-master/bundle/ngx_stream_lua-0.0.7: .travis.yml
    Only in ./openresty-tarball-master/bundle/ngx_stream_lua-0.0.7: util
    Only in ./openresty-tarball-master/bundle/ngx_stream_lua-0.0.7: valgrind.suppress
    Only in ./openresty-tarball-master/bundle/openresty-lua-cjson-82e71d8: lua-cjson-2.1.0.6-1.rockspec
    Only in ./openresty-tarball-master/bundle/openresty-lua-cjson-82e71d8: lua-cjson.spec
    Only in ./openresty-tarball-master/bundle/openresty-lua-cjson-82e71d8/tests: example1.json
    Only in ./openresty-tarball-master/bundle/openresty-lua-cjson-82e71d8/tests: example2.json
    Only in ./openresty-tarball-master/bundle/openresty-lua-cjson-82e71d8/tests: example3.json
    Only in ./openresty-tarball-master/bundle/openresty-lua-cjson-82e71d8/tests: example4.json
    Only in ./openresty-tarball-master/bundle/openresty-lua-cjson-82e71d8/tests: example5.json
    Only in ./openresty-tarball-master/bundle/openresty-lua-cjson-82e71d8/tests: numbers.json
    Only in ./openresty-tarball-master/bundle/openresty-lua-cjson-82e71d8/tests: rfc-example1.json
    Only in ./openresty-tarball-master/bundle/openresty-lua-cjson-82e71d8/tests: rfc-example2.json
    Only in ./openresty-tarball-master/bundle/openresty-lua-cjson-82e71d8/tests: TestLua.pm
    Only in ./openresty-tarball-master/bundle/openresty-lua-cjson-82e71d8/tests: types.json
    Only in ./openresty-tarball-master/bundle/openresty-lua-cjson-82e71d8: .travis.yml
    Only in ./openresty-tarball-master/bundle/opm-0.0.5: .gitignore
    Only in ./openresty-tarball-master/bundle/opm-0.0.5: init.sql
    Only in ./openresty-tarball-master/bundle/opm-0.0.5: util
    Only in ./openresty-tarball-master/bundle/opm-0.0.5: web
    Only in ./openresty-tarball-master/bundle/pod/lua-resty-core-0.1.17: .github.issue_template.pod
    Only in ./openresty-tarball-master/bundle/pod/lua-resty-core-0.1.17: .github.pull_request_template.pod
    Only in ./openresty-tarball-master/bundle/pod/lua-resty-mysql-0.21: .github.issue_template.pod
    Only in ./openresty-tarball-master/bundle/pod/ngx_lua-0.10.15: .github.issue_template.pod
    Only in ./openresty-tarball-master/bundle/pod/ngx_lua-0.10.15: .github.pull_request_template.pod
    Only in ./openresty-tarball-master/bundle/rds-csv-nginx-module-0.09: .gitattributes
    Only in ./openresty-tarball-master/bundle/rds-csv-nginx-module-0.09: .gitignore
    Only in ./openresty-tarball-master/bundle/rds-csv-nginx-module-0.09: t
    Only in ./openresty-tarball-master/bundle/rds-csv-nginx-module-0.09: .travis.yml
    Only in ./openresty-tarball-master/bundle/rds-csv-nginx-module-0.09: util
    Only in ./openresty-tarball-master/bundle/rds-csv-nginx-module-0.09: valgrind.suppress
    Only in ./openresty-tarball-master/bundle/rds-json-nginx-module-0.15: .gitattributes
    Only in ./openresty-tarball-master/bundle/rds-json-nginx-module-0.15: .gitignore
    Only in ./openresty-tarball-master/bundle/rds-json-nginx-module-0.15: t
    Only in ./openresty-tarball-master/bundle/rds-json-nginx-module-0.15: .travis.yml
    Only in ./openresty-tarball-master/bundle/rds-json-nginx-module-0.15: util
    Only in ./openresty-tarball-master/bundle/rds-json-nginx-module-0.15: valgrind.suppress
    Only in ./openresty-tarball-master/bundle/redis2-nginx-module-0.15: .gitattributes
    Only in ./openresty-tarball-master/bundle/redis2-nginx-module-0.15: .gitignore
    Only in ./openresty-tarball-master/bundle/redis2-nginx-module-0.15: t
    Only in ./openresty-tarball-master/bundle/redis2-nginx-module-0.15: .travis.yml
    Only in ./openresty-tarball-master/bundle/redis2-nginx-module-0.15: util
    Only in ./openresty-tarball-master/bundle/redis2-nginx-module-0.15: valgrind.suppress
    Only in ./openresty-tarball-master/bundle/redis-nginx-module-0.3.7: ngx_http_redis_module.c.orig
    Only in ./openresty-tarball-master/bundle/redis-nginx-module-0.3.7: t
    Only in ./openresty-tarball-master/bundle/resty-cli-0.25rc2: .gitattributes
    Only in ./openresty-tarball-master/bundle/resty-cli-0.25rc2: .gitignore
    Only in ./openresty-tarball-master/bundle/resty-cli-0.25rc2: t
    Only in ./openresty-tarball-master/bundle/resty-cli-0.25rc2: .travis.yml
    Only in ./openresty-tarball-master/bundle/resty-cli-0.25rc2: valgrind.suppress
    Only in ./openresty-tarball-master/bundle/set-misc-nginx-module-0.32: .gitattributes
    Only in ./openresty-tarball-master/bundle/set-misc-nginx-module-0.32: .gitignore
    Only in ./openresty-tarball-master/bundle/set-misc-nginx-module-0.32: t
    Only in ./openresty-tarball-master/bundle/set-misc-nginx-module-0.32: .travis.yml
    Only in ./openresty-tarball-master/bundle/set-misc-nginx-module-0.32: util
    Only in ./openresty-tarball-master/bundle/set-misc-nginx-module-0.32: valgrind.suppress
    Only in ./openresty-tarball-master/bundle/srcache-nginx-module-0.31: .gitattributes
    Only in ./openresty-tarball-master/bundle/srcache-nginx-module-0.31: .gitignore
    Only in ./openresty-tarball-master/bundle/srcache-nginx-module-0.31: t
    Only in ./openresty-tarball-master/bundle/srcache-nginx-module-0.31: util
    Only in ./openresty-tarball-master/bundle/srcache-nginx-module-0.31: valgrind.suppress
    Only in ./openresty-tarball-master/bundle/xss-nginx-module-0.06: .gitattributes
    Only in ./openresty-tarball-master/bundle/xss-nginx-module-0.06: .gitignore
    Only in ./openresty-tarball-master/bundle/xss-nginx-module-0.06: t
    Only in ./openresty-tarball-master/bundle/xss-nginx-module-0.06: .travis.yml
    Only in ./openresty-tarball-master/bundle/xss-nginx-module-0.06: util
    Only in ./openresty-tarball-master/bundle/xss-nginx-module-0.06: valgrind.suppress
2019-09-30 15:06:16 -07:00
9ce78f62c5 optimize: mirror-tarballs: used 'hg update --clean' to avoid being prompted when repository is cloned. 2019-09-30 15:06:16 -07:00
21dfc48bb5 bugfix: mirror-tarballs: applied the init_cycle_pool_release patch to NGINX cores >= 1.13.6 instead of 1.13.6 only. 2019-09-30 15:06:16 -07:00
bad7098d88 patches: added the nginx-1.17.4 patches. 2019-09-27 11:31:52 -07:00
cc79822109 tests: sanity.t: renamed to t/000-sanity.t and added '.' in lib path. 2019-09-25 23:04:18 -07:00
4995101388 tests: sanity.t: fixed (again) test cases failing due to the last few commits.
This failure was first fixed in
1f3cf84a8a, but mistakenly reverted in
395bed2b14, causing Travis-CI to fail on
this test again.
2019-09-24 12:54:13 -07:00
3fd0e186bf tests: fixed tests for updated components. 2019-09-11 18:10:43 -07:00
19ca6c4e2d upgraded LuaJIT to 2.1-20190912. 2019-09-11 18:09:34 -07:00
395bed2b14 bugfix: windows: make clean: we did not clear many windows-specific files. 2019-09-07 23:42:20 -07:00
a717ebd523 build-win32: more love. 2019-09-07 23:25:47 -07:00
3b1b2374c0 windows: upgraded pcre to 8.43 and openssl to 1.1.0k. 2019-09-07 23:20:44 -07:00
f5d359f8f0 dist-check: set LC_ALL=C env. 2019-09-07 22:52:24 -07:00
45a454beec tweak: removed unused 'misc/unwind-generic.h' header file. 2019-08-15 14:47:30 -07:00
59e4ef5c23 bugfix: applied the patch for security advisory to NGINX cores < 1.14.1 and < 1.15.6 (CVE-2019-9511 CVE-2019-9513 CVE-2019-9516). 2019-08-14 11:39:47 -07:00
80ba3892c6 bugfix: applied the patch for security advisory to NGINX cores < 1.14.1 and < 1.15.6 (CVE-2018-16843 CVE-2018-16844). 2019-08-14 11:39:47 -07:00
d5f48a8b75 bugfix: applied the patch for security advisory to NGINX cores < 1.14.1 and < 1.15.6 (CVE-2018-16845).
Signed-off-by: Thibault Charbonnier <thibaultcha@me.com>
2019-08-13 11:56:19 -07:00
cf7516fcbc optimize: added an NGINX core patch to ensure unused listening fds are closed when 'reuseport' is used.
When `reuseport` is enabled in the `listen` directive, Nginx will create
a listening fd for each worker process in the master process.

These fds will be inherited by the worker processes, but most of them
are unused. For example, considering we have 32 listening ip:port
configurations and 64 worker processes, each worker process will inherit
2048 (32 * 64) listening fds, but only 32 fds are used. By closing the
unused fds, this change could save up to 2016 (32 * 63) fds in a worker
process.

It doesn't affect the listening socket, since there is only one used fd
which associates to the socket with or without this change.

Co-authored-by: Thibault Charbonnier <thibaultcha@me.com>
2019-08-05 18:54:51 -07:00
46237a9c22 travis: added OpenSSL 1.1.1c to the tests matrix. 2019-07-17 16:25:50 -07:00
34918a30c3 bugfix: support yielding in 'certificate_by_lua_*' when 'ssl_early_data' is on.
Signed-off-by: Thibault Charbonnier <thibaultcha@me.com>
2019-07-17 16:25:50 -07:00
2e480157a3 feature: supported OpenSSL 1.1.1 by upgrading the OpenSSL patch.
Previously, we used the OpenSSL 1.1.1 ClientHello callback to do ssl
session fetching non-blockingly. However, this way cannot handle an edge
case: the ssl session resumption via session ticket might fail, and the
client fallbacks to session ID resumption. The ClientHello callback is
run too early to know if the client will fallback to use session ID
resumption.

Therefore, we have to take back the OpenSSL sess_set_get_cb_yield patch
and upgrade it to adapt OpenSSL 1.1.1.

Thanks Yongjian Xu and crasyangel for their help.

See 08e9e50.

Signed-off-by: Thibault Charbonnier <thibaultcha@me.com>
2019-07-17 11:03:34 -07:00
a51fa56086 change: renamed the 'ssl_pending_session' patch to 'ssl_sess_cb_yield' for NGINX cores 1.17.1 and above.
Its naming is now aligned with the `ssl_cert_cb_yield` patch.

See 08e9e50 for details on why this renaming was reverted for the 1.15.8
version of this patch.
2019-07-11 11:38:57 -07:00
cef09e553f upgraded the nginx core to 1.17.1. 2019-07-11 11:29:40 -07:00
08e9e50782 Revert "feature: updated the NGINX patches for async SSL session fetching to support OpenSSL 1.1.1."
This reverts commit 9e834398de.

Support for OpenSSL 1.1.1 will come with the 1.17.1 series of NGINX
patches. Since no other 1.15.8.* releases are planned, we are reverting
the state of the 1.15.8 patches to that of the 1.15.8.1 release.
2019-07-02 11:55:50 -07:00
b04577cd47 feature: Makefile: added a 'clean' target to remove build artifacts. 2019-07-01 16:48:28 -07:00
836c8792d2 tests: sanity.t: fixed test cases failing due to the last few commits. 2019-06-27 16:51:51 -07:00
3b6d9a5318 upgraded LuaJIT to 2.1-20190626. 2019-06-26 14:19:28 -07:00
e6188369cd upgraded lua-resty-string to 0.12rc1. 2019-06-24 15:10:09 -07:00
fdf142aabe upgraded resty-cli to 0.25rc2. 2019-06-19 14:22:02 -07:00
9e834398de feature: updated the NGINX patches for async SSL session fetching to support OpenSSL 1.1.1.
The patch was also renamed from `ssl_pending_session.patch` to
`ssl_sess_cb_yield.patch` (similarly to the existing
`ssl_cert_cb_yield.patch` one).

Signed-off-by: Thibault Charbonnier <thibaultcha@me.com>
2019-06-04 16:40:22 -07:00
547fdd5fb2 bugfix: Config.pm: fixed an issue when generating t/sanity.t_. 2019-05-30 14:52:10 -07:00
1f3cf84a8a tests: sanity.t: fixed test cases failing due to the last few commits and renamed another test case. 2019-05-30 14:51:46 -07:00
bbef48d25b upgraded LuaJIT to 2.1-20190530. 2019-05-30 09:56:53 -07:00
45997fc5fe upgraded resty-cli to 0.25rc1. 2019-05-30 09:54:32 -07:00
cc9787a290 feature: ./configure: added new option --with-luajit-ldflags=OPTS for specifying custom luajit linker flags. 2019-05-20 13:14:56 -07:00
2b40d7b8ee bumped version to 1.15.8.1. 2019-05-16 14:25:44 -07:00
bf2e5697e1 bugfix: win32/win64: the error log buffer size was merely 2048 bytes (now updated to 4096 bytes).
applied the win32_max_err_str patch for the nginx core.
2019-05-08 14:46:56 -07:00
540567e42c bumped version to 1.15.8.1 RC2. 2019-05-08 13:27:51 -07:00
a32ca0dbbe upgraded LuaJIT to 2.1-20190507. 2019-05-07 18:28:30 -07:00
62d31e53de bumped ngx_http_lua to 0.10.15, ngx_stream_lua to 0.0.7, and lua-resty-core to 0.1.17. 2019-05-02 14:14:00 -07:00
023b9d4f88 tests: updated sanity test suite to reflect recent changes in bumped components. 2019-04-11 14:33:16 -04:00
8954793847 bumped resty-cli to v0.24rc1. 2019-04-11 14:19:45 -04:00
0b5ebedd47 bumped ngx_http_lua to 0.10.15rc1, ngx_stream_lua to 0.0.7rc1, and lua-resty-core to 0.1.17rc1. 2019-04-09 14:15:23 -07:00
7e897a8b2b upgraded LuaJIT to 2.1-20190329. 2019-03-29 15:23:37 -07:00
99d72856a7 upgraded LuaJIT to 2.1-20190302. 2019-03-02 17:42:36 -08:00
ed32897702 bugfix: added an openssl patch to fix the parallel build regression in openssl 1.1.0j. 2019-03-02 01:41:24 -08:00
083403fb43 win32: upgraded openssl to 1.1.0j. 2019-03-02 00:41:06 -08:00
eff3e0d7db bumped version to 1.15.8.1 RC1. 2019-03-01 23:44:49 -08:00
88e214aad2 bumped LuaJIT to 2.1-20190228. 2019-02-28 11:59:57 -08:00
ec8f1b0753 bumped lua-resty-upstream-healthcheck to 0.06. 2019-02-28 10:44:31 -08:00
191ca1fdec bumped resty-cli to 0.23. 2019-02-25 08:37:10 -08:00
e2ca65128f tests: updated tests to reflect recent changes. 2019-02-24 23:50:15 -08:00
76cd3954e3 upgraded resty-cli to 0.23rc2. 2019-02-24 23:23:13 -08:00
f238a7542a bumped ngx_lua, ngx_stream_lua, and lua-resty-core to formal releases. 2019-02-23 21:57:57 -08:00
95cfc25189 bumped resty-cli, lua-cjson, lua-resty-redis, lua-resty-limit-traffic, lua-resty-websocket, lua-resty-lock, and lua-resty-lrucache to formal release tags. 2019-02-23 21:44:17 -08:00
0b956ca748 upgraded ngx_stream_lua to v0.0.6rc6. 2019-02-23 00:10:13 -08:00
7630d23428 bumped ngx_lua to 0.10.14rc7 and lua-resty-shell to 0.02. 2019-02-22 18:27:35 -08:00
60589ee251 upgraded LuaJIT to 2.1-20190221. 2019-02-22 18:17:59 -08:00
94d0e8ed52 tests: bumped ngx_lua and removed lua-resty-shell/lua-resty-signal from windows builds to reflect recent changes. 2019-02-04 22:58:26 -08:00
892a001f4a upgraded ngx_lua to 0.10.14rc6. 2019-02-04 20:08:43 -08:00
4cb86c999c bugfix: lua-resty-signal and lua-resty-shell should not be enabled on windows. 2019-02-04 20:08:28 -08:00
b84a47de27 travis: added travis-ci support. 2019-02-04 16:52:05 -08:00
73c881bddf tests: added support for --- out_like blocks. 2019-02-04 16:52:05 -08:00
72962e0125 bugfix: we now build lua-resty-signal's shared lib component. 2019-02-04 14:45:44 -08:00
2e7e51e649 feature: bundled the lua-resty-signal and lua-resty-shell libraries. 2019-02-02 20:35:53 -08:00
06468602b9 tests: bumped ngx_lua, ngx_stream_lua, and LuaJIT references according to recent changes. 2019-02-02 20:04:31 -08:00
7639fe0dba upgraded ngx_stream_lua to 0.0.6rc5. 2019-02-01 16:02:58 -08:00
00a89c4b2d upgraded ngx_lua to 0.10.14rc5. 2019-01-31 15:17:41 -08:00
0964e437bd upgraded LuaJIT to 2.1-20190131. 2019-01-31 00:51:40 -08:00
4dc7d668cc upgraded LuaJIT to v2.1-20190130. 2019-01-30 16:37:13 -08:00
c3b7c3b1b9 upgraded ngx_lua to 0.10.14rc4, ngx_stream_lua to 0.0.6rc4, and lua-resty-core to 0.1.16rc4. 2019-01-30 16:04:34 -08:00
3f42731e50 change: we now enable the GC64 mode by default in our bundled LuaJIT build for x86_64 architectures; this can be disabled with ./configure --without-luajit-gc64. 2019-01-29 20:00:58 -08:00
2879e59e7b feature: updated the socket_cloexec patches to support the ngx.pipe API.
Signed-off-by: Thibault Charbonnier <thibaultcha@me.com>
2019-01-29 17:45:47 -08:00
3c053fff33 tests: bumped lua-cjson references to 2.1.0.7rc2. 2019-01-29 10:58:44 -08:00
7b290a582f feature: bundled the lua-tablepool library. 2019-01-29 09:48:06 -08:00
b5d0128311 upgraded lua-cjson to 2.1.0.7rc2. 2019-01-25 15:04:22 -08:00
f56ee1ecd8 updated the tests to reflect recent changes. 2019-01-18 14:40:28 -08:00
8c8d51663e upgraded the nginx core 1.15.8. 2019-01-18 14:33:32 -08:00
97e580a851 upgraded LuaJIT+ to v2.1-20190115. 2019-01-15 12:30:49 -08:00
1c11dfa811 doc: updated the copyright year to 2019. 2019-01-04 10:05:05 -08:00
e70dfd0fac upgraded resty-cli to 0.22rc7. 2018-12-31 17:34:18 -08:00
8cf0d9b097 upgraded resty-cli to 0.22rc6. 2018-12-31 11:57:23 -08:00
e2cb54c1ba upgraded resty-cli to 0.22rc5. 2018-12-31 11:45:56 -08:00
2cfd8e5f04 feature: ./configure: added support for the -h option. 2018-12-09 14:36:08 -08:00
c441759ce3 make sure we also remove .tar.bz2 files. thanks Zexuan Luo for the patch. 2018-12-09 13:30:35 -08:00
03f09b5c25 upgraded ngx_lua to 0.10.14rc3, ngx_stream_lua to 0.0.6rc3, and lua-resty-core to 0.1.16rc3. 2018-11-13 11:43:40 -08:00
b91001a87e upgraded the nginx core to 1.15.6. 2018-11-13 11:42:43 -08:00
2d5699cfe5 fixed bugs in dist-check. 2018-11-01 21:23:39 -07:00
71b9f46595 upgraded ngx_lua to 0.10.14rc2. 2018-11-01 21:09:35 -07:00
4500744d5c test: fixed test failure due to NGINX core change introduced in 1.15.1
by 63e8a1d926.
2018-11-01 20:48:02 -07:00
4bfd198f28 upgraded ngx_stream_lua to 0.0.6rc2. 2018-11-01 20:47:10 -07:00
37a41b416c feature: ./configure: added new options --without-stream_ssl_module and --without-stream. 2018-11-01 17:45:50 -07:00
e8da00c337 tests: updated tests to reflect recent version changes. 2018-11-01 17:43:56 -07:00
7453fd5aa0 updated dist-check to reflect recent changes. 2018-11-01 17:42:24 -07:00
15cc7b2683 fixed "make test" for the new perl 5.26+ versions a bit. 2018-11-01 17:02:16 -07:00
5d48d9fea2 upgraded lua-resty-core to 0.1.16rc2. 2018-10-29 19:44:44 -07:00
f58e6eb013 upgraded the nginx core to 1.15.5. 2018-10-29 16:05:53 -07:00
6ee19af247 upgraded lua-resty-limit-traffic to 0.06rc1. 2018-10-29 14:58:03 -07:00
716f518749 upgraded ngx_coolkit to 0.2 (no code changes). 2018-10-29 14:52:55 -07:00
b7244e79a3 upgraded ngx_devel_kit to 0.3.1rc1. 2018-10-29 14:51:53 -07:00
94955589ef upgraded lua-resty-mysql to 0.21. 2018-10-29 14:50:14 -07:00
8ac69e032c upgraded lua-resty-websocket to v0.07rc1. 2018-10-29 14:49:27 -07:00
a0467ffb9b upgraded lua-resty-redis to 0.27rc1. 2018-10-29 14:24:19 -07:00
d96b792a9a upgraded lua-cjson to 2.1.0.7rc1. 2018-10-29 14:22:36 -07:00
f868ada155 upgraded lua-resty-lrucache to 0.09rc1. 2018-10-29 14:20:56 -07:00
d09ce06877 upgraded ngx_lua to 0.10.14rc1.
upgraded ngx_stream_lua to 0.0.6rc1.

upgraded lua-resty-core to 0.1.16rc1

upgraded LuaJIT to 2.1-20181029.

resty-doc indexes: skipped nginx's njs docs due to the use of special xml tags.
2018-10-29 14:11:20 -07:00
37ed98afaf upgraded resty-cli to 0.22rc4. 2018-10-06 16:13:57 -07:00
a245ff1644 fixed the patch file name to be more consistent with other patches. 2018-09-17 20:21:09 -07:00
17384566bb bugfix: nginx did not destroy the cycle memory pool before the daemon process exits.
This is to make the nginx ASAN or Valgrind clean in daemon mode. It is
also meaningful when we have more sophisticated cleanup work needed in
the configuration initialization phase and handlers like init_by_lua*.
2018-09-17 20:12:17 -07:00
a5e7a17cdf upgraded resty-cli to v0.22rc3. 2018-08-07 11:29:25 -07:00
950bd4ec4d upgraded resty-cli to 0.22rc2. 2018-07-17 13:07:42 -07:00
34db6fd04c configure: now supports the --without-stream_ssl_module option to disable ngx_stream_ssl_module if necessary.
Fix #388.
2018-07-05 00:38:15 -07:00
0263f89bff configure: support @rpath placeholder in OS X. 2018-06-14 15:59:42 -07:00
fe8f773b1d updated tests to reflect recent changes. 2018-06-14 15:58:48 -07:00
e5dd25dce6 upgraded lua-resty-lock to 0.08rc1. 2018-06-05 13:56:01 -07:00
18063e9a8c upgraded resty-cli to 0.22rc1. 2018-05-30 17:49:02 -07:00
116b8fe20d restydoc: updated the bundled version of the LuaJIT docs to the latest. 2018-05-14 13:23:52 -07:00
4f0980829a bumped version to 1.13.6.2. 2018-05-14 13:16:59 -07:00
eccf26672c tests: updated sanity.t with util/fix-tests to reflect recent component version changes. 2018-04-24 16:40:27 -07:00
a03c89076c upgraded ngx_lua to 0.10.13, ngx_stream_lua to 0.0.5, and lua-resty-core to 0.1.15. 2018-04-22 11:50:47 -07:00
30cc6a2201 build-win32: use JOBS=12 by default since Windows's IO is slow... 2018-04-22 11:38:17 -07:00
8a18db029a added a placeholder README-win32.md file. 2018-04-22 11:32:21 -07:00
25faa6d002 win32: enabled ngx_stream_ssl_preread_module in our binary builds. 2018-04-21 20:37:31 -07:00
c41a76e485 fixed the win32 building scripts. 2018-04-21 19:03:57 -07:00
f3406b5ab3 upgraded LuaJIT to 2.1-20180420, ngx_lua to 0.10.13rc1, ngx_stream_lua to 0.0.5rc1, and lua-resty-core to 0.1.15rc1. 2018-04-21 19:01:51 -07:00
51c4a3848d feature: added 64-bit windows building/packaging support using the MSYS2/MinGW toolchain. 2018-04-21 19:00:45 -07:00
f0e621b0c4 bugfix: nginx patch: do not build resolver parsing feature under Windows.
bugfix: nginx patch: moved the include of resolv.h to after ngx_config.h to avoid compilation failures on FreeBSD.

bugfix: patch: updated safe_resolver_ipv6_option.patch with new offsets to avoid confusing patch while applying.
Signed-off-by: Yichun Zhang (agentzh) <agentzh@gmail.com>
2018-04-20 17:55:54 -07:00
d6c07852e6 Revert "win32: we should use the right openssl patch."
We now downgrade openssl for the win32 build to 1.0.2o.

This reverts commit 8b98c7df0f.
2018-04-19 20:11:41 -07:00
8b98c7df0f win32: we should use the right openssl patch. 2018-04-19 19:37:58 -07:00
57166863d3 updated tests to reflect recent changes. 2018-04-19 19:02:31 -07:00
15aec7f8f9 win32: upgraded pcre to 8.42 and openssl to 1.1.0h.
Signed-off-by: Yichun Zhang (agentzh) <agentzh@gmail.com>
2018-04-19 17:17:17 -07:00
17d6683267 bumped version to 1.13.6.2rc1. 2018-04-19 16:35:57 -07:00
4e202252f4 tests: dist-check: added support for OPENSSL_PREFIX for using a different openssl installation. 2018-04-19 15:04:24 -07:00
5d0235ea71 upgraded ngx_xss to 0.06. 2018-04-19 14:03:30 -07:00
7bf9833472 upgraded ngx_redis2 to 0.15. 2018-04-19 14:02:03 -07:00
27d90f13cf upgraded lua-resty-string to 0.11. 2018-04-19 13:59:52 -07:00
2f74b9703a upgraded ngx_rds_csv to 0.09. 2018-04-19 13:58:04 -07:00
abad894952 upgraded ngx_drizzle to 0.1.11. 2018-04-19 13:55:52 -07:00
506b0b8926 upgraded ngx_memc to 0.19 2018-04-19 13:48:03 -07:00
c89133ec7e upgraded ngx_encrypted_session to 0.08. 2018-04-19 13:30:38 -07:00
372befff8d upgraded ngx_set_misc to 0.32. 2018-04-19 13:28:48 -07:00
ea1630562c upgraded lua-resty-dns to 0.21. 2018-04-19 13:20:33 -07:00
7f78188bcb upgraded resty-cli to 0.21. 2018-04-19 13:17:42 -07:00
38b45d7a59 upgraded LuaJIT to 2.1-20180419. 2018-04-19 13:11:42 -07:00
be40a6f25c upgraded lua-resty-lrucache to 0.08. 2018-04-19 12:37:54 -07:00
3b7ec8ed33 upgraded ngx_lua to 0.10.12. 2018-04-19 12:34:24 -07:00
35588fa607 upgraded ngx_stream_lua to 0.0.4. 2018-04-19 12:30:09 -07:00
994a743f9e upgraded opm to 0.0.5. 2018-04-19 12:28:36 -07:00
a737e8a839 upgraded lua-resty-core to 0.1.14. 2018-04-19 12:22:06 -07:00
412ac81f38 upgraded lua-cjson to 2.1.0.6. 2018-04-19 12:20:15 -07:00
ff89bf3ea1 resolv.conf: fixed a bug that when a newline character is present at the end of the resolv.conf file, the parser incorrectly included such newline in the parsed address.
Signed-off-by: Yichun Zhang (agentzh) <agentzh@gmail.com>
2018-03-30 12:21:19 -07:00
395e039e8e doc: fixed the resolv.conf file name, reported by Thibault Charbonnier. 2018-03-27 14:33:41 -07:00
a4f399b3ac feature: added the socket_cloexec patch to ensure most of the nginx connections could be closed before child process terminates.
Signed-off-by: Yichun Zhang (agentzh) <agentzh@gmail.com>
2018-03-27 13:46:01 -07:00
8d3ce00348 README: added documentations for the newly added resolver.conf parsing feature.
Signed-off-by: Yichun Zhang (agentzh) <agentzh@gmail.com>
2018-03-27 13:22:53 -07:00
4a85469797 ./configure: fixed source lines exceeding 80 cols (heredoc literals are skipped). 2018-03-18 12:42:07 -07:00
46a1c7adb3 feature: now the openresty build system (./configure) automatically patches the resty command-line utility to use its own nginx binary so that it does not have to compute it at runtime (which is a bit expensive).
this saves about 10ms (from for total 20ms to 10ms) for resty's startup time, as
measured on a mid-2015 MBP. That's 50% reduction in total startup time!

Signed-off-by: Yichun Zhang (agentzh) <agentzh@gmail.com>
2018-03-18 12:32:02 -07:00
f1ad126b75 updated tests to reflect recent changes. 2018-03-18 12:07:00 -07:00
7732e38e4c upgraded resty-cli to 0.21rc2. 2018-03-18 11:56:39 -07:00
3d8b33f0e8 feature: added a patch for the nginx core to add the "local=/path/to/resolv.conf" option to the standard "resolver" config directive.
This can enable the use of system-level nameserver configurations of
/etc/resolv.conf, for example, in nginx's own nonblocking DNS resolver.

Signed-off-by: Yichun Zhang (agentzh) <agentzh@gmail.com>
2018-03-16 16:19:19 -07:00
d11dee9ca8 upgraded opm to 0.0.5rc1. 2018-03-08 00:00:18 -08:00
7a8fb4bc81 upgraded resty-cli to 0.21rc1. 2018-03-07 23:56:51 -08:00
d9d28a5f8b upgraded lua-resty-lrucache to 0.08rc1. 2018-03-07 23:55:36 -08:00
031778f770 bugfix: ./configure: relative paths in --add-dynamic-module=PATH option did not work.
Signed-off-by: Yichun Zhang (agentzh) <agentzh@gmail.com>
2018-02-25 14:46:07 -08:00
1555734368 updated tests to reflect recent component updates. 2018-02-11 11:38:26 -08:00
e5b5344238 upgraded lua-resty-string to 0.11rc1. 2018-02-05 22:25:35 -08:00
0271201881 mirror-tarball: simpl/ngx_devel_kit -> simplresty/ngx_devel_kit.
fix https://github.com/openresty/openresty/issues/336

Signed-off-by: Yichun Zhang (agentzh) <agentzh@gmail.com>
2018-02-02 15:11:51 -08:00
94db027c12 ./configure: updated the stream subsystem related options from nginx 1.13.6.
thanks hy05190134 for the report in #334.

Signed-off-by: Yichun Zhang (agentzh) <agentzh@gmail.com>
2018-01-24 11:49:52 -08:00
e5767d96e9 tests: updated to reflect recent changes. 2018-01-24 11:46:34 -08:00
36171ae02b upgraded ngx_stream_lua to 0.0.4rc1. 2018-01-15 15:48:47 -08:00
2267596f54 upgraded ngx_rds_csv to 0.09rc1. 2018-01-15 15:38:10 -08:00
2f826961dd upgraded ngx_xss to 0.06rc1. 2018-01-15 15:29:15 -08:00
028f5e5dec upgraded lua-resty-core to 0.1.14rc1. 2018-01-15 14:42:38 -08:00
2ed7e33a5b upgraded ngx_lua to 0.10.12rc2. 2018-01-15 14:41:27 -08:00
fd0bf98d6f upgraded ngx_set_misc to 0.32rc1, ngx_memc to 0.19rc1, ngx_encrypted_session to 0.08rc1, and ngx_redis2 to 0.15rc1. 2018-01-15 14:37:21 -08:00
93f785eed6 feature: added patches to the nginx core to make sure ngx_stream_ssl_preread_module will not skip the rest of the preread phase when SNI server name parsing was successful.
Signed-off-by: Yichun Zhang (agentzh) <agentzh@gmail.com>
2018-01-14 22:40:09 -08:00
30fa60ad5d patches: updated 1.13.6 balancer_status_code.patch and added patch for 1.13.8 as well.
Signed-off-by: Yichun Zhang (agentzh) <agentzh@gmail.com>
2018-01-09 17:52:04 -08:00
ee6b26e347 feature: added the sess_set_get_cb_yield patch for OpenSSL 1.1.0d and beyond.
Signed-off-by: Yichun Zhang (agentzh) <agentzh@gmail.com>
2018-01-05 23:38:32 -08:00
e777a35db3 feature: shipped openssl-1.1.0c patch with the source release tarball.
Signed-off-by: Yichun Zhang (agentzh) <agentzh@gmail.com>
2018-01-05 14:42:03 -08:00
a0dc14761a feature: added the sess_set_get_cb_yield patch for OpenSSL 1.1.0c and beyond.
The patch is based on

https://patch-diff.githubusercontent.com/raw/openssl/openssl/pull/1588.patch,

with some minor modifications.

Thanks Alessandro Ghedini for the ground work.

Signed-off-by: Yichun Zhang (agentzh) <agentzh@gmail.com>
2018-01-05 14:41:47 -08:00
686 changed files with 60607 additions and 5938 deletions

16
.github/actions/spelling/README.md vendored Normal file
View File

@ -0,0 +1,16 @@
# check-spelling/check-spelling configuration
File | Purpose | Format | Info
-|-|-|-
[dictionary.txt](dictionary.txt) | Replacement dictionary (creating this file will override the default dictionary) | one word per line | [dictionary](https://github.com/check-spelling/check-spelling/wiki/Configuration#dictionary)
[allow.txt](allow.txt) | Add words to the dictionary | one word per line (only letters and `'`s allowed) | [allow](https://github.com/check-spelling/check-spelling/wiki/Configuration#allow)
[reject.txt](reject.txt) | Remove words from the dictionary (after allow) | grep pattern matching whole dictionary words | [reject](https://github.com/check-spelling/check-spelling/wiki/Configuration-Examples%3A-reject)
[excludes.txt](excludes.txt) | Files to ignore entirely | perl regular expression | [excludes](https://github.com/check-spelling/check-spelling/wiki/Configuration-Examples%3A-excludes)
[only.txt](only.txt) | Only check matching files (applied after excludes) | perl regular expression | [only](https://github.com/check-spelling/check-spelling/wiki/Configuration-Examples%3A-only)
[patterns.txt](patterns.txt) | Patterns to ignore from checked lines | perl regular expression (order matters, first match wins) | [patterns](https://github.com/check-spelling/check-spelling/wiki/Configuration-Examples%3A-patterns)
[line_forbidden.patterns](line_forbidden.patterns) | Patterns to flag in checked lines | perl regular expression (order matters, first match wins) | [patterns](https://github.com/check-spelling/check-spelling/wiki/Configuration-Examples%3A-patterns)
[expect.txt](expect.txt) | Expected words that aren't in the dictionary | one word per line (sorted, alphabetically) | [expect](https://github.com/check-spelling/check-spelling/wiki/Configuration#expect)
[advice.md](advice.md) | Supplement for GitHub comment when unrecognized words are found | GitHub Markdown | [advice](https://github.com/check-spelling/check-spelling/wiki/Configuration-Examples%3A-advice)
Note: you can replace any of these files with a directory by the same name (minus the suffix)
and then include multiple files inside that directory (with that suffix) to merge multiple files together.

25
.github/actions/spelling/advice.md vendored Normal file
View File

@ -0,0 +1,25 @@
<!-- See https://github.com/check-spelling/check-spelling/wiki/Configuration-Examples%3A-advice --> <!-- markdownlint-disable MD033 MD041 -->
<details><summary>If the flagged items are false positives</summary>
If items relate to a ...
* binary file (or some other file you wouldn't want to check at all).
Please add a file path to the `excludes.txt` file matching the containing file.
File paths are Perl 5 Regular Expressions - you can [test](
https://www.regexplanet.com/advanced/perl/) yours before committing to verify it will match your files.
`^` refers to the file's path from the root of the repository, so `^README\.md$` would exclude [README.md](
../tree/HEAD/README.md) (on whichever branch you're using).
* well-formed pattern.
If you can write a [pattern](https://github.com/check-spelling/check-spelling/wiki/Configuration-Examples:-patterns) that would match it,
try adding it to the `patterns.txt` file.
Patterns are Perl 5 Regular Expressions - you can [test](
https://www.regexplanet.com/advanced/perl/) yours before committing to verify it will match your lines.
Note that patterns can't match multiline strings.
</details>

4
.github/actions/spelling/allow.txt vendored Normal file
View File

@ -0,0 +1,4 @@
github
https
ssh
ubuntu

View File

@ -0,0 +1,458 @@
# marker to ignore all code on line
^.*/\* #no-spell-check-line \*/.*$
# marker for ignoring a comment to the end of the line
// #no-spell-check.*$
# patch hunk comments
^\@\@ -\d+(?:,\d+|) \+\d+(?:,\d+|) \@\@ .*
# git index header
index [0-9a-z]{7,40}\.\.[0-9a-z]{7,40}
# cid urls
(['"])cid:.*?\g{-1}
# data url in parens
\(data:[^)]*?(?:[A-Z]{3,}|[A-Z][a-z]{2,}|[a-z]{3,})[^)]*\)
# data url in quotes
([`'"])data:.*?(?:[A-Z]{3,}|[A-Z][a-z]{2,}|[a-z]{3,}).*\g{-1}
# data url
data:[-a-zA-Z=;:/0-9+]*,\S*
# mailto urls
mailto:[-a-zA-Z=;:/?%&0-9+@.]{3,}
# magnet urls
magnet:[?=:\w]+
# obs:
"obs:[^"]*"
# The `\b` here means a break, it's the fancy way to handle urls, but it makes things harder to read
# In this examples content, I'm using a number of different ways to match things to show various approaches
# asciinema
\basciinema\.org/a/[0-9a-zA-Z]+
# apple
\bdeveloper\.apple\.com/[-\w?=/]+
# Apple music
\bembed\.music\.apple\.com/fr/playlist/usr-share/[-\w.]+
# appveyor api
\bci\.appveyor\.com/api/projects/status/[0-9a-z]+
# appveyor project
\bci\.appveyor\.com/project/(?:[^/\s"]*/){2}builds?/\d+/job/[0-9a-z]+
# Amazon
# Amazon
\bamazon\.com/[-\w]+/(?:dp/[0-9A-Z]+|)
# AWS S3
\b\w*\.s3[^.]*\.amazonaws\.com/[-\w/&#%_?:=]*
# AWS execute-api
\b[0-9a-z]{10}\.execute-api\.[-0-9a-z]+\.amazonaws\.com\b
# AWS ELB
\b\w+\.[-0-9a-z]+\.elb\.amazonaws\.com\b
# AWS SNS
\bsns\.[-0-9a-z]+.amazonaws\.com/[-\w/&#%_?:=]*
# While you could try to match `http://` and `https://` by using `s?` in `https?://`, sometimes there
# YouTube url
\b(?:(?:www\.|)youtube\.com|youtu.be)/(?:channel/|embed/|user/|playlist\?list=|watch\?v=|v/|)[-a-zA-Z0-9?&=_%]*
# YouTube music
\bmusic\.youtube\.com/youtubei/v1/browse(?:[?&]\w+=[-a-zA-Z0-9?&=_]*)
# YouTube tag
<\s*youtube\s+id=['"][-a-zA-Z0-9?_]*['"]
# YouTube image
\bimg\.youtube\.com/vi/[-a-zA-Z0-9?&=_]*
# Google Accounts
\baccounts.google.com/[-_/?=.:;+%&0-9a-zA-Z]*
# Google Analytics
\bgoogle-analytics\.com/collect.[-0-9a-zA-Z?%=&_.~]*
# Google APIs
\bgoogleapis\.(?:com|dev)/[a-z]+/(?:v\d+/|)[a-z]+/[-@:./?=\w]+
# Google Storage
\b[-a-zA-Z0-9.]*\bstorage\d*\.googleapis\.com(?:/\S*|)
# Google Calendar
\bcalendar\.google\.com/calendar(?:/u/\d+|)/embed\?src=[@./?=\w&%]+
\w+\@group\.calendar\.google\.com\b
# Google DataStudio
\bdatastudio\.google\.com/(?:(?:c/|)u/\d+/|)(?:embed/|)(?:open|reporting|datasources|s)/[-0-9a-zA-Z]+(?:/page/[-0-9a-zA-Z]+|)
# The leading `/` here is as opposed to the `\b` above
# ... a short way to match `https://` or `http://` since most urls have one of those prefixes
# Google Docs
/docs\.google\.com/[a-z]+/(?:ccc\?key=\w+|(?:u/\d+|d/(?:e/|)[0-9a-zA-Z_-]+/)?(?:edit\?[-\w=#.]*|/\?[\w=&]*|))
# Google Drive
\bdrive\.google\.com/(?:file/d/|open)[-0-9a-zA-Z_?=]*
# Google Groups
\bgroups\.google\.com/(?:(?:forum/#!|d/)(?:msg|topics?|searchin)|a)/[^/\s"]+/[-a-zA-Z0-9$]+(?:/[-a-zA-Z0-9]+)*
# Google Maps
\bmaps\.google\.com/maps\?[\w&;=]*
# Google themes
themes\.googleusercontent\.com/static/fonts/[^/\s"]+/v\d+/[^.]+.
# Google CDN
\bclients2\.google(?:usercontent|)\.com[-0-9a-zA-Z/.]*
# Goo.gl
/goo\.gl/[a-zA-Z0-9]+
# Google Chrome Store
\bchrome\.google\.com/webstore/detail/[-\w]*(?:/\w*|)
# Google Books
\bgoogle\.(?:\w{2,4})/books(?:/\w+)*\?[-\w\d=&#.]*
# Google Fonts
\bfonts\.(?:googleapis|gstatic)\.com/[-/?=:;+&0-9a-zA-Z]*
# Google Forms
\bforms\.gle/\w+
# Google Scholar
\bscholar\.google\.com/citations\?user=[A-Za-z0-9_]+
# Google Colab Research Drive
\bcolab\.research\.google\.com/drive/[-0-9a-zA-Z_?=]*
# GitHub SHAs (api)
\bapi.github\.com/repos(?:/[^/\s"]+){3}/[0-9a-f]+\b
# GitHub SHAs (markdown)
(?:\[`?[0-9a-f]+`?\]\(https:/|)/(?:www\.|)github\.com(?:/[^/\s"]+){2,}(?:/[^/\s")]+)(?:[0-9a-f]+(?:[-0-9a-zA-Z/#.]*|)\b|)
# GitHub SHAs
\bgithub\.com(?:/[^/\s"]+){2}[@#][0-9a-f]+\b
# GitHub wiki
\bgithub\.com/(?:[^/]+/){2}wiki/(?:(?:[^/]+/|)_history|[^/]+(?:/_compare|)/[0-9a-f.]{40,})\b
# githubusercontent
/[-a-z0-9]+\.githubusercontent\.com/[-a-zA-Z0-9?&=_\/.]*
# githubassets
\bgithubassets.com/[0-9a-f]+(?:[-/\w.]+)
# gist github
\bgist\.github\.com/[^/\s"]+/[0-9a-f]+
# git.io
\bgit\.io/[0-9a-zA-Z]+
# GitHub JSON
"node_id": "[-a-zA-Z=;:/0-9+]*"
# Contributor
\[[^\]]+\]\(https://github\.com/[^/\s"]+\)
# GHSA
GHSA(?:-[0-9a-z]{4}){3}
# GitLab commit
\bgitlab\.[^/\s"]*/\S+/\S+/commit/[0-9a-f]{7,16}#[0-9a-f]{40}\b
# GitLab merge requests
\bgitlab\.[^/\s"]*/\S+/\S+/-/merge_requests/\d+/diffs#[0-9a-f]{40}\b
# GitLab uploads
\bgitlab\.[^/\s"]*/uploads/[-a-zA-Z=;:/0-9+]*
# GitLab commits
\bgitlab\.[^/\s"]*/(?:[^/\s"]+/){2}commits?/[0-9a-f]+\b
# binanace
accounts.binance.com/[a-z/]*oauth/authorize\?[-0-9a-zA-Z&%]*
# bitbucket diff
\bapi\.bitbucket\.org/\d+\.\d+/repositories/(?:[^/\s"]+/){2}diff(?:stat|)(?:/[^/\s"]+){2}:[0-9a-f]+
# bitbucket repositories commits
\bapi\.bitbucket\.org/\d+\.\d+/repositories/(?:[^/\s"]+/){2}commits?/[0-9a-f]+
# bitbucket commits
\bbitbucket\.org/(?:[^/\s"]+/){2}commits?/[0-9a-f]+
# bit.ly
\bbit\.ly/\w+
# bitrise
\bapp\.bitrise\.io/app/[0-9a-f]*/[\w.?=&]*
# bootstrapcdn.com
\bbootstrapcdn\.com/[-./\w]+
# cdn.cloudflare.com
\bcdnjs\.cloudflare\.com/[./\w]+
# circleci
\bcircleci\.com/gh(?:/[^/\s"]+){1,5}.[a-z]+\?[-0-9a-zA-Z=&]+
# gitter
\bgitter\.im(?:/[^/\s"]+){2}\?at=[0-9a-f]+
# gravatar
\bgravatar\.com/avatar/[0-9a-f]+
# ibm
[a-z.]*ibm\.com/[-_#=:%!?~.\\/\d\w]*
# imgur
\bimgur\.com/[^.]+
# Internet Archive
\barchive\.org/web/\d+/(?:[-\w.?,'/\\+&%$#_:]*)
# discord
/discord(?:app\.com|\.gg)/(?:invite/)?[a-zA-Z0-9]{7,}
# Disqus
\bdisqus\.com/[-\w/%.()!?&=_]*
# medium link
\blink\.medium\.com/[a-zA-Z0-9]+
# medium
\bmedium\.com/\@?[^/\s"]+/[-\w]+
# microsoft
\b(?:https?://|)(?:(?:download\.visualstudio|docs|msdn2?|research)\.microsoft|blogs\.msdn)\.com/[-_a-zA-Z0-9()=./%]*
# powerbi
\bapp\.powerbi\.com/reportEmbed/[^"' ]*
# vs devops
\bvisualstudio.com(?::443|)/[-\w/?=%&.]*
# mvnrepository.com
\bmvnrepository\.com/[-0-9a-z./]+
# now.sh
/[0-9a-z-.]+\.now\.sh\b
# oracle
\bdocs\.oracle\.com/[-0-9a-zA-Z./_?#&=]*
# chromatic.com
/\S+.chromatic.com\S*[")]
# codacy
\bapi\.codacy\.com/project/badge/Grade/[0-9a-f]+
# compai
\bcompai\.pub/v1/png/[0-9a-f]+
# mailgun api
\.api\.mailgun\.net/v3/domains/[0-9a-z]+\.mailgun.org/messages/[0-9a-zA-Z=@]*
# mailgun
\b[0-9a-z]+.mailgun.org
# /message-id/
/message-id/[-\w@./%]+
# Reddit
\breddit\.com/r/[/\w_]*
# requestb.in
\brequestb\.in/[0-9a-z]+
# sched
\b[a-z0-9]+\.sched\.com\b
# Slack url
slack://[a-zA-Z0-9?&=]+
# Slack
\bslack\.com/[-0-9a-zA-Z/_~?&=.]*
# Slack edge
\bslack-edge\.com/[-a-zA-Z0-9?&=%./]+
# Slack images
\bslack-imgs\.com/[-a-zA-Z0-9?&=%.]+
# shields.io
\bshields\.io/[-\w/%?=&.:+;,]*
# stackexchange -- https://stackexchange.com/feeds/sites
\b(?:askubuntu|serverfault|stack(?:exchange|overflow)|superuser).com/(?:questions/\w+/[-\w]+|a/)
# Sentry
[0-9a-f]{32}\@o\d+\.ingest\.sentry\.io\b
# Twitter markdown
\[\@[^[/\]:]*?\]\(https://twitter.com/[^/\s"')]*(?:/status/\d+(?:\?[-_0-9a-zA-Z&=]*|)|)\)
# Twitter hashtag
\btwitter\.com/hashtag/[\w?_=&]*
# Twitter status
\btwitter\.com/[^/\s"')]*(?:/status/\d+(?:\?[-_0-9a-zA-Z&=]*|)|)
# Twitter profile images
\btwimg\.com/profile_images/[_\w./]*
# Twitter media
\btwimg\.com/media/[-_\w./?=]*
# Twitter link shortened
\bt\.co/\w+
# facebook
\bfburl\.com/[0-9a-z_]+
# facebook CDN
\bfbcdn\.net/[\w/.,]*
# facebook watch
\bfb\.watch/[0-9A-Za-z]+
# dropbox
\bdropbox\.com/s/[^/\s"]+/[-0-9A-Za-z_.%]+
# ipfs protocol
ipfs://[0-9a-z]*
# ipfs url
/ipfs/[0-9a-z]*
# w3
\bw3\.org/[-0-9a-zA-Z/#.]+
# loom
\bloom\.com/embed/[0-9a-f]+
# regex101
\bregex101\.com/r/[^/\s"]+/\d+
# figma
\bfigma\.com/file(?:/[0-9a-zA-Z]+/)+
# freecodecamp.org
\bfreecodecamp\.org/[-\w/.]+
# image.tmdb.org
\bimage\.tmdb\.org/[/\w.]+
# mermaid
\bmermaid\.ink/img/[-\w]+|\bmermaid-js\.github\.io/mermaid-live-editor/#/edit/[-\w]+
# gitweb
[^"\s]+/gitweb/\S+;h=[0-9a-f]+
# HyperKitty lists
/archives/list/[^@/]+\@[^/\s"]*/message/[^/\s"]*/
# lists
/thread\.html/[^"\s]+
# list-management
\blist-manage\.com/subscribe(?:[?&](?:u|id)=[0-9a-f]+)+
# kubectl.kubernetes.io/last-applied-configuration
"kubectl.kubernetes.io/last-applied-configuration": ".*"
# pgp
\bgnupg\.net/pks/lookup[?&=0-9a-zA-Z]*
# Spotify
\bopen\.spotify\.com/embed/playlist/\w+
# mastodon.social
\bmastodon\.social/(?:media/|\@)[?&=0-9a-zA-Z]*
# scastie
\bscastie\.scala-lang\.org/[^/]+/\w+
# images.unsplash.com
\bimages\.unsplash\.com/(?:(?:flagged|reserve)/|)[-\w./%?=%&.;]+
# pastebin
\bpastebin\.com/[\w/]+
# ANSI color codes
(?:\\(?:u00|x)1b|\x1b)\[\d+(?:;\d+|)m
# URL escaped characters
\%[0-9A-F][A-F]
# IPv6
\b(?:[0-9a-fA-F]{0,4}:){3,7}[0-9a-fA-F]{0,4}\b
# c99 hex digits (not the full format, just one I've seen)
0x[0-9a-fA-F](?:\.[0-9a-fA-F]*|)[pP]
# Punycode
\bxn--[-0-9a-z]+
# sha
sha\d+:[0-9]*[a-f]{3,}[0-9a-f]*
# sha-... -- uses a fancy capture
(['"]|&quot;)[0-9a-f]{40,}\g{-1}
# hex runs
\b[0-9a-fA-F]{16,}\b
# hex in url queries
=[0-9a-fA-F]*?(?:[A-F]{3,}|[a-f]{3,})[0-9a-fA-F]*?&
# ssh
(?:ssh-\S+|-nistp256) [-a-zA-Z=;:/0-9+]{12,}
# PGP
\b(?:[0-9A-F]{4} ){9}[0-9A-F]{4}\b
# uuid:
\b[0-9a-fA-F]{8}-(?:[0-9a-fA-F]{4}-){3}[0-9a-fA-F]{12}\b
# hex digits including css/html color classes:
(?:[\\0][xX]|\\u|[uU]\+|#x?|\%23)[0-9_]*[a-fA-FgGrR]{2,}[0-9_a-fA-FgGrR]*(?:[uUlL]{0,3}|u\d+)\b
# integrity
integrity="sha\d+-[-a-zA-Z=;:/0-9+]{40,}"
# https://www.gnu.org/software/groff/manual/groff.html
# man troff content
\\f[BCIPR]
# '
\\\(aq
# .desktop mime types
^MimeTypes?=.*$
# .desktop localized entries
^[A-Z][a-z]+\[[a-z]+\]=.*$
# IServiceProvider
\bI(?=(?:[A-Z][a-z]{2,})+\b)
# crypt
"\$2[ayb]\$.{56}"
# Input to GitHub JSON
content: "[-a-zA-Z=;:/0-9+]*="
# Python stringprefix / binaryprefix
# Note that there's a high false positive rate, remove the `?=` and search for the regex to see if the matches seem like reasonable strings
(?<!')\b(?:B|BR|Br|F|FR|Fr|R|RB|RF|Rb|Rf|U|UR|Ur|b|bR|br|f|fR|fr|r|rB|rF|rb|rf|u|uR|ur)'(?:[A-Z]{3,}|[A-Z][a-z]{2,}|[a-z]{3,})
# Regular expressions for (P|p)assword
\([A-Z]\|[a-z]\)[a-z]+
# JavaScript regular expressions
/.*/[gim]*\.test\(
\.replace\(/[^/\s"]*/[gim]*\s*,
# Go regular expressions
regexp?\.MustCompile\(`[^`]*`\)
# sed regular expressions
sed 's/(?:[^/]*?[a-zA-Z]{3,}[^/]*?/){2}
# kubernetes pod status lists
# https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/#pod-phase
\w+(?:-\w+)+\s+\d+/\d+\s+(?:Running|Pending|Succeeded|Failed|Unknown)\s+
# kubectl - pods in CrashLoopBackOff
\w+-[0-9a-f]+-\w+\s+\d+/\d+\s+CrashLoopBackOff\s+
# kubernetes object suffix
-[0-9a-f]{10}-\w{5}\s
# posthog secrets
posthog\.init\((['"])phc_[^"',]+\g{-1},
# Update Lorem based on your content (requires `ge` and `w` from https://github.com/jsoref/spelling; and `review` from https://github.com/check-spelling/check-spelling/wiki/Looking-for-items-locally )
# grep '^[^#].*lorem' .github/actions/spelling/patterns.txt|perl -pne 's/.*i..\?://;s/\).*//' |tr '|' "\n"|sort -f |xargs -n1 ge|perl -pne 's/^[^:]*://'|sort -u|w|sed -e 's/ .*//'|w|review -
# Warning, while `(?i)` is very neat and fancy, if you have some binary files that aren't proper unicode, you might run into:
## Operation "substitution (s///)" returns its argument for non-Unicode code point 0x1C19AE (the code point will vary).
## You could manually change `(?i)X...` to use `[Xx]...`
## or you could add the files to your `excludes` file (a version after 0.0.19 should identify the file path)
# Lorem
(?:\w|\s|[,.])*\b(?i)(?:amet|consectetur|cursus|dolor|eros|ipsum|lacus|libero|ligula|lorem|magna|neque|nulla|suscipit|tempus)\b(?:\w|\s|[,.])*
# Non-English
[a-zA-Z]*[ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝßàáâãäåæçèéêëìíîïðñòóôõöøùúûüýÿĀāŁłŃńŅņŒœŚśŠšŜŝŸŽžź][a-zA-Z]{3}[a-zA-ZÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝßàáâãäåæçèéêëìíîïðñòóôõöøùúûüýÿĀāŁłŃńŅņŒœŚśŠšŜŝŸŽžź]*
# French
# This corpus only had capital letters, but you probably want lowercase ones as well.
\b[LN]'+[a-z]+\b
# latex
\\(?:n(?:ew|ormal)|r(?:enew)|t(?:able(?:of|)|he|itle))(?=[a-z]+)
# the negative lookahead here is to allow catching 'templatesz' as a misspelling
# but to otherwise recognize a Windows path with \templates\foo.template or similar:
\\(?:necessary|r(?:eport|esolve[dr]?|esult)|t(?:arget|emplates?))(?![a-z])
# ignore long runs of a single character:
\b([A-Za-z])\g{-1}{3,}\b
# Note that the next example is no longer necessary if you are using
# to match a string starting with a `#`, use a character-class:
[#]backwards
# version suffix <word>v#
(?:(?<=[A-Z]{2})V|(?<=[a-z]{2}|[A-Z]{2})v)\d+(?:\b|(?=[a-zA-Z_]))
# Compiler flags (Scala)
(?:^|[\t ,>"'`=(])-J-[DPWXY](?=[A-Z]{2,}|[A-Z][a-z]|[a-z]{2,})
# Compiler flags
(?:^|[\t ,"'`=(])-[DPWXYLlf](?=[A-Z]{2,}|[A-Z][a-z]|[a-z]{2,})
# Compiler flags (linker)
,-B
# curl arguments
\b(?:\\n|)curl(?:\s+-[a-zA-Z]{1,2}\b)*(?:\s+-[a-zA-Z]{3,})(?:\s+-[a-zA-Z]+)*
# set arguments
\bset(?:\s+-[abefimouxE]{1,2})*\s+-[abefimouxE]{3,}(?:\s+-[abefimouxE]+)*
# tar arguments
\b(?:\\n|)g?tar(?:\.exe|)(?:(?:\s+--[-a-zA-Z]+|\s+-[a-zA-Z]+|\s[ABGJMOPRSUWZacdfh-pr-xz]+\b)(?:=[^ ]*|))+
# tput arguments -- https://man7.org/linux/man-pages/man5/terminfo.5.html -- technically they can be more than 5 chars long...
\btput\s+(?:(?:-[SV]|-T\s*\w+)\s+)*\w{3,5}\b
# macOS temp folders
/var/folders/\w\w/[+\w]+/(?:T|-Caches-)/

59
.github/actions/spelling/excludes.txt vendored Normal file
View File

@ -0,0 +1,59 @@
# See https://github.com/check-spelling/check-spelling/wiki/Configuration-Examples:-excludes
(?:^|/)(?i)COPYRIGHT
(?:^|/)(?i)LICEN[CS]E
(?:^|/)go\.sum$
(?:^|/)package(?:-lock|)\.json$
(?:^|/)vendor/
ignore$
\.a$
\.ai$
\.avi$
\.bmp$
\.bz2$
\.crt$
\.dll$
\.docx?$
\.drawio$
\.DS_Store$
\.eot$
\.exe$
\.gif$
\.gitattributes$
\.graffle$
\.gz$
\.html$
\.icns$
\.ico$
\.jar$
\.jks$
\.jpe?g$
\.js$
\.key$
\.lib$
\.lock$
\.map$
\.min\..
\.mod$
\.mp[34]$
\.nav$
\.o$
\.ocf$
\.otf$
\.pdf$
\.pem$
\.png$
\.styl$
\.psd$
\.s$
\.svg$
\.tar$
\.tiff?$
\.ttf$
\.uve$
\.wav$
\.webm$
\.webp$
\.woff2?$
\.zip$
^\.github/
^\Q.github/workflows/spelling.yml\E$

51
.github/actions/spelling/expect.txt vendored Normal file
View File

@ -0,0 +1,51 @@
agentzh
COMPAT
csv
dav
dll
DLUAJIT
exe
flv
gcc
gmail
gunzip
gzip
html
http
imagename
imap
IOCP
ipv
jit
json
Linux
lua
luajit
Microsoft
mkdir
MSYS
nginx
ngx
NUMMODE
objs
openresty
openssl
pcre
perl
pid
preread
rds
README
realip
sbin
SETSIZE
smtp
ssl
tarballs
taskkill
tasklist
todo
toolchain
xcflags
Yichun
zlib

View File

@ -0,0 +1,56 @@
# reject `m_data` as there's a certain OS which has evil defines that break things if it's used elsewhere
# \bm_data\b
# If you have a framework that uses `it()` for testing and `fit()` for debugging a specific test,
# you might not want to check in code where you were debugging w/ `fit()`, in which case, you might want
# to use this:
#\bfit\(
# s.b. GitHub
\bGithub\b
# s.b. GitLab
\bGitlab\b
# s.b. JavaScript
\bJavascript\b
# s.b. Microsoft
\bMicroSoft\b
# s.b. another
\ban[- ]other\b
# s.b. greater than
\bgreater then\b
# s.b. into
\bin to\b
# s.b. less than
\bless then\b
# s.b. otherwise
\bother[- ]wise\b
# s.b. nonexistent
\bnon existing\b
\b[Nn]o[nt][- ]existent\b
# s.b. preexisting
[Pp]re-existing
# s.b. preempt
[Pp]re-empt\b
# s.b. preemptively
[Pp]re-emptively
# s.b. reentrancy
[Rr]e-entrancy
# s.b. reentrant
[Rr]e-entrant
# Reject duplicate words
\s([A-Z]{3,}|[A-Z][a-z]{2,}|[a-z]{3,})\s\g{-1}\s

2
.github/actions/spelling/only.txt vendored Normal file
View File

@ -0,0 +1,2 @@
# See https://github.com/check-spelling/check-spelling/wiki/Configuration-Examples:-excludes
\.md$

18
.github/actions/spelling/patterns.txt vendored Normal file
View File

@ -0,0 +1,18 @@
# See https://github.com/check-spelling/check-spelling/wiki/Configuration-Examples:-patterns
# acceptable duplicates
# ls directory listings
[-bcdlpsw](?:[-r][-w][-sx]){3}\s+\d+\s+(\S+)\s+\g{-1}\s+\d+\s+
# C types
\s(long|LONG) \g{-1}\s
# javadoc / .net
(?:[\\@](?:groupname|param)|(?:public|private)(?:\s+static|\s+readonly)*)\s+(\w+)\s+\g{-1}\s
# Commit message -- Signed-off-by and friends
^\s*(?:(?:Based-on-patch|Co-authored|Helped|Mentored|Reported|Reviewed|Signed-off)-by|Thanks-to): (?:[^<]*<[^>]*>|[^<]*)\s*$
# Autogenerated revert commit message
^This reverts commit [0-9a-f]{40}\.$
# ignore long runs of a single character:
\b([A-Za-z])\g{-1}{3,}\b

10
.github/actions/spelling/reject.txt vendored Normal file
View File

@ -0,0 +1,10 @@
^attache$
benefitting
occurences?
^dependan.*
^oer$
Sorce
^[Ss]pae.*
^untill$
^untilling$
^wether.*

18
.github/workflows/markdownlint.yml vendored Normal file
View File

@ -0,0 +1,18 @@
name: Linting on markdown files
on:
pull_request_target:
push:
jobs:
lint-content:
name: Lint content markdown files
runs-on: ubuntu-latest
steps:
- name: Check out code
uses: actions/checkout@v2
- name: Lint markdown files
uses: avto-dev/markdown-lint@v1
with:
config: './.markdownlint.jsonc'
args: './content/**/*.md'

View File

@ -0,0 +1,30 @@
name: "Lint PR"
on:
pull_request_target:
types:
- opened
- edited
- synchronize
jobs:
main:
name: Validate PR title
runs-on: ubuntu-latest
steps:
- uses: amannn/action-semantic-pull-request@v4
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
# Configure which types are allowed.
# Default: https://github.com/commitizen/conventional-commit-types
types: |
bugfix # bug fixes
change # backward incompatible changes
doc # documentation changes including code comments
editor # code editor related configurations
feature # implementing a new feature
optimize # performance optimizations
refactor # code refactoring and other code rearrangement
style # coding style changes
tests # test suite changes

96
.github/workflows/spelling.yml vendored Normal file
View File

@ -0,0 +1,96 @@
name: Spell checking
# Updating pull request branches is managed via comment handling.
# For details, see: https://github.com/check-spelling/check-spelling/wiki/Feature:-Update-expect-list
#
# These elements work together to make it happen:
#
# `on.issue_comment`
# This event listens to comments by users asking to update the metadata.
#
# `jobs.update`
# This job runs in response to an issue_comment and will push a new commit
# to update the spelling metadata.
#
# `with.experimental_apply_changes_via_bot`
# Tells the action to support and generate messages that enable it
# to make a commit to update the spelling metadata.
#
# `with.ssh_key`
# In order to trigger workflows when the commit is made, you can provide a
# secret (typically, a write-enabled github deploy key).
#
# For background, see: https://github.com/check-spelling/check-spelling/wiki/Feature:-Update-with-deploy-key
on:
push:
branches: ["**"]
tags-ignore: ["**"]
pull_request_target:
issue_comment:
types: [created]
jobs:
spelling:
name: Spell checking
permissions:
contents: read
pull-requests: read
actions: read
outputs:
followup: ${{ steps.spelling.outputs.followup }}
runs-on: ubuntu-latest
if: "contains(github.event_name, 'pull_request') || github.event_name == 'push'"
concurrency:
group: spelling-${{ github.event.pull_request.number || github.ref }}
# note: If you use only_check_changed_files, you do not want cancel-in-progress
cancel-in-progress: true
steps:
- name: check-spelling
id: spelling
uses: check-spelling/check-spelling@main
with:
suppress_push_for_open_pull_request: 1
checkout: true
post_comment: 0
experimental_apply_changes_via_bot: 1
extra_dictionaries:
cspell:filetypes/filetypes.txt
comment:
name: Report
runs-on: ubuntu-latest
needs: spelling
permissions:
contents: write
pull-requests: write
if: (success() || failure()) && needs.spelling.outputs.followup
steps:
- name: comment
uses: check-spelling/check-spelling@main
with:
checkout: true
task: ${{ needs.spelling.outputs.followup }}
experimental_apply_changes_via_bot: 1
update:
name: Update PR
permissions:
contents: write
pull-requests: write
runs-on: ubuntu-latest
if: ${{
github.event_name == 'issue_comment' &&
github.event.issue.pull_request &&
contains(github.event.comment.body, '@check-spelling-bot apply')
}}
concurrency:
group: spelling-update-${{ github.event.issue.number }}
cancel-in-progress: false
steps:
- name: apply spelling updates
uses: check-spelling/check-spelling@main
with:
experimental_apply_changes_via_bot: 1
checkout: true
ssh_key: "${{ secrets.CHECK_SPELLING }}"

1
.gitignore vendored
View File

@ -75,3 +75,4 @@ upload-win32
html_out/
TODO
doc/LuaJIT-2.1/changes.pod
t/servroot

81
.travis.yml Normal file
View File

@ -0,0 +1,81 @@
dist: focal
branches:
only:
- "master"
os: linux
arch:
- amd64
- arm64
- s390x
- ppc64le
language: c
compiler:
- gcc
addons:
apt:
packages:
- axel
- dos2unix
- libgd-dev
- dos2unix
- libpcre3
- libpcre3-dev
- mercurial
- libpq-dev
before_install:
- sudo sysctl -w net.ipv6.conf.all.disable_ipv6=1
cache:
directories:
- download-cache
env:
global:
- JOBS=3
- PCRE_VER=8.45
- PCRE_PREFIX=/opt/pcre
- PCRE_LIB=$PCRE_PREFIX/lib
- PCRE_INC=$PCRE_PREFIX/include
- OPENSSL_PREFIX=/opt/ssl
- OPENSSL_LIB=$OPENSSL_PREFIX/lib
- OPENSSL_INC=$OPENSSL_PREFIX/include
- OPENRESTY_PREFIX=/opt/openresty
jobs:
- OPENSSL_VER=1.1.1w OPENSSL_PATCH_VER=1.1.1f ENABLE_HTTP3_OPTION=--with-http_v3_module
install:
- cpanm --sudo --notest Test::Nginx IPC::Run3 > build.log 2>&1 || (cat build.log && exit 1)
- if [ ! -f download-cache/pcre-$PCRE_VER.tar.gz ]; then wget -P download-cache https://downloads.sourceforge.net/project/pcre/pcre/${PCRE_VER}/pcre-${PCRE_VER}.tar.gz; fi
- if [ ! -f download-cache/openssl-$OPENSSL_VER.tar.gz ]; then wget -P download-cache https://www.openssl.org/source/openssl-$OPENSSL_VER.tar.gz || wget -P download-cache https://www.openssl.org/source/old/${OPENSSL_VER//[a-z]/}/openssl-$OPENSSL_VER.tar.gz; fi
- tar zxf download-cache/pcre-$PCRE_VER.tar.gz
- cd pcre-$PCRE_VER/
- ./configure --prefix=$PCRE_PREFIX --enable-jit --enable-utf --enable-unicode-properties > build.log 2>&1 || (cat build.log && exit 1)
- make -j$JOBS > build.log 2>&1 || (cat build.log && exit 1)
- sudo PATH=$PATH make install > build.log 2>&1 || (cat build.log && exit 1)
- cd ..
- tar zxf download-cache/openssl-$OPENSSL_VER.tar.gz
- cd openssl-$OPENSSL_VER/
- patch -p1 < ../patches/openssl-$OPENSSL_PATCH_VER-sess_set_get_cb_yield.patch
- ./config no-threads shared enable-ssl3 enable-ssl3-method -g --prefix=$OPENSSL_PREFIX -DPURIFY > build.log 2>&1 || (cat build.log && exit 1)
- make -j$JOBS > build.log 2>&1 || (cat build.log && exit 1)
- sudo make PATH=$PATH install_sw > build.log 2>&1 || (cat build.log && exit 1)
- cd ..
- sudo ln -s /usr/bin/make /usr/bin/gmake
script:
- util/mirror-tarballs > build.log 2>&1 || (cat build.log && exit 1)
- cd "openresty-$(./util/ver)"
- ./configure $ENABLE_HTTP3_OPTION --prefix=$OPENRESTY_PREFIX --with-cc-opt="-I$PCRE_INC -I$OPENSSL_INC" --with-ld-opt="-L$PCRE_LIB -L$OPENSSL_LIB -Wl,-rpath,$PCRE_LIB:$OPENSSL_LIB" --with-pcre-jit --with-http_ssl_module --with-debug -j$JOBS > build.log 2>&1 || (cat build.log && exit 1)
- make -j$JOBS > build.log 2>&1 || (cat build.log && exit 1)
- sudo make install > build.log 2>&1 || (cat build.log && exit 1)
- cd ..
- export PATH=$OPENRESTY_PREFIX/bin:$OPENRESTY_PREFIX/nginx/sbin:$PATH
- nginx -V
- ldd `which nginx`|grep -E 'luajit|ssl|pcre'
- prove -I. -r t/

View File

@ -1,10 +1,10 @@
.PHONY: all test try-luajit try-lua
.PHONY: all test try-luajit try-lua clean
all:
./util/mirror-tarballs
test:
prove -r t
prove -I../test-nginx/lib -r t
try-luajit: all
cd openresty-`./util/ver` && ./configure --with-luajit
@ -12,3 +12,5 @@ try-luajit: all
try-lua: all
cd openresty-`./util/ver` && ./configure && $(MAKE)
clean:
rm -rf openresty-*

View File

@ -10,6 +10,8 @@ Table of Contents
* [Description](#description)
* [For Users](#for-users)
* [For Bundle Maintainers](#for-bundle-maintainers)
* [Additional Features](#additional-features)
* [resolv.conf parsing](#resolvconf-parsing)
* [Mailing List](#mailing-list)
* [Report Bugs](#report-bugs)
* [Copyright & License](#copyright--license)
@ -61,6 +63,35 @@ sudo dnf install perl dos2unix mercurial
[Back to TOC](#table-of-contents)
Additional Features
===================
In additional to the standard nginx core features, this bundle also supports the following:
[Back to TOC](#table-of-contents)
resolv.conf parsing
--------------------
**syntax:** *resolver address ... [valid=time] [ipv6=on|off] [local=on|off|path]*
**default:** *-*
**context:** *http, stream, server, location*
Similar to the [`resolver` directive](https://nginx.org/en/docs/http/ngx_http_core_module.html#resolver)
in standard nginx core with additional support for parsing additional resolvers from the `resolv.conf` file
format.
When `local=on`, the standard path of `/etc/resolv.conf` will be used. You may also specify arbitrary
path to be used for parsing, for example: `local=/tmp/test.conf`.
When `local=off`, parsing will be disabled (this is the default).
This feature is not available on Windows platforms.
[Back to TOC](#table-of-contents)
Mailing List
============
@ -88,7 +119,7 @@ Copyright & License
The bundle itself is licensed under the 2-clause BSD license.
Copyright (c) 2011-2017, Yichun "agentzh" Zhang () <agentzh@gmail.com>, OpenResty Inc.
Copyright (c) 2011-2019, Yichun "agentzh" Zhang () <agentzh@gmail.com>, OpenResty Inc.
This module is licensed under the terms of the BSD license.

View File

@ -142,10 +142,10 @@ $ClientP._post_by_form = function (url, content, args) {
reqId: reqId
};
_post_forms[reqId] = obj;
var submited = false;
var submitted = false;
// var onloadCount = 0;
obj.onload = function() {
if (!submited) return;
if (!submitted) return;
// alert('contentLoad ' + (++onloadCount) + ' times\n' + this);
@ -237,7 +237,7 @@ $ClientP._post_by_form = function (url, content, args) {
_ipt = null;
_form.submit();
submited = true;
submitted = true;
};
$ClientP.post = function (url) {

View File

@ -196,6 +196,6 @@ Copyright E<copy> 2005-2017 Mike Pall E<middot> Contact
#Pod::HTML2Pod conversion notes:
#From file luajit.html
# 8082 bytes of input
#Sat May 13 16:35:32 2017 agentzh
#Mon May 14 13:19:16 2018 agentzh
# No a_name switch not specified, so will not try to render <a name='...'>
# No a_href switch not specified, so will not try to render <a href='...'>

View File

@ -82,6 +82,6 @@ Copyright E<copy> 2005-2017 Mike Pall E<middot> Contact
#Pod::HTML2Pod conversion notes:
#From file contact.html
# 2989 bytes of input
#Sat May 13 16:35:32 2017 agentzh
#Mon May 14 13:19:15 2018 agentzh
# No a_name switch not specified, so will not try to render <a name='...'>
# No a_href switch not specified, so will not try to render <a href='...'>

View File

@ -82,8 +82,8 @@ second argument is either C<0> or a stack index (similar to the other
Lua/C API functions).
The third argument specifies the mode, which is 'or'ed with a flag. The
flag can be C<LUAJIT_MODE_OFF> to turn a feature on, C<LUAJIT_MODE_ON>
to turn a feature off, or C<LUAJIT_MODE_FLUSH> to flush cached code.
flag can be C<LUAJIT_MODE_OFF> to turn a feature off, C<LUAJIT_MODE_ON>
to turn a feature on, or C<LUAJIT_MODE_FLUSH> to flush cached code.
The following modes are defined:
@ -170,7 +170,7 @@ Copyright E<copy> 2005-2017 Mike Pall E<middot> Contact
#Pod::HTML2Pod conversion notes:
#From file ext_c_api.html
# 6042 bytes of input
#Sat May 13 16:35:32 2017 agentzh
#Mon May 14 13:19:15 2018 agentzh
# No a_name switch not specified, so will not try to render <a name='...'>
# No a_href switch not specified, so will not try to render <a href='...'>
# Deleting phrasal "code" element (`tt_18) because it has super-phrasal elements (`br_3) as children.

View File

@ -280,6 +280,6 @@ Copyright E<copy> 2005-2017 Mike Pall E<middot> Contact
#Pod::HTML2Pod conversion notes:
#From file ext_ffi.html
# 10336 bytes of input
#Sat May 13 16:35:32 2017 agentzh
#Mon May 14 13:19:16 2018 agentzh
# No a_name switch not specified, so will not try to render <a name='...'>
# No a_href switch not specified, so will not try to render <a href='...'>

View File

@ -227,7 +227,7 @@ of an C<__index> table (if any) may be modified afterwards. The
associated metatable automatically applies to all uses of this type, no
matter how the objects are created or where they originate from. Note
that pre-defined operations on types have precedence (e.g. declared
field names cannot be overriden).
field names cannot be overridden).
All standard Lua metamethods are implemented. These are called
directly, without shortcuts and on any mix of types. For binary
@ -326,7 +326,7 @@ of the string is computed with C<strlen()>.
Otherwise C<ptr> is converted to a C<"void *"> and C<len> gives the
length of the data. The data may contain embedded zeros and need not be
byte-oriented (though this may cause endianess issues).
byte-oriented (though this may cause endianness issues).
This function is mainly useful to convert (temporary) C<"const char *">
pointers returned by C functions to Lua strings and store them or pass
@ -495,7 +495,7 @@ Copyright E<copy> 2005-2017 Mike Pall E<middot> Contact
#Pod::HTML2Pod conversion notes:
#From file ext_ffi_api.html
# 21471 bytes of input
#Sat May 13 16:35:32 2017 agentzh
#Mon May 14 13:19:16 2018 agentzh
# No a_name switch not specified, so will not try to render <a name='...'>
# No a_href switch not specified, so will not try to render <a href='...'>
# Deleting phrasal "code" element (`tt_157) because it has super-phrasal elements (`br_3, `br_4) as children.

View File

@ -847,7 +847,7 @@ through unions is explicitly detected and allowed.
=item * B<Constructor>: a ctype object can be called and used as a
constructor. This is equivalent to C<ffi.new(ct, ...)>, unless a
C<__new> metamethod is defined. The C<__new> metamethod is called with
the ctype object plus any other arguments passed to the contructor.
the ctype object plus any other arguments passed to the constructor.
Note that you have to use C<ffi.new> inside of it, since calling
C<ct(...)> would cause infinite recursion.
@ -1019,10 +1019,10 @@ not mix this up: e.g. passing C<"int"> as a string doesn't work in
place of a type, you'd need to use C<ffi.typeof("int")> instead.
The main use for parameterized types are libraries implementing
abstract data types (E<rchevron> example), similar to what can be
achieved with C++ template metaprogramming. Another use case are
derived types of anonymous structs, which avoids pollution of the
global struct namespace.
abstract data types (example), similar to what can be achieved with C++
template metaprogramming. Another use case are derived types of
anonymous structs, which avoids pollution of the global struct
namespace.
Please note that parameterized types are a nice tool and indispensable
for certain use cases. But you'll want to use them sparingly in regular
@ -1379,7 +1379,7 @@ Copyright E<copy> 2005-2017 Mike Pall E<middot> Contact
#Pod::HTML2Pod conversion notes:
#From file ext_ffi_semantics.html
# 53769 bytes of input
#Sat May 13 16:35:32 2017 agentzh
# 53732 bytes of input
#Mon May 14 13:19:16 2018 agentzh
# No a_name switch not specified, so will not try to render <a name='...'>
# No a_href switch not specified, so will not try to render <a href='...'>

View File

@ -616,7 +616,7 @@ Copyright E<copy> 2005-2017 Mike Pall E<middot> Contact
#Pod::HTML2Pod conversion notes:
#From file ext_ffi_tutorial.html
# 22557 bytes of input
#Sat May 13 16:35:32 2017 agentzh
#Mon May 14 13:19:16 2018 agentzh
# No a_name switch not specified, so will not try to render <a name='...'>
# No a_href switch not specified, so will not try to render <a href='...'>
# Deleting phrasal "code" element (`tt_100) because it has super-phrasal elements (`br_33, `br_34) as children.

View File

@ -175,7 +175,7 @@ Copyright E<copy> 2005-2017 Mike Pall E<middot> Contact
#Pod::HTML2Pod conversion notes:
#From file ext_jit.html
# 5903 bytes of input
#Sat May 13 16:35:32 2017 agentzh
#Mon May 14 13:19:16 2018 agentzh
# No a_name switch not specified, so will not try to render <a name='...'>
# No a_href switch not specified, so will not try to render <a href='...'>
# Deleting phrasal "code" element (`tt_6) because it has super-phrasal elements (`br_2, `br_3) as children.

View File

@ -353,6 +353,6 @@ Copyright E<copy> 2005-2017 Mike Pall E<middot> Contact
#Pod::HTML2Pod conversion notes:
#From file ext_profiler.html
# 13135 bytes of input
#Sat May 13 16:35:32 2017 agentzh
#Mon May 14 13:19:16 2018 agentzh
# No a_name switch not specified, so will not try to render <a name='...'>
# No a_href switch not specified, so will not try to render <a href='...'>

View File

@ -158,7 +158,7 @@ also the C<-b> command line option.
The generated bytecode is portable and can be loaded on any
architecture that LuaJIT supports, independent of word size or
endianess. However the bytecode compatibility versions must match.
endianness. However the bytecode compatibility versions must match.
Bytecode stays compatible for dot releases (x.y.0 E<rarr> x.y.1), but
may change with major or minor releases (2.0 E<rarr> 2.1) or between
any beta release. Foreign bytecode (e.g. from Lua 5.1) is incompatible
@ -472,6 +472,6 @@ Copyright E<copy> 2005-2017 Mike Pall E<middot> Contact
#Pod::HTML2Pod conversion notes:
#From file extensions.html
# 17733 bytes of input
#Sat May 13 16:35:32 2017 agentzh
#Mon May 14 13:19:16 2018 agentzh
# No a_name switch not specified, so will not try to render <a name='...'>
# No a_href switch not specified, so will not try to render <a href='...'>

View File

@ -219,6 +219,6 @@ Copyright E<copy> 2005-2017 Mike Pall E<middot> Contact
#Pod::HTML2Pod conversion notes:
#From file faq.html
# 7685 bytes of input
#Sat May 13 16:35:32 2017 agentzh
#Mon May 14 13:19:16 2018 agentzh
# No a_name switch not specified, so will not try to render <a name='...'>
# No a_href switch not specified, so will not try to render <a href='...'>

View File

@ -692,7 +692,7 @@ Copyright E<copy> 2005-2017 Mike Pall E<middot> Contact
#Pod::HTML2Pod conversion notes:
#From file install.html
# 25250 bytes of input
#Sat May 13 16:35:32 2017 agentzh
#Mon May 14 13:19:16 2018 agentzh
# No a_name switch not specified, so will not try to render <a name='...'>
# No a_href switch not specified, so will not try to render <a href='...'>
# Deleting phrasal "a" element (`a_34) because it has super-phrasal elements (`br_16) as children.

View File

@ -416,6 +416,6 @@ Copyright E<copy> 2005-2017 Mike Pall E<middot> Contact
#Pod::HTML2Pod conversion notes:
#From file running.html
# 13720 bytes of input
#Sat May 13 16:35:32 2017 agentzh
#Mon May 14 13:19:16 2018 agentzh
# No a_name switch not specified, so will not try to render <a name='...'>
# No a_href switch not specified, so will not try to render <a href='...'>

View File

@ -108,6 +108,6 @@ Copyright E<copy> 2005-2017 Mike Pall E<middot> Contact
#Pod::HTML2Pod conversion notes:
#From file status.html
# 3931 bytes of input
#Sat May 13 16:35:32 2017 agentzh
#Mon May 14 13:19:16 2018 agentzh
# No a_name switch not specified, so will not try to render <a name='...'>
# No a_href switch not specified, so will not try to render <a href='...'>

View File

@ -1,215 +1 @@
Name
====
README-win32 - README for the Windows 32-bit build of OpenResty
Description
===========
The official binary Win32 distribution of OpenResty can be downloaded from the following web page:
https://openresty.org/en/download.html
To start the NGINX server of the nginx server of the Win32 binary distribution of OpenResty:
```bash
start nginx
```
You can also specify the `-p PATH/` option to override the default server prefix, as in
```bash
cd /path/to/my/openresty/app/
start nginx -p $PWD
```
Then you can use the `tasklist` command to check the nginx processes running in the background:
```console
C:\> tasklist /fi "imagename eq nginx.exe"
Image Name PID Session Name Session# Mem Usage
========================= ======== ================ =========== ============
nginx.exe 4616 Console 1 7,412 K
nginx.exe 5836 Console 1 7,800 K
```
One of the two processes is the master process while the other is the worker.
If you are using the MSYS bash instead of the `cmd.exe` console, then you should replace the `/fi` option
with `-fi` in the command above instead.
You can quickly shut down the server like this:
```bash
nginx -s stop
```
or gracefully shut it down like this:
```bash
nginx -s quit
```
You can also forcibly kill the nginx processes via their PIDs with `taskkill`, as in
```console
C:\> taskkill /pid 5488 /F
```
where the PID (5488 in this example) can be found via the aforementioned `tasklist` command.
Again, you should use the form `-pid` and `-F` for the options if you are in an MSYS bash
session.
Similarly, you can use the `nginx -s reload` command to reload nginx configurations without
stopping the server. And you can use `nginx -s reopen` to instruct nginx to re-open
all the log files.
You can run the `resty` script like this:
```console
C:\> resty -e "ngx.say('Hello, OpenResty!')"
Hello, OpenResty!
```
The `resty` command-line utility requires a Perl interpreter installed in your
system and visible to your PATH environment. Any perl distributions should
work, including StrawberryPerl, ActivePerl, and MSYS perl (the former two are
recommended though).
Debugging
=========
Debug symbosl are enabled even in release builds. So that when things go very wrong,
one can still debug things with tools like MSYS GDB.
Inclusion of debug symbols make the binary files (`.exe` and `.dll` files) much larger,
but it generally will not load into memory during normal execution on a modern operating
system.
Caveats
=======
The Win32 port of the NGINX core supports the good old `select` IO multiplexing mechanism
only.
The I/O Completion Ports (IOCP) feature is *not* supported (yet). So do not use this build
for production environments with very high concurrency levels.
This Win32 build of OpenResty is mainly for developers who want to develop their applications
in native Windows environment (though they eventually push the finished work onto a Linux or *BSD box, most of the time).
TODO
====
* Add support for more than one NGINX worker processes.
* Add support for concurrent connections more than 1024.
* Switch to the Microsoft Visual Studio compiler toolchain for better performance and easier binary
package redistribution.
* Bundle StrawberryPerl to make command-line utilities like `resty` work out of the box (without
manually installing a Perl).
* Deliver an alternative Win32 binary package built with best debuggin capabilities (like enabling
NGINX debugging logs, disabling C compiler optimizations, and enabling all the assertions and checks).
* Deliver binary packages for 64-bit Windows (Win64).
Details About The Building Process
==================================
Usually you do not need to worry about how the Win32 binaries were built on the maintainers''
side. But if you do, please read on.
The Win32 build of OpenResty is currently built via the MinGW/MSYS toolchain, including
MinGW gcc 4.8.1, MSYS perl, MSYS bash, MSYS make, and etc. Basically, it is currently built via
the following cmmands:
```bash
PCRE=pcre-8.39
ZLIB=zlib-1.2.8
OPENSSL=openssl-1.0.2j
mkdir -p objs/lib || exit 1
cd objs/lib || exit 1
ls ../../..
tar -xf ../../../$OPENSSL.tar.gz || exit 1
tar -xf ../../../$ZLIB.tar.gz || exit 1
tar -xf ../../../$PCRE.tar.gz || exit 1
cd ../..
cd objs/lib/$OPENSSL || exit 1
patch -p1 < ../../../patches/openssl-1.0.2h-sess_set_get_cb_yield.patch || exit 1
cd ../../..
./configure \
--with-cc=gcc \
--with-ipv6 \
--prefix= \
--with-cc-opt='-DFD_SETSIZE=1024' \
--sbin-path=nginx.exe \
--with-pcre-jit \
--without-http_rds_json_module \
--without-http_rds_csv_module \
--without-lua_rds_parser \
--with-ipv6 \
--with-stream \
--with-stream_ssl_module \
--with-http_v2_module \
--without-mail_pop3_module \
--without-mail_imap_module \
--without-mail_smtp_module \
--with-http_stub_status_module \
--with-http_realip_module \
--with-http_addition_module \
--with-http_auth_request_module \
--with-http_secure_link_module \
--with-http_random_index_module \
--with-http_gzip_static_module \
--with-http_sub_module \
--with-http_dav_module \
--with-http_flv_module \
--with-http_mp4_module \
--with-http_gunzip_module \
--with-select_module \
--with-luajit-xcflags="-DLUAJIT_NUMMODE=2 -DLUAJIT_ENABLE_LUA52COMPAT" \
--with-pcre=objs/lib/$PCRE \
--with-zlib=objs/lib/$ZLIB \
--with-openssl=objs/lib/$OPENSSL \
-j5 || exit 1
make
make install
```
where the dependency library source tarballs for OpenSSL, Zlib, and PCRE are downloaded
from their official sites, respectively.
We automate these commands in a dedicated shell script named [build-win32.sh](https://github.com/openresty/openresty/blob/master/util/build-win32.sh).
Furthermore, we automate the packaging process of the resulting binaries and supporting files
with this [package-win32.sh](https://github.com/openresty/openresty/blob/master/util/package-win32.sh)
script.
Usually you can just download and use the binary distribution of OpenResty without
installing the build toolchain.
Author
======
Yichun "agentzh" Zhang <agentzh@gmail.com>, OpenResty Inc.
Copyright & License
===================
This module is licensed under the BSD license.
Copyright (C) 2015-2016, by Yichun "agentzh" Zhang () <agentzh@gmail.com>, OpenResty Inc.
All rights reserved.
Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
See [README-windows](./README-windows.md).

238
doc/README-windows.md Normal file
View File

@ -0,0 +1,238 @@
Name
====
README-windows - README for the official 32-bit and 64-bit Windows builds of OpenResty
Table of Contents
=================
* [Name](#name)
* [Description](#description)
* [Debugging](#debugging)
* [Caveats](#caveats)
* [TODO](#todo)
* [Details About The Building Process](#details-about-the-building-process)
* [Author](#author)
* [Copyright & License](#copyright--license)
Description
===========
The official binary Win32 and Win64 distributions of OpenResty can be downloaded from the following web page:
https://openresty.org/en/download.html
To start the NGINX server of the nginx server of the Win32 binary distribution of OpenResty:
```bash
start nginx
```
You can also specify the `-p PATH/` option to override the default server prefix, as in
```bash
cd /path/to/my/openresty/app/
start nginx -p $PWD
```
Then you can use the `tasklist` command to check the nginx processes running in the background:
```console
C:\> tasklist /fi "imagename eq nginx.exe"
Image Name PID Session Name Session# Mem Usage
========================= ======== ================ =========== ============
nginx.exe 4616 Console 1 7,412 K
nginx.exe 5836 Console 1 7,800 K
```
One of the two processes is the master process while the other is the worker.
If you are using the MSYS2 bash instead of the `cmd.exe` console, then you should replace the `/fi` option
with `-fi` in the command above instead.
You can quickly shut down the server like this:
```bash
nginx -s stop
```
or gracefully shut it down like this:
```bash
nginx -s quit
```
You can also forcibly kill the nginx processes via their PIDs with `taskkill`, as in
```console
C:\> taskkill /pid 5488 /F
```
where the PID (5488 in this example) can be found via the aforementioned `tasklist` command.
Again, you should use the form `-pid` and `-F` for the options if you are in an MSYS2 bash
session.
Similarly, you can use the `nginx -s reload` command to reload nginx configurations without
stopping the server. And you can use `nginx -s reopen` to instruct nginx to re-open
all the log files.
You can run the `resty` script like this:
```console
C:\> resty -e "ngx.say('Hello, OpenResty!')"
Hello, OpenResty!
```
The `resty` command-line utility requires a Perl interpreter installed in your
system and visible to your PATH environment. Any perl distributions should
work, including StrawberryPerl, ActivePerl, and MSYS2 perl.
recommended though).
Debugging
=========
Debug symbols are enabled even in release builds. So that when things go very wrong,
one can still debug things with tools like MSYS2 GDB.
Inclusion of debug symbols make the binary files (`.exe` and `.dll` files) much larger,
but it generally will not load into memory during normal execution on a modern operating
system.
Caveats
=======
The Win32/Win64 port of the NGINX core supports the good old `select` IO multiplexing mechanism
only.
The I/O Completion Ports (IOCP) feature is *not* supported (yet). So do not use this build
for production environments with very high concurrency levels.
This Win32/Win64 build of OpenResty is mainly for developers who want to develop their applications
in native Windows environment (though they eventually push the finished work onto a Linux or *BSD box, most of the time).
[Back to TOC](#table-of-contents)
TODO
====
* Add support for more than one NGINX worker processes.
* Add support for concurrent connections more than 1024.
* Switch to the Microsoft Visual Studio compiler toolchain for better performance and easier binary
package redistribution.
* Bundle StrawberryPerl to make command-line utilities like `resty` work out of the box (without
manually installing a Perl).
* Deliver an alternative Win32/Win64 binary package built with best debugging capabilities (like enabling
NGINX debugging logs, disabling C compiler optimizations, and enabling all the assertions and checks).
[Back to TOC](#table-of-contents)
Details About The Building Process
==================================
Usually you do not need to worry about how the Win32/Win64 binaries were built on the maintainers''
side. But if you do, please read on.
The Win32/Win64 build of OpenResty is currently built via the MSYS2/MinGW toolchain, including
MinGW gcc 7.2.3, MSYS2 perl 5.24.4, MSYS2 bash, MSYS2 make, and etc. Basically, it is currently built via
the following commands:
```bash
PCRE=pcre-8.42
ZLIB=zlib-1.2.11
OPENSSL=openssl-1.1.0h
mkdir -p objs/lib || exit 1
cd objs/lib || exit 1
ls ../../..
tar -xf ../../../$OPENSSL.tar.gz || exit 1
tar -xf ../../../$ZLIB.tar.gz || exit 1
tar -xf ../../../$PCRE.tar.gz || exit 1
cd ../..
cd objs/lib/$OPENSSL || exit 1
patch -p1 < ../../../patches/openssl-1.1.0d-sess_set_get_cb_yield.patch || exit 1
cd ../../..
./configure \
--with-cc=gcc \
--with-ipv6 \
--prefix= \
--with-cc-opt='-DFD_SETSIZE=1024' \
--sbin-path=nginx.exe \
--with-pcre-jit \
--without-http_rds_json_module \
--without-http_rds_csv_module \
--without-lua_rds_parser \
--with-ipv6 \
--with-stream \
--with-stream_ssl_module \
--with-stream_ssl_preread_module \
--with-http_v2_module \
--without-mail_pop3_module \
--without-mail_imap_module \
--without-mail_smtp_module \
--with-http_stub_status_module \
--with-http_realip_module \
--with-http_addition_module \
--with-http_auth_request_module \
--with-http_secure_link_module \
--with-http_random_index_module \
--with-http_gzip_static_module \
--with-http_sub_module \
--with-http_dav_module \
--with-http_flv_module \
--with-http_mp4_module \
--with-http_gunzip_module \
--with-select_module \
--with-luajit-xcflags="-DLUAJIT_NUMMODE=2 -DLUAJIT_ENABLE_LUA52COMPAT" \
--with-pcre=objs/lib/$PCRE \
--with-zlib=objs/lib/$ZLIB \
--with-openssl=objs/lib/$OPENSSL \
-j9 || exit 1
make -j9
make install
```
where the dependency library source tarballs for OpenSSL, Zlib, and PCRE are downloaded
from their official sites, respectively.
We automate these commands in a dedicated shell script named [build-win32.sh](https://github.com/openresty/openresty/blob/master/util/build-win32.sh).
Furthermore, we automate the packaging process of the resulting binaries and supporting files
with this [package-win32.sh](https://github.com/openresty/openresty/blob/master/util/package-win32.sh)
script.
Usually you can just download and use the binary distribution of OpenResty without
installing the build toolchain.
[Back to TOC](#table-of-contents)
Author
======
Yichun "agentzh" Zhang <agentzh@gmail.com>, OpenResty Inc.
[Back to TOC](#table-of-contents)
Copyright & License
===================
This module is licensed under the BSD license.
Copyright (C) 2015-2019, by Yichun "agentzh" Zhang () <agentzh@gmail.com>, OpenResty Inc.
All rights reserved.
Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
[Back to TOC](#table-of-contents)

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1,241 +0,0 @@
/* Exception handling and frame unwind runtime interface routines.
Copyright (C) 2001, 2003, 2004, 2006 Free Software Foundation, Inc.
This file is part of GCC.
GCC is free software; you can redistribute it and/or modify it
under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2, or (at your option)
any later version.
GCC is distributed in the hope that it will be useful, but WITHOUT
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
License for more details.
You should have received a copy of the GNU General Public License
along with GCC; see the file COPYING. If not, write to the Free
Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA
02110-1301, USA. */
/* As a special exception, if you include this header file into source
files compiled by GCC, this header file does not by itself cause
the resulting executable to be covered by the GNU General Public
License. This exception does not however invalidate any other
reasons why the executable file might be covered by the GNU General
Public License. */
/* This is derived from the C++ ABI for IA-64. Where we diverge
for cross-architecture compatibility are noted with "@@@". */
#ifndef _UNWIND_H
#define _UNWIND_H
#ifndef HIDE_EXPORTS
#pragma GCC visibility push(default)
#endif
#ifdef __cplusplus
extern "C" {
#endif
/* Level 1: Base ABI */
/* @@@ The IA-64 ABI uses uint64 throughout. Most places this is
inefficient for 32-bit and smaller machines. */
typedef unsigned _Unwind_Word __attribute__((__mode__(__word__)));
typedef signed _Unwind_Sword __attribute__((__mode__(__word__)));
#if defined(__ia64__) && defined(__hpux__)
typedef unsigned _Unwind_Ptr __attribute__((__mode__(__word__)));
#else
typedef unsigned _Unwind_Ptr __attribute__((__mode__(__pointer__)));
#endif
typedef unsigned _Unwind_Internal_Ptr __attribute__((__mode__(__pointer__)));
/* @@@ The IA-64 ABI uses a 64-bit word to identify the producer and
consumer of an exception. We'll go along with this for now even on
32-bit machines. We'll need to provide some other option for
16-bit machines and for machines with > 8 bits per byte. */
typedef unsigned _Unwind_Exception_Class __attribute__((__mode__(__DI__)));
/* The unwind interface uses reason codes in several contexts to
identify the reasons for failures or other actions. */
typedef enum
{
_URC_NO_REASON = 0,
_URC_FOREIGN_EXCEPTION_CAUGHT = 1,
_URC_FATAL_PHASE2_ERROR = 2,
_URC_FATAL_PHASE1_ERROR = 3,
_URC_NORMAL_STOP = 4,
_URC_END_OF_STACK = 5,
_URC_HANDLER_FOUND = 6,
_URC_INSTALL_CONTEXT = 7,
_URC_CONTINUE_UNWIND = 8
} _Unwind_Reason_Code;
/* The unwind interface uses a pointer to an exception header object
as its representation of an exception being thrown. In general, the
full representation of an exception object is language- and
implementation-specific, but it will be prefixed by a header
understood by the unwind interface. */
struct _Unwind_Exception;
typedef void (*_Unwind_Exception_Cleanup_Fn) (_Unwind_Reason_Code,
struct _Unwind_Exception *);
struct _Unwind_Exception
{
_Unwind_Exception_Class exception_class;
_Unwind_Exception_Cleanup_Fn exception_cleanup;
_Unwind_Word private_1;
_Unwind_Word private_2;
/* @@@ The IA-64 ABI says that this structure must be double-word aligned.
Taking that literally does not make much sense generically. Instead we
provide the maximum alignment required by any type for the machine. */
} __attribute__((__aligned__));
/* The ACTIONS argument to the personality routine is a bitwise OR of one
or more of the following constants. */
typedef int _Unwind_Action;
#define _UA_SEARCH_PHASE 1
#define _UA_CLEANUP_PHASE 2
#define _UA_HANDLER_FRAME 4
#define _UA_FORCE_UNWIND 8
#define _UA_END_OF_STACK 16
/* This is an opaque type used to refer to a system-specific data
structure used by the system unwinder. This context is created and
destroyed by the system, and passed to the personality routine
during unwinding. */
struct _Unwind_Context;
/* Raise an exception, passing along the given exception object. */
extern _Unwind_Reason_Code _Unwind_RaiseException (struct _Unwind_Exception *);
/* Raise an exception for forced unwinding. */
typedef _Unwind_Reason_Code (*_Unwind_Stop_Fn)
(int, _Unwind_Action, _Unwind_Exception_Class,
struct _Unwind_Exception *, struct _Unwind_Context *, void *);
extern _Unwind_Reason_Code _Unwind_ForcedUnwind (struct _Unwind_Exception *,
_Unwind_Stop_Fn,
void *);
/* Helper to invoke the exception_cleanup routine. */
extern void _Unwind_DeleteException (struct _Unwind_Exception *);
/* Resume propagation of an existing exception. This is used after
e.g. executing cleanup code, and not to implement rethrowing. */
extern void _Unwind_Resume (struct _Unwind_Exception *);
/* @@@ Resume propagation of an FORCE_UNWIND exception, or to rethrow
a normal exception that was handled. */
extern _Unwind_Reason_Code _Unwind_Resume_or_Rethrow (struct _Unwind_Exception *);
/* @@@ Use unwind data to perform a stack backtrace. The trace callback
is called for every stack frame in the call chain, but no cleanup
actions are performed. */
typedef _Unwind_Reason_Code (*_Unwind_Trace_Fn)
(struct _Unwind_Context *, void *);
extern _Unwind_Reason_Code _Unwind_Backtrace (_Unwind_Trace_Fn, void *);
/* These functions are used for communicating information about the unwind
context (i.e. the unwind descriptors and the user register state) between
the unwind library and the personality routine and landing pad. Only
selected registers maybe manipulated. */
extern _Unwind_Word _Unwind_GetGR (struct _Unwind_Context *, int);
extern void _Unwind_SetGR (struct _Unwind_Context *, int, _Unwind_Word);
extern _Unwind_Ptr _Unwind_GetIP (struct _Unwind_Context *);
extern _Unwind_Ptr _Unwind_GetIPInfo (struct _Unwind_Context *, int *);
extern void _Unwind_SetIP (struct _Unwind_Context *, _Unwind_Ptr);
/* @@@ Retrieve the CFA of the given context. */
extern _Unwind_Word _Unwind_GetCFA (struct _Unwind_Context *);
extern void *_Unwind_GetLanguageSpecificData (struct _Unwind_Context *);
extern _Unwind_Ptr _Unwind_GetRegionStart (struct _Unwind_Context *);
/* The personality routine is the function in the C++ (or other language)
runtime library which serves as an interface between the system unwind
library and language-specific exception handling semantics. It is
specific to the code fragment described by an unwind info block, and
it is always referenced via the pointer in the unwind info block, and
hence it has no ABI-specified name.
Note that this implies that two different C++ implementations can
use different names, and have different contents in the language
specific data area. Moreover, that the language specific data
area contains no version info because name of the function invoked
provides more effective versioning by detecting at link time the
lack of code to handle the different data format. */
typedef _Unwind_Reason_Code (*_Unwind_Personality_Fn)
(int, _Unwind_Action, _Unwind_Exception_Class,
struct _Unwind_Exception *, struct _Unwind_Context *);
/* @@@ The following alternate entry points are for setjmp/longjmp
based unwinding. */
struct SjLj_Function_Context;
extern void _Unwind_SjLj_Register (struct SjLj_Function_Context *);
extern void _Unwind_SjLj_Unregister (struct SjLj_Function_Context *);
extern _Unwind_Reason_Code _Unwind_SjLj_RaiseException
(struct _Unwind_Exception *);
extern _Unwind_Reason_Code _Unwind_SjLj_ForcedUnwind
(struct _Unwind_Exception *, _Unwind_Stop_Fn, void *);
extern void _Unwind_SjLj_Resume (struct _Unwind_Exception *);
extern _Unwind_Reason_Code _Unwind_SjLj_Resume_or_Rethrow (struct _Unwind_Exception *);
/* @@@ The following provide access to the base addresses for text
and data-relative addressing in the LDSA. In order to stay link
compatible with the standard ABI for IA-64, we inline these. */
#ifdef __ia64__
#include <stdlib.h>
static inline _Unwind_Ptr
_Unwind_GetDataRelBase (struct _Unwind_Context *_C)
{
/* The GP is stored in R1. */
return _Unwind_GetGR (_C, 1);
}
static inline _Unwind_Ptr
_Unwind_GetTextRelBase (struct _Unwind_Context *_C __attribute__ ((__unused__)))
{
abort ();
return 0;
}
/* @@@ Retrieve the Backing Store Pointer of the given context. */
extern _Unwind_Word _Unwind_GetBSP (struct _Unwind_Context *);
#else
extern _Unwind_Ptr _Unwind_GetDataRelBase (struct _Unwind_Context *);
extern _Unwind_Ptr _Unwind_GetTextRelBase (struct _Unwind_Context *);
#endif
/* @@@ Given an address, return the entry point of the function that
contains it. */
extern void * _Unwind_FindEnclosingFunction (void *pc);
#ifdef __cplusplus
}
#endif
#ifndef HIDE_EXPORTS
#pragma GCC visibility pop
#endif
#endif /* unwind.h */

View File

@ -1,8 +1,8 @@
diff --git a/src/http/ngx_http_upstream.c b/src/http/ngx_http_upstream.c
index 0f6b3ae..56d44fc 100644
index f8d5707d..6efe0047 100644
--- a/src/http/ngx_http_upstream.c
+++ b/src/http/ngx_http_upstream.c
@@ -1368,6 +1368,11 @@ ngx_http_upstream_connect(ngx_http_request_t *r, ngx_http_upstream_t *u)
@@ -1515,6 +1515,11 @@ ngx_http_upstream_connect(ngx_http_request_t *r, ngx_http_upstream_t *u)
return;
}
@ -15,13 +15,58 @@ index 0f6b3ae..56d44fc 100644
if (rc == NGX_BUSY) {
diff --git a/src/http/ngx_http_upstream.h b/src/http/ngx_http_upstream.h
index b288f28..9b60e12 100644
index 3e714e5b..dfbb25e0 100644
--- a/src/http/ngx_http_upstream.h
+++ b/src/http/ngx_http_upstream.h
@@ -418,5 +418,6 @@ extern ngx_module_t ngx_http_upstream_module;
extern ngx_conf_bitmask_t ngx_http_upstream_cache_method_mask[];
@@ -427,4 +427,9 @@ extern ngx_conf_bitmask_t ngx_http_upstream_cache_method_mask[];
extern ngx_conf_bitmask_t ngx_http_upstream_ignore_headers_masks[];
+#define HAVE_BALANCER_STATUS_CODE_PATCH
+#ifndef HAVE_BALANCER_STATUS_CODE_PATCH
+#define HAVE_BALANCER_STATUS_CODE_PATCH
+#endif
+
+
#endif /* _NGX_HTTP_UPSTREAM_H_INCLUDED_ */
diff --git a/src/stream/ngx_stream.h b/src/stream/ngx_stream.h
index 09d24593..d8b4b584 100644
--- a/src/stream/ngx_stream.h
+++ b/src/stream/ngx_stream.h
@@ -27,6 +27,7 @@ typedef struct ngx_stream_session_s ngx_stream_session_t;
#define NGX_STREAM_OK 200
+#define NGX_STREAM_SPECIAL_RESPONSE 300
#define NGX_STREAM_BAD_REQUEST 400
#define NGX_STREAM_FORBIDDEN 403
#define NGX_STREAM_INTERNAL_SERVER_ERROR 500
diff --git a/src/stream/ngx_stream_proxy_module.c b/src/stream/ngx_stream_proxy_module.c
index 818d7329..329dcdc6 100644
--- a/src/stream/ngx_stream_proxy_module.c
+++ b/src/stream/ngx_stream_proxy_module.c
@@ -691,6 +691,11 @@ ngx_stream_proxy_connect(ngx_stream_session_t *s)
return;
}
+ if (rc >= NGX_STREAM_SPECIAL_RESPONSE) {
+ ngx_stream_proxy_finalize(s, rc);
+ return;
+ }
+
u->state->peer = u->peer.name;
if (rc == NGX_BUSY) {
diff --git a/src/stream/ngx_stream_upstream.h b/src/stream/ngx_stream_upstream.h
index 73947f46..21bc0ad7 100644
--- a/src/stream/ngx_stream_upstream.h
+++ b/src/stream/ngx_stream_upstream.h
@@ -151,4 +151,9 @@ ngx_stream_upstream_srv_conf_t *ngx_stream_upstream_add(ngx_conf_t *cf,
extern ngx_module_t ngx_stream_upstream_module;
+#ifndef HAVE_BALANCER_STATUS_CODE_PATCH
+#define HAVE_BALANCER_STATUS_CODE_PATCH
+#endif
+
+
#endif /* _NGX_STREAM_UPSTREAM_H_INCLUDED_ */

View File

@ -0,0 +1,12 @@
diff --git a/src/os/unix/ngx_daemon.c b/src/os/unix/ngx_daemon.c
index ab672110..f259af31 100644
--- a/src/os/unix/ngx_daemon.c
+++ b/src/os/unix/ngx_daemon.c
@@ -23,6 +23,8 @@ ngx_daemon(ngx_log_t *log)
break;
default:
+ /* just to make it ASAN or Valgrind clean */
+ ngx_destroy_pool(ngx_cycle->pool);
exit(0);
}

View File

@ -0,0 +1,263 @@
diff --git a/src/core/ngx_resolver.c b/src/core/ngx_resolver.c
index cd55520c..dade1846 100644
--- a/src/core/ngx_resolver.c
+++ b/src/core/ngx_resolver.c
@@ -9,12 +9,26 @@
#include <ngx_core.h>
#include <ngx_event.h>
+#if !(NGX_WIN32)
+#include <resolv.h>
+#endif
+
#define NGX_RESOLVER_UDP_SIZE 4096
#define NGX_RESOLVER_TCP_RSIZE (2 + 65535)
#define NGX_RESOLVER_TCP_WSIZE 8192
+#if !(NGX_WIN32)
+/*
+ * note that 2KB should be more than enough for majority of the
+ * resolv.conf files out there. it also acts as a safety guard to prevent
+ * abuse.
+ */
+#define NGX_RESOLVER_FILE_BUF_SIZE 2048
+#define NGX_RESOLVER_FILE_NAME "/etc/resolv.conf"
+#endif
+
typedef struct {
u_char ident_hi;
@@ -131,6 +145,191 @@ static ngx_resolver_node_t *ngx_resolver_lookup_addr6(ngx_resolver_t *r,
#endif
+#if !(NGX_WIN32)
+static ngx_int_t
+ngx_resolver_read_resolv_conf(ngx_conf_t *cf, ngx_resolver_t *r, u_char *path,
+ size_t path_len)
+{
+ ngx_url_t u;
+ ngx_resolver_connection_t *rec;
+ ngx_fd_t fd;
+ ngx_file_t file;
+ u_char buf[NGX_RESOLVER_FILE_BUF_SIZE];
+ u_char ipv6_buf[NGX_INET6_ADDRSTRLEN];
+ ngx_uint_t address = 0, j, total = 0;
+ ssize_t n, i;
+ enum {
+ sw_nameserver,
+ sw_spaces,
+ sw_address,
+ sw_skip
+ } state;
+
+ file.name.data = path;
+ file.name.len = path_len;
+
+ if (ngx_conf_full_name(cf->cycle, &file.name, 1) != NGX_OK) {
+ return NGX_ERROR;
+ }
+
+ fd = ngx_open_file(file.name.data, NGX_FILE_RDONLY,
+ NGX_FILE_OPEN, 0);
+
+ if (fd == NGX_INVALID_FILE) {
+ ngx_conf_log_error(NGX_LOG_EMERG, cf, ngx_errno,
+ ngx_open_file_n " \"%s\" failed", file.name.data);
+
+ return NGX_ERROR;
+ }
+
+ ngx_memzero(&file, sizeof(ngx_file_t));
+
+ file.fd = fd;
+ file.log = cf->log;
+
+ state = sw_nameserver;
+
+ n = ngx_read_file(&file, buf, NGX_RESOLVER_FILE_BUF_SIZE, 0);
+
+ if (n == NGX_ERROR) {
+ ngx_conf_log_error(NGX_LOG_ALERT, cf, ngx_errno,
+ ngx_read_file_n " \"%s\" failed", file.name.data);
+ }
+
+ if (ngx_close_file(file.fd) == NGX_FILE_ERROR) {
+ ngx_conf_log_error(NGX_LOG_ALERT, cf, ngx_errno,
+ ngx_close_file_n " \"%s\" failed", file.name.data);
+ }
+
+ if (n == NGX_ERROR) {
+ return NGX_ERROR;
+ }
+
+ if (n == 0) {
+ return NGX_OK;
+ }
+
+ for (i = 0; i < n && total < MAXNS; /* void */) {
+ if (buf[i] == '#' || buf[i] == ';') {
+ state = sw_skip;
+ }
+
+ switch (state) {
+
+ case sw_nameserver:
+
+ if ((size_t) n - i >= sizeof("nameserver") - 1
+ && ngx_memcmp(buf + i, "nameserver",
+ sizeof("nameserver") - 1) == 0)
+ {
+ state = sw_spaces;
+ i += sizeof("nameserver") - 1;
+
+ continue;
+ }
+
+ break;
+
+ case sw_spaces:
+ if (buf[i] != '\t' && buf[i] != ' ') {
+ address = i;
+ state = sw_address;
+ }
+
+ break;
+
+ case sw_address:
+
+ if (buf[i] == CR || buf[i] == LF || i == n - 1) {
+ ngx_memzero(&u, sizeof(ngx_url_t));
+
+ u.url.data = buf + address;
+
+ if (i == n - 1 && buf[i] != CR && buf[i] != LF) {
+ u.url.len = n - address;
+
+ } else {
+ u.url.len = i - address;
+ }
+
+ u.default_port = 53;
+
+ /* IPv6? */
+ if (ngx_strlchr(u.url.data, u.url.data + u.url.len,
+ ':') != NULL)
+ {
+ if (u.url.len + 2 > sizeof(ipv6_buf)) {
+ ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
+ "IPv6 resolver address is too long:"
+ " \"%V\"", &u.url);
+
+ return NGX_ERROR;
+ }
+
+ ipv6_buf[0] = '[';
+ ngx_memcpy(ipv6_buf + 1, u.url.data, u.url.len);
+ ipv6_buf[u.url.len + 1] = ']';
+
+ u.url.data = ipv6_buf;
+ u.url.len = u.url.len + 2;
+ }
+
+ if (ngx_parse_url(cf->pool, &u) != NGX_OK) {
+ if (u.err) {
+ ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
+ "%s in resolver \"%V\"",
+ u.err, &u.url);
+ }
+
+ return NGX_ERROR;
+ }
+
+ rec = ngx_array_push_n(&r->connections, u.naddrs);
+ if (rec == NULL) {
+ return NGX_ERROR;
+ }
+
+ ngx_memzero(rec, u.naddrs * sizeof(ngx_resolver_connection_t));
+
+ for (j = 0; j < u.naddrs; j++) {
+ rec[j].sockaddr = u.addrs[j].sockaddr;
+ rec[j].socklen = u.addrs[j].socklen;
+ rec[j].server = u.addrs[j].name;
+ rec[j].resolver = r;
+ }
+
+ total++;
+
+#if (NGX_DEBUG)
+ /*
+ * logs with level below NGX_LOG_NOTICE will not be printed
+ * in this early phase
+ */
+ ngx_conf_log_error(NGX_LOG_NOTICE, cf, 0,
+ "parsed a resolver: \"%V\"", &u.url);
+#endif
+
+ state = sw_nameserver;
+ }
+
+ break;
+
+ case sw_skip:
+ if (buf[i] == CR || buf[i] == LF) {
+ state = sw_nameserver;
+ }
+
+ break;
+ }
+
+ i++;
+ }
+
+ return NGX_OK;
+}
+#endif
+
+
ngx_resolver_t *
ngx_resolver_create(ngx_conf_t *cf, ngx_str_t *names, ngx_uint_t n)
{
@@ -246,6 +445,39 @@ ngx_resolver_create(ngx_conf_t *cf, ngx_str_t *names, ngx_uint_t n)
}
#endif
+#if !(NGX_WIN32)
+ if (ngx_strncmp(names[i].data, "local=", 6) == 0) {
+
+ if (ngx_strcmp(&names[i].data[6], "on") == 0) {
+ if (ngx_resolver_read_resolv_conf(cf, r,
+ (u_char *)
+ NGX_RESOLVER_FILE_NAME,
+ sizeof(NGX_RESOLVER_FILE_NAME)
+ - 1)
+ != NGX_OK)
+ {
+ ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
+ "unable to parse local resolver");
+ return NULL;
+ }
+
+ } else if (ngx_strcmp(&names[i].data[6], "off") != 0) {
+ if (ngx_resolver_read_resolv_conf(cf, r,
+ &names[i].data[6],
+ names[i].len - 6)
+ != NGX_OK)
+ {
+ ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
+ "unable to parse local resolver");
+ return NULL;
+ }
+
+ }
+
+ continue;
+ }
+#endif
+
ngx_memzero(&u, sizeof(ngx_url_t));
u.url = names[i];

View File

@ -18,10 +18,11 @@ With this option disappearing in Nginx 1.11.5, this patch would allow such tools
to assume "ipv6=off" to be safe regardless of ipv6 support in the current
build.
diff -r a3dc657f4e95 -r 8bf038fe006f src/core/ngx_resolver.c
--- a/src/core/ngx_resolver.c Thu Dec 15 21:44:34 2016 +0300
+++ b/src/core/ngx_resolver.c Thu Dec 15 16:17:01 2016 -0800
@@ -224,14 +224,22 @@
diff --git a/src/core/ngx_resolver.c b/src/core/ngx_resolver.c
index dade1846..5a3f0aa4 100644
--- a/src/core/ngx_resolver.c
+++ b/src/core/ngx_resolver.c
@@ -426,14 +426,22 @@ ngx_resolver_create(ngx_conf_t *cf, ngx_str_t *names, ngx_uint_t n)
continue;
}
@ -45,11 +46,11 @@ diff -r a3dc657f4e95 -r 8bf038fe006f src/core/ngx_resolver.c
} else {
ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
@@ -241,7 +249,6 @@
@@ -443,7 +451,6 @@ ngx_resolver_create(ngx_conf_t *cf, ngx_str_t *names, ngx_uint_t n)
continue;
}
-#endif
ngx_memzero(&u, sizeof(ngx_url_t));
#if !(NGX_WIN32)
if (ngx_strncmp(names[i].data, "local=", 6) == 0) {

View File

@ -0,0 +1,185 @@
diff --git a/auto/unix b/auto/unix
index 10835f6c..b5b33bb3 100644
--- a/auto/unix
+++ b/auto/unix
@@ -990,3 +990,27 @@ ngx_feature_test='struct addrinfo *res;
if (getaddrinfo("localhost", NULL, NULL, &res) != 0) return 1;
freeaddrinfo(res)'
. auto/feature
+
+ngx_feature="SOCK_CLOEXEC support"
+ngx_feature_name="NGX_HAVE_SOCKET_CLOEXEC"
+ngx_feature_run=no
+ngx_feature_incs="#include <sys/types.h>
+ #include <sys/socket.h>"
+ngx_feature_path=
+ngx_feature_libs=
+ngx_feature_test="int fd;
+ fd = socket(AF_INET, SOCK_STREAM | SOCK_CLOEXEC, 0);"
+. auto/feature
+
+ngx_feature="FD_CLOEXEC support"
+ngx_feature_name="NGX_HAVE_FD_CLOEXEC"
+ngx_feature_run=no
+ngx_feature_incs="#include <sys/types.h>
+ #include <sys/socket.h>
+ #include <fcntl.h>"
+ngx_feature_path=
+ngx_feature_libs=
+ngx_feature_test="int fd;
+ fd = socket(AF_INET, SOCK_STREAM, 0);
+ fcntl(fd, F_SETFD, FD_CLOEXEC);"
+. auto/feature
diff --git a/src/core/ngx_resolver.c b/src/core/ngx_resolver.c
index cd55520c..438e0806 100644
--- a/src/core/ngx_resolver.c
+++ b/src/core/ngx_resolver.c
@@ -4466,8 +4466,14 @@ ngx_tcp_connect(ngx_resolver_connection_t *rec)
ngx_event_t *rev, *wev;
ngx_connection_t *c;
+#if (NGX_HAVE_SOCKET_CLOEXEC)
+ s = ngx_socket(rec->sockaddr->sa_family, SOCK_STREAM | SOCK_CLOEXEC, 0);
+
+#else
s = ngx_socket(rec->sockaddr->sa_family, SOCK_STREAM, 0);
+#endif
+
ngx_log_debug1(NGX_LOG_DEBUG_EVENT, &rec->log, 0, "TCP socket %d", s);
if (s == (ngx_socket_t) -1) {
@@ -4494,6 +4500,15 @@ ngx_tcp_connect(ngx_resolver_connection_t *rec)
goto failed;
}
+#if (NGX_HAVE_FD_CLOEXEC)
+ if (ngx_cloexec(s) == -1) {
+ ngx_log_error(NGX_LOG_ALERT, &rec->log, ngx_socket_errno,
+ ngx_cloexec_n " failed");
+
+ goto failed;
+ }
+#endif
+
rev = c->read;
wev = c->write;
diff --git a/src/event/ngx_event.h b/src/event/ngx_event.h
index 19fec68..8c2f01a 100644
--- a/src/event/ngx_event.h
+++ b/src/event/ngx_event.h
@@ -73,6 +73,9 @@ struct ngx_event_s {
/* to test on worker exit */
unsigned channel:1;
unsigned resolver:1;
+#if (HAVE_SOCKET_CLOEXEC_PATCH)
+ unsigned skip_socket_leak_check:1;
+#endif
unsigned cancelable:1;
diff --git a/src/event/ngx_event_accept.c b/src/event/ngx_event_accept.c
index 77563709..5827b9d0 100644
--- a/src/event/ngx_event_accept.c
+++ b/src/event/ngx_event_accept.c
@@ -62,7 +62,9 @@ ngx_event_accept(ngx_event_t *ev)
#if (NGX_HAVE_ACCEPT4)
if (use_accept4) {
- s = accept4(lc->fd, &sa.sockaddr, &socklen, SOCK_NONBLOCK);
+ s = accept4(lc->fd, &sa.sockaddr, &socklen,
+ SOCK_NONBLOCK | SOCK_CLOEXEC);
+
} else {
s = accept(lc->fd, &sa.sockaddr, &socklen);
}
@@ -202,6 +204,16 @@ ngx_event_accept(ngx_event_t *ev)
ngx_close_accepted_connection(c);
return;
}
+
+#if (NGX_HAVE_FD_CLOEXEC)
+ if (ngx_cloexec(s) == -1) {
+ ngx_log_error(NGX_LOG_ALERT, ev->log, ngx_socket_errno,
+ ngx_cloexec_n " failed");
+ ngx_close_accepted_connection(c);
+ return;
+ }
+#endif
+
}
}
diff --git a/src/event/ngx_event_connect.c b/src/event/ngx_event_connect.c
index c5bb8068..cf33b1d2 100644
--- a/src/event/ngx_event_connect.c
+++ b/src/event/ngx_event_connect.c
@@ -38,8 +38,15 @@ ngx_event_connect_peer(ngx_peer_connection_t *pc)
type = (pc->type ? pc->type : SOCK_STREAM);
+#if (NGX_HAVE_SOCKET_CLOEXEC)
+ s = ngx_socket(pc->sockaddr->sa_family, type | SOCK_CLOEXEC, 0);
+
+#else
s = ngx_socket(pc->sockaddr->sa_family, type, 0);
+#endif
+
+
ngx_log_debug2(NGX_LOG_DEBUG_EVENT, pc->log, 0, "%s socket %d",
(type == SOCK_STREAM) ? "stream" : "dgram", s);
@@ -80,6 +87,15 @@ ngx_event_connect_peer(ngx_peer_connection_t *pc)
goto failed;
}
+#if (NGX_HAVE_FD_CLOEXEC)
+ if (ngx_cloexec(s) == -1) {
+ ngx_log_error(NGX_LOG_ALERT, pc->log, ngx_socket_errno,
+ ngx_cloexec_n " failed");
+
+ goto failed;
+ }
+#endif
+
if (pc->local) {
#if (NGX_HAVE_TRANSPARENT_PROXY)
diff --git a/src/os/unix/ngx_process_cycle.c b/src/os/unix/ngx_process_cycle.c
index c4376a5..48e8fa8 100644
--- a/src/os/unix/ngx_process_cycle.c
+++ b/src/os/unix/ngx_process_cycle.c
@@ -1032,6 +1032,9 @@ ngx_worker_process_exit(ngx_cycle_t *cycle)
for (i = 0; i < cycle->connection_n; i++) {
if (c[i].fd != -1
&& c[i].read
+#if (HAVE_SOCKET_CLOEXEC_PATCH)
+ && !c[i].read->skip_socket_leak_check
+#endif
&& !c[i].read->accept
&& !c[i].read->channel
&& !c[i].read->resolver)
diff --git a/src/os/unix/ngx_socket.h b/src/os/unix/ngx_socket.h
index fcc51533..d1eebf47 100644
--- a/src/os/unix/ngx_socket.h
+++ b/src/os/unix/ngx_socket.h
@@ -38,6 +38,17 @@ int ngx_blocking(ngx_socket_t s);
#endif
+#if (NGX_HAVE_FD_CLOEXEC)
+
+#define ngx_cloexec(s) fcntl(s, F_SETFD, FD_CLOEXEC)
+#define ngx_cloexec_n "fcntl(FD_CLOEXEC)"
+
+/* at least FD_CLOEXEC is required to ensure connection fd is closed
+ * after execve */
+#define HAVE_SOCKET_CLOEXEC_PATCH 1
+
+#endif
+
int ngx_tcp_nopush(ngx_socket_t s);
int ngx_tcp_push(ngx_socket_t s);

View File

@ -0,0 +1,13 @@
diff --git a/src/stream/ngx_stream_ssl_preread_module.c b/src/stream/ngx_stream_ssl_preread_module.c
index e3d11fd9..3717b5fe 100644
--- a/src/stream/ngx_stream_ssl_preread_module.c
+++ b/src/stream/ngx_stream_ssl_preread_module.c
@@ -159,7 +159,7 @@ ngx_stream_ssl_preread_handler(ngx_stream_session_t *s)
rc = ngx_stream_ssl_preread_parse_record(ctx, p, p + len);
if (rc != NGX_AGAIN) {
- return rc;
+ return rc == NGX_OK ? NGX_DECLINED : rc;
}
p += len;

View File

@ -1,8 +1,8 @@
diff --git a/src/http/ngx_http_upstream.c b/src/http/ngx_http_upstream.c
index 0f6b3ae..56d44fc 100644
index f8d5707d..6efe0047 100644
--- a/src/http/ngx_http_upstream.c
+++ b/src/http/ngx_http_upstream.c
@@ -1368,6 +1368,11 @@ ngx_http_upstream_connect(ngx_http_request_t *r, ngx_http_upstream_t *u)
@@ -1515,6 +1515,11 @@ ngx_http_upstream_connect(ngx_http_request_t *r, ngx_http_upstream_t *u)
return;
}
@ -15,13 +15,58 @@ index 0f6b3ae..56d44fc 100644
if (rc == NGX_BUSY) {
diff --git a/src/http/ngx_http_upstream.h b/src/http/ngx_http_upstream.h
index b288f28..9b60e12 100644
index 3e714e5b..dfbb25e0 100644
--- a/src/http/ngx_http_upstream.h
+++ b/src/http/ngx_http_upstream.h
@@ -418,5 +418,6 @@ extern ngx_module_t ngx_http_upstream_module;
extern ngx_conf_bitmask_t ngx_http_upstream_cache_method_mask[];
@@ -427,4 +427,9 @@ extern ngx_conf_bitmask_t ngx_http_upstream_cache_method_mask[];
extern ngx_conf_bitmask_t ngx_http_upstream_ignore_headers_masks[];
+#define HAVE_BALANCER_STATUS_CODE_PATCH
+#ifndef HAVE_BALANCER_STATUS_CODE_PATCH
+#define HAVE_BALANCER_STATUS_CODE_PATCH
+#endif
+
+
#endif /* _NGX_HTTP_UPSTREAM_H_INCLUDED_ */
diff --git a/src/stream/ngx_stream.h b/src/stream/ngx_stream.h
index 09d24593..d8b4b584 100644
--- a/src/stream/ngx_stream.h
+++ b/src/stream/ngx_stream.h
@@ -27,6 +27,7 @@ typedef struct ngx_stream_session_s ngx_stream_session_t;
#define NGX_STREAM_OK 200
+#define NGX_STREAM_SPECIAL_RESPONSE 300
#define NGX_STREAM_BAD_REQUEST 400
#define NGX_STREAM_FORBIDDEN 403
#define NGX_STREAM_INTERNAL_SERVER_ERROR 500
diff --git a/src/stream/ngx_stream_proxy_module.c b/src/stream/ngx_stream_proxy_module.c
index 818d7329..329dcdc6 100644
--- a/src/stream/ngx_stream_proxy_module.c
+++ b/src/stream/ngx_stream_proxy_module.c
@@ -691,6 +691,11 @@ ngx_stream_proxy_connect(ngx_stream_session_t *s)
return;
}
+ if (rc >= NGX_STREAM_SPECIAL_RESPONSE) {
+ ngx_stream_proxy_finalize(s, rc);
+ return;
+ }
+
u->state->peer = u->peer.name;
if (rc == NGX_BUSY) {
diff --git a/src/stream/ngx_stream_upstream.h b/src/stream/ngx_stream_upstream.h
index 73947f46..21bc0ad7 100644
--- a/src/stream/ngx_stream_upstream.h
+++ b/src/stream/ngx_stream_upstream.h
@@ -151,4 +151,9 @@ ngx_stream_upstream_srv_conf_t *ngx_stream_upstream_add(ngx_conf_t *cf,
extern ngx_module_t ngx_stream_upstream_module;
+#ifndef HAVE_BALANCER_STATUS_CODE_PATCH
+#define HAVE_BALANCER_STATUS_CODE_PATCH
+#endif
+
+
#endif /* _NGX_STREAM_UPSTREAM_H_INCLUDED_ */

View File

@ -1,36 +0,0 @@
diff -urp nginx-1.13.8/auto/cc/clang nginx-1.13.8-patched/auto/cc/clang
--- nginx-1.13.8/auto/cc/clang 2014-03-04 03:39:24.000000000 -0800
+++ nginx-1.13.8-patched/auto/cc/clang 2014-03-13 20:54:26.241413360 -0700
@@ -89,7 +89,7 @@ CFLAGS="$CFLAGS -Wconditional-uninitiali
CFLAGS="$CFLAGS -Wno-unused-parameter"
# stop on warning
-CFLAGS="$CFLAGS -Werror"
+#CFLAGS="$CFLAGS -Werror"
# debug
CFLAGS="$CFLAGS -g"
diff -urp nginx-1.13.8/auto/cc/gcc nginx-1.13.8-patched/auto/cc/gcc
--- nginx-1.13.8/auto/cc/gcc 2014-03-04 03:39:24.000000000 -0800
+++ nginx-1.13.8-patched/auto/cc/gcc 2014-03-13 20:54:13.301355329 -0700
@@ -168,7 +168,7 @@ esac
# stop on warning
-CFLAGS="$CFLAGS -Werror"
+#CFLAGS="$CFLAGS -Werror"
# debug
CFLAGS="$CFLAGS -g"
diff -urp nginx-1.13.8/auto/cc/icc nginx-1.13.8-patched/auto/cc/icc
--- nginx-1.13.8/auto/cc/icc 2014-03-04 03:39:24.000000000 -0800
+++ nginx-1.13.8-patched/auto/cc/icc 2014-03-13 20:54:13.301355329 -0700
@@ -115,7 +115,7 @@ case "$NGX_ICC_VER" in
esac
# stop on warning
-CFLAGS="$CFLAGS -Werror"
+#CFLAGS="$CFLAGS -Werror"
# debug
CFLAGS="$CFLAGS -g"

View File

@ -0,0 +1,13 @@
diff --git a/src/stream/ngx_stream_ssl_preread_module.c b/src/stream/ngx_stream_ssl_preread_module.c
index e3d11fd9..3717b5fe 100644
--- a/src/stream/ngx_stream_ssl_preread_module.c
+++ b/src/stream/ngx_stream_ssl_preread_module.c
@@ -159,7 +159,7 @@ ngx_stream_ssl_preread_handler(ngx_stream_session_t *s)
rc = ngx_stream_ssl_preread_parse_record(ctx, p, p + len);
if (rc != NGX_AGAIN) {
- return rc;
+ return rc == NGX_OK ? NGX_DECLINED : rc;
}
p += len;

View File

@ -1,5 +1,5 @@
--- nginx-1.13.8/auto/cc/conf 2015-10-30 22:47:50.000000000 +0800
+++ nginx-1.13.8-patched/auto/cc/conf 2015-11-02 12:23:05.385156987 +0800
--- nginx-1.15.5/auto/cc/conf 2015-10-30 22:47:50.000000000 +0800
+++ nginx-1.15.5-patched/auto/cc/conf 2015-11-02 12:23:05.385156987 +0800
@@ -136,7 +136,7 @@ fi
CFLAGS="$CFLAGS $NGX_CC_OPT"
NGX_TEST_LD_OPT="$NGX_LD_OPT"

View File

@ -0,0 +1,72 @@
diff --git a/src/http/ngx_http_upstream.c b/src/http/ngx_http_upstream.c
index f8d5707d..6efe0047 100644
--- a/src/http/ngx_http_upstream.c
+++ b/src/http/ngx_http_upstream.c
@@ -1515,6 +1515,11 @@ ngx_http_upstream_connect(ngx_http_request_t *r, ngx_http_upstream_t *u)
return;
}
+ if (rc >= NGX_HTTP_SPECIAL_RESPONSE) {
+ ngx_http_upstream_finalize_request(r, u, rc);
+ return;
+ }
+
u->state->peer = u->peer.name;
if (rc == NGX_BUSY) {
diff --git a/src/http/ngx_http_upstream.h b/src/http/ngx_http_upstream.h
index 3e714e5b..dfbb25e0 100644
--- a/src/http/ngx_http_upstream.h
+++ b/src/http/ngx_http_upstream.h
@@ -427,4 +427,9 @@ extern ngx_conf_bitmask_t ngx_http_upstream_cache_method_mask[];
extern ngx_conf_bitmask_t ngx_http_upstream_ignore_headers_masks[];
+#ifndef HAVE_BALANCER_STATUS_CODE_PATCH
+#define HAVE_BALANCER_STATUS_CODE_PATCH
+#endif
+
+
#endif /* _NGX_HTTP_UPSTREAM_H_INCLUDED_ */
diff --git a/src/stream/ngx_stream.h b/src/stream/ngx_stream.h
index 09d24593..d8b4b584 100644
--- a/src/stream/ngx_stream.h
+++ b/src/stream/ngx_stream.h
@@ -27,6 +27,7 @@ typedef struct ngx_stream_session_s ngx_stream_session_t;
#define NGX_STREAM_OK 200
+#define NGX_STREAM_SPECIAL_RESPONSE 300
#define NGX_STREAM_BAD_REQUEST 400
#define NGX_STREAM_FORBIDDEN 403
#define NGX_STREAM_INTERNAL_SERVER_ERROR 500
diff --git a/src/stream/ngx_stream_proxy_module.c b/src/stream/ngx_stream_proxy_module.c
index 818d7329..329dcdc6 100644
--- a/src/stream/ngx_stream_proxy_module.c
+++ b/src/stream/ngx_stream_proxy_module.c
@@ -691,6 +691,11 @@ ngx_stream_proxy_connect(ngx_stream_session_t *s)
return;
}
+ if (rc >= NGX_STREAM_SPECIAL_RESPONSE) {
+ ngx_stream_proxy_finalize(s, rc);
+ return;
+ }
+
u->state->peer = u->peer.name;
if (rc == NGX_BUSY) {
diff --git a/src/stream/ngx_stream_upstream.h b/src/stream/ngx_stream_upstream.h
index 73947f46..21bc0ad7 100644
--- a/src/stream/ngx_stream_upstream.h
+++ b/src/stream/ngx_stream_upstream.h
@@ -151,4 +151,9 @@ ngx_stream_upstream_srv_conf_t *ngx_stream_upstream_add(ngx_conf_t *cf,
extern ngx_module_t ngx_stream_upstream_module;
+#ifndef HAVE_BALANCER_STATUS_CODE_PATCH
+#define HAVE_BALANCER_STATUS_CODE_PATCH
+#endif
+
+
#endif /* _NGX_STREAM_UPSTREAM_H_INCLUDED_ */

View File

@ -0,0 +1,12 @@
diff --git a/src/os/unix/ngx_daemon.c b/src/os/unix/ngx_daemon.c
index ab672110..f259af31 100644
--- a/src/os/unix/ngx_daemon.c
+++ b/src/os/unix/ngx_daemon.c
@@ -23,6 +23,8 @@ ngx_daemon(ngx_log_t *log)
break;
default:
+ /* just to make it ASAN or Valgrind clean */
+ ngx_destroy_pool(ngx_cycle->pool);
exit(0);
}

View File

@ -1,5 +1,5 @@
--- nginx-1.13.8/src/http/ngx_http_request.c 2013-05-06 03:26:50.000000000 -0700
+++ nginx-1.13.8-patched/src/http/ngx_http_request.c 2013-06-11 12:59:48.008321688 -0700
--- nginx-1.15.5/src/http/ngx_http_request.c 2013-05-06 03:26:50.000000000 -0700
+++ nginx-1.15.5-patched/src/http/ngx_http_request.c 2013-06-11 12:59:48.008321688 -0700
@@ -1951,7 +1951,7 @@
ngx_int_t rc;
ngx_http_connection_t *hc;

View File

@ -1,6 +1,6 @@
diff -rup nginx-1.13.8/src/core/nginx.c nginx-1.13.8-patched/src/core/nginx.c
--- nginx-1.13.8/src/core/nginx.c 2017-12-17 00:00:38.136470108 -0800
+++ nginx-1.13.8-patched/src/core/nginx.c 2017-12-16 23:59:51.680958322 -0800
diff -rup nginx-1.15.5/src/core/nginx.c nginx-1.15.5-patched/src/core/nginx.c
--- nginx-1.15.5/src/core/nginx.c 2017-12-17 00:00:38.136470108 -0800
+++ nginx-1.15.5-patched/src/core/nginx.c 2017-12-16 23:59:51.680958322 -0800
@@ -186,6 +186,7 @@ static u_char *ngx_prefix;
static u_char *ngx_conf_file;
static u_char *ngx_conf_params;
@ -18,9 +18,9 @@ diff -rup nginx-1.13.8/src/core/nginx.c nginx-1.13.8-patched/src/core/nginx.c
if (ngx_save_argv(&init_cycle, argc, argv) != NGX_OK) {
return 1;
}
diff -rup nginx-1.13.8/src/core/ngx_core.h nginx-1.13.8-patched/src/core/ngx_core.h
--- nginx-1.13.8/src/core/ngx_core.h 2017-10-10 08:22:51.000000000 -0700
+++ nginx-1.13.8-patched/src/core/ngx_core.h 2017-12-16 23:59:51.679958370 -0800
diff -rup nginx-1.15.5/src/core/ngx_core.h nginx-1.15.5-patched/src/core/ngx_core.h
--- nginx-1.15.5/src/core/ngx_core.h 2017-10-10 08:22:51.000000000 -0700
+++ nginx-1.15.5-patched/src/core/ngx_core.h 2017-12-16 23:59:51.679958370 -0800
@@ -108,4 +108,6 @@ void ngx_cpuinfo(void);
#define NGX_DISABLE_SYMLINKS_NOTOWNER 2
#endif
@ -28,9 +28,9 @@ diff -rup nginx-1.13.8/src/core/ngx_core.h nginx-1.13.8-patched/src/core/ngx_cor
+extern ngx_pool_t *saved_init_cycle_pool;
+
#endif /* _NGX_CORE_H_INCLUDED_ */
diff -rup nginx-1.13.8/src/core/ngx_cycle.c nginx-1.13.8-patched/src/core/ngx_cycle.c
--- nginx-1.13.8/src/core/ngx_cycle.c 2017-10-10 08:22:51.000000000 -0700
+++ nginx-1.13.8-patched/src/core/ngx_cycle.c 2017-12-16 23:59:51.678958419 -0800
diff -rup nginx-1.15.5/src/core/ngx_cycle.c nginx-1.15.5-patched/src/core/ngx_cycle.c
--- nginx-1.15.5/src/core/ngx_cycle.c 2017-10-10 08:22:51.000000000 -0700
+++ nginx-1.15.5-patched/src/core/ngx_cycle.c 2017-12-16 23:59:51.678958419 -0800
@@ -748,6 +748,10 @@ old_shm_zone_done:
if (ngx_process == NGX_PROCESS_MASTER || ngx_is_init_cycle(old_cycle)) {
@ -42,9 +42,9 @@ diff -rup nginx-1.13.8/src/core/ngx_cycle.c nginx-1.13.8-patched/src/core/ngx_cy
ngx_destroy_pool(old_cycle->pool);
cycle->old_cycle = NULL;
diff -rup nginx-1.13.8/src/os/unix/ngx_process_cycle.c nginx-1.13.8-patched/src/os/unix/ngx_process_cycle.c
--- nginx-1.13.8/src/os/unix/ngx_process_cycle.c 2017-12-17 00:00:38.142469762 -0800
+++ nginx-1.13.8-patched/src/os/unix/ngx_process_cycle.c 2017-12-16 23:59:51.691957791 -0800
diff -rup nginx-1.15.5/src/os/unix/ngx_process_cycle.c nginx-1.15.5-patched/src/os/unix/ngx_process_cycle.c
--- nginx-1.15.5/src/os/unix/ngx_process_cycle.c 2017-12-17 00:00:38.142469762 -0800
+++ nginx-1.15.5-patched/src/os/unix/ngx_process_cycle.c 2017-12-16 23:59:51.691957791 -0800
@@ -783,6 +783,11 @@ ngx_master_process_exit(ngx_cycle_t *cyc
ngx_exit_cycle.files_n = ngx_cycle->files_n;
ngx_cycle = &ngx_exit_cycle;

View File

@ -1,5 +1,5 @@
--- nginx-1.13.8/src/core/ngx_log.h 2013-10-08 05:07:14.000000000 -0700
+++ nginx-1.13.8-patched/src/core/ngx_log.h 2013-12-05 20:35:35.996236720 -0800
--- nginx-1.15.5/src/core/ngx_log.h 2013-10-08 05:07:14.000000000 -0700
+++ nginx-1.15.5-patched/src/core/ngx_log.h 2013-12-05 20:35:35.996236720 -0800
@@ -64,7 +64,9 @@ struct ngx_log_s {
};

View File

@ -0,0 +1,36 @@
diff -urp nginx-1.15.5/auto/cc/clang nginx-1.15.5-patched/auto/cc/clang
--- nginx-1.15.5/auto/cc/clang 2014-03-04 03:39:24.000000000 -0800
+++ nginx-1.15.5-patched/auto/cc/clang 2014-03-13 20:54:26.241413360 -0700
@@ -89,7 +89,7 @@ CFLAGS="$CFLAGS -Wconditional-uninitiali
CFLAGS="$CFLAGS -Wno-unused-parameter"
# stop on warning
-CFLAGS="$CFLAGS -Werror"
+#CFLAGS="$CFLAGS -Werror"
# debug
CFLAGS="$CFLAGS -g"
diff -urp nginx-1.15.5/auto/cc/gcc nginx-1.15.5-patched/auto/cc/gcc
--- nginx-1.15.5/auto/cc/gcc 2014-03-04 03:39:24.000000000 -0800
+++ nginx-1.15.5-patched/auto/cc/gcc 2014-03-13 20:54:13.301355329 -0700
@@ -168,7 +168,7 @@ esac
# stop on warning
-CFLAGS="$CFLAGS -Werror"
+#CFLAGS="$CFLAGS -Werror"
# debug
CFLAGS="$CFLAGS -g"
diff -urp nginx-1.15.5/auto/cc/icc nginx-1.15.5-patched/auto/cc/icc
--- nginx-1.15.5/auto/cc/icc 2014-03-04 03:39:24.000000000 -0800
+++ nginx-1.15.5-patched/auto/cc/icc 2014-03-13 20:54:13.301355329 -0700
@@ -115,7 +115,7 @@ case "$NGX_ICC_VER" in
esac
# stop on warning
-CFLAGS="$CFLAGS -Werror"
+#CFLAGS="$CFLAGS -Werror"
# debug
CFLAGS="$CFLAGS -g"

View File

@ -1,6 +1,6 @@
diff -upr nginx-1.13.8/src/http/ngx_http_core_module.c nginx-1.13.8-patched/src/http/ngx_http_core_module.c
--- nginx-1.13.8/src/http/ngx_http_core_module.c 2017-08-31 18:14:41.000000000 -0700
+++ nginx-1.13.8-patched/src/http/ngx_http_core_module.c 2017-08-31 18:21:31.638098196 -0700
diff -upr nginx-1.15.5/src/http/ngx_http_core_module.c nginx-1.15.5-patched/src/http/ngx_http_core_module.c
--- nginx-1.15.5/src/http/ngx_http_core_module.c 2017-08-31 18:14:41.000000000 -0700
+++ nginx-1.15.5-patched/src/http/ngx_http_core_module.c 2017-08-31 18:21:31.638098196 -0700
@@ -61,6 +61,8 @@ static char *ngx_http_core_directio(ngx_
void *conf);
static char *ngx_http_core_error_page(ngx_conf_t *cf, ngx_command_t *cmd,

View File

@ -1,18 +1,18 @@
diff --minimal '--exclude=*.swp' '--exclude=*~' -up nginx-1.13.8/src/core/nginx.h nginx-1.13.8-patched/src/core/nginx.h
--- nginx-1.13.8/src/core/nginx.h 2016-04-19 09:02:38.000000000 -0700
+++ nginx-1.13.8-patched/src/core/nginx.h 2016-04-21 16:25:07.452944624 -0700
diff --minimal '--exclude=*.swp' '--exclude=*~' -up nginx-1.15.5/src/core/nginx.h nginx-1.15.5-patched/src/core/nginx.h
--- nginx-1.15.5/src/core/nginx.h 2016-04-19 09:02:38.000000000 -0700
+++ nginx-1.15.5-patched/src/core/nginx.h 2016-04-21 16:25:07.452944624 -0700
@@ -10,7 +10,7 @@
#define nginx_version 1013008
#define NGINX_VERSION "1.13.8"
#define nginx_version 1015005
#define NGINX_VERSION "1.15.5"
-#define NGINX_VER "openresty/" NGINX_VERSION ".unknown"
+#define NGINX_VER "openresty/" NGINX_VERSION ".unknown (no pool)"
#ifdef NGX_BUILD
diff --minimal '--exclude=*.swp' '--exclude=*~' -up nginx-1.13.8/src/core/ngx_array.c nginx-1.13.8-patched/src/core/ngx_array.c
--- nginx-1.13.8/src/core/ngx_array.c 2016-04-19 09:02:38.000000000 -0700
+++ nginx-1.13.8-patched/src/core/ngx_array.c 2016-04-21 16:25:07.453947190 -0700
diff --minimal '--exclude=*.swp' '--exclude=*~' -up nginx-1.15.5/src/core/ngx_array.c nginx-1.15.5-patched/src/core/ngx_array.c
--- nginx-1.15.5/src/core/ngx_array.c 2016-04-19 09:02:38.000000000 -0700
+++ nginx-1.15.5-patched/src/core/ngx_array.c 2016-04-21 16:25:07.453947190 -0700
@@ -30,26 +30,30 @@ ngx_array_create(ngx_pool_t *p, ngx_uint
void
ngx_array_destroy(ngx_array_t *a)
@ -160,9 +160,9 @@ diff --minimal '--exclude=*.swp' '--exclude=*~' -up nginx-1.13.8/src/core/ngx_ar
}
elt = (u_char *) a->elts + a->size * a->nelts;
diff --minimal '--exclude=*.swp' '--exclude=*~' -up nginx-1.13.8/src/core/ngx_array.h nginx-1.13.8-patched/src/core/ngx_array.h
--- nginx-1.13.8/src/core/ngx_array.h 2016-04-19 09:02:38.000000000 -0700
+++ nginx-1.13.8-patched/src/core/ngx_array.h 2016-04-21 16:25:07.453947190 -0700
diff --minimal '--exclude=*.swp' '--exclude=*~' -up nginx-1.15.5/src/core/ngx_array.h nginx-1.15.5-patched/src/core/ngx_array.h
--- nginx-1.15.5/src/core/ngx_array.h 2016-04-19 09:02:38.000000000 -0700
+++ nginx-1.15.5-patched/src/core/ngx_array.h 2016-04-21 16:25:07.453947190 -0700
@@ -13,12 +13,23 @@
#include <ngx_core.h>
@ -195,9 +195,9 @@ diff --minimal '--exclude=*.swp' '--exclude=*~' -up nginx-1.13.8/src/core/ngx_ar
array->elts = ngx_palloc(pool, n * size);
if (array->elts == NULL) {
diff --minimal '--exclude=*.swp' '--exclude=*~' -up nginx-1.13.8/src/core/ngx_palloc.c nginx-1.13.8-patched/src/core/ngx_palloc.c
--- nginx-1.13.8/src/core/ngx_palloc.c 2016-04-19 09:02:38.000000000 -0700
+++ nginx-1.13.8-patched/src/core/ngx_palloc.c 2016-04-21 16:25:45.912282685 -0700
diff --minimal '--exclude=*.swp' '--exclude=*~' -up nginx-1.15.5/src/core/ngx_palloc.c nginx-1.15.5-patched/src/core/ngx_palloc.c
--- nginx-1.15.5/src/core/ngx_palloc.c 2016-04-19 09:02:38.000000000 -0700
+++ nginx-1.15.5-patched/src/core/ngx_palloc.c 2016-04-21 16:25:45.912282685 -0700
@@ -9,34 +9,26 @@
#include <ngx_core.h>
@ -546,9 +546,9 @@ diff --minimal '--exclude=*.swp' '--exclude=*~' -up nginx-1.13.8/src/core/ngx_pa
return NGX_OK;
}
diff --minimal '--exclude=*.swp' '--exclude=*~' -up nginx-1.13.8/src/core/ngx_palloc.h nginx-1.13.8-patched/src/core/ngx_palloc.h
--- nginx-1.13.8/src/core/ngx_palloc.h 2016-04-19 09:02:38.000000000 -0700
+++ nginx-1.13.8-patched/src/core/ngx_palloc.h 2016-04-21 16:25:07.454949755 -0700
diff --minimal '--exclude=*.swp' '--exclude=*~' -up nginx-1.15.5/src/core/ngx_palloc.h nginx-1.15.5-patched/src/core/ngx_palloc.h
--- nginx-1.15.5/src/core/ngx_palloc.h 2016-04-19 09:02:38.000000000 -0700
+++ nginx-1.15.5-patched/src/core/ngx_palloc.h 2016-04-21 16:25:07.454949755 -0700
@@ -38,28 +38,21 @@ struct ngx_pool_cleanup_s {
};

View File

@ -1,5 +1,5 @@
--- nginx-1.13.8/src/http/modules/ngx_http_proxy_module.c 2017-07-16 14:02:51.000000000 +0800
+++ nginx-1.13.8-patched/src/http/modules/ngx_http_proxy_module.c 2017-07-16 14:02:51.000000000 +0800
--- nginx-1.15.5/src/http/modules/ngx_http_proxy_module.c 2017-07-16 14:02:51.000000000 +0800
+++ nginx-1.15.5-patched/src/http/modules/ngx_http_proxy_module.c 2017-07-16 14:02:51.000000000 +0800
@@ -793,13 +793,13 @@ static ngx_keyval_t ngx_http_proxy_cach
static ngx_http_variable_t ngx_http_proxy_vars[] = {

View File

@ -0,0 +1,263 @@
diff --git a/src/core/ngx_resolver.c b/src/core/ngx_resolver.c
index cd55520c..dade1846 100644
--- a/src/core/ngx_resolver.c
+++ b/src/core/ngx_resolver.c
@@ -9,12 +9,26 @@
#include <ngx_core.h>
#include <ngx_event.h>
+#if !(NGX_WIN32)
+#include <resolv.h>
+#endif
+
#define NGX_RESOLVER_UDP_SIZE 4096
#define NGX_RESOLVER_TCP_RSIZE (2 + 65535)
#define NGX_RESOLVER_TCP_WSIZE 8192
+#if !(NGX_WIN32)
+/*
+ * note that 2KB should be more than enough for majority of the
+ * resolv.conf files out there. it also acts as a safety guard to prevent
+ * abuse.
+ */
+#define NGX_RESOLVER_FILE_BUF_SIZE 2048
+#define NGX_RESOLVER_FILE_NAME "/etc/resolv.conf"
+#endif
+
typedef struct {
u_char ident_hi;
@@ -131,6 +145,191 @@ static ngx_resolver_node_t *ngx_resolver_lookup_addr6(ngx_resolver_t *r,
#endif
+#if !(NGX_WIN32)
+static ngx_int_t
+ngx_resolver_read_resolv_conf(ngx_conf_t *cf, ngx_resolver_t *r, u_char *path,
+ size_t path_len)
+{
+ ngx_url_t u;
+ ngx_resolver_connection_t *rec;
+ ngx_fd_t fd;
+ ngx_file_t file;
+ u_char buf[NGX_RESOLVER_FILE_BUF_SIZE];
+ u_char ipv6_buf[NGX_INET6_ADDRSTRLEN];
+ ngx_uint_t address = 0, j, total = 0;
+ ssize_t n, i;
+ enum {
+ sw_nameserver,
+ sw_spaces,
+ sw_address,
+ sw_skip
+ } state;
+
+ file.name.data = path;
+ file.name.len = path_len;
+
+ if (ngx_conf_full_name(cf->cycle, &file.name, 1) != NGX_OK) {
+ return NGX_ERROR;
+ }
+
+ fd = ngx_open_file(file.name.data, NGX_FILE_RDONLY,
+ NGX_FILE_OPEN, 0);
+
+ if (fd == NGX_INVALID_FILE) {
+ ngx_conf_log_error(NGX_LOG_EMERG, cf, ngx_errno,
+ ngx_open_file_n " \"%s\" failed", file.name.data);
+
+ return NGX_ERROR;
+ }
+
+ ngx_memzero(&file, sizeof(ngx_file_t));
+
+ file.fd = fd;
+ file.log = cf->log;
+
+ state = sw_nameserver;
+
+ n = ngx_read_file(&file, buf, NGX_RESOLVER_FILE_BUF_SIZE, 0);
+
+ if (n == NGX_ERROR) {
+ ngx_conf_log_error(NGX_LOG_ALERT, cf, ngx_errno,
+ ngx_read_file_n " \"%s\" failed", file.name.data);
+ }
+
+ if (ngx_close_file(file.fd) == NGX_FILE_ERROR) {
+ ngx_conf_log_error(NGX_LOG_ALERT, cf, ngx_errno,
+ ngx_close_file_n " \"%s\" failed", file.name.data);
+ }
+
+ if (n == NGX_ERROR) {
+ return NGX_ERROR;
+ }
+
+ if (n == 0) {
+ return NGX_OK;
+ }
+
+ for (i = 0; i < n && total < MAXNS; /* void */) {
+ if (buf[i] == '#' || buf[i] == ';') {
+ state = sw_skip;
+ }
+
+ switch (state) {
+
+ case sw_nameserver:
+
+ if ((size_t) n - i >= sizeof("nameserver") - 1
+ && ngx_memcmp(buf + i, "nameserver",
+ sizeof("nameserver") - 1) == 0)
+ {
+ state = sw_spaces;
+ i += sizeof("nameserver") - 1;
+
+ continue;
+ }
+
+ break;
+
+ case sw_spaces:
+ if (buf[i] != '\t' && buf[i] != ' ') {
+ address = i;
+ state = sw_address;
+ }
+
+ break;
+
+ case sw_address:
+
+ if (buf[i] == CR || buf[i] == LF || i == n - 1) {
+ ngx_memzero(&u, sizeof(ngx_url_t));
+
+ u.url.data = buf + address;
+
+ if (i == n - 1 && buf[i] != CR && buf[i] != LF) {
+ u.url.len = n - address;
+
+ } else {
+ u.url.len = i - address;
+ }
+
+ u.default_port = 53;
+
+ /* IPv6? */
+ if (ngx_strlchr(u.url.data, u.url.data + u.url.len,
+ ':') != NULL)
+ {
+ if (u.url.len + 2 > sizeof(ipv6_buf)) {
+ ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
+ "IPv6 resolver address is too long:"
+ " \"%V\"", &u.url);
+
+ return NGX_ERROR;
+ }
+
+ ipv6_buf[0] = '[';
+ ngx_memcpy(ipv6_buf + 1, u.url.data, u.url.len);
+ ipv6_buf[u.url.len + 1] = ']';
+
+ u.url.data = ipv6_buf;
+ u.url.len = u.url.len + 2;
+ }
+
+ if (ngx_parse_url(cf->pool, &u) != NGX_OK) {
+ if (u.err) {
+ ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
+ "%s in resolver \"%V\"",
+ u.err, &u.url);
+ }
+
+ return NGX_ERROR;
+ }
+
+ rec = ngx_array_push_n(&r->connections, u.naddrs);
+ if (rec == NULL) {
+ return NGX_ERROR;
+ }
+
+ ngx_memzero(rec, u.naddrs * sizeof(ngx_resolver_connection_t));
+
+ for (j = 0; j < u.naddrs; j++) {
+ rec[j].sockaddr = u.addrs[j].sockaddr;
+ rec[j].socklen = u.addrs[j].socklen;
+ rec[j].server = u.addrs[j].name;
+ rec[j].resolver = r;
+ }
+
+ total++;
+
+#if (NGX_DEBUG)
+ /*
+ * logs with level below NGX_LOG_NOTICE will not be printed
+ * in this early phase
+ */
+ ngx_conf_log_error(NGX_LOG_NOTICE, cf, 0,
+ "parsed a resolver: \"%V\"", &u.url);
+#endif
+
+ state = sw_nameserver;
+ }
+
+ break;
+
+ case sw_skip:
+ if (buf[i] == CR || buf[i] == LF) {
+ state = sw_nameserver;
+ }
+
+ break;
+ }
+
+ i++;
+ }
+
+ return NGX_OK;
+}
+#endif
+
+
ngx_resolver_t *
ngx_resolver_create(ngx_conf_t *cf, ngx_str_t *names, ngx_uint_t n)
{
@@ -246,6 +445,39 @@ ngx_resolver_create(ngx_conf_t *cf, ngx_str_t *names, ngx_uint_t n)
}
#endif
+#if !(NGX_WIN32)
+ if (ngx_strncmp(names[i].data, "local=", 6) == 0) {
+
+ if (ngx_strcmp(&names[i].data[6], "on") == 0) {
+ if (ngx_resolver_read_resolv_conf(cf, r,
+ (u_char *)
+ NGX_RESOLVER_FILE_NAME,
+ sizeof(NGX_RESOLVER_FILE_NAME)
+ - 1)
+ != NGX_OK)
+ {
+ ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
+ "unable to parse local resolver");
+ return NULL;
+ }
+
+ } else if (ngx_strcmp(&names[i].data[6], "off") != 0) {
+ if (ngx_resolver_read_resolv_conf(cf, r,
+ &names[i].data[6],
+ names[i].len - 6)
+ != NGX_OK)
+ {
+ ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
+ "unable to parse local resolver");
+ return NULL;
+ }
+
+ }
+
+ continue;
+ }
+#endif
+
ngx_memzero(&u, sizeof(ngx_url_t));
u.url = names[i];

View File

@ -18,10 +18,11 @@ With this option disappearing in Nginx 1.11.5, this patch would allow such tools
to assume "ipv6=off" to be safe regardless of ipv6 support in the current
build.
diff -r a3dc657f4e95 -r 8bf038fe006f src/core/ngx_resolver.c
--- a/src/core/ngx_resolver.c Thu Dec 15 21:44:34 2016 +0300
+++ b/src/core/ngx_resolver.c Thu Dec 15 16:17:01 2016 -0800
@@ -224,14 +224,22 @@
diff --git a/src/core/ngx_resolver.c b/src/core/ngx_resolver.c
index dade1846..5a3f0aa4 100644
--- a/src/core/ngx_resolver.c
+++ b/src/core/ngx_resolver.c
@@ -426,14 +426,22 @@ ngx_resolver_create(ngx_conf_t *cf, ngx_str_t *names, ngx_uint_t n)
continue;
}
@ -45,11 +46,11 @@ diff -r a3dc657f4e95 -r 8bf038fe006f src/core/ngx_resolver.c
} else {
ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
@@ -241,7 +249,6 @@
@@ -443,7 +451,6 @@ ngx_resolver_create(ngx_conf_t *cf, ngx_str_t *names, ngx_uint_t n)
continue;
}
-#endif
ngx_memzero(&u, sizeof(ngx_url_t));
#if !(NGX_WIN32)
if (ngx_strncmp(names[i].data, "local=", 6) == 0) {

View File

@ -4,8 +4,8 @@ index a3c0ef8..1263881 100644
+++ b/src/core/nginx.h
@@ -11,7 +11,7 @@
#define nginx_version 1013008
#define NGINX_VERSION "1.13.8"
#define nginx_version 1015005
#define NGINX_VERSION "1.15.5"
-#define NGINX_VER "nginx/" NGINX_VERSION
+#define NGINX_VER "openresty/" NGINX_VERSION ".unknown"

View File

@ -0,0 +1,185 @@
diff --git a/auto/unix b/auto/unix
index 10835f6c..b5b33bb3 100644
--- a/auto/unix
+++ b/auto/unix
@@ -990,3 +990,27 @@ ngx_feature_test='struct addrinfo *res;
if (getaddrinfo("localhost", NULL, NULL, &res) != 0) return 1;
freeaddrinfo(res)'
. auto/feature
+
+ngx_feature="SOCK_CLOEXEC support"
+ngx_feature_name="NGX_HAVE_SOCKET_CLOEXEC"
+ngx_feature_run=no
+ngx_feature_incs="#include <sys/types.h>
+ #include <sys/socket.h>"
+ngx_feature_path=
+ngx_feature_libs=
+ngx_feature_test="int fd;
+ fd = socket(AF_INET, SOCK_STREAM | SOCK_CLOEXEC, 0);"
+. auto/feature
+
+ngx_feature="FD_CLOEXEC support"
+ngx_feature_name="NGX_HAVE_FD_CLOEXEC"
+ngx_feature_run=no
+ngx_feature_incs="#include <sys/types.h>
+ #include <sys/socket.h>
+ #include <fcntl.h>"
+ngx_feature_path=
+ngx_feature_libs=
+ngx_feature_test="int fd;
+ fd = socket(AF_INET, SOCK_STREAM, 0);
+ fcntl(fd, F_SETFD, FD_CLOEXEC);"
+. auto/feature
diff --git a/src/core/ngx_resolver.c b/src/core/ngx_resolver.c
index cd55520c..438e0806 100644
--- a/src/core/ngx_resolver.c
+++ b/src/core/ngx_resolver.c
@@ -4466,8 +4466,14 @@ ngx_tcp_connect(ngx_resolver_connection_t *rec)
ngx_event_t *rev, *wev;
ngx_connection_t *c;
+#if (NGX_HAVE_SOCKET_CLOEXEC)
+ s = ngx_socket(rec->sockaddr->sa_family, SOCK_STREAM | SOCK_CLOEXEC, 0);
+
+#else
s = ngx_socket(rec->sockaddr->sa_family, SOCK_STREAM, 0);
+#endif
+
ngx_log_debug1(NGX_LOG_DEBUG_EVENT, &rec->log, 0, "TCP socket %d", s);
if (s == (ngx_socket_t) -1) {
@@ -4494,6 +4500,15 @@ ngx_tcp_connect(ngx_resolver_connection_t *rec)
goto failed;
}
+#if (NGX_HAVE_FD_CLOEXEC)
+ if (ngx_cloexec(s) == -1) {
+ ngx_log_error(NGX_LOG_ALERT, &rec->log, ngx_socket_errno,
+ ngx_cloexec_n " failed");
+
+ goto failed;
+ }
+#endif
+
rev = c->read;
wev = c->write;
diff --git a/src/event/ngx_event.h b/src/event/ngx_event.h
index 19fec68..8c2f01a 100644
--- a/src/event/ngx_event.h
+++ b/src/event/ngx_event.h
@@ -73,6 +73,9 @@ struct ngx_event_s {
/* to test on worker exit */
unsigned channel:1;
unsigned resolver:1;
+#if (HAVE_SOCKET_CLOEXEC_PATCH)
+ unsigned skip_socket_leak_check:1;
+#endif
unsigned cancelable:1;
diff --git a/src/event/ngx_event_accept.c b/src/event/ngx_event_accept.c
index 77563709..5827b9d0 100644
--- a/src/event/ngx_event_accept.c
+++ b/src/event/ngx_event_accept.c
@@ -62,7 +62,9 @@ ngx_event_accept(ngx_event_t *ev)
#if (NGX_HAVE_ACCEPT4)
if (use_accept4) {
- s = accept4(lc->fd, &sa.sockaddr, &socklen, SOCK_NONBLOCK);
+ s = accept4(lc->fd, &sa.sockaddr, &socklen,
+ SOCK_NONBLOCK | SOCK_CLOEXEC);
+
} else {
s = accept(lc->fd, &sa.sockaddr, &socklen);
}
@@ -202,6 +204,16 @@ ngx_event_accept(ngx_event_t *ev)
ngx_close_accepted_connection(c);
return;
}
+
+#if (NGX_HAVE_FD_CLOEXEC)
+ if (ngx_cloexec(s) == -1) {
+ ngx_log_error(NGX_LOG_ALERT, ev->log, ngx_socket_errno,
+ ngx_cloexec_n " failed");
+ ngx_close_accepted_connection(c);
+ return;
+ }
+#endif
+
}
}
diff --git a/src/event/ngx_event_connect.c b/src/event/ngx_event_connect.c
index c5bb8068..cf33b1d2 100644
--- a/src/event/ngx_event_connect.c
+++ b/src/event/ngx_event_connect.c
@@ -38,8 +38,15 @@ ngx_event_connect_peer(ngx_peer_connection_t *pc)
type = (pc->type ? pc->type : SOCK_STREAM);
+#if (NGX_HAVE_SOCKET_CLOEXEC)
+ s = ngx_socket(pc->sockaddr->sa_family, type | SOCK_CLOEXEC, 0);
+
+#else
s = ngx_socket(pc->sockaddr->sa_family, type, 0);
+#endif
+
+
ngx_log_debug2(NGX_LOG_DEBUG_EVENT, pc->log, 0, "%s socket %d",
(type == SOCK_STREAM) ? "stream" : "dgram", s);
@@ -80,6 +87,15 @@ ngx_event_connect_peer(ngx_peer_connection_t *pc)
goto failed;
}
+#if (NGX_HAVE_FD_CLOEXEC)
+ if (ngx_cloexec(s) == -1) {
+ ngx_log_error(NGX_LOG_ALERT, pc->log, ngx_socket_errno,
+ ngx_cloexec_n " failed");
+
+ goto failed;
+ }
+#endif
+
if (pc->local) {
#if (NGX_HAVE_TRANSPARENT_PROXY)
diff --git a/src/os/unix/ngx_process_cycle.c b/src/os/unix/ngx_process_cycle.c
index c4376a5..48e8fa8 100644
--- a/src/os/unix/ngx_process_cycle.c
+++ b/src/os/unix/ngx_process_cycle.c
@@ -1032,6 +1032,9 @@ ngx_worker_process_exit(ngx_cycle_t *cycle)
for (i = 0; i < cycle->connection_n; i++) {
if (c[i].fd != -1
&& c[i].read
+#if (HAVE_SOCKET_CLOEXEC_PATCH)
+ && !c[i].read->skip_socket_leak_check
+#endif
&& !c[i].read->accept
&& !c[i].read->channel
&& !c[i].read->resolver)
diff --git a/src/os/unix/ngx_socket.h b/src/os/unix/ngx_socket.h
index fcc51533..d1eebf47 100644
--- a/src/os/unix/ngx_socket.h
+++ b/src/os/unix/ngx_socket.h
@@ -38,6 +38,17 @@ int ngx_blocking(ngx_socket_t s);
#endif
+#if (NGX_HAVE_FD_CLOEXEC)
+
+#define ngx_cloexec(s) fcntl(s, F_SETFD, FD_CLOEXEC)
+#define ngx_cloexec_n "fcntl(FD_CLOEXEC)"
+
+/* at least FD_CLOEXEC is required to ensure connection fd is closed
+ * after execve */
+#define HAVE_SOCKET_CLOEXEC_PATCH 1
+
+#endif
+
int ngx_tcp_nopush(ngx_socket_t s);
int ngx_tcp_push(ngx_socket_t s);

View File

@ -1,5 +1,5 @@
--- nginx-1.13.8/src/event/ngx_event_openssl.c 2016-07-17 19:20:30.411137606 -0700
+++ nginx-1.13.8-patched/src/event/ngx_event_openssl.c 2016-07-19 16:53:35.539768477 -0700
--- nginx-1.15.5/src/event/ngx_event_openssl.c 2016-07-17 19:20:30.411137606 -0700
+++ nginx-1.15.5-patched/src/event/ngx_event_openssl.c 2016-07-19 16:53:35.539768477 -0700
@@ -1307,7 +1307,12 @@ ngx_ssl_handshake(ngx_connection_t *c)
}

View File

@ -0,0 +1,13 @@
diff --git a/src/stream/ngx_stream_ssl_preread_module.c b/src/stream/ngx_stream_ssl_preread_module.c
index e3d11fd9..3717b5fe 100644
--- a/src/stream/ngx_stream_ssl_preread_module.c
+++ b/src/stream/ngx_stream_ssl_preread_module.c
@@ -159,7 +159,7 @@ ngx_stream_ssl_preread_handler(ngx_stream_session_t *s)
rc = ngx_stream_ssl_preread_parse_record(ctx, p, p + len);
if (rc != NGX_AGAIN) {
- return rc;
+ return rc == NGX_OK ? NGX_DECLINED : rc;
}
p += len;

View File

@ -9,15 +9,15 @@ Date: Wed Feb 10 16:05:08 2016 -0800
for more details on the issue.
diff --git a/src/http/ngx_http_upstream.c b/src/http/ngx_http_upstream.c
index dbaa956..a25aaa2 100644
index 69019417..92b7c97f 100644
--- a/src/http/ngx_http_upstream.c
+++ b/src/http/ngx_http_upstream.c
@@ -2003,7 +2003,7 @@ ngx_http_upstream_send_request_handler(ngx_http_request_t *r,
@@ -2239,7 +2239,7 @@ ngx_http_upstream_send_request_handler(ngx_http_request_t *r,
#endif
- if (u->header_sent) {
+ if (u->request_body_sent) {
- if (u->header_sent && !u->conf->preserve_output) {
+ if (u->request_body_sent && !u->conf->preserve_output) {
u->write_event_handler = ngx_http_upstream_dummy_handler;
(void) ngx_handle_write_event(c->write, 0);

View File

@ -1,8 +1,8 @@
diff --git a/src/http/ngx_http_upstream.c b/src/http/ngx_http_upstream.c
index c394b291..e10df0ab 100644
index 69019417..2265d8f7 100644
--- a/src/http/ngx_http_upstream.c
+++ b/src/http/ngx_http_upstream.c
@@ -502,12 +502,19 @@ void
@@ -509,12 +509,19 @@ void
ngx_http_upstream_init(ngx_http_request_t *r)
{
ngx_connection_t *c;
@ -22,8 +22,8 @@ index c394b291..e10df0ab 100644
#if (NGX_HTTP_V2)
if (r->stream) {
ngx_http_upstream_init_request(r);
@@ -1590,7 +1597,7 @@ ngx_http_upstream_connect(ngx_http_request_t *r, ngx_http_upstream_t *u)
u->request_body_sent = 0;
@@ -1626,7 +1633,7 @@ ngx_http_upstream_connect(ngx_http_request_t *r, ngx_http_upstream_t *u)
u->request_body_blocked = 0;
if (rc == NGX_AGAIN) {
- ngx_add_timer(c->write, u->conf->connect_timeout);
@ -31,7 +31,7 @@ index c394b291..e10df0ab 100644
return;
}
@@ -1666,7 +1673,7 @@ ngx_http_upstream_ssl_init_connection(ngx_http_request_t *r,
@@ -1704,7 +1711,7 @@ ngx_http_upstream_ssl_init_connection(ngx_http_request_t *r,
if (rc == NGX_AGAIN) {
if (!c->write->timer_set) {
@ -40,34 +40,25 @@ index c394b291..e10df0ab 100644
}
c->ssl->handler = ngx_http_upstream_ssl_handshake_handler;
@@ -1960,7 +1967,7 @@ ngx_http_upstream_send_request(ngx_http_request_t *r, ngx_http_upstream_t *u,
@@ -2022,7 +2029,7 @@ ngx_http_upstream_send_request(ngx_http_request_t *r, ngx_http_upstream_t *u,
if (rc == NGX_AGAIN) {
if (!c->write->ready) {
if (!c->write->ready || u->request_body_blocked) {
- ngx_add_timer(c->write, u->conf->send_timeout);
+ ngx_add_timer(c->write, u->send_timeout);
} else if (c->write->timer_set) {
ngx_del_timer(c->write);
@@ -2003,7 +2010,7 @@ ngx_http_upstream_send_request(ngx_http_request_t *r, ngx_http_upstream_t *u,
return;
}
@@ -2084,7 +2091,7 @@ ngx_http_upstream_send_request(ngx_http_request_t *r, ngx_http_upstream_t *u,
return;
}
- ngx_add_timer(c->read, u->conf->read_timeout);
+ ngx_add_timer(c->read, u->read_timeout);
- ngx_add_timer(c->read, u->conf->read_timeout);
+ ngx_add_timer(c->read, u->read_timeout);
if (c->read->ready) {
ngx_http_upstream_process_header(r, u);
@@ -2800,7 +2807,7 @@ ngx_http_upstream_process_body_in_memory(ngx_http_request_t *r,
}
if (rev->active) {
- ngx_add_timer(rev, u->conf->read_timeout);
+ ngx_add_timer(rev, u->read_timeout);
} else if (rev->timer_set) {
ngx_del_timer(rev);
@@ -3129,7 +3136,7 @@ ngx_http_upstream_send_response(ngx_http_request_t *r, ngx_http_upstream_t *u)
if (c->read->ready) {
ngx_http_upstream_process_header(r, u);
@@ -3213,7 +3220,7 @@ ngx_http_upstream_send_response(ngx_http_request_t *r, ngx_http_upstream_t *u)
p->cyclic_temp_file = 0;
}
@ -76,7 +67,7 @@ index c394b291..e10df0ab 100644
p->send_timeout = clcf->send_timeout;
p->send_lowat = clcf->send_lowat;
@@ -3367,7 +3374,7 @@ ngx_http_upstream_process_upgraded(ngx_http_request_t *r,
@@ -3458,7 +3465,7 @@ ngx_http_upstream_process_upgraded(ngx_http_request_t *r,
}
if (upstream->write->active && !upstream->write->ready) {
@ -85,7 +76,7 @@ index c394b291..e10df0ab 100644
} else if (upstream->write->timer_set) {
ngx_del_timer(upstream->write);
@@ -3379,7 +3386,7 @@ ngx_http_upstream_process_upgraded(ngx_http_request_t *r,
@@ -3470,7 +3477,7 @@ ngx_http_upstream_process_upgraded(ngx_http_request_t *r,
}
if (upstream->read->active && !upstream->read->ready) {
@ -94,7 +85,7 @@ index c394b291..e10df0ab 100644
} else if (upstream->read->timer_set) {
ngx_del_timer(upstream->read);
@@ -3573,7 +3580,7 @@ ngx_http_upstream_process_non_buffered_request(ngx_http_request_t *r,
@@ -3664,7 +3671,7 @@ ngx_http_upstream_process_non_buffered_request(ngx_http_request_t *r,
}
if (upstream->read->active && !upstream->read->ready) {
@ -104,10 +95,10 @@ index c394b291..e10df0ab 100644
} else if (upstream->read->timer_set) {
ngx_del_timer(upstream->read);
diff --git a/src/http/ngx_http_upstream.h b/src/http/ngx_http_upstream.h
index c552ac0c..40b69d0a 100644
index c2f4dc0b..b9eef118 100644
--- a/src/http/ngx_http_upstream.h
+++ b/src/http/ngx_http_upstream.h
@@ -329,6 +329,11 @@ struct ngx_http_upstream_s {
@@ -333,6 +333,11 @@ struct ngx_http_upstream_s {
ngx_array_t *caches;
#endif

View File

@ -0,0 +1,11 @@
--- nginx-1.15.6/auto/cc/conf 2015-10-30 22:47:50.000000000 +0800
+++ nginx-1.15.6-patched/auto/cc/conf 2015-11-02 12:23:05.385156987 +0800
@@ -136,7 +136,7 @@ fi
CFLAGS="$CFLAGS $NGX_CC_OPT"
NGX_TEST_LD_OPT="$NGX_LD_OPT"
-if [ "$NGX_PLATFORM" != win32 ]; then
+if [ 1 ]; then
if test -n "$NGX_LD_OPT"; then
ngx_feature=--with-ld-opt=\"$NGX_LD_OPT\"

View File

@ -0,0 +1,72 @@
diff --git a/src/http/ngx_http_upstream.c b/src/http/ngx_http_upstream.c
index f8d5707d..6efe0047 100644
--- a/src/http/ngx_http_upstream.c
+++ b/src/http/ngx_http_upstream.c
@@ -1515,6 +1515,11 @@ ngx_http_upstream_connect(ngx_http_request_t *r, ngx_http_upstream_t *u)
return;
}
+ if (rc >= NGX_HTTP_SPECIAL_RESPONSE) {
+ ngx_http_upstream_finalize_request(r, u, rc);
+ return;
+ }
+
u->state->peer = u->peer.name;
if (rc == NGX_BUSY) {
diff --git a/src/http/ngx_http_upstream.h b/src/http/ngx_http_upstream.h
index 3e714e5b..dfbb25e0 100644
--- a/src/http/ngx_http_upstream.h
+++ b/src/http/ngx_http_upstream.h
@@ -427,4 +427,9 @@ extern ngx_conf_bitmask_t ngx_http_upstream_cache_method_mask[];
extern ngx_conf_bitmask_t ngx_http_upstream_ignore_headers_masks[];
+#ifndef HAVE_BALANCER_STATUS_CODE_PATCH
+#define HAVE_BALANCER_STATUS_CODE_PATCH
+#endif
+
+
#endif /* _NGX_HTTP_UPSTREAM_H_INCLUDED_ */
diff --git a/src/stream/ngx_stream.h b/src/stream/ngx_stream.h
index 09d24593..d8b4b584 100644
--- a/src/stream/ngx_stream.h
+++ b/src/stream/ngx_stream.h
@@ -27,6 +27,7 @@ typedef struct ngx_stream_session_s ngx_stream_session_t;
#define NGX_STREAM_OK 200
+#define NGX_STREAM_SPECIAL_RESPONSE 300
#define NGX_STREAM_BAD_REQUEST 400
#define NGX_STREAM_FORBIDDEN 403
#define NGX_STREAM_INTERNAL_SERVER_ERROR 500
diff --git a/src/stream/ngx_stream_proxy_module.c b/src/stream/ngx_stream_proxy_module.c
index 818d7329..329dcdc6 100644
--- a/src/stream/ngx_stream_proxy_module.c
+++ b/src/stream/ngx_stream_proxy_module.c
@@ -691,6 +691,11 @@ ngx_stream_proxy_connect(ngx_stream_session_t *s)
return;
}
+ if (rc >= NGX_STREAM_SPECIAL_RESPONSE) {
+ ngx_stream_proxy_finalize(s, rc);
+ return;
+ }
+
u->state->peer = u->peer.name;
if (rc == NGX_BUSY) {
diff --git a/src/stream/ngx_stream_upstream.h b/src/stream/ngx_stream_upstream.h
index 73947f46..21bc0ad7 100644
--- a/src/stream/ngx_stream_upstream.h
+++ b/src/stream/ngx_stream_upstream.h
@@ -151,4 +151,9 @@ ngx_stream_upstream_srv_conf_t *ngx_stream_upstream_add(ngx_conf_t *cf,
extern ngx_module_t ngx_stream_upstream_module;
+#ifndef HAVE_BALANCER_STATUS_CODE_PATCH
+#define HAVE_BALANCER_STATUS_CODE_PATCH
+#endif
+
+
#endif /* _NGX_STREAM_UPSTREAM_H_INCLUDED_ */

View File

@ -0,0 +1,13 @@
diff --git a/src/http/ngx_http_special_response.c b/src/http/ngx_http_special_response.c
index 64e5acd..f5374f6 100644
--- a/src/http/ngx_http_special_response.c
+++ b/src/http/ngx_http_special_response.c
@@ -26,7 +26,7 @@ static u_char ngx_http_error_full_tail[] =
static u_char ngx_http_error_tail[] =
-"<hr><center>nginx</center>" CRLF
+"<hr><center>openresty</center>" CRLF
"</body>" CRLF
"</html>" CRLF
;

View File

@ -0,0 +1,19 @@
# HG changeset patch
# User Yichun Zhang <agentzh@gmail.com>
# Date 1383598130 28800
# Node ID f64218e1ac963337d84092536f588b8e0d99bbaa
# Parent dea321e5c0216efccbb23e84bbce7cf3e28f130c
Cache: gracefully exit the cache manager process.
diff -r dea321e5c021 -r f64218e1ac96 src/os/unix/ngx_process_cycle.c
--- a/src/os/unix/ngx_process_cycle.c Thu Oct 31 18:23:49 2013 +0400
+++ b/src/os/unix/ngx_process_cycle.c Mon Nov 04 12:48:50 2013 -0800
@@ -1335,7 +1335,7 @@
if (ngx_terminate || ngx_quit) {
ngx_log_error(NGX_LOG_NOTICE, cycle->log, 0, "exiting");
- exit(0);
+ ngx_worker_process_exit(cycle);
}
if (ngx_reopen) {

View File

@ -0,0 +1,12 @@
diff --git a/src/os/unix/ngx_daemon.c b/src/os/unix/ngx_daemon.c
index ab672110..f259af31 100644
--- a/src/os/unix/ngx_daemon.c
+++ b/src/os/unix/ngx_daemon.c
@@ -23,6 +23,8 @@ ngx_daemon(ngx_log_t *log)
break;
default:
+ /* just to make it ASAN or Valgrind clean */
+ ngx_destroy_pool(ngx_cycle->pool);
exit(0);
}

View File

@ -0,0 +1,98 @@
diff --git a/src/event/ngx_event.c b/src/event/ngx_event.c
index 57af8132..4853945f 100644
--- a/src/event/ngx_event.c
+++ b/src/event/ngx_event.c
@@ -196,6 +196,9 @@ ngx_process_events_and_timers(ngx_cycle_t *cycle)
ngx_uint_t flags;
ngx_msec_t timer, delta;
+ ngx_queue_t *q;
+ ngx_event_t *ev;
+
if (ngx_timer_resolution) {
timer = NGX_TIMER_INFINITE;
flags = 0;
@@ -215,6 +218,13 @@ ngx_process_events_and_timers(ngx_cycle_t *cycle)
#endif
}
+ if (!ngx_queue_empty(&ngx_posted_delayed_events)) {
+ ngx_log_debug0(NGX_LOG_DEBUG_EVENT, cycle->log, 0,
+ "posted delayed event queue not empty"
+ " making poll timeout 0");
+ timer = 0;
+ }
+
if (ngx_use_accept_mutex) {
if (ngx_accept_disabled > 0) {
ngx_accept_disabled--;
@@ -257,6 +267,35 @@ ngx_process_events_and_timers(ngx_cycle_t *cycle)
}
ngx_event_process_posted(cycle, &ngx_posted_events);
+
+ while (!ngx_queue_empty(&ngx_posted_delayed_events)) {
+ q = ngx_queue_head(&ngx_posted_delayed_events);
+
+ ev = ngx_queue_data(q, ngx_event_t, queue);
+ if (ev->delayed) {
+ /* start of newly inserted nodes */
+ for (/* void */;
+ q != ngx_queue_sentinel(&ngx_posted_delayed_events);
+ q = ngx_queue_next(q))
+ {
+ ev = ngx_queue_data(q, ngx_event_t, queue);
+ ev->delayed = 0;
+
+ ngx_log_debug1(NGX_LOG_DEBUG_EVENT, cycle->log, 0,
+ "skipping delayed posted event %p,"
+ " till next iteration", ev);
+ }
+
+ break;
+ }
+
+ ngx_log_debug1(NGX_LOG_DEBUG_EVENT, cycle->log, 0,
+ "delayed posted event %p", ev);
+
+ ngx_delete_posted_event(ev);
+
+ ev->handler(ev);
+ }
}
@@ -600,6 +639,7 @@ ngx_event_process_init(ngx_cycle_t *cycle)
ngx_queue_init(&ngx_posted_accept_events);
ngx_queue_init(&ngx_posted_events);
+ ngx_queue_init(&ngx_posted_delayed_events);
if (ngx_event_timer_init(cycle->log) == NGX_ERROR) {
return NGX_ERROR;
diff --git a/src/event/ngx_event_posted.c b/src/event/ngx_event_posted.c
index d851f3d1..b6cea009 100644
--- a/src/event/ngx_event_posted.c
+++ b/src/event/ngx_event_posted.c
@@ -12,6 +12,7 @@
ngx_queue_t ngx_posted_accept_events;
ngx_queue_t ngx_posted_events;
+ngx_queue_t ngx_posted_delayed_events;
void
diff --git a/src/event/ngx_event_posted.h b/src/event/ngx_event_posted.h
index 145d30fe..6c388553 100644
--- a/src/event/ngx_event_posted.h
+++ b/src/event/ngx_event_posted.h
@@ -43,6 +43,9 @@ void ngx_event_process_posted(ngx_cycle_t *cycle, ngx_queue_t *posted);
extern ngx_queue_t ngx_posted_accept_events;
extern ngx_queue_t ngx_posted_events;
+extern ngx_queue_t ngx_posted_delayed_events;
+
+#define HAVE_POSTED_DELAYED_EVENTS_PATCH
#endif /* _NGX_EVENT_POSTED_H_INCLUDED_ */

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,11 @@
--- nginx-1.15.6/src/http/ngx_http_request.c 2013-05-06 03:26:50.000000000 -0700
+++ nginx-1.15.6-patched/src/http/ngx_http_request.c 2013-06-11 12:59:48.008321688 -0700
@@ -1951,7 +1951,7 @@
ngx_int_t rc;
ngx_http_connection_t *hc;
ngx_http_core_loc_conf_t *clcf;
- ngx_http_core_srv_conf_t *cscf;
+ ngx_http_core_srv_conf_t *cscf = NULL;
hc = r->http_connection;

View File

@ -0,0 +1,20 @@
# HG changeset patch
# User Yichun Zhang <agentzh@gmail.com>
# Date 1412276417 25200
# Thu Oct 02 12:00:17 2014 -0700
# Node ID 4032b992f23b054c1a2cfb0be879330d2c6708e5
# Parent 1ff0f68d9376e3d184d65814a6372856bf65cfcd
Hash: buffer overflow might happen when exceeding the pre-configured limits.
diff -r 1ff0f68d9376 -r 4032b992f23b src/core/ngx_hash.c
--- a/src/core/ngx_hash.c Tue Sep 30 15:50:28 2014 -0700
+++ b/src/core/ngx_hash.c Thu Oct 02 12:00:17 2014 -0700
@@ -312,6 +312,8 @@ ngx_hash_init(ngx_hash_init_t *hinit, ng
continue;
}
+ size--;
+
ngx_log_error(NGX_LOG_WARN, hinit->pool->log, 0,
"could not build optimal %s, you should increase "
"either %s_max_size: %i or %s_bucket_size: %i; "

View File

@ -0,0 +1,59 @@
diff -rup nginx-1.15.6/src/core/nginx.c nginx-1.15.6-patched/src/core/nginx.c
--- nginx-1.15.6/src/core/nginx.c 2017-12-17 00:00:38.136470108 -0800
+++ nginx-1.15.6-patched/src/core/nginx.c 2017-12-16 23:59:51.680958322 -0800
@@ -186,6 +186,7 @@ static u_char *ngx_prefix;
static u_char *ngx_conf_file;
static u_char *ngx_conf_params;
static char *ngx_signal;
+ngx_pool_t *saved_init_cycle_pool = NULL;
static char **ngx_os_environ;
@@ -253,6 +254,8 @@ main(int argc, char *const *argv)
return 1;
}
+ saved_init_cycle_pool = init_cycle.pool;
+
if (ngx_save_argv(&init_cycle, argc, argv) != NGX_OK) {
return 1;
}
diff -rup nginx-1.15.6/src/core/ngx_core.h nginx-1.15.6-patched/src/core/ngx_core.h
--- nginx-1.15.6/src/core/ngx_core.h 2017-10-10 08:22:51.000000000 -0700
+++ nginx-1.15.6-patched/src/core/ngx_core.h 2017-12-16 23:59:51.679958370 -0800
@@ -108,4 +108,6 @@ void ngx_cpuinfo(void);
#define NGX_DISABLE_SYMLINKS_NOTOWNER 2
#endif
+extern ngx_pool_t *saved_init_cycle_pool;
+
#endif /* _NGX_CORE_H_INCLUDED_ */
diff -rup nginx-1.15.6/src/core/ngx_cycle.c nginx-1.15.6-patched/src/core/ngx_cycle.c
--- nginx-1.15.6/src/core/ngx_cycle.c 2017-10-10 08:22:51.000000000 -0700
+++ nginx-1.15.6-patched/src/core/ngx_cycle.c 2017-12-16 23:59:51.678958419 -0800
@@ -748,6 +748,10 @@ old_shm_zone_done:
if (ngx_process == NGX_PROCESS_MASTER || ngx_is_init_cycle(old_cycle)) {
+ if (ngx_is_init_cycle(old_cycle)) {
+ saved_init_cycle_pool = NULL;
+ }
+
ngx_destroy_pool(old_cycle->pool);
cycle->old_cycle = NULL;
diff -rup nginx-1.15.6/src/os/unix/ngx_process_cycle.c nginx-1.15.6-patched/src/os/unix/ngx_process_cycle.c
--- nginx-1.15.6/src/os/unix/ngx_process_cycle.c 2017-12-17 00:00:38.142469762 -0800
+++ nginx-1.15.6-patched/src/os/unix/ngx_process_cycle.c 2017-12-16 23:59:51.691957791 -0800
@@ -783,6 +783,11 @@ ngx_master_process_exit(ngx_cycle_t *cyc
ngx_exit_cycle.files_n = ngx_cycle->files_n;
ngx_cycle = &ngx_exit_cycle;
+ if (saved_init_cycle_pool != NULL && saved_init_cycle_pool != cycle->pool) {
+ ngx_destroy_pool(saved_init_cycle_pool);
+ saved_init_cycle_pool = NULL;
+ }
+
ngx_destroy_pool(cycle->pool);
exit(0);

View File

@ -0,0 +1,60 @@
diff --git a/src/core/ngx_cycle.h b/src/core/ngx_cycle.h
index c51b7ff..4c335b9 100644
--- a/src/core/ngx_cycle.h
+++ b/src/core/ngx_cycle.h
@@ -22,9 +22,14 @@
#define NGX_DEBUG_POINTS_ABORT 2
+#define HAVE_INTERCEPT_ERROR_LOG_PATCH
+
+
typedef struct ngx_shm_zone_s ngx_shm_zone_t;
typedef ngx_int_t (*ngx_shm_zone_init_pt) (ngx_shm_zone_t *zone, void *data);
+typedef ngx_int_t (*ngx_log_intercept_pt) (ngx_log_t *log, ngx_uint_t level,
+ u_char *buf, size_t len);
struct ngx_shm_zone_s {
void *data;
@@ -75,6 +80,10 @@ struct ngx_cycle_s {
ngx_str_t prefix;
ngx_str_t lock_file;
ngx_str_t hostname;
+
+ ngx_log_intercept_pt intercept_error_log_handler;
+ void *intercept_error_log_data;
+ unsigned entered_logger; /* :1 */
};
diff --git a/src/core/ngx_log.c b/src/core/ngx_log.c
index 8e9408d..ed9b11b 100644
--- a/src/core/ngx_log.c
+++ b/src/core/ngx_log.c
@@ -112,6 +112,8 @@ ngx_log_error_core(ngx_uint_t level, ngx_log_t *log, ngx_err_t err,
ngx_uint_t wrote_stderr, debug_connection;
u_char errstr[NGX_MAX_ERROR_STR];
+ ngx_log_intercept_pt log_intercept = NULL;
+
last = errstr + NGX_MAX_ERROR_STR;
p = ngx_cpymem(errstr, ngx_cached_err_log_time.data,
@@ -153,6 +155,16 @@ ngx_log_error_core(ngx_uint_t level, ngx_log_t *log, ngx_err_t err,
p = last - NGX_LINEFEED_SIZE;
}
+ if (ngx_cycle) {
+ log_intercept = ngx_cycle->intercept_error_log_handler;
+ }
+
+ if (log_intercept && !ngx_cycle->entered_logger) {
+ ngx_cycle->entered_logger = 1;
+ log_intercept(log, level, errstr, p - errstr);
+ ngx_cycle->entered_logger = 0;
+ }
+
ngx_linefeed(p);
wrote_stderr = 0;

View File

@ -0,0 +1,13 @@
--- nginx-1.15.6/src/core/ngx_log.h 2013-10-08 05:07:14.000000000 -0700
+++ nginx-1.15.6-patched/src/core/ngx_log.h 2013-12-05 20:35:35.996236720 -0800
@@ -64,7 +64,9 @@ struct ngx_log_s {
};
-#define NGX_MAX_ERROR_STR 2048
+#ifndef NGX_MAX_ERROR_STR
+#define NGX_MAX_ERROR_STR 4096
+#endif
/*********************************/

View File

@ -0,0 +1,117 @@
diff --git a/src/http/modules/ngx_http_log_module.c b/src/http/modules/ngx_http_log_module.c
index 917ed55f..b769dfd3 100644
--- a/src/http/modules/ngx_http_log_module.c
+++ b/src/http/modules/ngx_http_log_module.c
@@ -79,6 +79,8 @@ typedef struct {
time_t open_file_cache_valid;
ngx_uint_t open_file_cache_min_uses;
+ ngx_flag_t escape_non_ascii;
+
ngx_uint_t off; /* unsigned off:1 */
} ngx_http_log_loc_conf_t;
@@ -131,7 +133,8 @@ static size_t ngx_http_log_variable_getlen(ngx_http_request_t *r,
uintptr_t data);
static u_char *ngx_http_log_variable(ngx_http_request_t *r, u_char *buf,
ngx_http_log_op_t *op);
-static uintptr_t ngx_http_log_escape(u_char *dst, u_char *src, size_t size);
+static uintptr_t ngx_http_log_escape(ngx_http_log_loc_conf_t *lcf, u_char *dst,
+ u_char *src, size_t size);
static size_t ngx_http_log_json_variable_getlen(ngx_http_request_t *r,
uintptr_t data);
static u_char *ngx_http_log_json_variable(ngx_http_request_t *r, u_char *buf,
@@ -177,6 +180,13 @@ static ngx_command_t ngx_http_log_commands[] = {
0,
NULL },
+ { ngx_string("log_escape_non_ascii"),
+ NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_FLAG,
+ ngx_conf_set_flag_slot,
+ NGX_HTTP_LOC_CONF_OFFSET,
+ offsetof(ngx_http_log_loc_conf_t, escape_non_ascii),
+ NULL },
+
ngx_null_command
};
@@ -935,6 +945,7 @@ static size_t
ngx_http_log_variable_getlen(ngx_http_request_t *r, uintptr_t data)
{
uintptr_t len;
+ ngx_http_log_loc_conf_t *lcf;
ngx_http_variable_value_t *value;
value = ngx_http_get_indexed_variable(r, data);
@@ -943,7 +954,9 @@ ngx_http_log_variable_getlen(ngx_http_request_t *r, uintptr_t data)
return 1;
}
- len = ngx_http_log_escape(NULL, value->data, value->len);
+ lcf = ngx_http_get_module_loc_conf(r, ngx_http_log_module);
+
+ len = ngx_http_log_escape(lcf, NULL, value->data, value->len);
value->escape = len ? 1 : 0;
@@ -954,6 +967,7 @@ ngx_http_log_variable_getlen(ngx_http_request_t *r, uintptr_t data)
static u_char *
ngx_http_log_variable(ngx_http_request_t *r, u_char *buf, ngx_http_log_op_t *op)
{
+ ngx_http_log_loc_conf_t *lcf;
ngx_http_variable_value_t *value;
value = ngx_http_get_indexed_variable(r, op->data);
@@ -967,16 +981,18 @@ ngx_http_log_variable(ngx_http_request_t *r, u_char *buf, ngx_http_log_op_t *op)
return ngx_cpymem(buf, value->data, value->len);
} else {
- return (u_char *) ngx_http_log_escape(buf, value->data, value->len);
+ lcf = ngx_http_get_module_loc_conf(r, ngx_http_log_module);
+ return (u_char *) ngx_http_log_escape(lcf, buf, value->data, value->len);
}
}
static uintptr_t
-ngx_http_log_escape(u_char *dst, u_char *src, size_t size)
+ngx_http_log_escape(ngx_http_log_loc_conf_t *lcf, u_char *dst, u_char *src,
+ size_t size)
{
- ngx_uint_t n;
- static u_char hex[] = "0123456789ABCDEF";
+ ngx_uint_t n;
+ static u_char hex[] = "0123456789ABCDEF";
static uint32_t escape[] = {
0xffffffff, /* 1111 1111 1111 1111 1111 1111 1111 1111 */
@@ -996,6 +1012,12 @@ ngx_http_log_escape(u_char *dst, u_char *src, size_t size)
0xffffffff, /* 1111 1111 1111 1111 1111 1111 1111 1111 */
};
+ if (lcf->escape_non_ascii) {
+ ngx_memset(&escape[4], 0xff, sizeof(uint32_t) * 4);
+
+ } else {
+ ngx_memzero(&escape[4], sizeof(uint32_t) * 4);
+ }
if (dst == NULL) {
@@ -1120,6 +1142,7 @@ ngx_http_log_create_loc_conf(ngx_conf_t *cf)
}
conf->open_file_cache = NGX_CONF_UNSET_PTR;
+ conf->escape_non_ascii = NGX_CONF_UNSET;
return conf;
}
@@ -1135,6 +1158,8 @@ ngx_http_log_merge_loc_conf(ngx_conf_t *cf, void *parent, void *child)
ngx_http_log_fmt_t *fmt;
ngx_http_log_main_conf_t *lmcf;
+ ngx_conf_merge_value(conf->escape_non_ascii, prev->escape_non_ascii, 1);
+
if (conf->open_file_cache == NGX_CONF_UNSET_PTR) {
conf->open_file_cache = prev->open_file_cache;

View File

@ -0,0 +1,36 @@
diff -urp nginx-1.15.6/auto/cc/clang nginx-1.15.6-patched/auto/cc/clang
--- nginx-1.15.6/auto/cc/clang 2014-03-04 03:39:24.000000000 -0800
+++ nginx-1.15.6-patched/auto/cc/clang 2014-03-13 20:54:26.241413360 -0700
@@ -89,7 +89,7 @@ CFLAGS="$CFLAGS -Wconditional-uninitiali
CFLAGS="$CFLAGS -Wno-unused-parameter"
# stop on warning
-CFLAGS="$CFLAGS -Werror"
+#CFLAGS="$CFLAGS -Werror"
# debug
CFLAGS="$CFLAGS -g"
diff -urp nginx-1.15.6/auto/cc/gcc nginx-1.15.6-patched/auto/cc/gcc
--- nginx-1.15.6/auto/cc/gcc 2014-03-04 03:39:24.000000000 -0800
+++ nginx-1.15.6-patched/auto/cc/gcc 2014-03-13 20:54:13.301355329 -0700
@@ -168,7 +168,7 @@ esac
# stop on warning
-CFLAGS="$CFLAGS -Werror"
+#CFLAGS="$CFLAGS -Werror"
# debug
CFLAGS="$CFLAGS -g"
diff -urp nginx-1.15.6/auto/cc/icc nginx-1.15.6-patched/auto/cc/icc
--- nginx-1.15.6/auto/cc/icc 2014-03-04 03:39:24.000000000 -0800
+++ nginx-1.15.6-patched/auto/cc/icc 2014-03-13 20:54:13.301355329 -0700
@@ -115,7 +115,7 @@ case "$NGX_ICC_VER" in
esac
# stop on warning
-CFLAGS="$CFLAGS -Werror"
+#CFLAGS="$CFLAGS -Werror"
# debug
CFLAGS="$CFLAGS -g"

View File

@ -0,0 +1,91 @@
diff -upr nginx-1.15.6/src/http/ngx_http_core_module.c nginx-1.15.6-patched/src/http/ngx_http_core_module.c
--- nginx-1.15.6/src/http/ngx_http_core_module.c 2017-08-31 18:14:41.000000000 -0700
+++ nginx-1.15.6-patched/src/http/ngx_http_core_module.c 2017-08-31 18:21:31.638098196 -0700
@@ -61,6 +61,8 @@ static char *ngx_http_core_directio(ngx_
void *conf);
static char *ngx_http_core_error_page(ngx_conf_t *cf, ngx_command_t *cmd,
void *conf);
+static char *ngx_http_core_no_error_pages(ngx_conf_t *cf, ngx_command_t *cmd,
+ void *conf);
static char *ngx_http_core_open_file_cache(ngx_conf_t *cf, ngx_command_t *cmd,
void *conf);
static char *ngx_http_core_error_log(ngx_conf_t *cf, ngx_command_t *cmd,
@@ -647,6 +649,14 @@ static ngx_command_t ngx_http_core_comm
0,
NULL },
+ { ngx_string("no_error_pages"),
+ NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_HTTP_LIF_CONF
+ |NGX_CONF_NOARGS,
+ ngx_http_core_no_error_pages,
+ NGX_HTTP_LOC_CONF_OFFSET,
+ 0,
+ NULL },
+
{ ngx_string("post_action"),
NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_HTTP_LIF_CONF
|NGX_CONF_TAKE1,
@@ -3334,7 +3344,6 @@ ngx_http_core_create_loc_conf(ngx_conf_t
* clcf->types = NULL;
* clcf->default_type = { 0, NULL };
* clcf->error_log = NULL;
- * clcf->error_pages = NULL;
* clcf->client_body_path = NULL;
* clcf->regex = NULL;
* clcf->exact_match = 0;
@@ -3344,6 +3353,7 @@ ngx_http_core_create_loc_conf(ngx_conf_t
* clcf->keepalive_disable = 0;
*/
+ clcf->error_pages = NGX_CONF_UNSET_PTR;
clcf->client_max_body_size = NGX_CONF_UNSET;
clcf->client_body_buffer_size = NGX_CONF_UNSET_SIZE;
clcf->client_body_timeout = NGX_CONF_UNSET_MSEC;
@@ -3543,9 +3553,7 @@ ngx_http_core_merge_loc_conf(ngx_conf_t
}
}
- if (conf->error_pages == NULL && prev->error_pages) {
- conf->error_pages = prev->error_pages;
- }
+ ngx_conf_merge_ptr_value(conf->error_pages, prev->error_pages, NULL);
ngx_conf_merge_str_value(conf->default_type,
prev->default_type, "text/plain");
@@ -4553,6 +4561,10 @@ ngx_http_core_error_page(ngx_conf_t *cf,
ngx_http_compile_complex_value_t ccv;
if (clcf->error_pages == NULL) {
+ return "conflicts with \"no_error_pages\"";
+ }
+
+ if (clcf->error_pages == NGX_CONF_UNSET_PTR) {
clcf->error_pages = ngx_array_create(cf->pool, 4,
sizeof(ngx_http_err_page_t));
if (clcf->error_pages == NULL) {
@@ -4655,6 +4667,25 @@ ngx_http_core_error_page(ngx_conf_t *cf,
return NGX_CONF_OK;
}
+
+
+static char *
+ngx_http_core_no_error_pages(ngx_conf_t *cf, ngx_command_t *cmd, void *conf)
+{
+ ngx_http_core_loc_conf_t *clcf = conf;
+
+ if (clcf->error_pages == NULL) {
+ return "is duplicate";
+ }
+
+ if (clcf->error_pages != NGX_CONF_UNSET_PTR) {
+ return "conflicts with \"error_page\"";
+ }
+
+ clcf->error_pages = NULL;
+
+ return NGX_CONF_OK;
+}
static char *

View File

@ -0,0 +1,587 @@
diff --minimal '--exclude=*.swp' '--exclude=*~' -up nginx-1.15.6/src/core/nginx.h nginx-1.15.6-patched/src/core/nginx.h
--- nginx-1.15.6/src/core/nginx.h 2016-04-19 09:02:38.000000000 -0700
+++ nginx-1.15.6-patched/src/core/nginx.h 2016-04-21 16:25:07.452944624 -0700
@@ -10,7 +10,7 @@
#define nginx_version 1015006
#define NGINX_VERSION "1.15.6"
-#define NGINX_VER "openresty/" NGINX_VERSION ".unknown"
+#define NGINX_VER "openresty/" NGINX_VERSION ".unknown (no pool)"
#ifdef NGX_BUILD
diff --minimal '--exclude=*.swp' '--exclude=*~' -up nginx-1.15.6/src/core/ngx_array.c nginx-1.15.6-patched/src/core/ngx_array.c
--- nginx-1.15.6/src/core/ngx_array.c 2016-04-19 09:02:38.000000000 -0700
+++ nginx-1.15.6-patched/src/core/ngx_array.c 2016-04-21 16:25:07.453947190 -0700
@@ -30,26 +30,30 @@ ngx_array_create(ngx_pool_t *p, ngx_uint
void
ngx_array_destroy(ngx_array_t *a)
{
- ngx_pool_t *p;
+ ngx_pool_t *p;
+ ngx_array_link_t *link;
p = a->pool;
- if ((u_char *) a->elts + a->size * a->nalloc == p->d.last) {
- p->d.last -= a->size * a->nalloc;
+ if (a->elts) {
+ ngx_pfree(p, a->elts);
}
- if ((u_char *) a + sizeof(ngx_array_t) == p->d.last) {
- p->d.last = (u_char *) a;
+ for (link = a->old_elts; link; link = link->next) {
+ ngx_pfree(p, link->elts);
}
+
+ ngx_pfree(p, a);
}
void *
ngx_array_push(ngx_array_t *a)
{
- void *elt, *new;
- size_t size;
- ngx_pool_t *p;
+ void *elt, *new;
+ size_t size;
+ ngx_pool_t *p;
+ ngx_array_link_t *link;
if (a->nelts == a->nalloc) {
@@ -59,29 +63,27 @@ ngx_array_push(ngx_array_t *a)
p = a->pool;
- if ((u_char *) a->elts + size == p->d.last
- && p->d.last + a->size <= p->d.end)
- {
- /*
- * the array allocation is the last in the pool
- * and there is space for new allocation
- */
-
- p->d.last += a->size;
- a->nalloc++;
+ /* allocate a new array */
- } else {
- /* allocate a new array */
+ new = ngx_palloc(p, 2 * size);
+ if (new == NULL) {
+ return NULL;
+ }
- new = ngx_palloc(p, 2 * size);
- if (new == NULL) {
- return NULL;
- }
+ ngx_memcpy(new, a->elts, size);
- ngx_memcpy(new, a->elts, size);
- a->elts = new;
- a->nalloc *= 2;
+ link = ngx_palloc(p, sizeof(ngx_array_link_t));
+ if (link == NULL) {
+ ngx_pfree(p, new);
+ return NULL;
}
+
+ link->next = a->old_elts;
+ link->elts = a->elts;
+ a->old_elts = link;
+
+ a->elts = new;
+ a->nalloc *= 2;
}
elt = (u_char *) a->elts + a->size * a->nelts;
@@ -95,11 +97,10 @@ void *
ngx_array_push_n(ngx_array_t *a, ngx_uint_t n)
{
void *elt, *new;
- size_t size;
ngx_uint_t nalloc;
ngx_pool_t *p;
- size = n * a->size;
+ ngx_array_link_t *link;
if (a->nelts + n > a->nalloc) {
@@ -107,31 +108,27 @@ ngx_array_push_n(ngx_array_t *a, ngx_uin
p = a->pool;
- if ((u_char *) a->elts + a->size * a->nalloc == p->d.last
- && p->d.last + size <= p->d.end)
- {
- /*
- * the array allocation is the last in the pool
- * and there is space for new allocation
- */
+ nalloc = 2 * ((n >= a->nalloc) ? n : a->nalloc);
- p->d.last += size;
- a->nalloc += n;
+ new = ngx_palloc(p, nalloc * a->size);
+ if (new == NULL) {
+ return NULL;
+ }
- } else {
- /* allocate a new array */
+ ngx_memcpy(new, a->elts, a->nelts * a->size);
- nalloc = 2 * ((n >= a->nalloc) ? n : a->nalloc);
+ link = ngx_palloc(p, sizeof(ngx_array_link_t));
+ if (link == NULL) {
+ ngx_pfree(p, new);
+ return NULL;
+ }
- new = ngx_palloc(p, nalloc * a->size);
- if (new == NULL) {
- return NULL;
- }
+ link->next = a->old_elts;
+ link->elts = a->elts;
+ a->old_elts = link;
- ngx_memcpy(new, a->elts, a->nelts * a->size);
- a->elts = new;
- a->nalloc = nalloc;
- }
+ a->elts = new;
+ a->nalloc = nalloc;
}
elt = (u_char *) a->elts + a->size * a->nelts;
diff --minimal '--exclude=*.swp' '--exclude=*~' -up nginx-1.15.6/src/core/ngx_array.h nginx-1.15.6-patched/src/core/ngx_array.h
--- nginx-1.15.6/src/core/ngx_array.h 2016-04-19 09:02:38.000000000 -0700
+++ nginx-1.15.6-patched/src/core/ngx_array.h 2016-04-21 16:25:07.453947190 -0700
@@ -13,12 +13,23 @@
#include <ngx_core.h>
+typedef struct ngx_array_link_s ngx_array_link_t;
+
+
+struct ngx_array_link_s {
+ void *elts;
+ ngx_array_link_t *next;
+};
+
+
typedef struct {
void *elts;
ngx_uint_t nelts;
size_t size;
ngx_uint_t nalloc;
ngx_pool_t *pool;
+
+ ngx_array_link_t *old_elts;
} ngx_array_t;
@@ -40,6 +51,7 @@ ngx_array_init(ngx_array_t *array, ngx_p
array->size = size;
array->nalloc = n;
array->pool = pool;
+ array->old_elts = NULL;
array->elts = ngx_palloc(pool, n * size);
if (array->elts == NULL) {
diff --minimal '--exclude=*.swp' '--exclude=*~' -up nginx-1.15.6/src/core/ngx_palloc.c nginx-1.15.6-patched/src/core/ngx_palloc.c
--- nginx-1.15.6/src/core/ngx_palloc.c 2016-04-19 09:02:38.000000000 -0700
+++ nginx-1.15.6-patched/src/core/ngx_palloc.c 2016-04-21 16:25:45.912282685 -0700
@@ -9,34 +9,26 @@
#include <ngx_core.h>
-static ngx_inline void *ngx_palloc_small(ngx_pool_t *pool, size_t size,
- ngx_uint_t align);
-static void *ngx_palloc_block(ngx_pool_t *pool, size_t size);
-static void *ngx_palloc_large(ngx_pool_t *pool, size_t size);
+static void * ngx_malloc(ngx_pool_t *pool, size_t size);
ngx_pool_t *
ngx_create_pool(size_t size, ngx_log_t *log)
{
- ngx_pool_t *p;
+ ngx_pool_t *p;
- p = ngx_memalign(NGX_POOL_ALIGNMENT, size, log);
+ size = sizeof(ngx_pool_t);
+ p = ngx_alloc(size, log);
if (p == NULL) {
return NULL;
}
- p->d.last = (u_char *) p + sizeof(ngx_pool_t);
- p->d.end = (u_char *) p + size;
- p->d.next = NULL;
- p->d.failed = 0;
+ ngx_memzero(p, size);
size = size - sizeof(ngx_pool_t);
p->max = (size < NGX_MAX_ALLOC_FROM_POOL) ? size : NGX_MAX_ALLOC_FROM_POOL;
p->current = p;
- p->chain = NULL;
- p->large = NULL;
- p->cleanup = NULL;
p->log = log;
return p;
@@ -46,8 +38,7 @@ ngx_create_pool(size_t size, ngx_log_t *
void
ngx_destroy_pool(ngx_pool_t *pool)
{
- ngx_pool_t *p, *n;
- ngx_pool_large_t *l;
+ ngx_pool_data_t *d, *n;
ngx_pool_cleanup_t *c;
for (c = pool->cleanup; c; c = c->next) {
@@ -58,6 +49,11 @@ ngx_destroy_pool(ngx_pool_t *pool)
}
}
+ if (pool->d == NULL) {
+ ngx_free(pool);
+ return;
+ }
+
#if (NGX_DEBUG)
/*
@@ -65,13 +61,9 @@ ngx_destroy_pool(ngx_pool_t *pool)
* so we cannot use this log while free()ing the pool
*/
- for (l = pool->large; l; l = l->next) {
- ngx_log_debug1(NGX_LOG_DEBUG_ALLOC, pool->log, 0, "free: %p", l->alloc);
- }
-
- for (p = pool, n = pool->d.next; /* void */; p = n, n = n->d.next) {
+ for (d = pool->d, n = d->next; ; d = n, n = n->next) {
ngx_log_debug2(NGX_LOG_DEBUG_ALLOC, pool->log, 0,
- "free: %p, unused: %uz", p, p->d.end - p->d.last);
+ "free: %p, unused: %d", d, 0);
if (n == NULL) {
break;
@@ -80,171 +72,82 @@ ngx_destroy_pool(ngx_pool_t *pool)
#endif
- for (l = pool->large; l; l = l->next) {
- if (l->alloc) {
- ngx_free(l->alloc);
- }
- }
-
- for (p = pool, n = pool->d.next; /* void */; p = n, n = n->d.next) {
- ngx_free(p);
+ for (d = pool->d, n = d->next; ; d = n, n = n->next) {
+ ngx_free(d->alloc);
+ ngx_free(d);
if (n == NULL) {
break;
}
}
+
+ pool->d = NULL;
+ ngx_free(pool);
}
void
ngx_reset_pool(ngx_pool_t *pool)
{
- ngx_pool_t *p;
- ngx_pool_large_t *l;
+ ngx_pool_data_t *d, *n;
+ ngx_pool_data_t *saved = NULL;
- for (l = pool->large; l; l = l->next) {
- if (l->alloc) {
- ngx_free(l->alloc);
+ if (pool->d) {
+ for (d = pool->d, n = d->next; ; d = n, n = n->next) {
+ if (d->alloc == pool->log) {
+ saved = d;
+ continue;
+ }
+
+ ngx_free(d->alloc);
+ ngx_free(d);
+
+ if (n == NULL) {
+ break;
+ }
}
- }
- for (p = pool; p; p = p->d.next) {
- p->d.last = (u_char *) p + sizeof(ngx_pool_t);
- p->d.failed = 0;
+ pool->d = saved;
+ pool->current = pool;
+ pool->chain = NULL;
}
-
- pool->current = pool;
- pool->chain = NULL;
- pool->large = NULL;
}
void *
ngx_palloc(ngx_pool_t *pool, size_t size)
{
-#if !(NGX_DEBUG_PALLOC)
- if (size <= pool->max) {
- return ngx_palloc_small(pool, size, 1);
- }
-#endif
-
- return ngx_palloc_large(pool, size);
+ return ngx_malloc(pool, size);
}
void *
ngx_pnalloc(ngx_pool_t *pool, size_t size)
{
-#if !(NGX_DEBUG_PALLOC)
- if (size <= pool->max) {
- return ngx_palloc_small(pool, size, 0);
- }
-#endif
-
- return ngx_palloc_large(pool, size);
-}
-
-
-static ngx_inline void *
-ngx_palloc_small(ngx_pool_t *pool, size_t size, ngx_uint_t align)
-{
- u_char *m;
- ngx_pool_t *p;
-
- p = pool->current;
-
- do {
- m = p->d.last;
-
- if (align) {
- m = ngx_align_ptr(m, NGX_ALIGNMENT);
- }
-
- if ((size_t) (p->d.end - m) >= size) {
- p->d.last = m + size;
-
- return m;
- }
-
- p = p->d.next;
-
- } while (p);
-
- return ngx_palloc_block(pool, size);
-}
-
-
-static void *
-ngx_palloc_block(ngx_pool_t *pool, size_t size)
-{
- u_char *m;
- size_t psize;
- ngx_pool_t *p, *new;
-
- psize = (size_t) (pool->d.end - (u_char *) pool);
-
- m = ngx_memalign(NGX_POOL_ALIGNMENT, psize, pool->log);
- if (m == NULL) {
- return NULL;
- }
-
- new = (ngx_pool_t *) m;
-
- new->d.end = m + psize;
- new->d.next = NULL;
- new->d.failed = 0;
-
- m += sizeof(ngx_pool_data_t);
- m = ngx_align_ptr(m, NGX_ALIGNMENT);
- new->d.last = m + size;
-
- for (p = pool->current; p->d.next; p = p->d.next) {
- if (p->d.failed++ > 4) {
- pool->current = p->d.next;
- }
- }
-
- p->d.next = new;
-
- return m;
+ return ngx_malloc(pool, size);
}
static void *
-ngx_palloc_large(ngx_pool_t *pool, size_t size)
+ngx_malloc(ngx_pool_t *pool, size_t size)
{
- void *p;
- ngx_uint_t n;
- ngx_pool_large_t *large;
+ void *p;
+ ngx_pool_data_t *d;
p = ngx_alloc(size, pool->log);
if (p == NULL) {
return NULL;
}
- n = 0;
-
- for (large = pool->large; large; large = large->next) {
- if (large->alloc == NULL) {
- large->alloc = p;
- return p;
- }
-
- if (n++ > 3) {
- break;
- }
- }
-
- large = ngx_palloc_small(pool, sizeof(ngx_pool_large_t), 1);
- if (large == NULL) {
+ d = ngx_alloc(sizeof(ngx_pool_data_t), pool->log);
+ if (d == NULL){
ngx_free(p);
return NULL;
}
- large->alloc = p;
- large->next = pool->large;
- pool->large = large;
-
+ d->alloc = p;
+ d->next = pool->d;
+ pool->d = d;
return p;
}
@@ -253,38 +156,48 @@ void *
ngx_pmemalign(ngx_pool_t *pool, size_t size, size_t alignment)
{
void *p;
- ngx_pool_large_t *large;
+ ngx_pool_data_t *d;
p = ngx_memalign(alignment, size, pool->log);
if (p == NULL) {
return NULL;
}
- large = ngx_palloc_small(pool, sizeof(ngx_pool_large_t), 1);
- if (large == NULL) {
+ d = ngx_alloc(sizeof(ngx_pool_data_t), pool->log);
+ if (d == NULL){
ngx_free(p);
return NULL;
}
- large->alloc = p;
- large->next = pool->large;
- pool->large = large;
-
+ d->alloc = p;
+ d->next = pool->d;
+ pool->d = d;
return p;
}
ngx_int_t
-ngx_pfree(ngx_pool_t *pool, void *p)
+ngx_pfree(ngx_pool_t *pool, void *data)
{
- ngx_pool_large_t *l;
+ ngx_pool_data_t *p, *d;
- for (l = pool->large; l; l = l->next) {
- if (p == l->alloc) {
- ngx_log_debug1(NGX_LOG_DEBUG_ALLOC, pool->log, 0,
- "free: %p", l->alloc);
- ngx_free(l->alloc);
- l->alloc = NULL;
+ p = NULL;
+ for (d = pool->d; d; p = d, d = d->next) {
+ if (data == d->alloc) {
+
+ ngx_log_debug1(NGX_LOG_DEBUG_ALLOC, pool->log, 0, "free: %p", d->alloc);
+
+ ngx_free(d->alloc);
+ d->alloc = NULL;
+
+ if (p) {
+ p->next = d->next;
+
+ } else {
+ pool->d = d->next;
+ }
+
+ ngx_free(d);
return NGX_OK;
}
diff --minimal '--exclude=*.swp' '--exclude=*~' -up nginx-1.15.6/src/core/ngx_palloc.h nginx-1.15.6-patched/src/core/ngx_palloc.h
--- nginx-1.15.6/src/core/ngx_palloc.h 2016-04-19 09:02:38.000000000 -0700
+++ nginx-1.15.6-patched/src/core/ngx_palloc.h 2016-04-21 16:25:07.454949755 -0700
@@ -38,28 +38,21 @@ struct ngx_pool_cleanup_s {
};
-typedef struct ngx_pool_large_s ngx_pool_large_t;
-
-struct ngx_pool_large_s {
- ngx_pool_large_t *next;
- void *alloc;
-};
+typedef struct ngx_pool_data_s ngx_pool_large_t;
+typedef struct ngx_pool_data_s ngx_pool_data_t;
-typedef struct {
- u_char *last;
- u_char *end;
- ngx_pool_t *next;
- ngx_uint_t failed;
-} ngx_pool_data_t;
+struct ngx_pool_data_s {
+ ngx_pool_data_t *next;
+ void *alloc;
+};
struct ngx_pool_s {
- ngx_pool_data_t d;
+ ngx_pool_data_t *d;
size_t max;
ngx_pool_t *current;
ngx_chain_t *chain;
- ngx_pool_large_t *large;
ngx_pool_cleanup_t *cleanup;
ngx_log_t *log;
};

View File

@ -0,0 +1,26 @@
# HG changeset patch
# User Yichun Zhang <agentzh@gmail.com>
# Date 1386694955 28800
# Node ID 9ba6b149669f1f02eeb4cdc0ebd364a949b5c469
# Parent 30e806b8636af5fd3f03ec17df24801f390f7511
Configure: added new option --with-pcre-conf-opt=OPTIONS.
diff -r 30e806b8636a -r 9ba6b149669f auto/options
--- a/auto/options Mon Dec 09 10:16:44 2013 +0400
+++ b/auto/options Tue Dec 10 09:02:35 2013 -0800
@@ -286,6 +286,7 @@
--with-pcre) USE_PCRE=YES ;;
--with-pcre=*) PCRE="$value" ;;
--with-pcre-opt=*) PCRE_OPT="$value" ;;
+ --with-pcre-conf-opt=*) PCRE_CONF_OPT="$value" ;;
--with-pcre-jit) PCRE_JIT=YES ;;
--with-openssl=*) OPENSSL="$value" ;;
@@ -441,6 +442,7 @@
--with-pcre force PCRE library usage
--with-pcre=DIR set path to PCRE library sources
--with-pcre-opt=OPTIONS set additional build options for PCRE
+ --with-pcre-conf-opt=OPTIONS set additional configure options for PCRE
--with-pcre-jit build PCRE with JIT compilation support
--with-md5=DIR set path to md5 library sources

View File

@ -0,0 +1,211 @@
diff --git a/src/core/nginx.c b/src/core/nginx.c
index 60f8fe7..4bd244b 100644
--- a/src/core/nginx.c
+++ b/src/core/nginx.c
@@ -981,6 +981,7 @@ ngx_core_module_create_conf(ngx_cycle_t *cycle)
ccf->daemon = NGX_CONF_UNSET;
ccf->master = NGX_CONF_UNSET;
+ ccf->privileged_agent = NGX_CONF_UNSET;
ccf->timer_resolution = NGX_CONF_UNSET_MSEC;
ccf->worker_processes = NGX_CONF_UNSET;
@@ -1009,6 +1010,7 @@ ngx_core_module_init_conf(ngx_cycle_t *cycle, void *conf)
ngx_conf_init_value(ccf->daemon, 1);
ngx_conf_init_value(ccf->master, 1);
+ ngx_conf_init_value(ccf->privileged_agent, 0);
ngx_conf_init_msec_value(ccf->timer_resolution, 0);
ngx_conf_init_value(ccf->worker_processes, 1);
diff --git a/src/core/ngx_cycle.h b/src/core/ngx_cycle.h
index c51b7ff..3261f90 100644
--- a/src/core/ngx_cycle.h
+++ b/src/core/ngx_cycle.h
@@ -22,6 +22,9 @@
#define NGX_DEBUG_POINTS_ABORT 2
+#define HAVE_PRIVILEGED_PROCESS_PATCH 1
+
+
typedef struct ngx_shm_zone_s ngx_shm_zone_t;
typedef ngx_int_t (*ngx_shm_zone_init_pt) (ngx_shm_zone_t *zone, void *data);
@@ -81,6 +84,7 @@ struct ngx_cycle_s {
typedef struct {
ngx_flag_t daemon;
ngx_flag_t master;
+ ngx_flag_t privileged_agent;
ngx_msec_t timer_resolution;
diff --git a/src/os/unix/ngx_process_cycle.c b/src/os/unix/ngx_process_cycle.c
index 7cee1c5..c4f70d6 100644
--- a/src/os/unix/ngx_process_cycle.c
+++ b/src/os/unix/ngx_process_cycle.c
@@ -15,6 +15,8 @@ static void ngx_start_worker_processes(ngx_cycle_t *cycle, ngx_int_t n,
ngx_int_t type);
static void ngx_start_cache_manager_processes(ngx_cycle_t *cycle,
ngx_uint_t respawn);
+static void ngx_start_privileged_agent_processes(ngx_cycle_t *cycle,
+ ngx_uint_t respawn);
static void ngx_pass_open_channel(ngx_cycle_t *cycle, ngx_channel_t *ch);
static void ngx_signal_worker_processes(ngx_cycle_t *cycle, int signo);
static ngx_uint_t ngx_reap_children(ngx_cycle_t *cycle);
@@ -24,6 +26,7 @@ static void ngx_worker_process_init(ngx_cycle_t *cycle, ngx_int_t worker);
static void ngx_worker_process_exit(ngx_cycle_t *cycle);
static void ngx_channel_handler(ngx_event_t *ev);
static void ngx_cache_manager_process_cycle(ngx_cycle_t *cycle, void *data);
+static void ngx_privileged_agent_process_cycle(ngx_cycle_t *cycle, void *data);
static void ngx_cache_manager_process_handler(ngx_event_t *ev);
static void ngx_cache_loader_process_handler(ngx_event_t *ev);
@@ -51,6 +54,8 @@ sig_atomic_t ngx_noaccept;
ngx_uint_t ngx_noaccepting;
ngx_uint_t ngx_restart;
+ngx_uint_t ngx_is_privileged_agent;
+
static u_char master_process[] = "master process";
@@ -130,6 +135,7 @@ ngx_master_process_cycle(ngx_cycle_t *cycle)
ngx_start_worker_processes(cycle, ccf->worker_processes,
NGX_PROCESS_RESPAWN);
ngx_start_cache_manager_processes(cycle, 0);
+ ngx_start_privileged_agent_processes(cycle, 0);
ngx_new_binary = 0;
delay = 0;
@@ -224,6 +230,7 @@ ngx_master_process_cycle(ngx_cycle_t *cycle)
ngx_start_worker_processes(cycle, ccf->worker_processes,
NGX_PROCESS_RESPAWN);
ngx_start_cache_manager_processes(cycle, 0);
+ ngx_start_privileged_agent_processes(cycle, 0);
ngx_noaccepting = 0;
continue;
@@ -243,6 +250,7 @@ ngx_master_process_cycle(ngx_cycle_t *cycle)
ngx_start_worker_processes(cycle, ccf->worker_processes,
NGX_PROCESS_JUST_RESPAWN);
ngx_start_cache_manager_processes(cycle, 1);
+ ngx_start_privileged_agent_processes(cycle, 1);
/* allow new processes to start */
ngx_msleep(100);
@@ -257,6 +265,7 @@ ngx_master_process_cycle(ngx_cycle_t *cycle)
ngx_start_worker_processes(cycle, ccf->worker_processes,
NGX_PROCESS_RESPAWN);
ngx_start_cache_manager_processes(cycle, 0);
+ ngx_start_privileged_agent_processes(cycle, 0);
live = 1;
}
@@ -424,6 +433,34 @@ ngx_start_cache_manager_processes(ngx_cycle_t *cycle, ngx_uint_t respawn)
static void
+ngx_start_privileged_agent_processes(ngx_cycle_t *cycle, ngx_uint_t respawn)
+{
+ ngx_channel_t ch;
+ ngx_core_conf_t *ccf;
+
+ ccf = (ngx_core_conf_t *) ngx_get_conf(cycle->conf_ctx,
+ ngx_core_module);
+
+ if (!ccf->privileged_agent) {
+ return;
+ }
+
+ ngx_spawn_process(cycle, ngx_privileged_agent_process_cycle,
+ "privileged agent process", "privileged agent process",
+ respawn ? NGX_PROCESS_JUST_RESPAWN : NGX_PROCESS_RESPAWN);
+
+ ngx_memzero(&ch, sizeof(ngx_channel_t));
+
+ ch.command = NGX_CMD_OPEN_CHANNEL;
+ ch.pid = ngx_processes[ngx_process_slot].pid;
+ ch.slot = ngx_process_slot;
+ ch.fd = ngx_processes[ngx_process_slot].channel[0];
+
+ ngx_pass_open_channel(cycle, &ch);
+}
+
+
+static void
ngx_pass_open_channel(ngx_cycle_t *cycle, ngx_channel_t *ch)
{
ngx_int_t i;
@@ -827,7 +864,10 @@ ngx_worker_process_init(ngx_cycle_t *cycle, ngx_int_t worker)
}
}
- if (geteuid() == 0) {
+ /*
+ * privileged agent process has the same permission as master process
+ */
+ if (!ngx_is_privileged_agent && geteuid() == 0) {
if (setgid(ccf->group) == -1) {
ngx_log_error(NGX_LOG_EMERG, cycle->log, ngx_errno,
"setgid(%d) failed", ccf->group);
@@ -1144,6 +1184,47 @@ ngx_cache_manager_process_cycle(ngx_cycle_t *cycle, void *data)
static void
+ngx_privileged_agent_process_cycle(ngx_cycle_t *cycle, void *data)
+{
+ char *name = data;
+
+ /*
+ * Set correct process type since closing listening Unix domain socket
+ * in a master process also removes the Unix domain socket file.
+ */
+ ngx_process = NGX_PROCESS_HELPER;
+ ngx_is_privileged_agent = 1;
+
+ ngx_close_listening_sockets(cycle);
+
+ /* Set a moderate number of connections for a helper process. */
+ cycle->connection_n = 512;
+
+ ngx_worker_process_init(cycle, -1);
+
+ ngx_use_accept_mutex = 0;
+
+ ngx_setproctitle(name);
+
+ for ( ;; ) {
+
+ if (ngx_terminate || ngx_quit) {
+ ngx_log_error(NGX_LOG_NOTICE, cycle->log, 0, "exiting");
+ ngx_worker_process_exit(cycle);
+ }
+
+ if (ngx_reopen) {
+ ngx_reopen = 0;
+ ngx_log_error(NGX_LOG_NOTICE, cycle->log, 0, "reopening logs");
+ ngx_reopen_files(cycle, -1);
+ }
+
+ ngx_process_events_and_timers(cycle);
+ }
+}
+
+
+static void
ngx_cache_manager_process_handler(ngx_event_t *ev)
{
time_t next, n;
diff --git a/src/os/unix/ngx_process_cycle.h b/src/os/unix/ngx_process_cycle.h
index 69495d5..5149396 100644
--- a/src/os/unix/ngx_process_cycle.h
+++ b/src/os/unix/ngx_process_cycle.h
@@ -45,6 +45,7 @@ extern ngx_pid_t ngx_new_binary;
extern ngx_uint_t ngx_inherited;
extern ngx_uint_t ngx_daemonized;
extern ngx_uint_t ngx_exiting;
+extern ngx_uint_t ngx_is_privileged_agent;
extern sig_atomic_t ngx_reap;
extern sig_atomic_t ngx_sigio;

View File

@ -0,0 +1,19 @@
--- nginx-1.15.6/src/http/modules/ngx_http_proxy_module.c 2017-07-16 14:02:51.000000000 +0800
+++ nginx-1.15.6-patched/src/http/modules/ngx_http_proxy_module.c 2017-07-16 14:02:51.000000000 +0800
@@ -793,13 +793,13 @@ static ngx_keyval_t ngx_http_proxy_cach
static ngx_http_variable_t ngx_http_proxy_vars[] = {
{ ngx_string("proxy_host"), NULL, ngx_http_proxy_host_variable, 0,
- NGX_HTTP_VAR_CHANGEABLE|NGX_HTTP_VAR_NOCACHEABLE|NGX_HTTP_VAR_NOHASH, 0 },
+ NGX_HTTP_VAR_CHANGEABLE|NGX_HTTP_VAR_NOCACHEABLE, 0 },
{ ngx_string("proxy_port"), NULL, ngx_http_proxy_port_variable, 0,
- NGX_HTTP_VAR_CHANGEABLE|NGX_HTTP_VAR_NOCACHEABLE|NGX_HTTP_VAR_NOHASH, 0 },
+ NGX_HTTP_VAR_CHANGEABLE|NGX_HTTP_VAR_NOCACHEABLE, 0 },
{ ngx_string("proxy_add_x_forwarded_for"), NULL,
- ngx_http_proxy_add_x_forwarded_for_variable, 0, NGX_HTTP_VAR_NOHASH, 0 },
+ ngx_http_proxy_add_x_forwarded_for_variable, 0, 0, 0 },
#if 0
{ ngx_string("proxy_add_via"), NULL, NULL, 0, NGX_HTTP_VAR_NOHASH, 0 },

View File

@ -0,0 +1,263 @@
diff --git a/src/core/ngx_resolver.c b/src/core/ngx_resolver.c
index cd55520c..dade1846 100644
--- a/src/core/ngx_resolver.c
+++ b/src/core/ngx_resolver.c
@@ -9,12 +9,26 @@
#include <ngx_core.h>
#include <ngx_event.h>
+#if !(NGX_WIN32)
+#include <resolv.h>
+#endif
+
#define NGX_RESOLVER_UDP_SIZE 4096
#define NGX_RESOLVER_TCP_RSIZE (2 + 65535)
#define NGX_RESOLVER_TCP_WSIZE 8192
+#if !(NGX_WIN32)
+/*
+ * note that 2KB should be more than enough for majority of the
+ * resolv.conf files out there. it also acts as a safety guard to prevent
+ * abuse.
+ */
+#define NGX_RESOLVER_FILE_BUF_SIZE 2048
+#define NGX_RESOLVER_FILE_NAME "/etc/resolv.conf"
+#endif
+
typedef struct {
u_char ident_hi;
@@ -131,6 +145,191 @@ static ngx_resolver_node_t *ngx_resolver_lookup_addr6(ngx_resolver_t *r,
#endif
+#if !(NGX_WIN32)
+static ngx_int_t
+ngx_resolver_read_resolv_conf(ngx_conf_t *cf, ngx_resolver_t *r, u_char *path,
+ size_t path_len)
+{
+ ngx_url_t u;
+ ngx_resolver_connection_t *rec;
+ ngx_fd_t fd;
+ ngx_file_t file;
+ u_char buf[NGX_RESOLVER_FILE_BUF_SIZE];
+ u_char ipv6_buf[NGX_INET6_ADDRSTRLEN];
+ ngx_uint_t address = 0, j, total = 0;
+ ssize_t n, i;
+ enum {
+ sw_nameserver,
+ sw_spaces,
+ sw_address,
+ sw_skip
+ } state;
+
+ file.name.data = path;
+ file.name.len = path_len;
+
+ if (ngx_conf_full_name(cf->cycle, &file.name, 1) != NGX_OK) {
+ return NGX_ERROR;
+ }
+
+ fd = ngx_open_file(file.name.data, NGX_FILE_RDONLY,
+ NGX_FILE_OPEN, 0);
+
+ if (fd == NGX_INVALID_FILE) {
+ ngx_conf_log_error(NGX_LOG_EMERG, cf, ngx_errno,
+ ngx_open_file_n " \"%s\" failed", file.name.data);
+
+ return NGX_ERROR;
+ }
+
+ ngx_memzero(&file, sizeof(ngx_file_t));
+
+ file.fd = fd;
+ file.log = cf->log;
+
+ state = sw_nameserver;
+
+ n = ngx_read_file(&file, buf, NGX_RESOLVER_FILE_BUF_SIZE, 0);
+
+ if (n == NGX_ERROR) {
+ ngx_conf_log_error(NGX_LOG_ALERT, cf, ngx_errno,
+ ngx_read_file_n " \"%s\" failed", file.name.data);
+ }
+
+ if (ngx_close_file(file.fd) == NGX_FILE_ERROR) {
+ ngx_conf_log_error(NGX_LOG_ALERT, cf, ngx_errno,
+ ngx_close_file_n " \"%s\" failed", file.name.data);
+ }
+
+ if (n == NGX_ERROR) {
+ return NGX_ERROR;
+ }
+
+ if (n == 0) {
+ return NGX_OK;
+ }
+
+ for (i = 0; i < n && total < MAXNS; /* void */) {
+ if (buf[i] == '#' || buf[i] == ';') {
+ state = sw_skip;
+ }
+
+ switch (state) {
+
+ case sw_nameserver:
+
+ if ((size_t) n - i >= sizeof("nameserver") - 1
+ && ngx_memcmp(buf + i, "nameserver",
+ sizeof("nameserver") - 1) == 0)
+ {
+ state = sw_spaces;
+ i += sizeof("nameserver") - 1;
+
+ continue;
+ }
+
+ break;
+
+ case sw_spaces:
+ if (buf[i] != '\t' && buf[i] != ' ') {
+ address = i;
+ state = sw_address;
+ }
+
+ break;
+
+ case sw_address:
+
+ if (buf[i] == CR || buf[i] == LF || i == n - 1) {
+ ngx_memzero(&u, sizeof(ngx_url_t));
+
+ u.url.data = buf + address;
+
+ if (i == n - 1 && buf[i] != CR && buf[i] != LF) {
+ u.url.len = n - address;
+
+ } else {
+ u.url.len = i - address;
+ }
+
+ u.default_port = 53;
+
+ /* IPv6? */
+ if (ngx_strlchr(u.url.data, u.url.data + u.url.len,
+ ':') != NULL)
+ {
+ if (u.url.len + 2 > sizeof(ipv6_buf)) {
+ ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
+ "IPv6 resolver address is too long:"
+ " \"%V\"", &u.url);
+
+ return NGX_ERROR;
+ }
+
+ ipv6_buf[0] = '[';
+ ngx_memcpy(ipv6_buf + 1, u.url.data, u.url.len);
+ ipv6_buf[u.url.len + 1] = ']';
+
+ u.url.data = ipv6_buf;
+ u.url.len = u.url.len + 2;
+ }
+
+ if (ngx_parse_url(cf->pool, &u) != NGX_OK) {
+ if (u.err) {
+ ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
+ "%s in resolver \"%V\"",
+ u.err, &u.url);
+ }
+
+ return NGX_ERROR;
+ }
+
+ rec = ngx_array_push_n(&r->connections, u.naddrs);
+ if (rec == NULL) {
+ return NGX_ERROR;
+ }
+
+ ngx_memzero(rec, u.naddrs * sizeof(ngx_resolver_connection_t));
+
+ for (j = 0; j < u.naddrs; j++) {
+ rec[j].sockaddr = u.addrs[j].sockaddr;
+ rec[j].socklen = u.addrs[j].socklen;
+ rec[j].server = u.addrs[j].name;
+ rec[j].resolver = r;
+ }
+
+ total++;
+
+#if (NGX_DEBUG)
+ /*
+ * logs with level below NGX_LOG_NOTICE will not be printed
+ * in this early phase
+ */
+ ngx_conf_log_error(NGX_LOG_NOTICE, cf, 0,
+ "parsed a resolver: \"%V\"", &u.url);
+#endif
+
+ state = sw_nameserver;
+ }
+
+ break;
+
+ case sw_skip:
+ if (buf[i] == CR || buf[i] == LF) {
+ state = sw_nameserver;
+ }
+
+ break;
+ }
+
+ i++;
+ }
+
+ return NGX_OK;
+}
+#endif
+
+
ngx_resolver_t *
ngx_resolver_create(ngx_conf_t *cf, ngx_str_t *names, ngx_uint_t n)
{
@@ -246,6 +445,39 @@ ngx_resolver_create(ngx_conf_t *cf, ngx_str_t *names, ngx_uint_t n)
}
#endif
+#if !(NGX_WIN32)
+ if (ngx_strncmp(names[i].data, "local=", 6) == 0) {
+
+ if (ngx_strcmp(&names[i].data[6], "on") == 0) {
+ if (ngx_resolver_read_resolv_conf(cf, r,
+ (u_char *)
+ NGX_RESOLVER_FILE_NAME,
+ sizeof(NGX_RESOLVER_FILE_NAME)
+ - 1)
+ != NGX_OK)
+ {
+ ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
+ "unable to parse local resolver");
+ return NULL;
+ }
+
+ } else if (ngx_strcmp(&names[i].data[6], "off") != 0) {
+ if (ngx_resolver_read_resolv_conf(cf, r,
+ &names[i].data[6],
+ names[i].len - 6)
+ != NGX_OK)
+ {
+ ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
+ "unable to parse local resolver");
+ return NULL;
+ }
+
+ }
+
+ continue;
+ }
+#endif
+
ngx_memzero(&u, sizeof(ngx_url_t));
u.url = names[i];

View File

@ -0,0 +1,56 @@
# HG changeset patch
# User Thibault Charbonnier <thibaultcha@fastmail.com>
# Date 1481847421 28800
# Thu Dec 15 16:17:01 2016 -0800
# Node ID 8bf038fe006fd8ae253d6b41fc6cf109a8912d3e
# Parent a3dc657f4e9530623683e6b85bd7492662e4dc47
Resolver: ignore ipv6=off resolver option when no ipv6 support
Makes the resolver directive more robust: we only error out when ipv6
resolution is desired but not supported (ipv6=on).
use case 1: some configurations are sometimes re-used between builds with and
without ipv6 support. This patch avoids the need to remove the "ipv6=off" flag.
use case 2: currently, some tools rely on the --with-ipv6 configure option from
"nginx -V" to determine if ipv6 resolution should be disabled in some cases.
With this option disappearing in Nginx 1.11.5, this patch would allow such tools
to assume "ipv6=off" to be safe regardless of ipv6 support in the current
build.
diff --git a/src/core/ngx_resolver.c b/src/core/ngx_resolver.c
index dade1846..5a3f0aa4 100644
--- a/src/core/ngx_resolver.c
+++ b/src/core/ngx_resolver.c
@@ -426,14 +426,22 @@ ngx_resolver_create(ngx_conf_t *cf, ngx_str_t *names, ngx_uint_t n)
continue;
}
-#if (NGX_HAVE_INET6)
if (ngx_strncmp(names[i].data, "ipv6=", 5) == 0) {
if (ngx_strcmp(&names[i].data[5], "on") == 0) {
+#if (NGX_HAVE_INET6)
r->ipv6 = 1;
+#else
+ ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
+ "no ipv6 support but \"%V\" in resolver",
+ &names[i]);
+ return NULL;
+#endif
} else if (ngx_strcmp(&names[i].data[5], "off") == 0) {
+#if (NGX_HAVE_INET6)
r->ipv6 = 0;
+#endif
} else {
ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
@@ -443,7 +451,6 @@ ngx_resolver_create(ngx_conf_t *cf, ngx_str_t *names, ngx_uint_t n)
continue;
}
-#endif
#if !(NGX_WIN32)
if (ngx_strncmp(names[i].data, "local=", 6) == 0) {

Some files were not shown because too many files have changed in this diff Show More