# HG changeset patch # User David Coles <coles.da...@gmail.com> # Date 1543000128 0 # Fri Nov 23 19:08:48 2018 +0000 # Node ID 8e014e3bdfbda3c7a22c7980c163bcea1c4474b3 # Parent be5cb9c67c05ccaf22dab7abba78aa4c1545a8ee Add $fqdn stream and http variable.
This exposes the system's fully-qualified domain name as reported by calling getaddrbyname on the hostname. Typically $hostname will only contain the first segment of the host's domainname. diff -r be5cb9c67c05 -r 8e014e3bdfbd src/core/ngx_config.h --- a/src/core/ngx_config.h Wed Nov 21 20:23:16 2018 +0300 +++ b/src/core/ngx_config.h Fri Nov 23 19:08:48 2018 +0000 @@ -124,6 +124,11 @@ #define NGX_MAXHOSTNAMELEN 256 #endif +#ifdef MAXFQDNLEN +#define NGX_MAXFQDNLEN MAXFQDNLEN +#else +#define NGX_MAXFQDNLEN 256 +#endif #define NGX_MAX_UINT32_VALUE (uint32_t) 0xffffffff #define NGX_MAX_INT32_VALUE (uint32_t) 0x7fffffff diff -r be5cb9c67c05 -r 8e014e3bdfbd src/core/ngx_cycle.c --- a/src/core/ngx_cycle.c Wed Nov 21 20:23:16 2018 +0300 +++ b/src/core/ngx_cycle.c Fri Nov 23 19:08:48 2018 +0000 @@ -9,6 +9,8 @@ #include <ngx_core.h> #include <ngx_event.h> +#include <netdb.h> + static void ngx_destroy_cycle_pools(ngx_conf_t *conf); static ngx_int_t ngx_init_zone_pool(ngx_cycle_t *cycle, @@ -53,6 +55,7 @@ ngx_core_conf_t *ccf, *old_ccf; ngx_core_module_t *module; char hostname[NGX_MAXHOSTNAMELEN]; + struct hostent *hostent; ngx_timezone_update(); @@ -213,6 +216,23 @@ ngx_strlow(cycle->hostname.data, (u_char *) hostname, cycle->hostname.len); + hostent = gethostbyname(hostname); + if (hostent == NULL) { + ngx_log_error(NGX_LOG_EMERG, log, ngx_errno, "gethostbyname() failed"); + ngx_destroy_pool(pool); + return NULL; + } + + cycle->fqdn.len = ngx_strlen(hostent->h_name); + + cycle->fqdn.data = ngx_pnalloc(pool, cycle->fqdn.len); + if (cycle->fqdn.data == NULL) { + ngx_destroy_pool(pool); + return NULL; + } + ngx_strlow(cycle->fqdn.data, (u_char *) hostent->h_name, cycle->fqdn.len); + + if (ngx_cycle_modules(cycle) != NGX_OK) { ngx_destroy_pool(pool); return NULL; diff -r be5cb9c67c05 -r 8e014e3bdfbd src/core/ngx_cycle.h --- a/src/core/ngx_cycle.h Wed Nov 21 20:23:16 2018 +0300 +++ b/src/core/ngx_cycle.h Fri Nov 23 19:08:48 2018 +0000 @@ -81,6 +81,7 @@ ngx_str_t prefix; ngx_str_t lock_file; ngx_str_t hostname; + ngx_str_t fqdn; }; diff -r be5cb9c67c05 -r 8e014e3bdfbd src/http/ngx_http_variables.c --- a/src/http/ngx_http_variables.c Wed Nov 21 20:23:16 2018 +0300 +++ b/src/http/ngx_http_variables.c Fri Nov 23 19:08:48 2018 +0000 @@ -134,6 +134,8 @@ ngx_http_variable_value_t *v, uintptr_t data); static ngx_int_t ngx_http_variable_hostname(ngx_http_request_t *r, ngx_http_variable_value_t *v, uintptr_t data); +static ngx_int_t ngx_http_variable_fqdn(ngx_http_request_t *r, + ngx_http_variable_value_t *v, uintptr_t data); static ngx_int_t ngx_http_variable_pid(ngx_http_request_t *r, ngx_http_variable_value_t *v, uintptr_t data); static ngx_int_t ngx_http_variable_msec(ngx_http_request_t *r, @@ -338,6 +340,9 @@ { ngx_string("hostname"), NULL, ngx_http_variable_hostname, 0, 0, 0 }, + { ngx_string("fqdn"), NULL, ngx_http_variable_fqdn, + 0, 0, 0 }, + { ngx_string("pid"), NULL, ngx_http_variable_pid, 0, 0, 0 }, @@ -2256,6 +2261,20 @@ static ngx_int_t +ngx_http_variable_fqdn(ngx_http_request_t *r, + ngx_http_variable_value_t *v, uintptr_t data) +{ + v->len = ngx_cycle->fqdn.len; + v->valid = 1; + v->no_cacheable = 0; + v->not_found = 0; + v->data = ngx_cycle->fqdn.data; + + return NGX_OK; +} + + +static ngx_int_t ngx_http_variable_pid(ngx_http_request_t *r, ngx_http_variable_value_t *v, uintptr_t data) { diff -r be5cb9c67c05 -r 8e014e3bdfbd src/stream/ngx_stream_variables.c --- a/src/stream/ngx_stream_variables.c Wed Nov 21 20:23:16 2018 +0300 +++ b/src/stream/ngx_stream_variables.c Fri Nov 23 19:08:48 2018 +0000 @@ -40,6 +40,8 @@ ngx_stream_variable_value_t *v, uintptr_t data); static ngx_int_t ngx_stream_variable_hostname(ngx_stream_session_t *s, ngx_stream_variable_value_t *v, uintptr_t data); +static ngx_int_t ngx_stream_variable_fqdn(ngx_stream_session_t *s, + ngx_stream_variable_value_t *v, uintptr_t data); static ngx_int_t ngx_stream_variable_pid(ngx_stream_session_t *s, ngx_stream_variable_value_t *v, uintptr_t data); static ngx_int_t ngx_stream_variable_msec(ngx_stream_session_t *s, @@ -96,6 +98,9 @@ { ngx_string("hostname"), NULL, ngx_stream_variable_hostname, 0, 0, 0 }, + { ngx_string("fqdn"), NULL, ngx_stream_variable_fqdn, + 0, 0, 0 }, + { ngx_string("pid"), NULL, ngx_stream_variable_pid, 0, 0, 0 }, @@ -778,6 +783,20 @@ static ngx_int_t +ngx_stream_variable_fqdn(ngx_stream_session_t *s, + ngx_stream_variable_value_t *v, uintptr_t data) +{ + v->len = ngx_cycle->fqdn.len; + v->valid = 1; + v->no_cacheable = 0; + v->not_found = 0; + v->data = ngx_cycle->fqdn.data; + + return NGX_OK; +} + + +static ngx_int_t ngx_stream_variable_pid(ngx_stream_session_t *s, ngx_stream_variable_value_t *v, uintptr_t data) { _______________________________________________ nginx-devel mailing list nginx-devel@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-devel