diff options
Diffstat (limited to '')
| -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 { |
