From 9c7498d5598daa92f1726edfbf04cea8aa43ee18 Mon Sep 17 00:00:00 2001 From: Elizabeth Myers Date: Wed, 23 Mar 2016 18:56:29 -0500 Subject: [PATCH] authd/provider: add c_addr/l_addr fields Some providers consume these directly, so it's better to have a "cached" version that's already generated. --- authd/provider.c | 16 ++++++++++++++++ authd/provider.h | 2 ++ 2 files changed, 18 insertions(+) diff --git a/authd/provider.c b/authd/provider.c index 31ef7816..016dfe12 100644 --- a/authd/provider.c +++ b/authd/provider.c @@ -205,9 +205,25 @@ static void start_auth(const char *cid, const char *l_ip, const char *l_port, co rb_strlcpy(auth->l_ip, l_ip, sizeof(auth->l_ip)); auth->l_port = (uint16_t)atoi(l_port); /* should be safe */ + (void) rb_inet_pton_sock(l_ip, (struct sockaddr *)&auth->l_addr, sizeof(auth->l_addr)); rb_strlcpy(auth->c_ip, c_ip, sizeof(auth->c_ip)); auth->c_port = (uint16_t)atoi(c_port); + (void) rb_inet_pton_sock(c_ip, (struct sockaddr *)&auth->c_addr, sizeof(auth->c_addr)); + +#ifdef RB_IPV6 + if(GET_SS_FAMILY(&auth->l_addr) == AF_INET6) + ((struct sockaddr_in6 *)&l_addr)->sin6_port = htons(auth->l_port); + else +#endif + ((struct sockaddr_in *)&l_addr)->sin_port = htons(auth->l_port); + +#ifdef RB_IPV6 + if(GET_SS_FAMILY(&auth->c_addr) == AF_INET6) + ((struct sockaddr_in6 *)&c_addr)->sin6_port = htons(auth->c_port); + else +#endif + ((struct sockaddr_in *)&c_addr)->sin_port = htons(auth->c_port); rb_dictionary_add(auth_clients, RB_UINT_TO_POINTER(auth->cid), auth); diff --git a/authd/provider.h b/authd/provider.h index a3326cc5..5fa0962b 100644 --- a/authd/provider.h +++ b/authd/provider.h @@ -40,9 +40,11 @@ struct auth_client char l_ip[HOSTIPLEN + 1]; /* Listener IP address */ uint16_t l_port; /* Listener port */ + struct rb_sockaddr_storage l_addr; /* Listener address/port */ char c_ip[HOSTIPLEN + 1]; /* Client IP address */ uint16_t c_port; /* Client port */ + struct rb_sockaddr_storage c_addr; /* Client address/port */ char hostname[HOSTLEN + 1]; /* Used for DNS lookup */ char username[USERLEN + 1]; /* Used for ident lookup */