fix r3225 and r3227: preserve default_server bit during listen options
overwriting
diff --git a/src/http/ngx_http.c b/src/http/ngx_http.c
index cf47c23..455a519 100644
--- a/src/http/ngx_http.c
+++ b/src/http/ngx_http.c
@@ -1167,7 +1167,7 @@
{
u_char *p;
size_t len, off;
- ngx_uint_t i;
+ ngx_uint_t i, default_server;
struct sockaddr *sa;
ngx_http_conf_addr_t *addr;
@@ -1209,6 +1209,9 @@
return NGX_ERROR;
}
+ /* preserve default_server bit during listen options overwriting */
+ default_server = addr[i].opt.default_server;
+
if (lsopt->set) {
if (addr[i].opt.set) {
@@ -1224,15 +1227,18 @@
if (lsopt->default_server) {
- if (addr[i].opt.default_server) {
+ if (default_server) {
ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
"a duplicate default server for %s", addr[i].opt.addr);
return NGX_ERROR;
}
+ default_server = 1;
addr[i].default_server = cscf;
}
+ addr[i].opt.default_server = default_server;
+
return NGX_OK;
}