diff options
author | tb <> | 2021-12-06 11:06:58 +0000 |
---|---|---|
committer | tb <> | 2021-12-06 11:06:58 +0000 |
commit | 60a6a10467f5b7d56c92fe8e4133a6af9e9bd48f (patch) | |
tree | 55bcc3ded6ebb2898bb541a7b58b36f5c9bc096d /src/usr.bin/openssl/s_socket.c | |
parent | f99574add34cb55c0297c6dcad8ed12e9eb18893 (diff) | |
download | openbsd-60a6a10467f5b7d56c92fe8e4133a6af9e9bd48f.tar.gz openbsd-60a6a10467f5b7d56c92fe8e4133a6af9e9bd48f.tar.bz2 openbsd-60a6a10467f5b7d56c92fe8e4133a6af9e9bd48f.zip |
Clean up a bunch of dead code in s_server.c and s_socket.c
jsg's analysis tool flagged a potential double free in do_server().
While this looks like a false positive, we can clean this code up
a little: the host name passed to the callbacks isn't used by either
sv_body() and www_body(), so it can be made local to do_accept()
(an extra variable would not even be needed). Simplify the callbacks'
signatures accordingly. Remove some commented out linger code that
would never be used again anyway.
ok inoguchi jsg
Diffstat (limited to 'src/usr.bin/openssl/s_socket.c')
-rw-r--r-- | src/usr.bin/openssl/s_socket.c | 43 |
1 files changed, 14 insertions, 29 deletions
diff --git a/src/usr.bin/openssl/s_socket.c b/src/usr.bin/openssl/s_socket.c index f22c88d228..db125c1ed3 100644 --- a/src/usr.bin/openssl/s_socket.c +++ b/src/usr.bin/openssl/s_socket.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: s_socket.c,v 1.12 2021/08/29 12:33:15 tb Exp $ */ | 1 | /* $OpenBSD: s_socket.c,v 1.13 2021/12/06 11:06:58 tb Exp $ */ |
2 | /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) | 2 | /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) |
3 | * All rights reserved. | 3 | * All rights reserved. |
4 | * | 4 | * |
@@ -75,7 +75,7 @@ | |||
75 | 75 | ||
76 | static int init_server(int *sock, int port, int type); | 76 | static int init_server(int *sock, int port, int type); |
77 | static int init_server_long(int *sock, int port, char *ip, int type); | 77 | static int init_server_long(int *sock, int port, char *ip, int type); |
78 | static int do_accept(int acc_sock, int *sock, char **host); | 78 | static int do_accept(int acc_sock, int *sock); |
79 | 79 | ||
80 | int | 80 | int |
81 | init_client(int *sock, char *host, char *port, int type, int af) | 81 | init_client(int *sock, char *host, char *port, int type, int af) |
@@ -131,11 +131,10 @@ init_client(int *sock, char *host, char *port, int type, int af) | |||
131 | 131 | ||
132 | int | 132 | int |
133 | do_server(int port, int type, int *ret, | 133 | do_server(int port, int type, int *ret, |
134 | int (*cb) (char *hostname, int s, unsigned char *context), | 134 | int (*cb)(int s, unsigned char *context), |
135 | unsigned char *context, int naccept) | 135 | unsigned char *context, int naccept) |
136 | { | 136 | { |
137 | int sock; | 137 | int sock; |
138 | char *name = NULL; | ||
139 | int accept_socket = 0; | 138 | int accept_socket = 0; |
140 | int i; | 139 | int i; |
141 | 140 | ||
@@ -148,15 +147,14 @@ do_server(int port, int type, int *ret, | |||
148 | } | 147 | } |
149 | for (;;) { | 148 | for (;;) { |
150 | if (type == SOCK_STREAM) { | 149 | if (type == SOCK_STREAM) { |
151 | if (do_accept(accept_socket, &sock, &name) == 0) { | 150 | if (do_accept(accept_socket, &sock) == 0) { |
152 | shutdown(accept_socket, SHUT_RD); | 151 | shutdown(accept_socket, SHUT_RD); |
153 | close(accept_socket); | 152 | close(accept_socket); |
154 | return (0); | 153 | return (0); |
155 | } | 154 | } |
156 | } else | 155 | } else |
157 | sock = accept_socket; | 156 | sock = accept_socket; |
158 | i = (*cb) (name, sock, context); | 157 | i = cb(sock, context); |
159 | free(name); | ||
160 | if (type == SOCK_STREAM) { | 158 | if (type == SOCK_STREAM) { |
161 | shutdown(sock, SHUT_RDWR); | 159 | shutdown(sock, SHUT_RDWR); |
162 | close(sock); | 160 | close(sock); |
@@ -227,13 +225,13 @@ init_server(int *sock, int port, int type) | |||
227 | } | 225 | } |
228 | 226 | ||
229 | static int | 227 | static int |
230 | do_accept(int acc_sock, int *sock, char **host) | 228 | do_accept(int acc_sock, int *sock) |
231 | { | 229 | { |
232 | int ret; | ||
233 | struct hostent *h1, *h2; | 230 | struct hostent *h1, *h2; |
234 | static struct sockaddr_in from; | 231 | static struct sockaddr_in from; |
235 | socklen_t len; | 232 | socklen_t len; |
236 | /* struct linger ling; */ | 233 | char *host = NULL; |
234 | int ret; | ||
237 | 235 | ||
238 | redoit: | 236 | redoit: |
239 | 237 | ||
@@ -249,47 +247,34 @@ do_accept(int acc_sock, int *sock, char **host) | |||
249 | perror("accept"); | 247 | perror("accept"); |
250 | return (0); | 248 | return (0); |
251 | } | 249 | } |
252 | /* | 250 | |
253 | ling.l_onoff=1; | ||
254 | ling.l_linger=0; | ||
255 | i=setsockopt(ret,SOL_SOCKET,SO_LINGER,(char *)&ling,sizeof(ling)); | ||
256 | if (i == -1) { perror("linger"); return(0); } | ||
257 | i=0; | ||
258 | i=setsockopt(ret,SOL_SOCKET,SO_KEEPALIVE,(char *)&i,sizeof(i)); | ||
259 | if (i == -1) { perror("keepalive"); return(0); } | ||
260 | */ | ||
261 | |||
262 | if (host == NULL) | ||
263 | goto end; | ||
264 | h1 = gethostbyaddr((char *) &from.sin_addr.s_addr, | 251 | h1 = gethostbyaddr((char *) &from.sin_addr.s_addr, |
265 | sizeof(from.sin_addr.s_addr), AF_INET); | 252 | sizeof(from.sin_addr.s_addr), AF_INET); |
266 | if (h1 == NULL) { | 253 | if (h1 == NULL) { |
267 | BIO_printf(bio_err, "bad gethostbyaddr\n"); | 254 | BIO_printf(bio_err, "bad gethostbyaddr\n"); |
268 | *host = NULL; | ||
269 | /* return(0); */ | ||
270 | } else { | 255 | } else { |
271 | if ((*host = strdup(h1->h_name)) == NULL) { | 256 | if ((host = strdup(h1->h_name)) == NULL) { |
272 | perror("strdup"); | 257 | perror("strdup"); |
273 | close(ret); | 258 | close(ret); |
274 | return (0); | 259 | return (0); |
275 | } | 260 | } |
276 | 261 | ||
277 | h2 = gethostbyname(*host); | 262 | h2 = gethostbyname(host); |
278 | if (h2 == NULL) { | 263 | if (h2 == NULL) { |
279 | BIO_printf(bio_err, "gethostbyname failure\n"); | 264 | BIO_printf(bio_err, "gethostbyname failure\n"); |
280 | close(ret); | 265 | close(ret); |
281 | free(*host); | 266 | free(host); |
282 | return (0); | 267 | return (0); |
283 | } | 268 | } |
284 | if (h2->h_addrtype != AF_INET) { | 269 | if (h2->h_addrtype != AF_INET) { |
285 | BIO_printf(bio_err, "gethostbyname addr is not AF_INET\n"); | 270 | BIO_printf(bio_err, "gethostbyname addr is not AF_INET\n"); |
286 | close(ret); | 271 | close(ret); |
287 | free(*host); | 272 | free(host); |
288 | return (0); | 273 | return (0); |
289 | } | 274 | } |
290 | } | 275 | } |
291 | 276 | ||
292 | end: | 277 | free(host); |
293 | *sock = ret; | 278 | *sock = ret; |
294 | return (1); | 279 | return (1); |
295 | } | 280 | } |