changeset 2195:a953f73273ee

server_name "" support
author Igor Sysoev <igor@sysoev.ru>
date Thu, 21 Aug 2008 12:56:10 +0000
parents d3f833da6b65
children fab3fa7339ff
files src/core/ngx_hash.c src/http/ngx_http_core_module.c src/http/ngx_http_request.c
diffstat 3 files changed, 32 insertions(+), 18 deletions(-) [+]
line wrap: on
line diff
--- a/src/core/ngx_hash.c
+++ b/src/core/ngx_hash.c
@@ -220,6 +220,10 @@ ngx_hash_find_combined(ngx_hash_combined
         }
     }
 
+    if (len == 0) {
+        return NULL;
+    }
+
     if (hash->wc_head && hash->wc_head->hash.buckets) {
         value = ngx_hash_find_wc_head(hash->wc_head, name, len);
 
--- a/src/http/ngx_http_core_module.c
+++ b/src/http/ngx_http_core_module.c
@@ -3094,17 +3094,24 @@ ngx_http_core_server_name(ngx_conf_t *cf
 
     ch = value[1].data[0];
 
-    if (cscf->server_name.data == NULL && value[1].len) {
-        name = value[1];
-
-        if (ch == '.') {
-            name.len--;
-            name.data++;
-        }
-
-        cscf->server_name.len = name.len;
-        cscf->server_name.data = ngx_pstrdup(cf->pool, &name);
-        if (cscf->server_name.data == NULL) {
+    if (cscf->server_name.data == NULL) {
+        if (value[1].len) {
+            name = value[1];
+
+            if (ch == '.') {
+                name.len--;
+                name.data++;
+            }
+
+            cscf->server_name.len = name.len;
+            cscf->server_name.data = ngx_pstrdup(cf->pool, &name);
+            if (cscf->server_name.data == NULL) {
+                return NGX_CONF_ERROR;
+            }
+
+        } else {
+            ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
+                               "the first server name must not be empty");
             return NGX_CONF_ERROR;
         }
     }
@@ -3113,8 +3120,7 @@ ngx_http_core_server_name(ngx_conf_t *cf
 
         ch = value[i].data[0];
 
-        if (value[i].len == 0
-            || (ch == '*' && (value[i].len < 3 || value[i].data[1] != '.'))
+        if ((ch == '*' && (value[i].len < 3 || value[i].data[1] != '.'))
             || (ch == '.' && value[i].len < 2))
         {
             ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
--- a/src/http/ngx_http_request.c
+++ b/src/http/ngx_http_request.c
@@ -571,6 +571,7 @@ ngx_http_ssl_handshake_handler(ngx_conne
 int
 ngx_http_ssl_servername(ngx_ssl_conn_t *ssl_conn, int *ad, void *arg)
 {
+    size_t                    len;
     const char               *servername;
     ngx_connection_t         *c;
     ngx_http_request_t       *r;
@@ -587,12 +588,15 @@ ngx_http_ssl_servername(ngx_ssl_conn_t *
     ngx_log_debug1(NGX_LOG_DEBUG_HTTP, c->log, 0,
                    "SSL server name: \"%s\"", servername);
 
+    len = ngx_strlen(servername);
+
+    if (len == 0) {
+        return SSL_TLSEXT_ERR_NOACK;
+    }
+
     r = c->data;
 
-    if (ngx_http_find_virtual_server(r, (u_char *) servername,
-                                     ngx_strlen(servername))
-        != NGX_OK)
-    {
+    if (ngx_http_find_virtual_server(r, (u_char *) servername, len) != NGX_OK) {
         return SSL_TLSEXT_ERR_NOACK;
     }
 
@@ -1559,7 +1563,7 @@ ngx_http_find_virtual_server(ngx_http_re
     ngx_http_core_srv_conf_t  *cscf;
     u_char                     buf[32];
 
-    if (len == 0 || r->virtual_names == NULL) {
+    if (r->virtual_names == NULL) {
         return NGX_DECLINED;
     }