Skip to content

Commit 484b63c

Browse files
committed
tlshd: Convert parms->peeraddr to a presentation address
There are no consumers that use peeraddr as a sockaddr. Render it as a presentation address as soon as getpeername(3) gets the socket address. Signed-off-by: Chuck Lever <[email protected]>
1 parent 86607af commit 484b63c

File tree

3 files changed

+29
-19
lines changed

3 files changed

+29
-19
lines changed

src/tlshd/log.c

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -61,14 +61,10 @@ void tlshd_log_completion(struct tlshd_handshake_parms *parms)
6161
status = "failed";
6262
priority = LOG_ERR;
6363
}
64-
if (parms->peeraddr_len) {
65-
char buf[NI_MAXHOST];
66-
67-
getnameinfo(parms->peeraddr, parms->peeraddr_len, buf,
68-
sizeof(buf), NULL, 0, NI_NUMERICHOST);
64+
if (parms->peeraddr)
6965
syslog(priority, "Handshake with '%s' (%s) %s\n",
70-
parms->peername, buf, status);
71-
} else
66+
parms->peername, parms->peeraddr, status);
67+
else
7268
syslog(priority, "Handshake request %s\n", status);
7369
}
7470

src/tlshd/netlink.c

Lines changed: 25 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -233,14 +233,15 @@ static void tlshd_parse_certificate(struct tlshd_handshake_parms *parms,
233233
}
234234

235235
static char tlshd_peername[NI_MAXHOST] = "unknown";
236-
static struct sockaddr_storage tlshd_peeraddr = { 0 };
237236

238237
static int tlshd_genl_valid_handler(struct nl_msg *msg, void *arg)
239238
{
240239
struct nlattr *tb[HANDSHAKE_A_ACCEPT_MAX + 1];
241240
struct tlshd_handshake_parms *parms = arg;
241+
struct sockaddr_storage addr;
242+
struct sockaddr *sap = NULL;
243+
socklen_t salen, optlen;
242244
char *peername = NULL;
243-
socklen_t optlen;
244245
int err;
245246

246247
tlshd_log_debug("Parsing a valid netlink message\n");
@@ -253,18 +254,32 @@ static int tlshd_genl_valid_handler(struct nl_msg *msg, void *arg)
253254
}
254255

255256
if (tb[HANDSHAKE_A_ACCEPT_SOCKFD]) {
257+
char buf[NI_MAXHOST];
258+
int proto;
259+
256260
parms->sockfd = nla_get_s32(tb[HANDSHAKE_A_ACCEPT_SOCKFD]);
257-
if (getpeername(parms->sockfd, parms->peeraddr,
258-
&parms->peeraddr_len) == -1) {
261+
262+
salen = sizeof(addr);
263+
sap = (struct sockaddr *)&addr;
264+
if (getpeername(parms->sockfd, sap, &salen) == -1) {
259265
tlshd_log_perror("getpeername");
260266
return NL_STOP;
261267
}
262-
optlen = sizeof(parms->ip_proto);
268+
err = getnameinfo(sap, salen, buf, sizeof(buf),
269+
NULL, 0, NI_NUMERICHOST);
270+
if (err) {
271+
tlshd_log_gai_error(err);
272+
return NL_STOP;
273+
}
274+
parms->peeraddr = strdup(buf);
275+
276+
optlen = sizeof(proto);
263277
if (getsockopt(parms->sockfd, SOL_SOCKET, SO_PROTOCOL,
264-
&parms->ip_proto, &optlen) == -1) {
278+
&proto, &optlen) == -1) {
265279
tlshd_log_perror("getsockopt (SO_PROTOCOL)");
266280
return NL_STOP;
267281
}
282+
parms->ip_proto = proto;
268283
}
269284
if (tb[HANDSHAKE_A_ACCEPT_MESSAGE_TYPE])
270285
parms->handshake_type = nla_get_u32(tb[HANDSHAKE_A_ACCEPT_MESSAGE_TYPE]);
@@ -290,8 +305,8 @@ static int tlshd_genl_valid_handler(struct nl_msg *msg, void *arg)
290305

291306
if (peername)
292307
strncpy(tlshd_peername, peername, sizeof(tlshd_peername) - 1);
293-
else {
294-
err = getnameinfo(parms->peeraddr, parms->peeraddr_len,
308+
else if (sap) {
309+
err = getnameinfo(sap, salen,
295310
tlshd_peername, sizeof(tlshd_peername),
296311
NULL, 0, NI_NAMEREQD);
297312
if (err) {
@@ -305,8 +320,7 @@ static int tlshd_genl_valid_handler(struct nl_msg *msg, void *arg)
305320

306321
static const struct tlshd_handshake_parms tlshd_default_handshake_parms = {
307322
.peername = tlshd_peername,
308-
.peeraddr = (struct sockaddr *)&tlshd_peeraddr,
309-
.peeraddr_len = sizeof(tlshd_peeraddr),
323+
.peeraddr = NULL,
310324
.sockfd = -1,
311325
.ip_proto = -1,
312326
.handshake_type = HANDSHAKE_MSG_TYPE_UNSPEC,
@@ -412,6 +426,7 @@ void tlshd_genl_put_handshake_parms(struct tlshd_handshake_parms *parms)
412426
keyctl_unlink(parms->keyring, KEY_SPEC_SESSION_KEYRING);
413427
g_array_free(parms->peerids, TRUE);
414428
g_array_free(parms->remote_peerids, TRUE);
429+
free(parms->peeraddr);
415430
}
416431

417432
static int tlshd_genl_put_remote_peerids(struct nl_msg *msg,

src/tlshd/tlshd.h

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,8 +29,7 @@ struct nl_sock;
2929

3030
struct tlshd_handshake_parms {
3131
char *peername;
32-
struct sockaddr *peeraddr;
33-
socklen_t peeraddr_len;
32+
char *peeraddr;
3433
int sockfd;
3534
int ip_proto;
3635
uint32_t handshake_type;

0 commit comments

Comments
 (0)