Jan Kaluza 46396bf
--- trunk/server/vhost.c	2013/05/11 11:51:28	1481305
Jan Kaluza 46396bf
+++ trunk/server/vhost.c	2013/05/11 12:05:24	1481306
Jan Kaluza 46396bf
@@ -577,14 +577,21 @@
Jan Kaluza 46396bf
      */
Jan Kaluza 46396bf
 
Jan Kaluza 46396bf
     for (s = main_s->next; s; s = s->next) {
Jan Kaluza 46396bf
+        server_addr_rec *sar_prev = NULL;
Jan Kaluza 46396bf
         has_default_vhost_addr = 0;
Jan Kaluza 46396bf
         for (sar = s->addrs; sar; sar = sar->next) {
Jan Kaluza 46396bf
             ipaddr_chain *ic;
Jan Kaluza 46396bf
             char inaddr_any[16] = {0}; /* big enough to handle IPv4 or IPv6 */
Jan Kaluza 46396bf
-
Jan Kaluza 46396bf
+            /* XXX: this treats 0.0.0.0 as a "default" server which matches no-exact-match for IPv6 */
Jan Kaluza 46396bf
             if (!memcmp(sar->host_addr->ipaddr_ptr, inaddr_any, sar->host_addr->ipaddr_len)) {
Jan Kaluza 46396bf
                 ic = find_default_server(sar->host_port);
Jan Kaluza 46396bf
-                if (!ic || sar->host_port != ic->sar->host_port) {
Jan Kaluza 46396bf
+
Jan Kaluza 46396bf
+                if (ic && sar->host_port == ic->sar->host_port) { /* we're a match for an existing "default server"  */
Jan Kaluza 46396bf
+                    if (!sar_prev || memcmp(sar_prev->host_addr->ipaddr_ptr, inaddr_any, sar_prev->host_addr->ipaddr_len)) { 
Jan Kaluza 46396bf
+                        add_name_vhost_config(p, main_s, s, sar, ic);
Jan Kaluza 46396bf
+                    }
Jan Kaluza 46396bf
+                }
Jan Kaluza 46396bf
+                else { 
Jan Kaluza 46396bf
                     /* No default server, or we found a default server but
Jan Kaluza 46396bf
                     ** exactly one of us is a wildcard port, which means we want
Jan Kaluza 46396bf
                     ** two ip-based vhosts not an NVH with two names
Jan Kaluza 46396bf
@@ -592,6 +599,7 @@
Jan Kaluza 46396bf
                     ic = new_ipaddr_chain(p, s, sar);
Jan Kaluza 46396bf
                     ic->next = default_list;
Jan Kaluza 46396bf
                     default_list = ic;
Jan Kaluza 46396bf
+                    add_name_vhost_config(p, main_s, s, sar, ic);
Jan Kaluza 46396bf
                 }
Jan Kaluza 46396bf
                 has_default_vhost_addr = 1;
Jan Kaluza 46396bf
             }
Jan Kaluza 46396bf
@@ -609,8 +617,9 @@
Jan Kaluza 46396bf
                     ic->next = *iphash_table_tail[bucket];
Jan Kaluza 46396bf
                     *iphash_table_tail[bucket] = ic;
Jan Kaluza 46396bf
                 }
Jan Kaluza 46396bf
+                add_name_vhost_config(p, main_s, s, sar, ic);
Jan Kaluza 46396bf
             }
Jan Kaluza 46396bf
-            add_name_vhost_config(p, main_s, s, sar, ic);
Jan Kaluza 46396bf
+            sar_prev = sar;
Jan Kaluza 46396bf
         }
Jan Kaluza 46396bf
 
Jan Kaluza 46396bf
         /* Ok now we want to set up a server_hostname if the user was