diff options
author | Kevin Lin <developer@kevinlin.info> | 2021-08-17 22:56:38 -0700 |
---|---|---|
committer | dormando <dormando@rydia.net> | 2021-09-27 12:56:21 -0700 |
commit | 32349beb8e34a47201546de08dec003d39f29649 (patch) | |
tree | d7e943d5c794f083a629461d3009aeaafa4455e2 | |
parent | 3a8ca319b35a3b3533b1f1ca55e904cfcb71962c (diff) | |
download | memcached-32349beb8e34a47201546de08dec003d39f29649.tar.gz |
Properly accommodate IPv6 addresses in LOG_CONNEVENTS logs
-rw-r--r-- | logger.c | 9 | ||||
-rw-r--r-- | logger.h | 2 | ||||
-rw-r--r-- | memcached.c | 4 |
3 files changed, 8 insertions, 7 deletions
@@ -138,14 +138,15 @@ static void _logger_log_item_store(logentry *e, const entry_details *d, const vo } static void _logger_log_conn_event(logentry *e, const entry_details *d, const void *entry, va_list ap) { - struct sockaddr *addr = va_arg(ap, struct sockaddr *); + struct sockaddr_in6 *addr = va_arg(ap, struct sockaddr_in6 *); + socklen_t addrlen = va_arg(ap, socklen_t); enum network_transport transport = va_arg(ap, enum network_transport); enum close_reasons reason = va_arg(ap, enum close_reasons); int sfd = va_arg(ap, int); struct logentry_conn_event *le = (struct logentry_conn_event *) e->data; - memcpy(&le->addr, addr, sizeof(struct sockaddr)); + memcpy(&le->addr, addr, addrlen); le->sfd = sfd; le->transport = transport; le->reason = reason; @@ -156,11 +157,11 @@ static void _logger_log_conn_event(logentry *e, const entry_details *d, const vo * Util functions used by the logger background thread *************************/ -static int _logger_util_addr_endpoint(struct sockaddr *addr, char *rip, +static int _logger_util_addr_endpoint(struct sockaddr_in6 *addr, char *rip, size_t riplen, unsigned short *rport) { memset(rip, 0, riplen); - switch (addr->sa_family) { + switch (addr->sin6_family) { case AF_INET: inet_ntop(AF_INET, &((struct sockaddr_in *) addr)->sin_addr, rip, riplen - 1); @@ -104,7 +104,7 @@ struct logentry_conn_event { int transport; int reason; int sfd; - struct sockaddr addr; + struct sockaddr_in6 addr; }; /* end intermediary structures */ diff --git a/memcached.c b/memcached.c index c03631f..c7c22a8 100644 --- a/memcached.c +++ b/memcached.c @@ -708,7 +708,7 @@ conn *conn_new(const int sfd, enum conn_states init_state, if (init_state == conn_new_cmd) { LOGGER_LOG(NULL, LOG_CONNEVENTS, LOGGER_CONNECTION_NEW, NULL, - (struct sockaddr *) &c->request_addr, c->transport, 0, sfd); + &c->request_addr, c->request_addr_size, c->transport, 0, sfd); } if (settings.verbose > 1) { @@ -897,7 +897,7 @@ static void conn_close(conn *c) { if (c->thread) { LOGGER_LOG(c->thread->l, LOG_CONNEVENTS, LOGGER_CONNECTION_CLOSE, NULL, - (struct sockaddr *) &c->request_addr, c->transport, + &c->request_addr, c->request_addr_size, c->transport, c->close_reason, c->sfd); } |