summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authortedu <>2004-03-01 00:37:08 +0000
committertedu <>2004-03-01 00:37:08 +0000
commit6b3242c12c197664bcd78a5e7694121a43d26a5b (patch)
treec3ddfb9cfab7c04611bbbc7736c1b1ee57c558e5
parentc892b360a14ab7e9ad7e9738a8ddc2dad0b8fdaf (diff)
downloadopenbsd-6b3242c12c197664bcd78a5e7694121a43d26a5b.tar.gz
openbsd-6b3242c12c197664bcd78a5e7694121a43d26a5b.tar.bz2
openbsd-6b3242c12c197664bcd78a5e7694121a43d26a5b.zip
resolve pr3694. add -d [etached] to ignore stdin. ok henning@ mcbride@
-rw-r--r--src/usr.bin/nc/nc.14
-rw-r--r--src/usr.bin/nc/netcat.c12
2 files changed, 11 insertions, 5 deletions
diff --git a/src/usr.bin/nc/nc.1 b/src/usr.bin/nc/nc.1
index 64a1dbbc8b..82712fad80 100644
--- a/src/usr.bin/nc/nc.1
+++ b/src/usr.bin/nc/nc.1
@@ -1,4 +1,4 @@
1.\" $OpenBSD: nc.1,v 1.28 2004/02/20 10:53:10 jmc Exp $ 1.\" $OpenBSD: nc.1,v 1.29 2004/03/01 00:37:08 tedu Exp $
2.\" 2.\"
3.\" Copyright (c) 1996 David Sacerdote 3.\" Copyright (c) 1996 David Sacerdote
4.\" All rights reserved. 4.\" All rights reserved.
@@ -89,6 +89,8 @@ to use IPv4 addresses only.
89Forces 89Forces
90.Nm 90.Nm
91to use IPv6 addresses only. 91to use IPv6 addresses only.
92.It Fl d
93Do not attempt to read from stdin.
92.It Fl h 94.It Fl h
93Prints out 95Prints out
94.Nm 96.Nm
diff --git a/src/usr.bin/nc/netcat.c b/src/usr.bin/nc/netcat.c
index 505cbd77b1..f303bd2fb1 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.67 2004/02/20 10:53:10 jmc Exp $ */ 1/* $OpenBSD: netcat.c,v 1.68 2004/03/01 00:37:08 tedu Exp $ */
2/* 2/*
3 * Copyright (c) 2001 Eric Jackson <ericj@monkey.org> 3 * Copyright (c) 2001 Eric Jackson <ericj@monkey.org>
4 * 4 *
@@ -60,6 +60,7 @@
60#define PORT_MAX_LEN 6 60#define PORT_MAX_LEN 6
61 61
62/* Command Line Options */ 62/* Command Line Options */
63int dflag; /* detached, no stdin */
63int iflag; /* Interval Flag */ 64int iflag; /* Interval Flag */
64int kflag; /* More than one connect */ 65int kflag; /* More than one connect */
65int lflag; /* Bind to local port */ 66int lflag; /* Bind to local port */
@@ -113,7 +114,7 @@ main(int argc, char *argv[])
113 endp = NULL; 114 endp = NULL;
114 sv = NULL; 115 sv = NULL;
115 116
116 while ((ch = getopt(argc, argv, "46UX:hi:klnp:rs:tuvw:x:zS")) != -1) { 117 while ((ch = getopt(argc, argv, "46UX:dhi:klnp:rs:tuvw:x:zS")) != -1) {
117 switch (ch) { 118 switch (ch) {
118 case '4': 119 case '4':
119 family = AF_INET; 120 family = AF_INET;
@@ -129,6 +130,9 @@ main(int argc, char *argv[])
129 if ((socksv != 4 && socksv != 5) || *endp != '\0') 130 if ((socksv != 4 && socksv != 5) || *endp != '\0')
130 errx(1, "only SOCKS version 4 and 5 supported"); 131 errx(1, "only SOCKS version 4 and 5 supported");
131 break; 132 break;
133 case 'd':
134 dflag = 1;
135 break;
132 case 'h': 136 case 'h':
133 help(); 137 help();
134 break; 138 break;
@@ -578,7 +582,7 @@ readwrite(int nfd)
578 if (iflag) 582 if (iflag)
579 sleep(iflag); 583 sleep(iflag);
580 584
581 if ((n = poll(pfd, 2, timeout)) < 0) { 585 if ((n = poll(pfd, 2 - dflag, timeout)) < 0) {
582 close(nfd); 586 close(nfd);
583 err(1, "Polling Error"); 587 err(1, "Polling Error");
584 } 588 }
@@ -603,7 +607,7 @@ readwrite(int nfd)
603 } 607 }
604 } 608 }
605 609
606 if (pfd[1].revents & POLLIN) { 610 if (!dflag && pfd[1].revents & POLLIN) {
607 if ((n = read(wfd, buf, sizeof(buf))) < 0) 611 if ((n = read(wfd, buf, sizeof(buf))) < 0)
608 return; 612 return;
609 else if (n == 0) { 613 else if (n == 0) {