[PATCH]add proxy_protocol_port variable for rfc6302

Tomoya Kabe limit.usus at gmail.com
Fri Feb 19 17:44:44 UTC 2016


Hi,

Can anybody check this patch?
I'm eager to use this feature.

2015-12-08 9:35 GMT+09:00 junpei yoshino <junpei.yoshino at gmail.com>:

> Hello,
>
> I made merged patch.
>
> # HG changeset patch
> # User Junpei Yoshino <junpei.yoshino at gmail.com>
> # Date 1449499172 -32400
> #      Mon Dec 07 23:39:32 2015 +0900
> # Node ID f4cd90a03eca5c330f51ac4ba2673e64348c622e
> # Parent  29f35e60840b8eed2927dd3495ef2d8e524862f7
> Http: add proxy_protocol_port variable for rfc6302
>
> diff -r 29f35e60840b -r f4cd90a03eca src/core/ngx_connection.h
> --- a/src/core/ngx_connection.h Mon Dec 07 16:30:48 2015 +0300
> +++ b/src/core/ngx_connection.h Mon Dec 07 23:39:32 2015 +0900
> @@ -146,6 +146,7 @@
>      ngx_str_t           addr_text;
>
>      ngx_str_t           proxy_protocol_addr;
> +    ngx_int_t           proxy_protocol_port;
>
>  #if (NGX_SSL)
>      ngx_ssl_connection_t  *ssl;
> diff -r 29f35e60840b -r f4cd90a03eca src/core/ngx_proxy_protocol.c
> --- a/src/core/ngx_proxy_protocol.c Mon Dec 07 16:30:48 2015 +0300
> +++ b/src/core/ngx_proxy_protocol.c Mon Dec 07 23:39:32 2015 +0900
> @@ -13,7 +13,7 @@
>  ngx_proxy_protocol_read(ngx_connection_t *c, u_char *buf, u_char *last)
>  {
>      size_t  len;
> -    u_char  ch, *p, *addr;
> +    u_char  ch, *p, *addr, *port;
>
>      p = buf;
>      len = last - buf;
> @@ -71,8 +71,40 @@
>      ngx_memcpy(c->proxy_protocol_addr.data, addr, len);
>      c->proxy_protocol_addr.len = len;
>
> -    ngx_log_debug1(NGX_LOG_DEBUG_CORE, c->log, 0,
> -                   "PROXY protocol address: \"%V\"",
> &c->proxy_protocol_addr);
> +    for ( ;; ) {
> +        if (p == last) {
> +            goto invalid;
> +        }
> +
> +        ch = *p++;
> +
> +        if (ch == ' ') {
> +            break;
> +        }
> +    }
> +    port = p;
> +    for ( ;; ) {
> +        if (p == last) {
> +            goto invalid;
> +        }
> +
> +        ch = *p++;
> +
> +        if (ch == ' ') {
> +            break;
> +        }
> +
> +        if (ch < '0' || ch > '9')
> +        {
> +            goto invalid;
> +        }
> +    }
> +    len = p - port - 1;
> +    c->proxy_protocol_port = ngx_atoi(port,len);
> +
> +    ngx_log_debug2(NGX_LOG_DEBUG_CORE, c->log, 0,
> +                   "PROXY protocol address: \"%V\", PROXY protocol
> port: \"%d\"",
> +                   &c->proxy_protocol_addr, c->proxy_protocol_port);
>
>  skip:
>
> diff -r 29f35e60840b -r f4cd90a03eca src/http/ngx_http_variables.c
> --- a/src/http/ngx_http_variables.c Mon Dec 07 16:30:48 2015 +0300
> +++ b/src/http/ngx_http_variables.c Mon Dec 07 23:39:32 2015 +0900
> @@ -58,6 +58,8 @@
>      ngx_http_variable_value_t *v, uintptr_t data);
>  static ngx_int_t ngx_http_variable_proxy_protocol_addr(ngx_http_request_t
> *r,
>      ngx_http_variable_value_t *v, uintptr_t data);
> +static ngx_int_t ngx_http_variable_proxy_protocol_port(ngx_http_request_t
> *r,
> +    ngx_http_variable_value_t *v, uintptr_t data);
>  static ngx_int_t ngx_http_variable_server_addr(ngx_http_request_t *r,
>      ngx_http_variable_value_t *v, uintptr_t data);
>  static ngx_int_t ngx_http_variable_server_port(ngx_http_request_t *r,
> @@ -192,6 +194,9 @@
>      { ngx_string("proxy_protocol_addr"), NULL,
>        ngx_http_variable_proxy_protocol_addr, 0, 0, 0 },
>
> +    { ngx_string("proxy_protocol_port"), NULL,
> +      ngx_http_variable_proxy_protocol_port, 0, 0, 0 },
> +
>      { ngx_string("server_addr"), NULL, ngx_http_variable_server_addr,
> 0, 0, 0 },
>
>      { ngx_string("server_port"), NULL, ngx_http_variable_server_port,
> 0, 0, 0 },
> @@ -1250,6 +1255,29 @@
>
>
>  static ngx_int_t
> +ngx_http_variable_proxy_protocol_port(ngx_http_request_t *r,
> +    ngx_http_variable_value_t *v, uintptr_t data)
> +{
> +    ngx_int_t port = r->connection->proxy_protocol_port;
> +
> +    v->len = 0;
> +    v->valid = 1;
> +    v->no_cacheable = 0;
> +    v->not_found = 0;
> +    v->data = ngx_pnalloc(r->pool, sizeof("65535") - 1);
> +
> +    if (v->data == NULL) {
> +        return NGX_ERROR;
> +    }
> +    if (port > 0 && port < 65536) {
> +        v->len = ngx_sprintf(v->data, "%ui", port) - v->data;
> +    }
> +
> +    return NGX_OK;
> +}
> +
> +
> +static ngx_int_t
>  ngx_http_variable_server_addr(ngx_http_request_t *r,
>      ngx_http_variable_value_t *v, uintptr_t data)
>  {
>
>
> On Tue, Dec 8, 2015 at 12:56 AM, junpei yoshino
> <junpei.yoshino at gmail.com> wrote:
> > Hello.
> >
> > I wrote additional patch.
> >
> > # HG changeset patch
> > # User Junpei Yoshino <junpei.yoshino at gmail.com>
> > # Date 1449499172 -32400
> > #      Mon Dec 07 23:39:32 2015 +0900
> > # Node ID e2984af905ff8cf523b22860620a9f3ff22d555a
> > # Parent  59cadccedf402ec325b078cb72a284465639e0fe
> > Change definition of  proxy_protocol_port
> >
> > diff -r 59cadccedf40 -r e2984af905ff src/core/ngx_connection.h
> > --- a/src/core/ngx_connection.h Thu Nov 05 20:36:47 2015 +0900
> > +++ b/src/core/ngx_connection.h Mon Dec 07 23:39:32 2015 +0900
> > @@ -146,7 +146,7 @@
> >      ngx_str_t           addr_text;
> >
> >      ngx_str_t           proxy_protocol_addr;
> > -    ngx_str_t           proxy_protocol_port;
> > +    ngx_int_t           proxy_protocol_port;
> >
> >  #if (NGX_SSL)
> >      ngx_ssl_connection_t  *ssl;
> > diff -r 59cadccedf40 -r e2984af905ff src/core/ngx_proxy_protocol.c
> > --- a/src/core/ngx_proxy_protocol.c     Thu Nov 05 20:36:47 2015 +0900
> > +++ b/src/core/ngx_proxy_protocol.c     Mon Dec 07 23:39:32 2015 +0900
> > @@ -81,14 +81,6 @@
> >          if (ch == ' ') {
> >              break;
> >          }
> > -
> > -        if (ch != ':' && ch != '.'
> > -            && (ch < 'a' || ch > 'f')
> > -            && (ch < 'A' || ch > 'F')
> > -            && (ch < '0' || ch > '9'))
> > -        {
> > -            goto invalid;
> > -        }
> >      }
> >      port = p;
> >      for ( ;; ) {
> > @@ -108,19 +100,11 @@
> >          }
> >      }
> >      len = p - port - 1;
> > -    c->proxy_protocol_port.data = ngx_pnalloc(c->pool, len);
> > +    c->proxy_protocol_port = ngx_atoi(port,len);
> >
> > -    if (c->proxy_protocol_port.data == NULL) {
> > -        return NULL;
> > -    }
> > -
> > -    ngx_memcpy(c->proxy_protocol_port.data, port, len);
> > -    c->proxy_protocol_port.len = len;
> > -
> > -    ngx_log_debug1(NGX_LOG_DEBUG_CORE, c->log, 0,
> > -                   "PROXY protocol address: \"%V\"",
> &c->proxy_protocol_addr);
> > -    ngx_log_debug1(NGX_LOG_DEBUG_CORE, c->log, 0,
> > -                   "PROXY protocol port: \"%V\"",
> &c->proxy_protocol_port);
> > +    ngx_log_debug2(NGX_LOG_DEBUG_CORE, c->log, 0,
> > +                   "PROXY protocol address: \"%V\", PROXY protocol
> > port: \"%d\"",
> > +                   &c->proxy_protocol_addr, c->proxy_protocol_port);
> >
> >  skip:
> >
> > diff -r 59cadccedf40 -r e2984af905ff src/http/ngx_http_variables.c
> > --- a/src/http/ngx_http_variables.c     Thu Nov 05 20:36:47 2015 +0900
> > +++ b/src/http/ngx_http_variables.c     Mon Dec 07 23:39:32 2015 +0900
> > @@ -1258,11 +1258,20 @@
> >  ngx_http_variable_proxy_protocol_port(ngx_http_request_t *r,
> >      ngx_http_variable_value_t *v, uintptr_t data)
> >  {
> > -    v->len = r->connection->proxy_protocol_port.len;
> > +    ngx_int_t port = r->connection->proxy_protocol_port;
> > +
> > +    v->len = 0;
> >      v->valid = 1;
> >      v->no_cacheable = 0;
> >      v->not_found = 0;
> > -    v->data = r->connection->proxy_protocol_port.data;
> > +    v->data = ngx_pnalloc(r->pool, sizeof("65535") - 1);
> > +
> > +    if (v->data == NULL) {
> > +        return NGX_ERROR;
> > +    }
> > +    if (port > 0 && port < 65536) {
> > +        v->len = ngx_sprintf(v->data, "%ui", port) - v->data;
> > +    }
> >
> >      return NGX_OK;
> >  }
> >
> >
> > On Mon, Dec 7, 2015 at 11:51 AM, Maxim Dounin <mdounin at mdounin.ru>
> wrote:
> >> Hello!
> >>
> >> On Mon, Dec 07, 2015 at 12:14:38AM +0900, junpei yoshino wrote:
> >>
> >>> > but we need someone to do the rest of the work.
> >>>
> >>> Could I contribute it?
> >>> At first, I will revise this patch along your review.
> >>
> >> It may be a bit too many for someone with small nginx coding
> >> experience, but you may try to.
> >>
> >> --
> >> Maxim Dounin
> >> http://nginx.org/
> >>
> >> _______________________________________________
> >> nginx-devel mailing list
> >> nginx-devel at nginx.org
> >> http://mailman.nginx.org/mailman/listinfo/nginx-devel
> >
> >
> >
> > --
> > junpei.yoshino at gmail.com
>
>
>
> --
> junpei.yoshino at gmail.com
>
> _______________________________________________
> nginx-devel mailing list
> nginx-devel at nginx.org
> http://mailman.nginx.org/mailman/listinfo/nginx-devel
>



-- 
Tomoya KABE
Mail : limit.usus at gmail.com
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mailman.nginx.org/pipermail/nginx-devel/attachments/20160220/3623fe86/attachment.html>


More information about the nginx-devel mailing list