[nginx] svn commit: r4801 - in branches/stable-1.2: . src/event
mdounin at mdounin.ru
mdounin at mdounin.ru
Mon Aug 6 17:13:20 UTC 2012
Author: mdounin
Date: 2012-08-06 17:13:20 +0000 (Mon, 06 Aug 2012)
New Revision: 4801
URL: http://trac.nginx.org/nginx/changeset/4801/nginx
Log:
Merge of r4764: debug_connection with a domain name change.
When "debug_connection" is configured with a domain name, only the first
resolved address was used. Now all addresses will be used.
Modified:
branches/stable-1.2/
branches/stable-1.2/src/event/ngx_event.c
Index: branches/stable-1.2
===================================================================
--- branches/stable-1.2 2012-08-06 17:10:35 UTC (rev 4800)
+++ branches/stable-1.2 2012-08-06 17:13:20 UTC (rev 4801)
Property changes on: branches/stable-1.2
___________________________________________________________________
Modified: svn:mergeinfo
## -1 +1 ##
-/trunk:4611-4632,4636-4657,4671-4672,4674-4676,4682,4684-4699,4704-4706,4713,4736-4738,4740-4741,4754,4756-4763,4768
+/trunk:4611-4632,4636-4657,4671-4672,4674-4676,4682,4684-4699,4704-4706,4713,4736-4738,4740-4741,4754,4756-4764,4768
\ No newline at end of property
Modified: branches/stable-1.2/src/event/ngx_event.c
===================================================================
--- branches/stable-1.2/src/event/ngx_event.c 2012-08-06 17:10:35 UTC (rev 4800)
+++ branches/stable-1.2/src/event/ngx_event.c 2012-08-06 17:13:20 UTC (rev 4801)
@@ -1062,51 +1062,92 @@
#if (NGX_DEBUG)
ngx_event_conf_t *ecf = conf;
- ngx_int_t rc;
- ngx_str_t *value;
- struct hostent *h;
- ngx_cidr_t *cidr;
+ ngx_int_t rc;
+ ngx_str_t *value;
+ ngx_url_t u;
+ ngx_cidr_t c, *cidr;
+ ngx_uint_t i;
+ struct sockaddr_in *sin;
+#if (NGX_HAVE_INET6)
+ struct sockaddr_in6 *sin6;
+#endif
value = cf->args->elts;
- cidr = ngx_array_push(&ecf->debug_connection);
- if (cidr == NULL) {
- return NGX_CONF_ERROR;
- }
-
#if (NGX_HAVE_UNIX_DOMAIN)
if (ngx_strcmp(value[1].data, "unix:") == 0) {
- cidr->family = AF_UNIX;
- return NGX_CONF_OK;
+ cidr = ngx_array_push(&ecf->debug_connection);
+ if (cidr == NULL) {
+ return NGX_CONF_ERROR;
+ }
+
+ cidr->family = AF_UNIX;
+ return NGX_CONF_OK;
}
#endif
- rc = ngx_ptocidr(&value[1], cidr);
+ rc = ngx_ptocidr(&value[1], &c);
- if (rc == NGX_DONE) {
- ngx_conf_log_error(NGX_LOG_WARN, cf, 0,
- "low address bits of %V are meaningless", &value[1]);
- return NGX_CONF_OK;
- }
+ if (rc != NGX_ERROR) {
+ if (rc == NGX_DONE) {
+ ngx_conf_log_error(NGX_LOG_WARN, cf, 0,
+ "low address bits of %V are meaningless",
+ &value[1]);
+ }
- if (rc == NGX_OK) {
+ cidr = ngx_array_push(&ecf->debug_connection);
+ if (cidr == NULL) {
+ return NGX_CONF_ERROR;
+ }
+
+ *cidr = c;
+
return NGX_CONF_OK;
}
- h = gethostbyname((char *) value[1].data);
+ ngx_memzero(&u, sizeof(ngx_url_t));
+ u.host = value[1];
- if (h == NULL || h->h_addr_list[0] == NULL) {
- ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
- "host \"%s\" not found", value[1].data);
+ if (ngx_inet_resolve_host(cf->pool, &u) != NGX_OK) {
+ if (u.err) {
+ ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
+ "%s in debug_connection \"%V\"",
+ u.err, &u.host);
+ }
+
return NGX_CONF_ERROR;
}
- cidr->family = AF_INET;
- cidr->u.in.mask = 0xffffffff;
- cidr->u.in.addr = *(in_addr_t *)(h->h_addr_list[0]);
+ cidr = ngx_array_push_n(&ecf->debug_connection, u.naddrs);
+ if (cidr == NULL) {
+ return NGX_CONF_ERROR;
+ }
+ ngx_memzero(cidr, u.naddrs * sizeof(ngx_cidr_t));
+
+ for (i = 0; i < u.naddrs; i++) {
+ cidr[i].family = u.addrs[i].sockaddr->sa_family;
+
+ switch (cidr[i].family) {
+
+#if (NGX_HAVE_INET6)
+ case AF_INET6:
+ sin6 = (struct sockaddr_in6 *) u.addrs[i].sockaddr;
+ cidr[i].u.in6.addr = sin6->sin6_addr;
+ ngx_memset(cidr[i].u.in6.mask.s6_addr, 0xff, 16);
+ break;
+#endif
+
+ default: /* AF_INET */
+ sin = (struct sockaddr_in *) u.addrs[i].sockaddr;
+ cidr[i].u.in.addr = sin->sin_addr.s_addr;
+ cidr[i].u.in.mask = 0xffffffff;
+ break;
+ }
+ }
+
#else
ngx_conf_log_error(NGX_LOG_WARN, cf, 0,
More information about the nginx-devel
mailing list