summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/usr.bin/nc/netcat.c44
1 files changed, 21 insertions, 23 deletions
diff --git a/src/usr.bin/nc/netcat.c b/src/usr.bin/nc/netcat.c
index bea1b79ba5..20571aab68 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.87 2006/02/01 21:33:14 otto Exp $ */ 1/* $OpenBSD: netcat.c,v 1.88 2006/06/02 03:46:38 ray Exp $ */
2/* 2/*
3 * Copyright (c) 2001 Eric Jackson <ericj@monkey.org> 3 * Copyright (c) 2001 Eric Jackson <ericj@monkey.org>
4 * 4 *
@@ -65,7 +65,7 @@
65 65
66/* Command Line Options */ 66/* Command Line Options */
67int dflag; /* detached, no stdin */ 67int dflag; /* detached, no stdin */
68int iflag; /* Interval Flag */ 68unsigned int iflag; /* Interval Flag */
69int jflag; /* use jumbo frames if we can */ 69int jflag; /* use jumbo frames if we can */
70int kflag; /* More than one connect */ 70int kflag; /* More than one connect */
71int lflag; /* Bind to local port */ 71int lflag; /* Bind to local port */
@@ -106,13 +106,13 @@ int
106main(int argc, char *argv[]) 106main(int argc, char *argv[])
107{ 107{
108 int ch, s, ret, socksv; 108 int ch, s, ret, socksv;
109 char *host, *uport, *endp; 109 char *host, *uport;
110 struct addrinfo hints; 110 struct addrinfo hints;
111 struct servent *sv; 111 struct servent *sv;
112 socklen_t len; 112 socklen_t len;
113 struct sockaddr_storage cliaddr; 113 struct sockaddr_storage cliaddr;
114 char *proxy; 114 char *proxy;
115 const char *proxyhost = "", *proxyport = NULL; 115 const char *errstr, *proxyhost = "", *proxyport = NULL;
116 struct addrinfo proxyhints; 116 struct addrinfo proxyhints;
117 117
118 ret = 1; 118 ret = 1;
@@ -120,7 +120,6 @@ main(int argc, char *argv[])
120 socksv = 5; 120 socksv = 5;
121 host = NULL; 121 host = NULL;
122 uport = NULL; 122 uport = NULL;
123 endp = NULL;
124 sv = NULL; 123 sv = NULL;
125 124
126 while ((ch = getopt(argc, argv, 125 while ((ch = getopt(argc, argv,
@@ -152,9 +151,9 @@ main(int argc, char *argv[])
152 help(); 151 help();
153 break; 152 break;
154 case 'i': 153 case 'i':
155 iflag = (int)strtoul(optarg, &endp, 10); 154 iflag = strtonum(optarg, 0, UINT_MAX, &errstr);
156 if (iflag < 0 || *endp != '\0') 155 if (errstr)
157 errx(1, "interval cannot be negative"); 156 errx(1, "interval %s: %s", errstr, optarg);
158 break; 157 break;
159 case 'j': 158 case 'j':
160 jflag = 1; 159 jflag = 1;
@@ -190,11 +189,9 @@ main(int argc, char *argv[])
190 vflag = 1; 189 vflag = 1;
191 break; 190 break;
192 case 'w': 191 case 'w':
193 timeout = (int)strtoul(optarg, &endp, 10); 192 timeout = strtonum(optarg, 0, INT_MAX / 1000, &errstr);
194 if (timeout < 0 || *endp != '\0') 193 if (errstr)
195 errx(1, "timeout cannot be negative"); 194 errx(1, "timeout %s: %s", errstr, optarg);
196 if (timeout >= (INT_MAX / 1000))
197 errx(1, "timeout too large");
198 timeout *= 1000; 195 timeout *= 1000;
199 break; 196 break;
200 case 'x': 197 case 'x':
@@ -681,7 +678,8 @@ atelnet(int nfd, unsigned char *buf, unsigned int size)
681void 678void
682build_ports(char *p) 679build_ports(char *p)
683{ 680{
684 char *n, *endp; 681 const char *errstr;
682 char *n;
685 int hi, lo, cp; 683 int hi, lo, cp;
686 int x = 0; 684 int x = 0;
687 685
@@ -693,12 +691,12 @@ build_ports(char *p)
693 n++; 691 n++;
694 692
695 /* Make sure the ports are in order: lowest->highest. */ 693 /* Make sure the ports are in order: lowest->highest. */
696 hi = (int)strtoul(n, &endp, 10); 694 hi = strtonum(n, 1, PORT_MAX, &errstr);
697 if (hi <= 0 || hi > PORT_MAX || *endp != '\0') 695 if (errstr)
698 errx(1, "port range not valid"); 696 errx(1, "port number %s: %s", errstr, n);
699 lo = (int)strtoul(p, &endp, 10); 697 lo = strtonum(p, 1, PORT_MAX, &errstr);
700 if (lo <= 0 || lo > PORT_MAX || *endp != '\0') 698 if (errstr)
701 errx(1, "port range not valid"); 699 errx(1, "port number %s: %s", errstr, p);
702 700
703 if (lo > hi) { 701 if (lo > hi) {
704 cp = hi; 702 cp = hi;
@@ -728,9 +726,9 @@ build_ports(char *p)
728 } 726 }
729 } 727 }
730 } else { 728 } else {
731 hi = (int)strtoul(p, &endp, 10); 729 hi = strtonum(p, 1, PORT_MAX, &errstr);
732 if (hi <= 0 || hi > PORT_MAX || *endp != '\0') 730 if (errstr)
733 errx(1, "port range not valid"); 731 errx(1, "port number %s: %s", errstr, p);
734 portlist[0] = calloc(1, PORT_MAX_LEN); 732 portlist[0] = calloc(1, PORT_MAX_LEN);
735 if (portlist[0] == NULL) 733 if (portlist[0] == NULL)
736 err(1, NULL); 734 err(1, NULL);