diff options
| author | ericj <> | 2000-09-26 18:53:13 +0000 |
|---|---|---|
| committer | ericj <> | 2000-09-26 18:53:13 +0000 |
| commit | bac60cdd71e32a92a54762886ece2fab5e012b00 (patch) | |
| tree | 577ce1f3fd5ae352f9d60dabd56d540d746020a2 /src | |
| parent | afba3ddf77a34cc5915c1fd95dff2d4babc98a81 (diff) | |
| download | openbsd-bac60cdd71e32a92a54762886ece2fab5e012b00.tar.gz openbsd-bac60cdd71e32a92a54762886ece2fab5e012b00.tar.bz2 openbsd-bac60cdd71e32a92a54762886ece2fab5e012b00.zip | |
more cleanup and have nlog() deal with errno now as well.
Diffstat (limited to 'src')
| -rw-r--r-- | src/usr.bin/nc/netcat.c | 64 |
1 files changed, 24 insertions, 40 deletions
diff --git a/src/usr.bin/nc/netcat.c b/src/usr.bin/nc/netcat.c index cc62f4a683..6a7b1bc0d6 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.16 2000/09/26 17:46:40 ericj Exp $ */ | 1 | /* $OpenBSD: netcat.c,v 1.17 2000/09/26 18:53:13 ericj Exp $ */ |
| 2 | 2 | ||
| 3 | /* Netcat 1.10 RELEASE 960320 | 3 | /* Netcat 1.10 RELEASE 960320 |
| 4 | * | 4 | * |
| @@ -29,8 +29,6 @@ | |||
| 29 | */ | 29 | */ |
| 30 | 30 | ||
| 31 | 31 | ||
| 32 | #define HAVE_BIND /* ASSUMPTION -- seems to work everywhere! */ | ||
| 33 | |||
| 34 | #include <sys/types.h> | 32 | #include <sys/types.h> |
| 35 | #include <sys/time.h> | 33 | #include <sys/time.h> |
| 36 | #include <sys/select.h> | 34 | #include <sys/select.h> |
| @@ -105,9 +103,9 @@ unsigned int o_wait = 0; | |||
| 105 | u_short o_zero = 0; | 103 | u_short o_zero = 0; |
| 106 | 104 | ||
| 107 | /* Function Prototype's */ | 105 | /* Function Prototype's */ |
| 108 | void help __P(()); | 106 | void help __P(()); |
| 109 | void usage __P((int)); | ||
| 110 | void nlog __P((int, char *, ...)); | 107 | void nlog __P((int, char *, ...)); |
| 108 | void usage __P((int)); | ||
| 111 | 109 | ||
| 112 | /* | 110 | /* |
| 113 | * support routines -- the bulk of this thing. Placed in such an order that | 111 | * support routines -- the bulk of this thing. Placed in such an order that |
| @@ -121,8 +119,7 @@ void nlog __P((int, char *, ...)); | |||
| 121 | void | 119 | void |
| 122 | catch() | 120 | catch() |
| 123 | { | 121 | { |
| 124 | errno = 0; | 122 | if (o_verbose) /* normally we don't care */ |
| 125 | if (o_verbose > 1) /* normally we don't care */ | ||
| 126 | nlog(1, "Sent %i Rcvd %i", wrote_net, wrote_out); | 123 | nlog(1, "Sent %i Rcvd %i", wrote_net, wrote_out); |
| 127 | nlog(1, " punt!"); | 124 | nlog(1, " punt!"); |
| 128 | } | 125 | } |
| @@ -199,7 +196,6 @@ comparehosts(hinfo, hp) | |||
| 199 | struct host_info *hinfo; | 196 | struct host_info *hinfo; |
| 200 | struct hostent *hp; | 197 | struct hostent *hp; |
| 201 | { | 198 | { |
| 202 | errno = 0; | ||
| 203 | if (strcasecmp(hinfo->name, hp->h_name) != 0) { | 199 | if (strcasecmp(hinfo->name, hp->h_name) != 0) { |
| 204 | nlog(0, "DNS fwd/rev mismatch: %s != %s", hinfo->name, hp->h_name); | 200 | nlog(0, "DNS fwd/rev mismatch: %s != %s", hinfo->name, hp->h_name); |
| 205 | return (1); | 201 | return (1); |
| @@ -224,7 +220,6 @@ gethinfo(name, numeric) | |||
| 224 | struct host_info *hinfo = NULL; | 220 | struct host_info *hinfo = NULL; |
| 225 | int x; | 221 | int x; |
| 226 | 222 | ||
| 227 | errno = 0; | ||
| 228 | if (name) | 223 | if (name) |
| 229 | hinfo = (struct host_info *) calloc(1, sizeof(struct host_info)); | 224 | hinfo = (struct host_info *) calloc(1, sizeof(struct host_info)); |
| 230 | 225 | ||
| @@ -325,9 +320,6 @@ getpinfo(pstring, pnum) | |||
| 325 | struct servent *servent; | 320 | struct servent *servent; |
| 326 | int x; | 321 | int x; |
| 327 | int y; | 322 | int y; |
| 328 | char *whichp = "tcp"; | ||
| 329 | if (o_udpmode) | ||
| 330 | whichp = "udp"; | ||
| 331 | 323 | ||
| 332 | pinfo->name[0] = '?';/* fast preload */ | 324 | pinfo->name[0] = '?';/* fast preload */ |
| 333 | pinfo->name[1] = '\0'; | 325 | pinfo->name[1] = '\0'; |
| @@ -345,10 +337,10 @@ getpinfo(pstring, pnum) | |||
| 345 | if (o_nflag) /* go faster, skip getservbyblah */ | 337 | if (o_nflag) /* go faster, skip getservbyblah */ |
| 346 | goto gp_finish; | 338 | goto gp_finish; |
| 347 | y = htons(x); /* gotta do this -- see Fig.1 below */ | 339 | y = htons(x); /* gotta do this -- see Fig.1 below */ |
| 348 | servent = getservbyport(y, whichp); | 340 | servent = getservbyport(y, o_udpmode ? "udp" : "tcp"); |
| 349 | if (servent) { | 341 | if (servent) { |
| 350 | y = ntohs(servent->s_port); | 342 | y = ntohs(servent->s_port); |
| 351 | if (x != y) /* "never happen" */ | 343 | if (x != y) |
| 352 | nlog(0, "Warning: port-bynum mismatch, %d != %d", x, y); | 344 | nlog(0, "Warning: port-bynum mismatch, %d != %d", x, y); |
| 353 | strlcpy(pinfo->name, servent->s_name, | 345 | strlcpy(pinfo->name, servent->s_name, |
| 354 | sizeof(pinfo->name)); | 346 | sizeof(pinfo->name)); |
| @@ -371,9 +363,9 @@ getpinfo(pstring, pnum) | |||
| 371 | if (x) | 363 | if (x) |
| 372 | return (getpinfo(NULL, x)); /* recurse for | 364 | return (getpinfo(NULL, x)); /* recurse for |
| 373 | * numeric-string-arg */ | 365 | * numeric-string-arg */ |
| 374 | if (o_nflag) /* can't use names! */ | 366 | if (o_nflag) |
| 375 | return (0); | 367 | return (0); |
| 376 | servent = getservbyname(pstring, whichp); | 368 | servent = getservbyname(pstring, o_udpmode ? "udp" : "tcp"); |
| 377 | if (servent) { | 369 | if (servent) { |
| 378 | strlcpy(pinfo->name, servent->s_name, | 370 | strlcpy(pinfo->name, servent->s_name, |
| 379 | sizeof(pinfo->name)); | 371 | sizeof(pinfo->name)); |
| @@ -481,7 +473,6 @@ doconnect(rad, rp, lad, lp) | |||
| 481 | int nnetfd = 0; | 473 | int nnetfd = 0; |
| 482 | int rr; | 474 | int rr; |
| 483 | int x, y; | 475 | int x, y; |
| 484 | errno = 0; | ||
| 485 | 476 | ||
| 486 | /* grab a socket; set opts */ | 477 | /* grab a socket; set opts */ |
| 487 | while (nnetfd == 0) { | 478 | while (nnetfd == 0) { |
| @@ -522,7 +513,6 @@ doconnect(rad, rp, lad, lp) | |||
| 522 | else { | 513 | else { |
| 523 | nlog(0, "retrying local %s:%d", inet_ntoa(lclend->sin_addr), lp); | 514 | nlog(0, "retrying local %s:%d", inet_ntoa(lclend->sin_addr), lp); |
| 524 | sleep(2); | 515 | sleep(2); |
| 525 | errno = 0; /* clear from sleep */ | ||
| 526 | } | 516 | } |
| 527 | } | 517 | } |
| 528 | } | 518 | } |
| @@ -572,7 +562,6 @@ dolisten(rad, rp, lad, lp) | |||
| 572 | int x; | 562 | int x; |
| 573 | char *cp; | 563 | char *cp; |
| 574 | u_short z; | 564 | u_short z; |
| 575 | errno = 0; | ||
| 576 | 565 | ||
| 577 | /* | 566 | /* |
| 578 | * Pass everything off to doconnect, | 567 | * Pass everything off to doconnect, |
| @@ -652,14 +641,13 @@ whoisit: | |||
| 652 | cp = &bigbuf_net[32]; | 641 | cp = &bigbuf_net[32]; |
| 653 | x = sizeof(struct sockaddr); | 642 | x = sizeof(struct sockaddr); |
| 654 | rr = getsockname(nnetfd, (struct sockaddr *) lclend, &x); | 643 | rr = getsockname(nnetfd, (struct sockaddr *) lclend, &x); |
| 655 | if (rr < 0 && o_verbose) | 644 | if (rr < 0) |
| 656 | nlog(0, "post-rcv getsockname failed"); | 645 | nlog(0, "post-rcv getsockname failed"); |
| 657 | strcpy(cp, inet_ntoa(lclend->sin_addr)); | 646 | strcpy(cp, inet_ntoa(lclend->sin_addr)); |
| 658 | 647 | ||
| 659 | z = ntohs(remend->sin_port); | 648 | z = ntohs(remend->sin_port); |
| 660 | strcpy(bigbuf_net, inet_ntoa(remend->sin_addr)); | 649 | strcpy(bigbuf_net, inet_ntoa(remend->sin_addr)); |
| 661 | whozis = gethinfo(bigbuf_net, o_nflag); | 650 | whozis = gethinfo(bigbuf_net, o_nflag); |
| 662 | errno = 0; | ||
| 663 | x = 0; | 651 | x = 0; |
| 664 | if (rad) /* xxx: fix to go down the *list* if we have | 652 | if (rad) /* xxx: fix to go down the *list* if we have |
| 665 | * one? */ | 653 | * one? */ |
| @@ -705,8 +693,8 @@ udptest(fd, where) | |||
| 705 | int rr; | 693 | int rr; |
| 706 | 694 | ||
| 707 | rr = write(fd, bigbuf_in, 1); | 695 | rr = write(fd, bigbuf_in, 1); |
| 708 | if (rr != 1 && o_verbose) | 696 | if (rr != 1) |
| 709 | nlog(0, "udptest first write failed?! errno %d", errno); | 697 | nlog(0, "udptest first write failed: "); |
| 710 | if (o_wait) | 698 | if (o_wait) |
| 711 | sleep(o_wait); | 699 | sleep(o_wait); |
| 712 | else { | 700 | else { |
| @@ -718,7 +706,6 @@ udptest(fd, where) | |||
| 718 | o_wait = 0; | 706 | o_wait = 0; |
| 719 | o_udpmode++; | 707 | o_udpmode++; |
| 720 | } | 708 | } |
| 721 | errno = 0; | ||
| 722 | rr = write(fd, bigbuf_in, 1); | 709 | rr = write(fd, bigbuf_in, 1); |
| 723 | if (rr == 1) | 710 | if (rr == 1) |
| 724 | return (fd); | 711 | return (fd); |
| @@ -727,7 +714,7 @@ udptest(fd, where) | |||
| 727 | } | 714 | } |
| 728 | 715 | ||
| 729 | /* | 716 | /* |
| 730 | * oprint : | 717 | * oprint : |
| 731 | * Hexdump bytes shoveled either way to a running logfile, in the format: | 718 | * Hexdump bytes shoveled either way to a running logfile, in the format: |
| 732 | * D offset - - - - --- 16 bytes --- - - - - # .... ascii ..... | 719 | * D offset - - - - --- 16 bytes --- - - - - # .... ascii ..... |
| 733 | * where "which" sets the direction indicator, D: | 720 | * where "which" sets the direction indicator, D: |
| @@ -918,7 +905,6 @@ readwrite(fd) | |||
| 918 | } | 905 | } |
| 919 | if (o_interval) | 906 | if (o_interval) |
| 920 | sleep(o_interval); | 907 | sleep(o_interval); |
| 921 | errno = 0; | ||
| 922 | 908 | ||
| 923 | while (FD_ISSET(fd, &fds1)) { /* i.e. till the *net* closes! */ | 909 | while (FD_ISSET(fd, &fds1)) { /* i.e. till the *net* closes! */ |
| 924 | struct timeval *tv; | 910 | struct timeval *tv; |
| @@ -1035,7 +1021,6 @@ shovel: | |||
| 1035 | } | 1021 | } |
| 1036 | if (o_interval) { | 1022 | if (o_interval) { |
| 1037 | sleep(o_interval); | 1023 | sleep(o_interval); |
| 1038 | errno = 0; | ||
| 1039 | continue; | 1024 | continue; |
| 1040 | } | 1025 | } |
| 1041 | if ((rzleft) || (rnleft)) { | 1026 | if ((rzleft) || (rnleft)) { |
| @@ -1069,16 +1054,14 @@ main(argc, argv) | |||
| 1069 | u_short curport = 0; | 1054 | u_short curport = 0; |
| 1070 | char *randports = NULL; | 1055 | char *randports = NULL; |
| 1071 | 1056 | ||
| 1072 | #ifdef HAVE_BIND | ||
| 1073 | res_init(); | 1057 | res_init(); |
| 1074 | #endif | 1058 | |
| 1075 | lclend = (struct sockaddr_in *) calloc(1, sizeof(struct sockaddr)); | 1059 | lclend = (struct sockaddr_in *) calloc(1, sizeof(struct sockaddr)); |
| 1076 | remend = (struct sockaddr_in *) calloc(1, sizeof(struct sockaddr)); | 1060 | remend = (struct sockaddr_in *) calloc(1, sizeof(struct sockaddr)); |
| 1077 | bigbuf_in = calloc(1, BIGSIZ); | 1061 | bigbuf_in = calloc(1, BIGSIZ); |
| 1078 | bigbuf_net = calloc(1, BIGSIZ); | 1062 | bigbuf_net = calloc(1, BIGSIZ); |
| 1079 | pinfo= (struct port_info *) calloc(1, sizeof(struct port_info)); | 1063 | pinfo= (struct port_info *) calloc(1, sizeof(struct port_info)); |
| 1080 | 1064 | ||
| 1081 | errno = 0; | ||
| 1082 | gatesptr = 4; | 1065 | gatesptr = 4; |
| 1083 | 1066 | ||
| 1084 | /* | 1067 | /* |
| @@ -1229,14 +1212,14 @@ main(argc, argv) | |||
| 1229 | } | 1212 | } |
| 1230 | 1213 | ||
| 1231 | /* other misc initialization */ | 1214 | /* other misc initialization */ |
| 1232 | FD_SET(0, &fds1); /* stdin *is* initially open */ | 1215 | FD_SET(0, &fds1); /* stdin *is* initially open */ |
| 1233 | if (o_random) { | 1216 | if (o_random) { |
| 1234 | randports = calloc(1, 65536); /* big flag array for ports */ | 1217 | randports = calloc(1, 65536); /* big flag array for ports */ |
| 1235 | } | 1218 | } |
| 1236 | if (o_wfile) { | 1219 | if (o_wfile) { |
| 1237 | ofd = open(stage, O_WRONLY | O_CREAT | O_TRUNC, 0664); | 1220 | ofd = open(stage, O_WRONLY | O_CREAT | O_TRUNC, 0664); |
| 1238 | if (ofd <= 0) /* must be > extant 0/1/2 */ | 1221 | if (ofd <= 0) /* must be > extant 0/1/2 */ |
| 1239 | nlog(1, "Can't open %s", stage); | 1222 | nlog(1, "%s: ", stage); |
| 1240 | stage = (unsigned char *) calloc(1, 100); | 1223 | stage = (unsigned char *) calloc(1, 100); |
| 1241 | } | 1224 | } |
| 1242 | /* optind is now index of first non -x arg */ | 1225 | /* optind is now index of first non -x arg */ |
| @@ -1246,7 +1229,6 @@ main(argc, argv) | |||
| 1246 | themaddr = &whereto->iaddrs[0]; | 1229 | themaddr = &whereto->iaddrs[0]; |
| 1247 | if (themaddr) | 1230 | if (themaddr) |
| 1248 | optind++; /* skip past valid host lookup */ | 1231 | optind++; /* skip past valid host lookup */ |
| 1249 | errno = 0; | ||
| 1250 | 1232 | ||
| 1251 | /* | 1233 | /* |
| 1252 | * Handle listen mode here, and exit afterward. Only does one connect; | 1234 | * Handle listen mode here, and exit afterward. Only does one connect; |
| @@ -1281,14 +1263,13 @@ main(argc, argv) | |||
| 1281 | 1263 | ||
| 1282 | while (argv[optind]) { | 1264 | while (argv[optind]) { |
| 1283 | hiport = loport = 0; | 1265 | hiport = loport = 0; |
| 1284 | cp = strchr(argv[optind], '-'); | 1266 | if (cp = strchr(argv[optind], '-')) { |
| 1285 | if (cp) { | ||
| 1286 | *cp = '\0'; | 1267 | *cp = '\0'; |
| 1287 | cp++; | 1268 | cp++; |
| 1288 | hiport = getpinfo(cp, 0); | 1269 | hiport = getpinfo(cp, 0); |
| 1289 | if (hiport == 0) | 1270 | if (hiport == 0) |
| 1290 | nlog(1, "invalid port %s", cp); | 1271 | nlog(1, "invalid port %s", cp); |
| 1291 | } /* if found a dash */ | 1272 | } |
| 1292 | loport = getpinfo(argv[optind], 0); | 1273 | loport = getpinfo(argv[optind], 0); |
| 1293 | if (loport == 0) | 1274 | if (loport == 0) |
| 1294 | nlog(1, "invalid port %s", argv[optind]); | 1275 | nlog(1, "invalid port %s", argv[optind]); |
| @@ -1299,7 +1280,7 @@ main(argc, argv) | |||
| 1299 | curport = nextport(randports); | 1280 | curport = nextport(randports); |
| 1300 | } else | 1281 | } else |
| 1301 | curport = hiport; | 1282 | curport = hiport; |
| 1302 | } else /* not a range, including args like "25-25" */ | 1283 | } else |
| 1303 | curport = loport; | 1284 | curport = loport; |
| 1304 | /* | 1285 | /* |
| 1305 | * Now start connecting to these things. | 1286 | * Now start connecting to these things. |
| @@ -1323,7 +1304,7 @@ main(argc, argv) | |||
| 1323 | x = readwrite(netfd); | 1304 | x = readwrite(netfd); |
| 1324 | } else { | 1305 | } else { |
| 1325 | x = 1; | 1306 | x = 1; |
| 1326 | if ((Single || (o_verbose > 1)) | 1307 | if ((Single || (o_verbose)) |
| 1327 | || (errno != ECONNREFUSED)) { | 1308 | || (errno != ECONNREFUSED)) { |
| 1328 | nlog(0, "%s [%s] %d (%s)", | 1309 | nlog(0, "%s [%s] %d (%s)", |
| 1329 | whereto->name, whereto->addrs[0], | 1310 | whereto->name, whereto->addrs[0], |
| @@ -1337,11 +1318,10 @@ main(argc, argv) | |||
| 1337 | curport = nextport(randports); | 1318 | curport = nextport(randports); |
| 1338 | else | 1319 | else |
| 1339 | curport--; | 1320 | curport--; |
| 1340 | } | 1321 | } |
| 1341 | optind++; | 1322 | optind++; |
| 1342 | } | 1323 | } |
| 1343 | 1324 | ||
| 1344 | errno = 0; | ||
| 1345 | nlog(0, "Sent %i Rcvd %i", wrote_net, wrote_out); | 1325 | nlog(0, "Sent %i Rcvd %i", wrote_net, wrote_out); |
| 1346 | if (Single) | 1326 | if (Single) |
| 1347 | exit(x); | 1327 | exit(x); |
| @@ -1364,6 +1344,8 @@ nlog(doexit, fmt) | |||
| 1364 | vfprintf(stderr, fmt, args); | 1344 | vfprintf(stderr, fmt, args); |
| 1365 | if (h_errno) | 1345 | if (h_errno) |
| 1366 | herror(NULL); | 1346 | herror(NULL); |
| 1347 | else if (errno) | ||
| 1348 | fprintf(stderr, "%s\n", strerror(errno)); | ||
| 1367 | else | 1349 | else |
| 1368 | putc('\n', stderr); | 1350 | putc('\n', stderr); |
| 1369 | va_end(args); | 1351 | va_end(args); |
| @@ -1371,6 +1353,8 @@ nlog(doexit, fmt) | |||
| 1371 | 1353 | ||
| 1372 | if (doexit) | 1354 | if (doexit) |
| 1373 | exit(1); | 1355 | exit(1); |
| 1356 | |||
| 1357 | h_errno = errno = 0; | ||
| 1374 | } | 1358 | } |
| 1375 | 1359 | ||
| 1376 | void | 1360 | void |
