summaryrefslogtreecommitdiff
blob: 489eceedf6c0e791705510d7d537e59820cd78c0 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
Allow compilation on Darwin

diff --git a/netcat.c b/netcat.c
index a0fb51b..bbb5dd1 100644
--- a/netcat.c
+++ b/netcat.c
@@ -51,11 +51,16 @@
 # include <bsd/readpassphrase.h>
 #endif
 
+#ifndef IPTOS_LOWCOST
+# define IPTOS_LOWCOST 0x02
+#endif
 #ifndef IPTOS_LOWDELAY
 # define IPTOS_LOWDELAY 0x10
 # define IPTOS_THROUGHPUT 0x08
 # define IPTOS_RELIABILITY 0x04
-# define IPTOS_LOWCOST 0x02
 # define IPTOS_MINCOST IPTOS_LOWCOST
 #endif /* IPTOS_LOWDELAY */
+#ifndef SOCK_CLOEXEC
+# define SOCK_CLOEXEC 0
+#endif
 
@@ -108,8 +110,9 @@
 # include <tls.h>
 #endif
 #include <unistd.h>
-#include <bsd/stdlib.h>
-#include <bsd/string.h>
+#include <stdlib.h>
+#include <string.h>
+#include <ctype.h>
 
 #include "atomicio.h"
 
@@ -814,9 +814,8 @@
 # endif
 			} else {
 				len = sizeof(cliaddr);
-				connfd = accept4(s, (struct sockaddr *)&cliaddr,
-				    &len, SOCK_NONBLOCK);
-				if (connfd == -1) {
+				connfd = accept(s, (struct sockaddr *)&cliaddr, &len);
+				if (connfd == -1 || fcntl(connfd, F_SETFL, O_NONBLOCK) == -1) {
 					/* For now, all errnos are fatal */
 					err(1, "accept");
 				}
@@ -1100,6 +1099,8 @@
 			return -1;
 		}
 	}
+	if (fcntl(s, F_SETFD, FD_CLOEXEC) == -1)
+		return -1;
 
 	memset(&s_un, 0, sizeof(struct sockaddr_un));
 	s_un.sun_family = AF_UNIX;
@@ -1174,9 +1175,13 @@
 		    port, gai_strerror(error));
 
 	for (res = res0; res; res = res->ai_next) {
-		if ((s = socket(res->ai_family, res->ai_socktype |
-		    SOCK_NONBLOCK, res->ai_protocol)) < 0)
+		if ((s = socket(res->ai_family, res->ai_socktype,
+		    res->ai_protocol)) < 0)
+			continue;
+		if (fcntl(s, F_SETFL, O_NONBLOCK) == -1) {
+			close(s);
 			continue;
+		}
 
 		/* Bind to a local port or source address if specified. */
 		if (sflag || pflag) {
diff --git a/socks.c b/socks.c
index 9068f39..68b68e3 100644
--- a/socks.c
+++ b/socks.c
@@ -38,7 +38,7 @@
 #include <string.h>
 #include <unistd.h>
 #include <resolv.h>
-#include <bsd/readpassphrase.h>
+#include <readpassphrase.h>
 #include "atomicio.h"
 
 #define SOCKS_PORT	"1080"
--- a/socks.c
+++ b/socks.c
@@ -53,5 +53,7 @@
 #define SOCKS_DOMAIN	3
 #define SOCKS_IPV6	4
 
+#define explicit_bzero(S,L) bzero(S,L)
+ 
 int	remote_connect(const char *, const char *, struct addrinfo);
 int	socks_connect(const char *, const char *, struct addrinfo,