summaryrefslogtreecommitdiff
path: root/src/usr.bin/nc/netcat.c
diff options
context:
space:
mode:
authorclaudio <>2009-06-05 00:18:10 +0000
committerclaudio <>2009-06-05 00:18:10 +0000
commit9786c8dfdc5c1f13ffb7a2dce02b769c67704bef (patch)
tree907ea4a5e63ea363b17cf1ac82e2f1e9374af7f5 /src/usr.bin/nc/netcat.c
parent437d0850ff5e9cf554cfb2790235e5c0b30f94b3 (diff)
downloadopenbsd-9786c8dfdc5c1f13ffb7a2dce02b769c67704bef.tar.gz
openbsd-9786c8dfdc5c1f13ffb7a2dce02b769c67704bef.tar.bz2
openbsd-9786c8dfdc5c1f13ffb7a2dce02b769c67704bef.zip
The networking swissarmy knife needs to work on alternate domains as well.
Again -V can be used to specify the domain.
Diffstat (limited to '')
-rw-r--r--src/usr.bin/nc/netcat.c28
1 files changed, 24 insertions, 4 deletions
diff --git a/src/usr.bin/nc/netcat.c b/src/usr.bin/nc/netcat.c
index e465073506..6700f89cfe 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.92 2008/09/19 13:24:41 sobrado Exp $ */ 1/* $OpenBSD: netcat.c,v 1.93 2009/06/05 00:18:10 claudio Exp $ */
2/* 2/*
3 * Copyright (c) 2001 Eric Jackson <ericj@monkey.org> 3 * Copyright (c) 2001 Eric Jackson <ericj@monkey.org>
4 * 4 *
@@ -84,6 +84,7 @@ int Iflag; /* TCP receive buffer size */
84int Oflag; /* TCP send buffer size */ 84int Oflag; /* TCP send buffer size */
85int Sflag; /* TCP MD5 signature option */ 85int Sflag; /* TCP MD5 signature option */
86int Tflag = -1; /* IP Type of Service */ 86int Tflag = -1; /* IP Type of Service */
87u_int rdomain;
87 88
88int timeout = -1; 89int timeout = -1;
89int family = AF_UNSPEC; 90int family = AF_UNSPEC;
@@ -125,7 +126,7 @@ main(int argc, char *argv[])
125 sv = NULL; 126 sv = NULL;
126 127
127 while ((ch = getopt(argc, argv, 128 while ((ch = getopt(argc, argv,
128 "46DdhI:i:jklnO:P:p:rSs:tT:Uuvw:X:x:z")) != -1) { 129 "46DdhI:i:jklnO:P:p:rSs:tT:UuV:vw:X:x:z")) != -1) {
129 switch (ch) { 130 switch (ch) {
130 case '4': 131 case '4':
131 family = AF_INET; 132 family = AF_INET;
@@ -187,6 +188,12 @@ main(int argc, char *argv[])
187 case 'u': 188 case 'u':
188 uflag = 1; 189 uflag = 1;
189 break; 190 break;
191 case 'V':
192 rdomain = (unsigned int)strtonum(optarg, 0,
193 RT_TABLEID_MAX, &errstr);
194 if (errstr)
195 errx(1, "rdomain %s: %s", errstr, optarg);
196 break;
190 case 'v': 197 case 'v':
191 vflag = 1; 198 vflag = 1;
192 break; 199 break;
@@ -498,6 +505,12 @@ remote_connect(const char *host, const char *port, struct addrinfo hints)
498 res0->ai_protocol)) < 0) 505 res0->ai_protocol)) < 0)
499 continue; 506 continue;
500 507
508 if (rdomain) {
509 if (setsockopt(s, IPPROTO_IP, SO_RDOMAIN, &rdomain,
510 sizeof(rdomain)) == -1)
511 err(1, "setsockopt SO_RDOMAIN");
512 }
513
501 /* Bind to a local port or source address if specified. */ 514 /* Bind to a local port or source address if specified. */
502 if (sflag || pflag) { 515 if (sflag || pflag) {
503 struct addrinfo ahints, *ares; 516 struct addrinfo ahints, *ares;
@@ -566,6 +579,12 @@ local_listen(char *host, char *port, struct addrinfo hints)
566 res0->ai_protocol)) < 0) 579 res0->ai_protocol)) < 0)
567 continue; 580 continue;
568 581
582 if (rdomain) {
583 if (setsockopt(s, IPPROTO_IP, SO_RDOMAIN, &rdomain,
584 sizeof(rdomain)) == -1)
585 err(1, "setsockopt SO_RDOMAIN");
586 }
587
569 ret = setsockopt(s, SOL_SOCKET, SO_REUSEPORT, &x, sizeof(x)); 588 ret = setsockopt(s, SOL_SOCKET, SO_REUSEPORT, &x, sizeof(x));
570 if (ret == -1) 589 if (ret == -1)
571 err(1, NULL); 590 err(1, NULL);
@@ -851,6 +870,7 @@ help(void)
851 \t-t Answer TELNET negotiation\n\ 870 \t-t Answer TELNET negotiation\n\
852 \t-U Use UNIX domain socket\n\ 871 \t-U Use UNIX domain socket\n\
853 \t-u UDP mode\n\ 872 \t-u UDP mode\n\
873 \t-V rdomain Specify alternate routing domain\n\
854 \t-v Verbose\n\ 874 \t-v Verbose\n\
855 \t-w secs\t Timeout for connects and final net reads\n\ 875 \t-w secs\t Timeout for connects and final net reads\n\
856 \t-X proto Proxy protocol: \"4\", \"5\" (SOCKS) or \"connect\"\n\ 876 \t-X proto Proxy protocol: \"4\", \"5\" (SOCKS) or \"connect\"\n\
@@ -866,8 +886,8 @@ usage(int ret)
866 fprintf(stderr, 886 fprintf(stderr,
867 "usage: nc [-46DdhklnrStUuvz] [-I length] [-i interval] [-O length]\n" 887 "usage: nc [-46DdhklnrStUuvz] [-I length] [-i interval] [-O length]\n"
868 "\t [-P proxy_username] [-p source_port] [-s source_ip_address] [-T ToS]\n" 888 "\t [-P proxy_username] [-p source_port] [-s source_ip_address] [-T ToS]\n"
869 "\t [-w timeout] [-X proxy_protocol] [-x proxy_address[:port]] [hostname]\n" 889 "\t [-V rdomain] [-w timeout] [-X proxy_protocol]\n"
870 "\t [port]\n"); 890 "\t [-x proxy_address[:port]] [hostname] [port]\n");
871 if (ret) 891 if (ret)
872 exit(1); 892 exit(1);
873} 893}