mirror of
https://github.com/nginx/nginx.git
synced 2025-02-25 18:55:26 -06:00
Use ngx_cmp_sockaddr() where appropriate.
This commit is contained in:
parent
f7673bb50f
commit
48a16463fa
@ -1215,14 +1215,8 @@ static ngx_int_t
|
|||||||
ngx_http_add_addresses(ngx_conf_t *cf, ngx_http_core_srv_conf_t *cscf,
|
ngx_http_add_addresses(ngx_conf_t *cf, ngx_http_core_srv_conf_t *cscf,
|
||||||
ngx_http_conf_port_t *port, ngx_http_listen_opt_t *lsopt)
|
ngx_http_conf_port_t *port, ngx_http_listen_opt_t *lsopt)
|
||||||
{
|
{
|
||||||
u_char *p;
|
|
||||||
size_t len, off;
|
|
||||||
ngx_uint_t i, default_server, proxy_protocol;
|
ngx_uint_t i, default_server, proxy_protocol;
|
||||||
struct sockaddr *sa;
|
|
||||||
ngx_http_conf_addr_t *addr;
|
ngx_http_conf_addr_t *addr;
|
||||||
#if (NGX_HAVE_UNIX_DOMAIN)
|
|
||||||
struct sockaddr_un *saun;
|
|
||||||
#endif
|
|
||||||
#if (NGX_HTTP_SSL)
|
#if (NGX_HTTP_SSL)
|
||||||
ngx_uint_t ssl;
|
ngx_uint_t ssl;
|
||||||
#endif
|
#endif
|
||||||
@ -1235,37 +1229,14 @@ ngx_http_add_addresses(ngx_conf_t *cf, ngx_http_core_srv_conf_t *cscf,
|
|||||||
* may fill some fields in inherited sockaddr struct's
|
* may fill some fields in inherited sockaddr struct's
|
||||||
*/
|
*/
|
||||||
|
|
||||||
sa = &lsopt->u.sockaddr;
|
|
||||||
|
|
||||||
switch (sa->sa_family) {
|
|
||||||
|
|
||||||
#if (NGX_HAVE_INET6)
|
|
||||||
case AF_INET6:
|
|
||||||
off = offsetof(struct sockaddr_in6, sin6_addr);
|
|
||||||
len = 16;
|
|
||||||
break;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if (NGX_HAVE_UNIX_DOMAIN)
|
|
||||||
case AF_UNIX:
|
|
||||||
off = offsetof(struct sockaddr_un, sun_path);
|
|
||||||
len = sizeof(saun->sun_path);
|
|
||||||
break;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
default: /* AF_INET */
|
|
||||||
off = offsetof(struct sockaddr_in, sin_addr);
|
|
||||||
len = 4;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
p = lsopt->u.sockaddr_data + off;
|
|
||||||
|
|
||||||
addr = port->addrs.elts;
|
addr = port->addrs.elts;
|
||||||
|
|
||||||
for (i = 0; i < port->addrs.nelts; i++) {
|
for (i = 0; i < port->addrs.nelts; i++) {
|
||||||
|
|
||||||
if (ngx_memcmp(p, addr[i].opt.u.sockaddr_data + off, len) != 0) {
|
if (ngx_cmp_sockaddr(&lsopt->u.sockaddr, lsopt->socklen,
|
||||||
|
&addr[i].opt.u.sockaddr, addr[i].opt.socklen, 0)
|
||||||
|
!= NGX_OK)
|
||||||
|
{
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -67,7 +67,6 @@ typedef struct {
|
|||||||
#if (NGX_HAVE_UNIX_DOMAIN)
|
#if (NGX_HAVE_UNIX_DOMAIN)
|
||||||
struct sockaddr_un sockaddr_un;
|
struct sockaddr_un sockaddr_un;
|
||||||
#endif
|
#endif
|
||||||
u_char sockaddr_data[NGX_SOCKADDRLEN];
|
|
||||||
} u;
|
} u;
|
||||||
|
|
||||||
socklen_t socklen;
|
socklen_t socklen;
|
||||||
|
@ -36,7 +36,6 @@ typedef struct {
|
|||||||
#if (NGX_HAVE_UNIX_DOMAIN)
|
#if (NGX_HAVE_UNIX_DOMAIN)
|
||||||
struct sockaddr_un sockaddr_un;
|
struct sockaddr_un sockaddr_un;
|
||||||
#endif
|
#endif
|
||||||
u_char sockaddr_data[NGX_SOCKADDRLEN];
|
|
||||||
} u;
|
} u;
|
||||||
|
|
||||||
socklen_t socklen;
|
socklen_t socklen;
|
||||||
|
@ -288,19 +288,12 @@ ngx_mail_core_listen(ngx_conf_t *cf, ngx_command_t *cmd, void *conf)
|
|||||||
{
|
{
|
||||||
ngx_mail_core_srv_conf_t *cscf = conf;
|
ngx_mail_core_srv_conf_t *cscf = conf;
|
||||||
|
|
||||||
size_t len, off;
|
|
||||||
in_port_t port;
|
|
||||||
ngx_str_t *value;
|
ngx_str_t *value;
|
||||||
ngx_url_t u;
|
ngx_url_t u;
|
||||||
ngx_uint_t i, m;
|
ngx_uint_t i, m;
|
||||||
struct sockaddr *sa;
|
|
||||||
ngx_mail_listen_t *ls;
|
ngx_mail_listen_t *ls;
|
||||||
ngx_mail_module_t *module;
|
ngx_mail_module_t *module;
|
||||||
struct sockaddr_in *sin;
|
|
||||||
ngx_mail_core_main_conf_t *cmcf;
|
ngx_mail_core_main_conf_t *cmcf;
|
||||||
#if (NGX_HAVE_INET6)
|
|
||||||
struct sockaddr_in6 *sin6;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
value = cf->args->elts;
|
value = cf->args->elts;
|
||||||
|
|
||||||
@ -325,49 +318,13 @@ ngx_mail_core_listen(ngx_conf_t *cf, ngx_command_t *cmd, void *conf)
|
|||||||
|
|
||||||
for (i = 0; i < cmcf->listen.nelts; i++) {
|
for (i = 0; i < cmcf->listen.nelts; i++) {
|
||||||
|
|
||||||
sa = &ls[i].u.sockaddr;
|
if (ngx_cmp_sockaddr(&ls[i].u.sockaddr, ls[i].socklen,
|
||||||
|
(struct sockaddr *) &u.sockaddr, u.socklen, 1)
|
||||||
if (sa->sa_family != u.family) {
|
!= NGX_OK)
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
switch (sa->sa_family) {
|
|
||||||
|
|
||||||
#if (NGX_HAVE_INET6)
|
|
||||||
case AF_INET6:
|
|
||||||
off = offsetof(struct sockaddr_in6, sin6_addr);
|
|
||||||
len = 16;
|
|
||||||
sin6 = &ls[i].u.sockaddr_in6;
|
|
||||||
port = ntohs(sin6->sin6_port);
|
|
||||||
break;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if (NGX_HAVE_UNIX_DOMAIN)
|
|
||||||
case AF_UNIX:
|
|
||||||
off = offsetof(struct sockaddr_un, sun_path);
|
|
||||||
len = sizeof(((struct sockaddr_un *) sa)->sun_path);
|
|
||||||
port = 0;
|
|
||||||
break;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
default: /* AF_INET */
|
|
||||||
off = offsetof(struct sockaddr_in, sin_addr);
|
|
||||||
len = 4;
|
|
||||||
sin = &ls[i].u.sockaddr_in;
|
|
||||||
port = ntohs(sin->sin_port);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (ngx_memcmp(ls[i].u.sockaddr_data + off, u.sockaddr + off, len)
|
|
||||||
!= 0)
|
|
||||||
{
|
{
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (port != u.port) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
|
ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
|
||||||
"duplicate \"%V\" address and port pair", &u.url);
|
"duplicate \"%V\" address and port pair", &u.url);
|
||||||
return NGX_CONF_ERROR;
|
return NGX_CONF_ERROR;
|
||||||
@ -434,11 +391,10 @@ ngx_mail_core_listen(ngx_conf_t *cf, ngx_command_t *cmd, void *conf)
|
|||||||
|
|
||||||
if (ngx_strncmp(value[i].data, "ipv6only=o", 10) == 0) {
|
if (ngx_strncmp(value[i].data, "ipv6only=o", 10) == 0) {
|
||||||
#if (NGX_HAVE_INET6 && defined IPV6_V6ONLY)
|
#if (NGX_HAVE_INET6 && defined IPV6_V6ONLY)
|
||||||
|
size_t len;
|
||||||
u_char buf[NGX_SOCKADDR_STRLEN];
|
u_char buf[NGX_SOCKADDR_STRLEN];
|
||||||
|
|
||||||
sa = &ls->u.sockaddr;
|
if (ls->u.sockaddr.sa_family == AF_INET6) {
|
||||||
|
|
||||||
if (sa->sa_family == AF_INET6) {
|
|
||||||
|
|
||||||
if (ngx_strcmp(&value[i].data[10], "n") == 0) {
|
if (ngx_strcmp(&value[i].data[10], "n") == 0) {
|
||||||
ls->ipv6only = 1;
|
ls->ipv6only = 1;
|
||||||
@ -456,7 +412,7 @@ ngx_mail_core_listen(ngx_conf_t *cf, ngx_command_t *cmd, void *conf)
|
|||||||
ls->bind = 1;
|
ls->bind = 1;
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
len = ngx_sock_ntop(sa, ls->socklen, buf,
|
len = ngx_sock_ntop(&ls->u.sockaddr, ls->socklen, buf,
|
||||||
NGX_SOCKADDR_STRLEN, 1);
|
NGX_SOCKADDR_STRLEN, 1);
|
||||||
|
|
||||||
ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
|
ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
|
||||||
|
@ -40,7 +40,6 @@ typedef struct {
|
|||||||
#if (NGX_HAVE_UNIX_DOMAIN)
|
#if (NGX_HAVE_UNIX_DOMAIN)
|
||||||
struct sockaddr_un sockaddr_un;
|
struct sockaddr_un sockaddr_un;
|
||||||
#endif
|
#endif
|
||||||
u_char sockaddr_data[NGX_SOCKADDRLEN];
|
|
||||||
} u;
|
} u;
|
||||||
|
|
||||||
socklen_t socklen;
|
socklen_t socklen;
|
||||||
|
@ -248,18 +248,11 @@ ngx_stream_core_server(ngx_conf_t *cf, ngx_command_t *cmd, void *conf)
|
|||||||
static char *
|
static char *
|
||||||
ngx_stream_core_listen(ngx_conf_t *cf, ngx_command_t *cmd, void *conf)
|
ngx_stream_core_listen(ngx_conf_t *cf, ngx_command_t *cmd, void *conf)
|
||||||
{
|
{
|
||||||
size_t len, off;
|
|
||||||
in_port_t port;
|
|
||||||
ngx_str_t *value;
|
ngx_str_t *value;
|
||||||
ngx_url_t u;
|
ngx_url_t u;
|
||||||
ngx_uint_t i, backlog;
|
ngx_uint_t i, backlog;
|
||||||
struct sockaddr *sa;
|
|
||||||
struct sockaddr_in *sin;
|
|
||||||
ngx_stream_listen_t *ls;
|
ngx_stream_listen_t *ls;
|
||||||
ngx_stream_core_main_conf_t *cmcf;
|
ngx_stream_core_main_conf_t *cmcf;
|
||||||
#if (NGX_HAVE_INET6)
|
|
||||||
struct sockaddr_in6 *sin6;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
value = cf->args->elts;
|
value = cf->args->elts;
|
||||||
|
|
||||||
@ -284,49 +277,13 @@ ngx_stream_core_listen(ngx_conf_t *cf, ngx_command_t *cmd, void *conf)
|
|||||||
|
|
||||||
for (i = 0; i < cmcf->listen.nelts; i++) {
|
for (i = 0; i < cmcf->listen.nelts; i++) {
|
||||||
|
|
||||||
sa = &ls[i].u.sockaddr;
|
if (ngx_cmp_sockaddr(&ls[i].u.sockaddr, ls[i].socklen,
|
||||||
|
(struct sockaddr *) &u.sockaddr, u.socklen, 1)
|
||||||
if (sa->sa_family != u.family) {
|
!= NGX_OK)
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
switch (sa->sa_family) {
|
|
||||||
|
|
||||||
#if (NGX_HAVE_INET6)
|
|
||||||
case AF_INET6:
|
|
||||||
off = offsetof(struct sockaddr_in6, sin6_addr);
|
|
||||||
len = 16;
|
|
||||||
sin6 = &ls[i].u.sockaddr_in6;
|
|
||||||
port = sin6->sin6_port;
|
|
||||||
break;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if (NGX_HAVE_UNIX_DOMAIN)
|
|
||||||
case AF_UNIX:
|
|
||||||
off = offsetof(struct sockaddr_un, sun_path);
|
|
||||||
len = sizeof(((struct sockaddr_un *) sa)->sun_path);
|
|
||||||
port = 0;
|
|
||||||
break;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
default: /* AF_INET */
|
|
||||||
off = offsetof(struct sockaddr_in, sin_addr);
|
|
||||||
len = 4;
|
|
||||||
sin = &ls[i].u.sockaddr_in;
|
|
||||||
port = sin->sin_port;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (ngx_memcmp(ls[i].u.sockaddr_data + off, u.sockaddr + off, len)
|
|
||||||
!= 0)
|
|
||||||
{
|
{
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (port != u.port) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
|
ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
|
||||||
"duplicate \"%V\" address and port pair", &u.url);
|
"duplicate \"%V\" address and port pair", &u.url);
|
||||||
return NGX_CONF_ERROR;
|
return NGX_CONF_ERROR;
|
||||||
@ -384,11 +341,10 @@ ngx_stream_core_listen(ngx_conf_t *cf, ngx_command_t *cmd, void *conf)
|
|||||||
|
|
||||||
if (ngx_strncmp(value[i].data, "ipv6only=o", 10) == 0) {
|
if (ngx_strncmp(value[i].data, "ipv6only=o", 10) == 0) {
|
||||||
#if (NGX_HAVE_INET6 && defined IPV6_V6ONLY)
|
#if (NGX_HAVE_INET6 && defined IPV6_V6ONLY)
|
||||||
|
size_t len;
|
||||||
u_char buf[NGX_SOCKADDR_STRLEN];
|
u_char buf[NGX_SOCKADDR_STRLEN];
|
||||||
|
|
||||||
sa = &ls->u.sockaddr;
|
if (ls->u.sockaddr.sa_family == AF_INET6) {
|
||||||
|
|
||||||
if (sa->sa_family == AF_INET6) {
|
|
||||||
|
|
||||||
if (ngx_strcmp(&value[i].data[10], "n") == 0) {
|
if (ngx_strcmp(&value[i].data[10], "n") == 0) {
|
||||||
ls->ipv6only = 1;
|
ls->ipv6only = 1;
|
||||||
@ -406,7 +362,7 @@ ngx_stream_core_listen(ngx_conf_t *cf, ngx_command_t *cmd, void *conf)
|
|||||||
ls->bind = 1;
|
ls->bind = 1;
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
len = ngx_sock_ntop(sa, ls->socklen, buf,
|
len = ngx_sock_ntop(&ls->u.sockaddr, ls->socklen, buf,
|
||||||
NGX_SOCKADDR_STRLEN, 1);
|
NGX_SOCKADDR_STRLEN, 1);
|
||||||
|
|
||||||
ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
|
ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
|
||||||
|
Loading…
Reference in New Issue
Block a user