[PATCH 2 of 2] MAIL: Always log the source port of the client
Quanah Gibson-Mount
quanah at zimbra.com
Thu Apr 24 17:19:47 UTC 2014
# HG changeset patch
# User Quanah Gibson-Mount <quanah at zimbra.com>
# Date 1398359069 18000
# Node ID 3c908c40acd15c8df020f95309b98d45f2b5e5de
# Parent 4b7d2e503c06758330aabcc21ffbbab77f09568e
MAIL: Always log the source port of the client
For TRAC 531
diff -r 4b7d2e503c06 -r 3c908c40acd1 src/mail/ngx_mail.h
--- a/src/mail/ngx_mail.h Thu Apr 24 11:39:17 2014 -0500
+++ b/src/mail/ngx_mail.h Thu Apr 24 12:04:29 2014 -0500
@@ -253,6 +253,7 @@
typedef struct {
ngx_str_t *client;
+ ngx_uint_t client_port;
ngx_mail_session_t *session;
} ngx_mail_log_ctx_t;
diff -r 4b7d2e503c06 -r 3c908c40acd1 src/mail/ngx_mail_handler.c
--- a/src/mail/ngx_mail_handler.c Thu Apr 24 11:39:17 2014 -0500
+++ b/src/mail/ngx_mail_handler.c Thu Apr 24 12:04:29 2014 -0500
@@ -24,6 +24,7 @@
{
ngx_uint_t i;
ngx_mail_port_t *port;
+ ngx_uint_t remote_port=0;
struct sockaddr *sa;
struct sockaddr_in *sin;
ngx_mail_log_ctx_t *ctx;
@@ -127,8 +128,26 @@
c->data = s;
s->connection = c;
- ngx_log_error(NGX_LOG_INFO, c->log, 0, "*%uA client %V connected to %V",
+ switch (c->sockaddr->sa_family) {
+#if (NGX_HAVE_INET6)
+ case AF_INET6:
+ sin6 = (struct sockaddr_in6 *) c->sockaddr;
+ remote_port = ntohs(sin6->sin6_port);
+ break;
+#endif
+ default:
+ sin = (struct sockaddr_in *) c->sockaddr;
+ remote_port = ntohs(sin->sin_port);
+ break;
+ }
+
+ if (remote_port && remote_port < 65536) {
+ ngx_log_error(NGX_LOG_INFO, c->log, 0, "*%uA client %V:%ui connected to %V",
+ c->number, &c->addr_text, remote_port, s->addr_text);
+ } else {
+ ngx_log_error(NGX_LOG_INFO, c->log, 0, "*%uA client %V connected to %V",
c->number, &c->addr_text, s->addr_text);
+ }
ctx = ngx_palloc(c->pool, sizeof(ngx_mail_log_ctx_t));
if (ctx == NULL) {
@@ -137,6 +156,7 @@
}
ctx->client = &c->addr_text;
+ ctx->client_port = remote_port;
ctx->session = s;
c->log->connection = c->number;
@@ -750,7 +770,11 @@
ctx = log->data;
- p = ngx_snprintf(buf, len, ", client: %V", ctx->client);
+ if (ctx->client_port && ctx->client_port < 65536) {
+ p = ngx_snprintf(buf, len, ", client: %V:%ui", ctx->client, ctx->client_port);
+ } else {
+ p = ngx_snprintf(buf, len, ", client: %V", ctx->client, ctx->client_port);
+ }
len -= p - buf;
buf = p;
More information about the nginx-devel
mailing list