diff options
-rw-r--r-- | src/usr.bin/nc/netcat.c | 36 |
1 files changed, 16 insertions, 20 deletions
diff --git a/src/usr.bin/nc/netcat.c b/src/usr.bin/nc/netcat.c index 4c3ed4e97f..cfc5a2363b 100644 --- a/src/usr.bin/nc/netcat.c +++ b/src/usr.bin/nc/netcat.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: netcat.c,v 1.144 2015/11/23 01:23:56 bcook Exp $ */ | 1 | /* $OpenBSD: netcat.c,v 1.145 2015/12/07 02:38:54 tb Exp $ */ |
2 | /* | 2 | /* |
3 | * Copyright (c) 2001 Eric Jackson <ericj@monkey.org> | 3 | * Copyright (c) 2001 Eric Jackson <ericj@monkey.org> |
4 | * Copyright (c) 2015 Bob Beck. All rights reserved. | 4 | * Copyright (c) 2015 Bob Beck. All rights reserved. |
@@ -58,7 +58,6 @@ | |||
58 | #include "atomicio.h" | 58 | #include "atomicio.h" |
59 | 59 | ||
60 | #define PORT_MAX 65535 | 60 | #define PORT_MAX 65535 |
61 | #define PORT_MAX_LEN 6 | ||
62 | #define UNIX_DG_TMP_SOCKET_SIZE 19 | 61 | #define UNIX_DG_TMP_SOCKET_SIZE 19 |
63 | 62 | ||
64 | #define POLL_STDIN 0 | 63 | #define POLL_STDIN 0 |
@@ -1289,25 +1288,22 @@ build_ports(char *p) | |||
1289 | lo = cp; | 1288 | lo = cp; |
1290 | } | 1289 | } |
1291 | 1290 | ||
1292 | /* Load ports sequentially. */ | 1291 | /* |
1293 | for (cp = lo; cp <= hi; cp++) { | 1292 | * Initialize portlist with a random permutation. Based on |
1294 | portlist[x] = calloc(1, PORT_MAX_LEN); | 1293 | * Knuth, as in ip_randomid() in sys/netinet/ip_id.c. |
1295 | if (portlist[x] == NULL) | 1294 | */ |
1296 | err(1, NULL); | ||
1297 | snprintf(portlist[x], PORT_MAX_LEN, "%d", cp); | ||
1298 | x++; | ||
1299 | } | ||
1300 | |||
1301 | /* Randomly swap ports. */ | ||
1302 | if (rflag) { | 1295 | if (rflag) { |
1303 | int y; | 1296 | for (x = 0; x <= hi - lo; x++) { |
1304 | char *c; | 1297 | cp = arc4random_uniform(x + 1); |
1305 | 1298 | portlist[x] = portlist[cp]; | |
1306 | for (x = 0; x <= (hi - lo); x++) { | 1299 | if (asprintf(&portlist[cp], "%d", x + lo) < 0) |
1307 | y = (arc4random() & 0xFFFF) % (hi - lo); | 1300 | err(1, "asprintf"); |
1308 | c = portlist[x]; | 1301 | } |
1309 | portlist[x] = portlist[y]; | 1302 | } else { /* Load ports sequentially. */ |
1310 | portlist[y] = c; | 1303 | for (cp = lo; cp <= hi; cp++) { |
1304 | if (asprintf(&portlist[x], "%d", cp) < 0) | ||
1305 | err(1, "asprintf"); | ||
1306 | x++; | ||
1311 | } | 1307 | } |
1312 | } | 1308 | } |
1313 | } else { | 1309 | } else { |