Skip to content

Commit 7655d96

Browse files
committed
tlshd: Move peername/peeraddr preparation
Refactor / clean up: move the peername and peeraddr completely into the handshake parameters structure. Signed-off-by: Chuck Lever <[email protected]>
1 parent 0f5b25a commit 7655d96

File tree

3 files changed

+32
-27
lines changed

3 files changed

+32
-27
lines changed

src/tlshd/handshake.c

Lines changed: 3 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -120,32 +120,10 @@ void tlshd_start_tls_handshake(gnutls_session_t session,
120120
*/
121121
void tlshd_service_socket(void)
122122
{
123-
static char peername[NI_MAXHOST] = "unknown";
124123
struct tlshd_handshake_parms parms;
125-
static struct sockaddr_storage ss;
126-
static socklen_t peeraddr_len;
127-
struct sockaddr *peeraddr = (struct sockaddr *)&ss;
128-
int ret;
129124

130-
memset(&ss, 0, sizeof(ss));
131-
peeraddr_len = 0;
132125
if (tlshd_genl_get_handshake_parms(&parms) != 0)
133126
goto out;
134-
peeraddr_len = sizeof(ss);
135-
if (getpeername(parms.sockfd, peeraddr, &peeraddr_len) == -1) {
136-
tlshd_log_perror("getpeername");
137-
goto out;
138-
}
139-
if (!parms.peername) {
140-
ret = getnameinfo(peeraddr, peeraddr_len, peername,
141-
sizeof(peername), NULL, 0, NI_NAMEREQD);
142-
if (ret) {
143-
tlshd_log_gai_error(ret);
144-
goto out;
145-
}
146-
} else
147-
strcpy(peername, parms.peername);
148-
parms.peername = peername;
149127

150128
switch (parms.handshake_type) {
151129
case HANDSHAKE_MSG_TYPE_CLIENTHELLO:
@@ -165,8 +143,9 @@ void tlshd_service_socket(void)
165143
free(parms.peerids);
166144

167145
if (parms.session_status) {
168-
tlshd_log_failure(peername, peeraddr, peeraddr_len);
146+
tlshd_log_failure(parms.peername, parms.peeraddr,
147+
parms.peeraddr_len);
169148
return;
170149
}
171-
tlshd_log_success(peername, peeraddr, peeraddr_len);
150+
tlshd_log_success(parms.peername, parms.peeraddr, parms.peeraddr_len);
172151
}

src/tlshd/netlink.c

Lines changed: 27 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -218,10 +218,14 @@ static void tlshd_parse_certificate(struct tlshd_handshake_parms *parms,
218218
parms->x509_privkey = nla_get_u32(tb[HANDSHAKE_A_X509_PRIVKEY]);
219219
}
220220

221+
static char tlshd_peername[NI_MAXHOST] = "unknown";
222+
static struct sockaddr_storage tlshd_peeraddr;
223+
221224
static int tlshd_genl_valid_handler(struct nl_msg *msg, void *arg)
222225
{
223226
struct nlattr *tb[HANDSHAKE_A_ACCEPT_MAX + 1];
224227
struct tlshd_handshake_parms *parms = arg;
228+
char *peername = NULL;
225229
int err;
226230

227231
tlshd_log_debug("Parsing a valid netlink message\n");
@@ -233,12 +237,18 @@ static int tlshd_genl_valid_handler(struct nl_msg *msg, void *arg)
233237
return NL_STOP;
234238
}
235239

236-
if (tb[HANDSHAKE_A_ACCEPT_SOCKFD])
240+
if (tb[HANDSHAKE_A_ACCEPT_SOCKFD]) {
237241
parms->sockfd = nla_get_u32(tb[HANDSHAKE_A_ACCEPT_SOCKFD]);
242+
if (getpeername(parms->sockfd, parms->peeraddr,
243+
&parms->peeraddr_len) == -1) {
244+
tlshd_log_perror("getpeername");
245+
return NL_STOP;
246+
}
247+
}
238248
if (tb[HANDSHAKE_A_ACCEPT_MESSAGE_TYPE])
239249
parms->handshake_type = nla_get_u32(tb[HANDSHAKE_A_ACCEPT_MESSAGE_TYPE]);
240250
if (tb[HANDSHAKE_A_ACCEPT_PEERNAME])
241-
parms->peername = nla_get_string(tb[HANDSHAKE_A_ACCEPT_PEERNAME]);
251+
peername = nla_get_string(tb[HANDSHAKE_A_ACCEPT_PEERNAME]);
242252
if (tb[HANDSHAKE_A_ACCEPT_TIMEOUT])
243253
parms->timeout_ms = nla_get_u32(tb[HANDSHAKE_A_ACCEPT_TIMEOUT]);
244254
if (tb[HANDSHAKE_A_ACCEPT_AUTH_MODE])
@@ -247,11 +257,25 @@ static int tlshd_genl_valid_handler(struct nl_msg *msg, void *arg)
247257
tlshd_parse_peer_identity(parms, tb[HANDSHAKE_A_ACCEPT_PEER_IDENTITY]);
248258
tlshd_parse_certificate(parms, tb[HANDSHAKE_A_ACCEPT_CERTIFICATE]);
249259

260+
if (peername)
261+
strcpy(tlshd_peername, peername);
262+
else {
263+
err = getnameinfo(parms->peeraddr, parms->peeraddr_len,
264+
tlshd_peername, sizeof(tlshd_peername),
265+
NULL, 0, NI_NAMEREQD);
266+
if (err) {
267+
tlshd_log_gai_error(err);
268+
return NL_STOP;
269+
}
270+
}
271+
250272
return NL_SKIP;
251273
}
252274

253275
static const struct tlshd_handshake_parms tlshd_default_handshake_parms = {
254-
.peername = NULL,
276+
.peername = tlshd_peername,
277+
.peeraddr = (struct sockaddr *)&tlshd_peeraddr,
278+
.peeraddr_len = sizeof(tlshd_peeraddr),
255279
.sockfd = -1,
256280
.handshake_type = HANDSHAKE_MSG_TYPE_UNSPEC,
257281
.timeout_ms = GNUTLS_DEFAULT_HANDSHAKE_TIMEOUT,

src/tlshd/tlshd.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,8 @@ struct nl_sock;
2828

2929
struct tlshd_handshake_parms {
3030
char *peername;
31+
struct sockaddr *peeraddr;
32+
socklen_t peeraddr_len;
3133
int sockfd;
3234
int handshake_type;
3335
unsigned int timeout_ms;

0 commit comments

Comments
 (0)