summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKevin Lin <developer@kevinlin.info>2021-08-17 22:56:38 -0700
committerdormando <dormando@rydia.net>2021-09-27 12:56:21 -0700
commit32349beb8e34a47201546de08dec003d39f29649 (patch)
treed7e943d5c794f083a629461d3009aeaafa4455e2
parent3a8ca319b35a3b3533b1f1ca55e904cfcb71962c (diff)
downloadmemcached-32349beb8e34a47201546de08dec003d39f29649.tar.gz
Properly accommodate IPv6 addresses in LOG_CONNEVENTS logs
-rw-r--r--logger.c9
-rw-r--r--logger.h2
-rw-r--r--memcached.c4
3 files changed, 8 insertions, 7 deletions
diff --git a/logger.c b/logger.c
index 3dad02d..a5a87ab 100644
--- a/logger.c
+++ b/logger.c
@@ -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);
diff --git a/logger.h b/logger.h
index 30b3806..4015206 100644
--- a/logger.h
+++ b/logger.h
@@ -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);
}