Merge pull request #878 from jow-/lxc-autoconf-fix
[feed/packages.git] / net / redsocks / patches / 0002-inet_ntop-red_inet_ntop.patch
1 From 6015b3a6f26e04dd5d78cd6c1320886fc9035612 Mon Sep 17 00:00:00 2001
2 From: Leonid Evdokimov <leon@darkk.net.ru>
3 Date: Tue, 10 Apr 2012 01:37:34 +0400
4 Subject: [PATCH 02/12] inet_ntop -> red_inet_ntop
5
6 ---
7 redsocks.c | 13 ++++---------
8 redudp.c | 19 +++++++++++--------
9 utils.c | 37 +++++++++++++++++++++++++++++++++----
10 utils.h | 7 +++++++
11 4 files changed, 55 insertions(+), 21 deletions(-)
12
13 diff --git a/redsocks.c b/redsocks.c
14 index d085e10..ba5eab2 100644
15 --- a/redsocks.c
16 +++ b/redsocks.c
17 @@ -207,22 +207,17 @@ void redsocks_log_write_plain(
18 int saved_errno = errno;
19 struct evbuffer *fmt = evbuffer_new();
20 va_list ap;
21 - char clientaddr_str[INET6_ADDRSTRLEN], destaddr_str[INET6_ADDRSTRLEN];
22 + char clientaddr_str[RED_INET_ADDRSTRLEN], destaddr_str[RED_INET_ADDRSTRLEN];
23
24 if (!fmt) {
25 log_errno(LOG_ERR, "evbuffer_new()");
26 // no return, as I have to call va_start/va_end
27 }
28
29 - if (!inet_ntop(clientaddr->sin_family, &clientaddr->sin_addr, clientaddr_str, sizeof(clientaddr_str)))
30 - strncpy(clientaddr_str, "???", sizeof(clientaddr_str));
31 - if (!inet_ntop(destaddr->sin_family, &destaddr->sin_addr, destaddr_str, sizeof(destaddr_str)))
32 - strncpy(destaddr_str, "???", sizeof(destaddr_str));
33 -
34 if (fmt) {
35 - evbuffer_add_printf(fmt, "[%s:%i->%s:%i]: %s",
36 - clientaddr_str, ntohs(clientaddr->sin_port),
37 - destaddr_str, ntohs(destaddr->sin_port),
38 + evbuffer_add_printf(fmt, "[%s->%s]: %s",
39 + red_inet_ntop(clientaddr, clientaddr_str, sizeof(clientaddr_str)),
40 + red_inet_ntop(destaddr, destaddr_str, sizeof(destaddr_str)),
41 orig_fmt);
42 }
43
44 diff --git a/redudp.c b/redudp.c
45 index 0a97852..9516a50 100644
46 --- a/redudp.c
47 +++ b/redudp.c
48 @@ -436,10 +436,9 @@ static void redudp_pkt_from_socks(int fd, short what, void *_arg)
49 return;
50
51 if (memcmp(&udprelayaddr, &client->udprelayaddr, sizeof(udprelayaddr)) != 0) {
52 - char buf[INET6_ADDRSTRLEN];
53 - const char *addr = inet_ntop(udprelayaddr.sin_family, &udprelayaddr.sin_addr, buf, sizeof(buf));
54 - redudp_log_error(client, LOG_NOTICE, "Got packet from unexpected address %s:%u.",
55 - addr ? addr : "?", ntohs(udprelayaddr.sin_port));
56 + char buf[RED_INET_ADDRSTRLEN];
57 + redudp_log_error(client, LOG_NOTICE, "Got packet from unexpected address %s.",
58 + red_inet_ntop(&udprelayaddr, buf, sizeof(buf)));
59 return;
60 }
61
62 @@ -459,10 +458,14 @@ static void redudp_pkt_from_socks(int fd, short what, void *_arg)
63 if (pkt.header.ip.port != client->instance->config.destaddr.sin_port ||
64 pkt.header.ip.addr != client->instance->config.destaddr.sin_addr.s_addr)
65 {
66 - char buf[INET6_ADDRSTRLEN];
67 - const char *addr = inet_ntop(AF_INET, &pkt.header.ip.addr, buf, sizeof(buf));
68 - redudp_log_error(client, LOG_NOTICE, "Socks5 server relayed packet from unexpected address %s:%u.",
69 - addr ? addr : "?", ntohs(pkt.header.ip.port));
70 + char buf[RED_INET_ADDRSTRLEN];
71 + struct sockaddr_in pktaddr = {
72 + .sin_family = AF_INET,
73 + .sin_addr = { pkt.header.ip.addr },
74 + .sin_port = pkt.header.ip.port,
75 + };
76 + redudp_log_error(client, LOG_NOTICE, "Socks5 server relayed packet from unexpected address %s.",
77 + red_inet_ntop(&pktaddr, buf, sizeof(buf)));
78 return;
79 }
80
81 diff --git a/utils.c b/utils.c
82 index c6ced51..6e1f3af 100644
83 --- a/utils.c
84 +++ b/utils.c
85 @@ -18,6 +18,7 @@
86 #include <errno.h>
87 #include <assert.h>
88 #include <fcntl.h>
89 +#include <string.h>
90 #include <sys/socket.h>
91 #include <netinet/in.h>
92 #include <arpa/inet.h>
93 @@ -42,10 +43,9 @@ int red_recv_udp_pkt(int fd, char *buf, size_t buflen, struct sockaddr_in *inadd
94 }
95
96 if (pktlen >= buflen) {
97 - char buf[INET6_ADDRSTRLEN];
98 - const char *addr = inet_ntop(inaddr->sin_family, &inaddr->sin_addr, buf, sizeof(buf));
99 - log_error(LOG_WARNING, "wow! Truncated udp packet of size %zd from %s:%u! impossible! dropping it...",
100 - pktlen, addr ? addr : "?", ntohs(inaddr->sin_port));
101 + char buf[RED_INET_ADDRSTRLEN];
102 + log_error(LOG_WARNING, "wow! Truncated udp packet of size %zd from %s! impossible! dropping it...",
103 + pktlen, red_inet_ntop(inaddr, buf, sizeof(buf)));
104 return -1;
105 }
106
107 @@ -176,4 +176,33 @@ int red_is_socket_connected_ok(struct bufferevent *buffev)
108 }
109 }
110
111 +char *red_inet_ntop(const struct sockaddr_in* sa, char* buffer, size_t buffer_size)
112 +{
113 + const char *retval = 0;
114 + size_t len = 0;
115 + uint16_t port;
116 + const char placeholder[] = "???:???";
117 +
118 + assert(buffer_size >= sizeof(placeholder));
119 +
120 + memset(buffer, buffer_size, 0);
121 + if (sa->sin_family == AF_INET) {
122 + retval = inet_ntop(AF_INET, &sa->sin_addr, buffer, buffer_size);
123 + port = ((struct sockaddr_in*)sa)->sin_port;
124 + }
125 + else if (sa->sin_family == AF_INET6) {
126 + retval = inet_ntop(AF_INET6, &((const struct sockaddr_in6*)sa)->sin6_addr, buffer, buffer_size);
127 + port = ((struct sockaddr_in6*)sa)->sin6_port;
128 + }
129 + if (retval) {
130 + assert(retval == buffer);
131 + len = strlen(retval);
132 + snprintf(buffer + len, buffer_size - len, ":%d", ntohs(port));
133 + }
134 + else {
135 + strcpy(buffer, placeholder);
136 + }
137 + return buffer;
138 +}
139 +
140 /* vim:set tabstop=4 softtabstop=4 shiftwidth=4: */
141 diff --git a/utils.h b/utils.h
142 index f691b77..d3af00f 100644
143 --- a/utils.h
144 +++ b/utils.h
145 @@ -57,6 +57,13 @@ int fcntl_nonblock(int fd);
146 (what) & EVBUFFER_TIMEOUT ? "EVBUFFER_TIMEOUT" : "0", \
147 (what) & ~(EVBUFFER_READ|EVBUFFER_WRITE|EVBUFFER_EOF|EVBUFFER_ERROR|EVBUFFER_TIMEOUT)
148
149 +#if INET6_ADDRSTRLEN < INET_ADDRSTRLEN
150 +# error Impossible happens: INET6_ADDRSTRLEN < INET_ADDRSTRLEN
151 +#else
152 +# define RED_INET_ADDRSTRLEN (INET6_ADDRSTRLEN + 1 + 5 + 1) // addr + : + port + \0
153 +#endif
154 +char *red_inet_ntop(const struct sockaddr_in* sa, char* buffer, size_t buffer_size);
155 +
156 /* vim:set tabstop=4 softtabstop=4 shiftwidth=4: */
157 /* vim:set foldmethod=marker foldlevel=32 foldmarker={,}: */
158 #endif /* UTILS_H_SAT_FEB__2_02_24_05_2008 */
159 --
160 1.9.1
161