=================================================================== RCS file: /cvsrepo/anoncvs/cvs/src/usr.bin/nc/netcat.c,v retrieving revision 1.92 retrieving revision 1.93 diff -c -r1.92 -r1.93 *** src/usr.bin/nc/netcat.c 2008/09/19 13:24:41 1.92 --- src/usr.bin/nc/netcat.c 2009/06/05 00:18:10 1.93 *************** *** 1,4 **** ! /* $OpenBSD: netcat.c,v 1.92 2008/09/19 13:24:41 sobrado Exp $ */ /* * Copyright (c) 2001 Eric Jackson * --- 1,4 ---- ! /* $OpenBSD: netcat.c,v 1.93 2009/06/05 00:18:10 claudio Exp $ */ /* * Copyright (c) 2001 Eric Jackson * *************** *** 84,89 **** --- 84,90 ---- int Oflag; /* TCP send buffer size */ int Sflag; /* TCP MD5 signature option */ int Tflag = -1; /* IP Type of Service */ + u_int rdomain; int timeout = -1; int family = AF_UNSPEC; *************** *** 125,131 **** sv = NULL; while ((ch = getopt(argc, argv, ! "46DdhI:i:jklnO:P:p:rSs:tT:Uuvw:X:x:z")) != -1) { switch (ch) { case '4': family = AF_INET; --- 126,132 ---- sv = NULL; while ((ch = getopt(argc, argv, ! "46DdhI:i:jklnO:P:p:rSs:tT:UuV:vw:X:x:z")) != -1) { switch (ch) { case '4': family = AF_INET; *************** *** 187,192 **** --- 188,199 ---- case 'u': uflag = 1; break; + case 'V': + rdomain = (unsigned int)strtonum(optarg, 0, + RT_TABLEID_MAX, &errstr); + if (errstr) + errx(1, "rdomain %s: %s", errstr, optarg); + break; case 'v': vflag = 1; break; *************** *** 498,503 **** --- 505,516 ---- res0->ai_protocol)) < 0) continue; + if (rdomain) { + if (setsockopt(s, IPPROTO_IP, SO_RDOMAIN, &rdomain, + sizeof(rdomain)) == -1) + err(1, "setsockopt SO_RDOMAIN"); + } + /* Bind to a local port or source address if specified. */ if (sflag || pflag) { struct addrinfo ahints, *ares; *************** *** 566,571 **** --- 579,590 ---- res0->ai_protocol)) < 0) continue; + if (rdomain) { + if (setsockopt(s, IPPROTO_IP, SO_RDOMAIN, &rdomain, + sizeof(rdomain)) == -1) + err(1, "setsockopt SO_RDOMAIN"); + } + ret = setsockopt(s, SOL_SOCKET, SO_REUSEPORT, &x, sizeof(x)); if (ret == -1) err(1, NULL); *************** *** 851,856 **** --- 870,876 ---- \t-t Answer TELNET negotiation\n\ \t-U Use UNIX domain socket\n\ \t-u UDP mode\n\ + \t-V rdomain Specify alternate routing domain\n\ \t-v Verbose\n\ \t-w secs\t Timeout for connects and final net reads\n\ \t-X proto Proxy protocol: \"4\", \"5\" (SOCKS) or \"connect\"\n\ *************** *** 866,873 **** fprintf(stderr, "usage: nc [-46DdhklnrStUuvz] [-I length] [-i interval] [-O length]\n" "\t [-P proxy_username] [-p source_port] [-s source_ip_address] [-T ToS]\n" ! "\t [-w timeout] [-X proxy_protocol] [-x proxy_address[:port]] [hostname]\n" ! "\t [port]\n"); if (ret) exit(1); } --- 886,893 ---- fprintf(stderr, "usage: nc [-46DdhklnrStUuvz] [-I length] [-i interval] [-O length]\n" "\t [-P proxy_username] [-p source_port] [-s source_ip_address] [-T ToS]\n" ! "\t [-V rdomain] [-w timeout] [-X proxy_protocol]\n" ! "\t [-x proxy_address[:port]] [hostname] [port]\n"); if (ret) exit(1); }