aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorIgor Sysoev <igor@sysoev.ru>2008-08-21 12:56:10 +0000
committerIgor Sysoev <igor@sysoev.ru>2008-08-21 12:56:10 +0000
commitb29426deb80b1338b3851e748468659edb1e3dd1 (patch)
tree2783e2cf5cb03ecdd5c75580dba347456d78dccd /src
parent027095a77e9265a366e87d87927835a97e71d447 (diff)
downloadnginx-b29426deb80b1338b3851e748468659edb1e3dd1.tar.gz
nginx-b29426deb80b1338b3851e748468659edb1e3dd1.zip
server_name "" support
Diffstat (limited to 'src')
-rw-r--r--src/core/ngx_hash.c4
-rw-r--r--src/http/ngx_http_core_module.c28
-rw-r--r--src/http/ngx_http_request.c14
3 files changed, 30 insertions, 16 deletions
diff --git a/src/core/ngx_hash.c b/src/core/ngx_hash.c
index d36b142b9..dd28e7c37 100644
--- a/src/core/ngx_hash.c
+++ b/src/core/ngx_hash.c
@@ -220,6 +220,10 @@ ngx_hash_find_combined(ngx_hash_combined_t *hash, ngx_uint_t key, u_char *name,
}
}
+ 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);
diff --git a/src/http/ngx_http_core_module.c b/src/http/ngx_http_core_module.c
index cd4b8ed93..8a5e9d261 100644
--- 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, ngx_command_t *cmd, void *conf)
ch = value[1].data[0];
- if (cscf->server_name.data == NULL && value[1].len) {
- name = value[1];
+ if (cscf->server_name.data == NULL) {
+ if (value[1].len) {
+ name = value[1];
- if (ch == '.') {
- name.len--;
- name.data++;
- }
+ 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) {
+ 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, ngx_command_t *cmd, void *conf)
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,
diff --git a/src/http/ngx_http_request.c b/src/http/ngx_http_request.c
index 06320470b..6ae0be389 100644
--- a/src/http/ngx_http_request.c
+++ b/src/http/ngx_http_request.c
@@ -571,6 +571,7 @@ ngx_http_ssl_handshake_handler(ngx_connection_t *c)
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 *ssl_conn, int *ad, void *arg)
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_request_t *r, u_char *host, size_t len)
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;
}