Welcome! Log In Create A New Profile

Advanced

PATCH: Add $fqdn stream and http variable.

David Coles
November 23, 2018 05:32PM
# HG changeset patch
# User David Coles <coles.david@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
Subject Author Views Posted

PATCH: Add $fqdn stream and http variable.

David Coles 279 November 23, 2018 05:32PM

Re: PATCH: Add $fqdn stream and http variable.

Maxim Dounin 97 November 24, 2018 07:36AM

Re: PATCH: Add $fqdn stream and http variable.

David Coles 102 November 25, 2018 05:50PM

Re: PATCH: Add $fqdn stream and http variable.

Maxim Dounin 120 November 26, 2018 09:52AM



Sorry, you do not have permission to post/reply in this forum.

Online Users

Guests: 275
Record Number of Users: 8 on April 13, 2023
Record Number of Guests: 421 on December 02, 2018
Powered by nginx      Powered by FreeBSD      PHP Powered      Powered by MariaDB      ipv6 ready