Re: [PATCH] Fix ngx_max_sockets variable, set actual value after use setrlimit(RLIMIT_NOFILE)
Hello! On Thu, Oct 24, 2019 at 01:38:38PM +, i...@morfi.ru wrote: > # HG changeset patch > # User Andrey Kolyshkin > # Date 1571924112 -10800 > # Thu Oct 24 16:35:12 2019 +0300 > # Node ID dfae615e676214a83b91abfbb51c334cfb1ecfdd > # Parent 89adf49fe76ada86d84e2af8f5cee9ca8c3dca19 > Fix ngx_max_sockets variable, set actual value after use > setrlimit(RLIMIT_NOFILE) > > diff -r 89adf49fe76a -r dfae615e6762 src/os/unix/ngx_process_cycle.c > --- a/src/os/unix/ngx_process_cycle.c Mon Oct 21 20:22:30 2019 +0300 > +++ b/src/os/unix/ngx_process_cycle.c Thu Oct 24 16:35:12 2019 +0300 > @@ -811,6 +811,8 @@ > ngx_log_error(NGX_LOG_ALERT, cycle->log, ngx_errno, >"setrlimit(RLIMIT_NOFILE, %i) failed", >ccf->rlimit_nofile); > +} else { > +ngx_max_sockets = ccf->rlimit_nofile; > } > } > I'm not what the intended semantics of the ngx_max_sockets variable is, but given that it is not used - I don't think it matters, and the existing semantics of being rlimit_nofile at the time of nginx start is good enough. On the other hand, the change suggested breaks any possible intended semantics, as successful setrlimit() does not mean that the specified limit was actually applied. -- Maxim Dounin http://mdounin.ru/ ___ nginx-devel mailing list nginx-devel@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-devel
[PATCH] Fix ngx_max_sockets variable, set actual value after use setrlimit(RLIMIT_NOFILE)
# HG changeset patch # User Andrey Kolyshkin # Date 1571924112 -10800 # Thu Oct 24 16:35:12 2019 +0300 # Node ID dfae615e676214a83b91abfbb51c334cfb1ecfdd # Parent 89adf49fe76ada86d84e2af8f5cee9ca8c3dca19 Fix ngx_max_sockets variable, set actual value after use setrlimit(RLIMIT_NOFILE) diff -r 89adf49fe76a -r dfae615e6762 src/os/unix/ngx_process_cycle.c --- a/src/os/unix/ngx_process_cycle.c Mon Oct 21 20:22:30 2019 +0300 +++ b/src/os/unix/ngx_process_cycle.c Thu Oct 24 16:35:12 2019 +0300 @@ -811,6 +811,8 @@ ngx_log_error(NGX_LOG_ALERT, cycle->log, ngx_errno, "setrlimit(RLIMIT_NOFILE, %i) failed", ccf->rlimit_nofile); +} else { +ngx_max_sockets = ccf->rlimit_nofile; } } ___ nginx-devel mailing list nginx-devel@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-devel
[njs] Fixed [[Prototype]] slot of NativeErrors.
details: https://hg.nginx.org/njs/rev/84cb3fa5d1cc branches: changeset: 1200:84cb3fa5d1cc user: Dmitry Volyntsev date: Thu Oct 24 16:17:16 2019 +0300 description: Fixed [[Prototype]] slot of NativeErrors. diffstat: src/njs_builtin.c| 86 +--- src/test/njs_unit_test.c | 227 ++ 2 files changed, 81 insertions(+), 232 deletions(-) diffs (405 lines): diff -r a908c2ef62ca -r 84cb3fa5d1cc src/njs_builtin.c --- a/src/njs_builtin.c Thu Oct 24 16:17:16 2019 +0300 +++ b/src/njs_builtin.c Thu Oct 24 16:17:16 2019 +0300 @@ -318,6 +318,7 @@ njs_builtin_objects_create(njs_vm_t *vm) for (p = njs_constructor_init; *p != NULL; p++) { obj = *p; +func->object.type = NJS_FUNCTION; func->object.shared = 0; func->object.extensible = 1; func->native = 1; @@ -351,76 +352,76 @@ njs_prototype_function(njs_vm_t *vm, njs /* * Object(), - * Object.__proto__ -> Function_Prototype, - * Object_Prototype.__proto__ -> null, + * Object.__proto__ -> Function.prototype, + * Object.prototype.__proto__ -> null, * the null value is handled by njs_object_prototype_proto(), * * Array(), - * Array.__proto__ -> Function_Prototype, - * Array_Prototype.__proto__-> Object_Prototype, + * Array.__proto__ -> Function.prototype, + * Array.prototype.__proto__-> Object.prototype, * * Boolean(), - * Boolean.__proto__-> Function_Prototype, - * Boolean_Prototype.__proto__ -> Object_Prototype, + * Boolean.__proto__-> Function.prototype, + * Boolean.prototype.__proto__ -> Object.prototype, * * Number(), - * Number.__proto__ -> Function_Prototype, - * Number_Prototype.__proto__ -> Object_Prototype, + * Number.__proto__ -> Function.prototype, + * Number.prototype.__proto__ -> Object.prototype, * * String(), - * String.__proto__ -> Function_Prototype, - * String_Prototype.__proto__ -> Object_Prototype, + * String.__proto__ -> Function.prototype, + * String.prototype.__proto__ -> Object.prototype, * * Function(), - * Function.__proto__ -> Function_Prototype, - * Function_Prototype.__proto__ -> Object_Prototype, + * Function.__proto__ -> Function.prototype, + * Function.prototype.__proto__ -> Object.prototype, * * RegExp(), - * RegExp.__proto__ -> Function_Prototype, - * RegExp_Prototype.__proto__ -> Object_Prototype, + * RegExp.__proto__ -> Function.prototype, + * RegExp.prototype.__proto__ -> Object.prototype, * * Date(), - * Date.__proto__ -> Function_Prototype, - * Date_Prototype.__proto__ -> Object_Prototype, + * Date.__proto__ -> Function.prototype, + * Date.prototype.__proto__ -> Object.prototype, * * Error(), - * Error.__proto__ -> Function_Prototype, - * Error_Prototype.__proto__ -> Object_Prototype, + * Error.__proto__ -> Function.prototype, + * Error.prototype.__proto__ -> Object.prototype, * * EvalError(), - * EvalError.__proto__ -> Function_Prototype, - * EvalError_Prototype.__proto__ -> Error_Prototype, + * EvalError.__proto__ -> Error, + * EvalError.prototype.__proto__ -> Error.prototype, * * InternalError(), - * InternalError.__proto__ -> Function_Prototype, - * InternalError_Prototype.__proto__ -> Error_Prototype, + * InternalError.__proto__ -> Error, + * InternalError.prototype.__proto__ -> Error.prototype, * * RangeError(), - * RangeError.__proto__ -> Function_Prototype, - * RangeError_Prototype.__proto__ -> Error_Prototype, + * RangeError.__proto__ -> Error, + * RangeError.prototype.__proto__ -> Error.prototype, * * ReferenceError(), - * ReferenceError.__proto__ -> Function_Prototype, - * ReferenceError_Prototype.__proto__ -> Error_Prototype, + * ReferenceError.__proto__ -> Error, + * ReferenceError.prototype.__proto__ -> Error.prototype, * * SyntaxError(), - * SyntaxError.__proto__ -> Function_Prototype, - * SyntaxError_Prototype.__proto__ -> Error_Prototype, + * SyntaxError.__proto__ -> Error, + * SyntaxError.prototype.__proto__ -> Error.prototype, * * TypeError(), - * TypeError.__proto__ -> Function_Prototype, - * TypeError_Prototype.__proto__ -> Error_Prototype, + * TypeError.__proto__ -> Error, + * TypeError.prototype.__proto__ -> Error.prototype, * * URIError(), - * URIError.__proto__ -> Function_Prototype, - * URIError_Prototype.__proto__ -> Error_Prototype, + * URIError.__proto__ -> Error, + * URIError.prototype.__proto__ -> Error.prototype, * * MemoryError(), - * MemoryError.__proto__ -> Function_Prototype, - * MemoryError_Prototype.__proto__ -> Error_Prototype, + * MemoryError.__proto__ -> Error, + *
[njs] Fixed NativeError.prototype.message properties.
details: https://hg.nginx.org/njs/rev/d849bf348b0d branches: changeset: 1201:d849bf348b0d user: Dmitry Volyntsev date: Thu Oct 24 16:17:17 2019 +0300 description: Fixed NativeError.prototype.message properties. diffstat: src/njs_error.c | 56 src/test/njs_unit_test.c | 4 ++- test/njs_expect_test.exp | 3 ++ 3 files changed, 62 insertions(+), 1 deletions(-) diffs (139 lines): diff -r 84cb3fa5d1cc -r d849bf348b0d src/njs_error.c --- a/src/njs_error.c Thu Oct 24 16:17:16 2019 +0300 +++ b/src/njs_error.c Thu Oct 24 16:17:17 2019 +0300 @@ -779,6 +779,14 @@ static const njs_object_prop_t njs_eval }, { +.type = NJS_PROPERTY, +.name = njs_string("message"), +.value = njs_string(""), +.writable = 1, +.configurable = 1, +}, + +{ .type = NJS_PROPERTY_HANDLER, .name = njs_string("constructor"), .value = njs_prop_handler(njs_object_prototype_create_constructor), @@ -827,6 +835,14 @@ static const njs_object_prop_t njs_inte { .type = NJS_PROPERTY, +.name = njs_string("message"), +.value = njs_string(""), +.writable = 1, +.configurable = 1, +}, + +{ +.type = NJS_PROPERTY, .name = njs_string("toString"), .value = njs_native_function(njs_internal_error_prototype_to_string, 0), .writable = 1, @@ -853,6 +869,14 @@ static const njs_object_prop_t njs_rang }, { +.type = NJS_PROPERTY, +.name = njs_string("message"), +.value = njs_string(""), +.writable = 1, +.configurable = 1, +}, + +{ .type = NJS_PROPERTY_HANDLER, .name = njs_string("constructor"), .value = njs_prop_handler(njs_object_prototype_create_constructor), @@ -880,6 +904,14 @@ static const njs_object_prop_t njs_refe }, { +.type = NJS_PROPERTY, +.name = njs_string("message"), +.value = njs_string(""), +.writable = 1, +.configurable = 1, +}, + +{ .type = NJS_PROPERTY_HANDLER, .name = njs_string("constructor"), .value = njs_prop_handler(njs_object_prototype_create_constructor), @@ -907,6 +939,14 @@ static const njs_object_prop_t njs_synt }, { +.type = NJS_PROPERTY, +.name = njs_string("message"), +.value = njs_string(""), +.writable = 1, +.configurable = 1, +}, + +{ .type = NJS_PROPERTY_HANDLER, .name = njs_string("constructor"), .value = njs_prop_handler(njs_object_prototype_create_constructor), @@ -934,6 +974,14 @@ static const njs_object_prop_t njs_type }, { +.type = NJS_PROPERTY, +.name = njs_string("message"), +.value = njs_string(""), +.writable = 1, +.configurable = 1, +}, + +{ .type = NJS_PROPERTY_HANDLER, .name = njs_string("constructor"), .value = njs_prop_handler(njs_object_prototype_create_constructor), @@ -962,6 +1010,14 @@ static const njs_object_prop_t njs_uri_ { .type = NJS_PROPERTY, +.name = njs_string("message"), +.value = njs_string(""), +.writable = 1, +.configurable = 1, +}, + +{ +.type = NJS_PROPERTY, .name = njs_string("name"), .value = njs_string("URIError"), .writable = 1, diff -r 84cb3fa5d1cc -r d849bf348b0d src/test/njs_unit_test.c --- a/src/test/njs_unit_test.c Thu Oct 24 16:17:16 2019 +0300 +++ b/src/test/njs_unit_test.c Thu Oct 24 16:17:17 2019 +0300 @@ -8710,11 +8710,13 @@ static njs_unit_test_t njs_test[] = " var name2 = (inst = e('e'), inst.name = 'E', inst.toString() === 'E: e');" " var name3 = (inst = e('e'), inst.name = '', inst.toString() === 'e');" " var name4 = e().toString() === `${e.prototype.name}`;" +" var name_prop = Object.getOwnPropertyDescriptor(e.prototype, 'message');" +" name_prop = name_prop.writable && !name_prop.enumerable && name_prop.configurable;" " var own_proto_ctor = e.prototype.hasOwnProperty('constructor');" "" " return proto && proto2 && iproto && iproto2 " " && tpof && ctor && msg && name && name2 && name3 && name4 " -" && own_proto_ctor;" +" && name_prop && own_proto_ctor;" "};" "[" " EvalError," diff -r 84cb3fa5d1cc -r d849bf348b0d test/njs_expect_test.exp --- a/test/njs_expect_test.exp Thu Oct 24 16:17:16 2019 +0300 +++ b/test/njs_expect_test.exp Thu Oct 24 16:17:17 2019 +0300 @@ -766,6 +766,9 @@ njs_test { "Error: loading exception\r\nat module \\(loading_exception.js:1\\)"} {"import lib3 from 'lib1.js'\r\n" "undefined\r\n"} +} "-p test/module/" + +njs_test { {"import m from 'export_name.js'\r\n"
[njs] Refactoring Error value types.
details: https://hg.nginx.org/njs/rev/a908c2ef62ca branches: changeset: 1199:a908c2ef62ca user: Dmitry Volyntsev date: Thu Oct 24 16:17:16 2019 +0300 description: Refactoring Error value types. Eliminating special value types (njs_value_type_t) for error instance objects. According to the spec error instance objects are ordinary objects which have an [[ErrorData]] internal slot. diffstat: src/njs_builtin.c| 16 src/njs_error.c | 38 -- src/njs_error.h | 22 +++--- src/njs_fs.c | 4 ++-- src/njs_generator.c | 3 ++- src/njs_json.c | 11 ++- src/njs_module.c | 1 + src/njs_object.c | 15 ++- src/njs_parser.c | 6 +++--- src/njs_parser.h | 9 + src/njs_value.c | 32 src/njs_value.h | 29 ++--- src/njs_vm.c | 10 +++--- src/njs_vm.h | 6 +++--- src/njs_vmcode.c | 10 +- src/test/njs_unit_test.c | 12 16 files changed, 97 insertions(+), 127 deletions(-) diffs (663 lines): diff -r b02b79e30d4a -r a908c2ef62ca src/njs_builtin.c --- a/src/njs_builtin.c Thu Oct 24 16:15:01 2019 +0300 +++ b/src/njs_builtin.c Thu Oct 24 16:17:16 2019 +0300 @@ -152,14 +152,14 @@ const njs_object_prototype_t njs_protot { .object_value = { .value = njs_value(NJS_DATA, 0, 0.0), .object = { .type = NJS_OBJECT } } }, -{ .object = { .type = NJS_OBJECT_ERROR } }, -{ .object = { .type = NJS_OBJECT_EVAL_ERROR } }, -{ .object = { .type = NJS_OBJECT_INTERNAL_ERROR } }, -{ .object = { .type = NJS_OBJECT_RANGE_ERROR } }, -{ .object = { .type = NJS_OBJECT_REF_ERROR } }, -{ .object = { .type = NJS_OBJECT_SYNTAX_ERROR } }, -{ .object = { .type = NJS_OBJECT_TYPE_ERROR } }, -{ .object = { .type = NJS_OBJECT_URI_ERROR } }, +{ .object = { .type = NJS_OBJECT } }, +{ .object = { .type = NJS_OBJECT } }, +{ .object = { .type = NJS_OBJECT } }, +{ .object = { .type = NJS_OBJECT } }, +{ .object = { .type = NJS_OBJECT } }, +{ .object = { .type = NJS_OBJECT } }, +{ .object = { .type = NJS_OBJECT } }, +{ .object = { .type = NJS_OBJECT } }, }; diff -r b02b79e30d4a -r a908c2ef62ca src/njs_error.c --- a/src/njs_error.c Thu Oct 24 16:15:01 2019 +0300 +++ b/src/njs_error.c Thu Oct 24 16:17:16 2019 +0300 @@ -13,7 +13,7 @@ static const njs_value_t njs_error_name void -njs_error_new(njs_vm_t *vm, njs_value_t *dst, njs_value_type_t type, +njs_error_new(njs_vm_t *vm, njs_value_t *dst, njs_prototype_t type, u_char *start, size_t size) { ssize_tlength; @@ -36,12 +36,12 @@ njs_error_new(njs_vm_t *vm, njs_value_t return; } -njs_set_type_object(dst, error, type); +njs_set_object(dst, error); } void -njs_error_fmt_new(njs_vm_t *vm, njs_value_t *dst, njs_value_type_t type, +njs_error_fmt_new(njs_vm_t *vm, njs_value_t *dst, njs_prototype_t type, const char *fmt, ...) { va_list args; @@ -60,7 +60,7 @@ njs_error_fmt_new(njs_vm_t *vm, njs_valu njs_object_t * -njs_error_alloc(njs_vm_t *vm, njs_value_type_t type, const njs_value_t *name, +njs_error_alloc(njs_vm_t *vm, njs_prototype_t type, const njs_value_t *name, const njs_value_t *message) { njs_int_t ret; @@ -75,10 +75,11 @@ njs_error_alloc(njs_vm_t *vm, njs_value_ njs_lvlhsh_init(>hash); njs_lvlhsh_init(>shared_hash); -error->type = type; +error->type = NJS_OBJECT; error->shared = 0; error->extensible = 1; -error->__proto__ = >prototypes[njs_error_prototype_index(type)].object; +error->error_data = 1; +error->__proto__ = >prototypes[type].object; lhq.replace = 0; lhq.pool = vm->mem_pool; @@ -135,7 +136,7 @@ memory_error: static njs_int_t njs_error_create(njs_vm_t *vm, njs_value_t *args, njs_uint_t nargs, -njs_value_type_t type) +njs_prototype_t type) { njs_int_t ret; njs_value_t *value; @@ -158,7 +159,7 @@ njs_error_create(njs_vm_t *vm, njs_value return NJS_ERROR; } -njs_set_type_object(>retval, error, type); +njs_set_object(>retval, error); return NJS_OK; } @@ -168,7 +169,7 @@ njs_int_t njs_error_constructor(njs_vm_t *vm, njs_value_t *args, njs_uint_t nargs, njs_index_t unused) { -return njs_error_create(vm, args, nargs, NJS_OBJECT_ERROR); +return njs_error_create(vm, args, nargs, NJS_PROTOTYPE_ERROR); } @@ -210,7 +211,7 @@ njs_int_t njs_eval_error_constructor(njs_vm_t *vm, njs_value_t *args, njs_uint_t nargs, njs_index_t unused) { -return njs_error_create(vm, args, nargs, NJS_OBJECT_EVAL_ERROR); +return njs_error_create(vm, args, nargs,
[njs] Fixed heap-buffer-overflow in njs_array_reverse_iterator() function.
details: https://hg.nginx.org/njs/rev/b02b79e30d4a branches: changeset: 1198:b02b79e30d4a user: Alexander Borisov date: Thu Oct 24 16:15:01 2019 +0300 description: Fixed heap-buffer-overflow in njs_array_reverse_iterator() function. Affected JS functions in Array.prototype: lastIndexOf, reduceRight. diffstat: src/njs_array.c | 3 ++- src/test/njs_unit_test.c | 16 2 files changed, 18 insertions(+), 1 deletions(-) diffs (46 lines): diff -r 9e327cd3a33e -r b02b79e30d4a src/njs_array.c --- a/src/njs_array.c Wed Oct 23 14:42:38 2019 +0300 +++ b/src/njs_array.c Thu Oct 24 16:15:01 2019 +0300 @@ -1594,7 +1594,8 @@ njs_array_reverse_iterator(njs_vm_t *vm, } else { /* UTF-8 string. */ -p = njs_string_offset(string_prop.start, end, from + 1); +p = njs_string_offset(string_prop.start, end, from); +p = njs_utf8_next(p, end); i = from + 1; diff -r 9e327cd3a33e -r b02b79e30d4a src/test/njs_unit_test.c --- a/src/test/njs_unit_test.c Wed Oct 23 14:42:38 2019 +0300 +++ b/src/test/njs_unit_test.c Thu Oct 24 16:15:01 2019 +0300 @@ -4407,6 +4407,17 @@ static njs_unit_test_t njs_test[] = "Array.prototype.lastIndexOf.call(o); i"), njs_str("1") }, +{ njs_str("[''].lastIndexOf.call('0а00')"), + njs_str("-1") }, + +{ njs_str("var o = 'ГВБА';" + "Array.prototype.lastIndexOf.call(o, 'Г', 0)"), + njs_str("0") }, + +{ njs_str("var o = 'ГВБА';" + "Array.prototype.lastIndexOf.call(o, 'Г', 4)"), + njs_str("0") }, + { njs_str("[1,2,3,4].includes()"), njs_str("false") }, @@ -5029,6 +5040,11 @@ static njs_unit_test_t njs_test[] = "catch (e) {i += '; ' + e} i"), njs_str("1; TypeError: unexpected iterator arguments") }, +{ njs_str("var m = [];" + "[''].reduceRight.call('0а00', (p, v, i, a) => {m.push(v)});" + "m.join('')"), + njs_str("0а0") }, + { njs_str("var a = ['1','2','3','4','5','6']; a.sort()"), njs_str("1,2,3,4,5,6") }, ___ nginx-devel mailing list nginx-devel@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-devel
[nginx] Core: moved PROXY protocol fields out of ngx_connection_t.
details: https://hg.nginx.org/nginx/rev/06b01840bd42 branches: changeset: 7590:06b01840bd42 user: Roman Arutyunyan date: Mon Oct 21 18:06:19 2019 +0300 description: Core: moved PROXY protocol fields out of ngx_connection_t. Now a new structure ngx_proxy_protocol_t holds these fields. This allows to add more PROXY protocol fields in the future without modifying the connection structure. diffstat: src/core/ngx_connection.h | 3 +- src/core/ngx_core.h | 1 + src/core/ngx_proxy_protocol.c | 57 +++--- src/core/ngx_proxy_protocol.h | 6 +++ src/http/modules/ngx_http_realip_module.c | 7 +-- src/http/ngx_http_variables.c | 23 ++-- src/stream/ngx_stream_realip_module.c | 8 ++-- src/stream/ngx_stream_variables.c | 23 ++-- 8 files changed, 89 insertions(+), 39 deletions(-) diffs (328 lines): diff -r 486d2e0b1b6f -r 06b01840bd42 src/core/ngx_connection.h --- a/src/core/ngx_connection.h Thu Oct 24 13:47:28 2019 +0300 +++ b/src/core/ngx_connection.h Mon Oct 21 18:06:19 2019 +0300 @@ -147,8 +147,7 @@ struct ngx_connection_s { socklen_t socklen; ngx_str_t addr_text; -ngx_str_t proxy_protocol_addr; -in_port_t proxy_protocol_port; +ngx_proxy_protocol_t *proxy_protocol; #if (NGX_SSL || NGX_COMPAT) ngx_ssl_connection_t *ssl; diff -r 486d2e0b1b6f -r 06b01840bd42 src/core/ngx_core.h --- a/src/core/ngx_core.h Thu Oct 24 13:47:28 2019 +0300 +++ b/src/core/ngx_core.h Mon Oct 21 18:06:19 2019 +0300 @@ -26,6 +26,7 @@ typedef struct ngx_event_aio_s ngx typedef struct ngx_connection_s ngx_connection_t; typedef struct ngx_thread_task_s ngx_thread_task_t; typedef struct ngx_ssl_s ngx_ssl_t; +typedef struct ngx_proxy_protocol_s ngx_proxy_protocol_t; typedef struct ngx_ssl_connection_s ngx_ssl_connection_t; typedef struct ngx_udp_connection_s ngx_udp_connection_t; diff -r 486d2e0b1b6f -r 06b01840bd42 src/core/ngx_proxy_protocol.c --- a/src/core/ngx_proxy_protocol.c Thu Oct 24 13:47:28 2019 +0300 +++ b/src/core/ngx_proxy_protocol.c Mon Oct 21 18:06:19 2019 +0300 @@ -47,9 +47,10 @@ static u_char *ngx_proxy_protocol_v2_rea u_char * ngx_proxy_protocol_read(ngx_connection_t *c, u_char *buf, u_char *last) { -size_t len; -u_char ch, *p, *addr, *port; -ngx_int_t n; +size_t len; +u_char ch, *p, *addr, *port; +ngx_int_t n; +ngx_proxy_protocol_t *pp; static const u_char signature[] = "\r\n\r\n\0\r\nQUIT\n"; @@ -105,15 +106,20 @@ ngx_proxy_protocol_read(ngx_connection_t } } -len = p - addr - 1; -c->proxy_protocol_addr.data = ngx_pnalloc(c->pool, len); - -if (c->proxy_protocol_addr.data == NULL) { +pp = ngx_pcalloc(c->pool, sizeof(ngx_proxy_protocol_t)); +if (pp == NULL) { return NULL; } -ngx_memcpy(c->proxy_protocol_addr.data, addr, len); -c->proxy_protocol_addr.len = len; +len = p - addr - 1; + +pp->src_addr.data = ngx_pnalloc(c->pool, len); +if (pp->src_addr.data == NULL) { +return NULL; +} + +ngx_memcpy(pp->src_addr.data, addr, len); +pp->src_addr.len = len; for ( ;; ) { if (p == last) { @@ -145,11 +151,13 @@ ngx_proxy_protocol_read(ngx_connection_t goto invalid; } -c->proxy_protocol_port = (in_port_t) n; +pp->src_port = (in_port_t) n; ngx_log_debug2(NGX_LOG_DEBUG_CORE, c->log, 0, - "PROXY protocol address: %V %d", >proxy_protocol_addr, - c->proxy_protocol_port); + "PROXY protocol address: %V %d", >src_addr, + pp->src_port); + +c->proxy_protocol = pp; skip: @@ -220,6 +228,7 @@ ngx_proxy_protocol_v2_read(ngx_connectio socklen_t socklen; ngx_uint_t version, command, family, transport; ngx_sockaddr_t sockaddr; +ngx_proxy_protocol_t *pp; ngx_proxy_protocol_header_t*header; ngx_proxy_protocol_inet_addrs_t*in; #if (NGX_HAVE_INET6) @@ -266,6 +275,11 @@ ngx_proxy_protocol_v2_read(ngx_connectio return end; } +pp = ngx_pcalloc(c->pool, sizeof(ngx_proxy_protocol_t)); +if (pp == NULL) { +return NULL; +} + family = header->family_transport >> 4; switch (family) { @@ -282,7 +296,7 @@ ngx_proxy_protocol_v2_read(ngx_connectio sockaddr.sockaddr_in.sin_port = 0; memcpy(_in.sin_addr, in->src_addr, 4); -c->proxy_protocol_port = ngx_proxy_protocol_parse_uint16(in->src_port); +pp->src_port = ngx_proxy_protocol_parse_uint16(in->src_port); socklen = sizeof(struct sockaddr_in); @@ -304,7 +318,7 @@ ngx_proxy_protocol_v2_read(ngx_connectio
[nginx] Parsing server PROXY protocol address and port (ticket #1206).
details: https://hg.nginx.org/nginx/rev/89adf49fe76a branches: changeset: 7591:89adf49fe76a user: Roman Arutyunyan date: Mon Oct 21 20:22:30 2019 +0300 description: Parsing server PROXY protocol address and port (ticket #1206). New variables $proxy_protocol_server_addr and $proxy_protocol_server_port are added both to HTTP and Stream. diffstat: src/core/ngx_proxy_protocol.c | 206 - src/core/ngx_proxy_protocol.h |2 + src/http/ngx_http_variables.c | 23 +++- src/stream/ngx_stream_variables.c | 23 +++- 4 files changed, 173 insertions(+), 81 deletions(-) diffs (419 lines): diff -r 06b01840bd42 -r 89adf49fe76a src/core/ngx_proxy_protocol.c --- a/src/core/ngx_proxy_protocol.c Mon Oct 21 18:06:19 2019 +0300 +++ b/src/core/ngx_proxy_protocol.c Mon Oct 21 20:22:30 2019 +0300 @@ -40,6 +40,10 @@ typedef struct { } ngx_proxy_protocol_inet6_addrs_t; +static u_char *ngx_proxy_protocol_read_addr(ngx_connection_t *c, u_char *p, +u_char *last, ngx_str_t *addr); +static u_char *ngx_proxy_protocol_read_port(u_char *p, u_char *last, +in_port_t *port, u_char sep); static u_char *ngx_proxy_protocol_v2_read(ngx_connection_t *c, u_char *buf, u_char *last); @@ -48,8 +52,7 @@ u_char * ngx_proxy_protocol_read(ngx_connection_t *c, u_char *buf, u_char *last) { size_t len; -u_char ch, *p, *addr, *port; -ngx_int_t n; +u_char*p; ngx_proxy_protocol_t *pp; static const u_char signature[] = "\r\n\r\n\0\r\nQUIT\n"; @@ -84,81 +87,48 @@ ngx_proxy_protocol_read(ngx_connection_t } p += 5; -addr = p; - -for ( ;; ) { -if (p == last) { -goto invalid; -} - -ch = *p++; - -if (ch == ' ') { -break; -} - -if (ch != ':' && ch != '.' -&& (ch < 'a' || ch > 'f') -&& (ch < 'A' || ch > 'F') -&& (ch < '0' || ch > '9')) -{ -goto invalid; -} -} pp = ngx_pcalloc(c->pool, sizeof(ngx_proxy_protocol_t)); if (pp == NULL) { return NULL; } -len = p - addr - 1; - -pp->src_addr.data = ngx_pnalloc(c->pool, len); -if (pp->src_addr.data == NULL) { -return NULL; +p = ngx_proxy_protocol_read_addr(c, p, last, >src_addr); +if (p == NULL) { +goto invalid; } -ngx_memcpy(pp->src_addr.data, addr, len); -pp->src_addr.len = len; - -for ( ;; ) { -if (p == last) { -goto invalid; -} - -if (*p++ == ' ') { -break; -} +p = ngx_proxy_protocol_read_addr(c, p, last, >dst_addr); +if (p == NULL) { +goto invalid; } -port = p; - -for ( ;; ) { -if (p == last) { -goto invalid; -} - -if (*p++ == ' ') { -break; -} -} - -len = p - port - 1; - -n = ngx_atoi(port, len); - -if (n < 0 || n > 65535) { +p = ngx_proxy_protocol_read_port(p, last, >src_port, ' '); +if (p == NULL) { goto invalid; } -pp->src_port = (in_port_t) n; +p = ngx_proxy_protocol_read_port(p, last, >dst_port, CR); +if (p == NULL) { +goto invalid; +} -ngx_log_debug2(NGX_LOG_DEBUG_CORE, c->log, 0, - "PROXY protocol address: %V %d", >src_addr, - pp->src_port); +if (p == last) { +goto invalid; +} + +if (*p++ != LF) { +goto invalid; +} + +ngx_log_debug4(NGX_LOG_DEBUG_CORE, c->log, 0, + "PROXY protocol src: %V %d, dst: %V %d", + >src_addr, pp->src_port, >dst_addr, pp->dst_port); c->proxy_protocol = pp; +return p; + skip: for ( /* void */ ; p < last - 1; p++) { @@ -176,6 +146,82 @@ invalid: } +static u_char * +ngx_proxy_protocol_read_addr(ngx_connection_t *c, u_char *p, u_char *last, +ngx_str_t *addr) +{ +size_t len; +u_char ch, *pos; + +pos = p; + +for ( ;; ) { +if (p == last) { +return NULL; +} + +ch = *p++; + +if (ch == ' ') { +break; +} + +if (ch != ':' && ch != '.' +&& (ch < 'a' || ch > 'f') +&& (ch < 'A' || ch > 'F') +&& (ch < '0' || ch > '9')) +{ +return NULL; +} +} + +len = p - pos - 1; + +addr->data = ngx_pnalloc(c->pool, len); +if (addr->data == NULL) { +return NULL; +} + +ngx_memcpy(addr->data, pos, len); +addr->len = len; + +return p; +} + + +static u_char * +ngx_proxy_protocol_read_port(u_char *p, u_char *last, in_port_t *port, +u_char sep) +{ +size_t len; +u_char *pos; +ngx_int_t n; + +pos = p; + +for ( ;; ) { +if (p == last) { +return NULL; +} + +if (*p++ == sep) { +break; +
[nginx] Version bump.
details: https://hg.nginx.org/nginx/rev/486d2e0b1b6f branches: changeset: 7589:486d2e0b1b6f user: Roman Arutyunyan date: Thu Oct 24 13:47:28 2019 +0300 description: Version bump. diffstat: src/core/nginx.h | 4 ++-- 1 files changed, 2 insertions(+), 2 deletions(-) diffs (14 lines): diff -r f292a38a93f5 -r 486d2e0b1b6f src/core/nginx.h --- a/src/core/nginx.h Tue Oct 22 18:16:08 2019 +0300 +++ b/src/core/nginx.h Thu Oct 24 13:47:28 2019 +0300 @@ -9,8 +9,8 @@ #define _NGINX_H_INCLUDED_ -#define nginx_version 1017005 -#define NGINX_VERSION "1.17.5" +#define nginx_version 1017006 +#define NGINX_VERSION "1.17.6" #define NGINX_VER "nginx/" NGINX_VERSION #ifdef NGX_BUILD ___ nginx-devel mailing list nginx-devel@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-devel