Remove trailing whitespace

This commit is contained in:
Erik Ekman 2014-06-01 08:34:18 +02:00
parent 388afe3845
commit a23899513d
25 changed files with 275 additions and 275 deletions

View file

@ -16,7 +16,7 @@ RM_FLAGS=-f
TARGETOS = `uname` TARGETOS = `uname`
all: all:
@(cd src; $(MAKE) TARGETOS=$(TARGETOS) all) @(cd src; $(MAKE) TARGETOS=$(TARGETOS) all)
install: all install: all

View file

@ -27,7 +27,7 @@ $(SERVER): $(COMMONOBJS) $(SERVEROBJS)
@mkdir -p ../bin @mkdir -p ../bin
@$(CC) $(COMMONOBJS) $(SERVEROBJS) -o $(SERVER) $(LDFLAGS) @$(CC) $(COMMONOBJS) $(SERVEROBJS) -o $(SERVER) $(LDFLAGS)
.c.o: .c.o:
@echo CC $< @echo CC $<
@$(CC) $(CFLAGS) $< -o $@ @$(CC) $(CFLAGS) $< -o $@

View file

@ -42,7 +42,7 @@
* accent chars since they might readily be entered in normal use, * accent chars since they might readily be entered in normal use,
* don't use 254-255 because of possible function overloading in DNS systems. * don't use 254-255 because of possible function overloading in DNS systems.
*/ */
static const unsigned char cb128[] = static const unsigned char cb128[] =
"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789" "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
"\274\275\276\277" "\274\275\276\277"
"\300\301\302\303\304\305\306\307\310\311\312\313\314\315\316\317" "\300\301\302\303\304\305\306\307\310\311\312\313\314\315\316\317"
@ -75,19 +75,19 @@ struct encoder
return &base128_encoder; return &base128_encoder;
} }
static int static int
base128_handles_dots() base128_handles_dots()
{ {
return 0; return 0;
} }
static int static int
base128_blksize_raw() base128_blksize_raw()
{ {
return BLKSIZE_RAW; return BLKSIZE_RAW;
} }
static int static int
base128_blksize_enc() base128_blksize_enc()
{ {
return BLKSIZE_ENC; return BLKSIZE_ENC;
@ -109,7 +109,7 @@ base128_reverse_init()
} }
} }
static int static int
base128_encode(char *buf, size_t *buflen, const void *data, size_t size) base128_encode(char *buf, size_t *buflen, const void *data, size_t size)
/* /*
* Fills *buf with max. *buflen characters, encoding size bytes of *data. * Fills *buf with max. *buflen characters, encoding size bytes of *data.
@ -231,7 +231,7 @@ base128_decode(void *buf, size_t *buflen, const char *str, size_t slen)
if (iout >= *buflen || iin + 1 >= slen || if (iout >= *buflen || iin + 1 >= slen ||
str[iin] == '\0' || str[iin + 1] == '\0') str[iin] == '\0' || str[iin + 1] == '\0')
break; break;
ubuf[iout] = ((REV128(ustr[iin]) & 0x7f) << 1) | ubuf[iout] = ((REV128(ustr[iin]) & 0x7f) << 1) |
((REV128(ustr[iin + 1]) & 0x40) >> 6); ((REV128(ustr[iin + 1]) & 0x40) >> 6);
iin++; /* 0 used up, iin=1 */ iin++; /* 0 used up, iin=1 */
iout++; iout++;

View file

@ -26,9 +26,9 @@
#define BLKSIZE_RAW 5 #define BLKSIZE_RAW 5
#define BLKSIZE_ENC 8 #define BLKSIZE_ENC 8
static const char cb32[] = static const char cb32[] =
"abcdefghijklmnopqrstuvwxyz012345"; "abcdefghijklmnopqrstuvwxyz012345";
static const char cb32_ucase[] = static const char cb32_ucase[] =
"ABCDEFGHIJKLMNOPQRSTUVWXYZ012345"; "ABCDEFGHIJKLMNOPQRSTUVWXYZ012345";
static unsigned char rev32[256]; static unsigned char rev32[256];
static int reverse_init = 0; static int reverse_init = 0;
@ -56,19 +56,19 @@ struct encoder
return &base32_encoder; return &base32_encoder;
} }
static int static int
base32_handles_dots() base32_handles_dots()
{ {
return 0; return 0;
} }
static int static int
base32_blksize_raw() base32_blksize_raw()
{ {
return BLKSIZE_RAW; return BLKSIZE_RAW;
} }
static int static int
base32_blksize_enc() base32_blksize_enc()
{ {
return BLKSIZE_ENC; return BLKSIZE_ENC;
@ -105,7 +105,7 @@ b32_8to5(int in)
return rev32[in]; return rev32[in];
} }
static int static int
base32_encode(char *buf, size_t *buflen, const void *data, size_t size) base32_encode(char *buf, size_t *buflen, const void *data, size_t size)
/* /*
* Fills *buf with max. *buflen characters, encoding size bytes of *data. * Fills *buf with max. *buflen characters, encoding size bytes of *data.
@ -223,7 +223,7 @@ base32_decode(void *buf, size_t *buflen, const char *str, size_t slen)
if (iout >= *buflen || iin + 1 >= slen || if (iout >= *buflen || iin + 1 >= slen ||
str[iin] == '\0' || str[iin + 1] == '\0') str[iin] == '\0' || str[iin + 1] == '\0')
break; break;
ubuf[iout] = ((REV32(str[iin]) & 0x1f) << 3) | ubuf[iout] = ((REV32(str[iin]) & 0x1f) << 3) |
((REV32(str[iin + 1]) & 0x1c) >> 2); ((REV32(str[iin + 1]) & 0x1c) >> 2);
iin++; /* 0 used up, iin=1 */ iin++; /* 0 used up, iin=1 */
iout++; iout++;
@ -232,8 +232,8 @@ base32_decode(void *buf, size_t *buflen, const char *str, size_t slen)
str[iin] == '\0' || str[iin + 1] == '\0' || str[iin] == '\0' || str[iin + 1] == '\0' ||
str[iin + 2] == '\0') str[iin + 2] == '\0')
break; break;
ubuf[iout] = ((REV32(str[iin]) & 0x03) << 6) | ubuf[iout] = ((REV32(str[iin]) & 0x03) << 6) |
((REV32(str[iin + 1]) & 0x1f) << 1) | ((REV32(str[iin + 1]) & 0x1f) << 1) |
((REV32(str[iin + 2]) & 0x10) >> 4); ((REV32(str[iin + 2]) & 0x10) >> 4);
iin += 2; /* 1,2 used up, iin=3 */ iin += 2; /* 1,2 used up, iin=3 */
iout++; iout++;

View file

@ -28,7 +28,7 @@
/* Note: the "unofficial" char is last here, which means that the \377 pattern /* Note: the "unofficial" char is last here, which means that the \377 pattern
in DOWNCODECCHECK1 ('Y' request) will properly test it. */ in DOWNCODECCHECK1 ('Y' request) will properly test it. */
static const char cb64[] = static const char cb64[] =
"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ-0123456789+"; "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ-0123456789+";
static unsigned char rev64[256]; static unsigned char rev64[256];
static int reverse_init = 0; static int reverse_init = 0;
@ -56,19 +56,19 @@ struct encoder
return &base64_encoder; return &base64_encoder;
} }
static int static int
base64_handles_dots() base64_handles_dots()
{ {
return 0; return 0;
} }
static int static int
base64_blksize_raw() base64_blksize_raw()
{ {
return BLKSIZE_RAW; return BLKSIZE_RAW;
} }
static int static int
base64_blksize_enc() base64_blksize_enc()
{ {
return BLKSIZE_ENC; return BLKSIZE_ENC;
@ -90,7 +90,7 @@ base64_reverse_init()
} }
} }
static int static int
base64_encode(char *buf, size_t *buflen, const void *data, size_t size) base64_encode(char *buf, size_t *buflen, const void *data, size_t size)
/* /*
* Fills *buf with max. *buflen characters, encoding size bytes of *data. * Fills *buf with max. *buflen characters, encoding size bytes of *data.
@ -178,7 +178,7 @@ base64_decode(void *buf, size_t *buflen, const char *str, size_t slen)
if (iout >= *buflen || iin + 1 >= slen || if (iout >= *buflen || iin + 1 >= slen ||
str[iin] == '\0' || str[iin + 1] == '\0') str[iin] == '\0' || str[iin + 1] == '\0')
break; break;
ubuf[iout] = ((REV64(str[iin]) & 0x3f) << 2) | ubuf[iout] = ((REV64(str[iin]) & 0x3f) << 2) |
((REV64(str[iin + 1]) & 0x30) >> 4); ((REV64(str[iin + 1]) & 0x30) >> 4);
iin++; /* 0 used up, iin=1 */ iin++; /* 0 used up, iin=1 */
iout++; iout++;
@ -186,7 +186,7 @@ base64_decode(void *buf, size_t *buflen, const char *str, size_t slen)
if (iout >= *buflen || iin + 1 >= slen || if (iout >= *buflen || iin + 1 >= slen ||
str[iin] == '\0' || str[iin + 1] == '\0') str[iin] == '\0' || str[iin + 1] == '\0')
break; break;
ubuf[iout] = ((REV64(str[iin]) & 0x0f) << 4) | ubuf[iout] = ((REV64(str[iin]) & 0x0f) << 4) |
((REV64(str[iin + 1]) & 0x3c) >> 2); ((REV64(str[iin + 1]) & 0x3c) >> 2);
iin++; /* 1 used up, iin=2 */ iin++; /* 1 used up, iin=2 */
iout++; iout++;

View file

@ -93,10 +93,10 @@ static struct encoder *b128;
/* The encoder used for data packets /* The encoder used for data packets
* Defaults to Base32, can be changed after handshake */ * Defaults to Base32, can be changed after handshake */
static struct encoder *dataenc; static struct encoder *dataenc;
/* The encoder to use for downstream data */ /* The encoder to use for downstream data */
static char downenc = ' '; static char downenc = ' ';
/* set query type to send */ /* set query type to send */
static unsigned short do_qtype = T_UNSET; static unsigned short do_qtype = T_UNSET;
@ -214,7 +214,7 @@ set_downenc(char *encoding)
downenc = 'R'; downenc = 'R';
} }
void void
client_set_selecttimeout(int select_timeout) client_set_selecttimeout(int select_timeout)
{ {
selecttimeout = select_timeout; selecttimeout = select_timeout;
@ -333,7 +333,7 @@ send_packet(int fd, char cmd, const char *data, const size_t datalen)
char buf[4096]; char buf[4096];
buf[0] = cmd; buf[0] = cmd;
build_hostname(buf + 1, sizeof(buf) - 1, data, datalen, topdomain, build_hostname(buf + 1, sizeof(buf) - 1, data, datalen, topdomain,
b32, hostname_maxlen); b32, hostname_maxlen);
send_query(fd, buf); send_query(fd, buf);
@ -366,7 +366,7 @@ send_chunk(int fd)
/* Build upstream data header (see doc/proto_xxxxxxxx.txt) */ /* Build upstream data header (see doc/proto_xxxxxxxx.txt) */
buf[0] = userid_char; /* First byte is hex userid */ buf[0] = userid_char; /* First byte is hex userid */
code = ((outpkt.seqno & 7) << 2) | ((outpkt.fragment & 15) >> 2); code = ((outpkt.seqno & 7) << 2) | ((outpkt.fragment & 15) >> 2);
buf[1] = b32_5to8(code); /* Second byte is 3 bits seqno, 2 upper bits fragment count */ buf[1] = b32_5to8(code); /* Second byte is 3 bits seqno, 2 upper bits fragment count */
@ -380,7 +380,7 @@ send_chunk(int fd)
datacmc++; datacmc++;
if (datacmc >= 36) if (datacmc >= 36)
datacmc = 0; datacmc = 0;
#if 0 #if 0
fprintf(stderr, " Send: down %d/%d up %d/%d, %d bytes\n", fprintf(stderr, " Send: down %d/%d up %d/%d, %d bytes\n",
inpkt.seqno, inpkt.fragment, outpkt.seqno, outpkt.fragment, inpkt.seqno, inpkt.fragment, outpkt.seqno, outpkt.fragment,
@ -395,12 +395,12 @@ send_ping(int fd)
{ {
if (conn == CONN_DNS_NULL) { if (conn == CONN_DNS_NULL) {
char data[4]; char data[4];
data[0] = userid; data[0] = userid;
data[1] = ((inpkt.seqno & 7) << 4) | (inpkt.fragment & 15); data[1] = ((inpkt.seqno & 7) << 4) | (inpkt.fragment & 15);
data[2] = (rand_seed >> 8) & 0xff; data[2] = (rand_seed >> 8) & 0xff;
data[3] = (rand_seed >> 0) & 0xff; data[3] = (rand_seed >> 0) & 0xff;
rand_seed++; rand_seed++;
#if 0 #if 0
@ -566,7 +566,7 @@ read_dns_withq(int dns_fd, int tun_fd, char *buf, int buflen, struct query *q)
int r; int r;
addrlen = sizeof(from); addrlen = sizeof(from);
if ((r = recvfrom(dns_fd, data, sizeof(data), 0, if ((r = recvfrom(dns_fd, data, sizeof(data), 0,
(struct sockaddr*)&from, &addrlen)) < 0) { (struct sockaddr*)&from, &addrlen)) < 0) {
warn("recvfrom"); warn("recvfrom");
return -1; return -1;
@ -588,9 +588,9 @@ read_dns_withq(int dns_fd, int tun_fd, char *buf, int buflen, struct query *q)
/* /*
* buf is a hostname or txt stream that we still need to * buf is a hostname or txt stream that we still need to
* decode to binary * decode to binary
* *
* also update rv with the number of valid bytes * also update rv with the number of valid bytes
* *
* data is unused here, and will certainly hold the smaller binary * data is unused here, and will certainly hold the smaller binary
*/ */
@ -1131,11 +1131,11 @@ client_tunnel(int tun_fd, int dns_fd)
warnx("No downstream data received in 60 seconds, shutting down."); warnx("No downstream data received in 60 seconds, shutting down.");
running = 0; running = 0;
} }
if (running == 0) if (running == 0)
break; break;
if (i < 0) if (i < 0)
err(1, "select"); err(1, "select");
if (i == 0) { if (i == 0) {
@ -1178,7 +1178,7 @@ client_tunnel(int tun_fd, int dns_fd)
if (FD_ISSET(dns_fd, &fds)) { if (FD_ISSET(dns_fd, &fds)) {
if (tunnel_dns(tun_fd, dns_fd) <= 0) if (tunnel_dns(tun_fd, dns_fd) <= 0)
continue; continue;
} }
} }
} }
@ -1196,7 +1196,7 @@ send_login(int fd, char *login, int len)
data[17] = (rand_seed >> 8) & 0xff; data[17] = (rand_seed >> 8) & 0xff;
data[18] = (rand_seed >> 0) & 0xff; data[18] = (rand_seed >> 0) & 0xff;
rand_seed++; rand_seed++;
send_packet(fd, 'l', data, sizeof(data)); send_packet(fd, 'l', data, sizeof(data));
@ -1235,23 +1235,23 @@ static void
send_set_downstream_fragsize(int fd, int fragsize) send_set_downstream_fragsize(int fd, int fragsize)
{ {
char data[5]; char data[5];
data[0] = userid; data[0] = userid;
data[1] = (fragsize & 0xff00) >> 8; data[1] = (fragsize & 0xff00) >> 8;
data[2] = (fragsize & 0x00ff); data[2] = (fragsize & 0x00ff);
data[3] = (rand_seed >> 8) & 0xff; data[3] = (rand_seed >> 8) & 0xff;
data[4] = (rand_seed >> 0) & 0xff; data[4] = (rand_seed >> 0) & 0xff;
rand_seed++; rand_seed++;
send_packet(fd, 'n', data, sizeof(data)); send_packet(fd, 'n', data, sizeof(data));
} }
static void static void
send_version(int fd, uint32_t version) send_version(int fd, uint32_t version)
{ {
char data[6]; char data[6];
data[0] = (version >> 24) & 0xff; data[0] = (version >> 24) & 0xff;
data[1] = (version >> 16) & 0xff; data[1] = (version >> 16) & 0xff;
data[2] = (version >> 8) & 0xff; data[2] = (version >> 8) & 0xff;
@ -1259,7 +1259,7 @@ send_version(int fd, uint32_t version)
data[4] = (rand_seed >> 8) & 0xff; data[4] = (rand_seed >> 8) & 0xff;
data[5] = (rand_seed >> 0) & 0xff; data[5] = (rand_seed >> 0) & 0xff;
rand_seed++; rand_seed++;
send_packet(fd, 'v', data, sizeof(data)); send_packet(fd, 'v', data, sizeof(data));
@ -1270,7 +1270,7 @@ send_ip_request(int fd, int userid)
{ {
char buf[512] = "i____."; char buf[512] = "i____.";
buf[1] = b32_5to8(userid); buf[1] = b32_5to8(userid);
buf[2] = b32_5to8((rand_seed >> 10) & 0x1f); buf[2] = b32_5to8((rand_seed >> 10) & 0x1f);
buf[3] = b32_5to8((rand_seed >> 5) & 0x1f); buf[3] = b32_5to8((rand_seed >> 5) & 0x1f);
buf[4] = b32_5to8((rand_seed ) & 0x1f); buf[4] = b32_5to8((rand_seed ) & 0x1f);
@ -1294,7 +1294,7 @@ send_upenctest(int fd, char *s)
/* NOTE: String may be at most 63-4=59 chars to fit in 1 dns chunk. */ /* NOTE: String may be at most 63-4=59 chars to fit in 1 dns chunk. */
{ {
char buf[512] = "z___"; char buf[512] = "z___";
buf[1] = b32_5to8((rand_seed >> 10) & 0x1f); buf[1] = b32_5to8((rand_seed >> 10) & 0x1f);
buf[2] = b32_5to8((rand_seed >> 5) & 0x1f); buf[2] = b32_5to8((rand_seed >> 5) & 0x1f);
buf[3] = b32_5to8((rand_seed ) & 0x1f); buf[3] = b32_5to8((rand_seed ) & 0x1f);
@ -1330,7 +1330,7 @@ send_codec_switch(int fd, int userid, int bits)
char buf[512] = "s_____."; char buf[512] = "s_____.";
buf[1] = b32_5to8(userid); buf[1] = b32_5to8(userid);
buf[2] = b32_5to8(bits); buf[2] = b32_5to8(bits);
buf[3] = b32_5to8((rand_seed >> 10) & 0x1f); buf[3] = b32_5to8((rand_seed >> 10) & 0x1f);
buf[4] = b32_5to8((rand_seed >> 5) & 0x1f); buf[4] = b32_5to8((rand_seed >> 5) & 0x1f);
buf[5] = b32_5to8((rand_seed ) & 0x1f); buf[5] = b32_5to8((rand_seed ) & 0x1f);
@ -1408,7 +1408,7 @@ handshake_version(int dns_fd, int *seed)
fprintf(stderr, "Version ok, both using protocol v 0x%08x. You are user #%d\n", VERSION, userid); fprintf(stderr, "Version ok, both using protocol v 0x%08x. You are user #%d\n", VERSION, userid);
return 0; return 0;
} else if (strncmp("VNAK", in, 4) == 0) { } else if (strncmp("VNAK", in, 4) == 0) {
warnx("You use protocol v 0x%08x, server uses v 0x%08x. Giving up", warnx("You use protocol v 0x%08x, server uses v 0x%08x. Giving up",
VERSION, payload); VERSION, payload);
return 1; return 1;
} else if (strncmp("VFUL", in, 4) == 0) { } else if (strncmp("VFUL", in, 4) == 0) {
@ -1417,7 +1417,7 @@ handshake_version(int dns_fd, int *seed)
} }
} else if (read > 0) } else if (read > 0)
warnx("did not receive proper login challenge"); warnx("did not receive proper login challenge");
fprintf(stderr, "Retrying version check...\n"); fprintf(stderr, "Retrying version check...\n");
} }
warnx("couldn't connect to server (maybe other -T options will work)"); warnx("couldn't connect to server (maybe other -T options will work)");
@ -1436,7 +1436,7 @@ handshake_login(int dns_fd, int seed)
int read; int read;
login_calculate(login, 16, password, seed); login_calculate(login, 16, password, seed);
for (i=0; running && i<5 ;i++) { for (i=0; running && i<5 ;i++) {
send_login(dns_fd, login, 16); send_login(dns_fd, login, 16);
@ -1510,7 +1510,7 @@ handshake_raw_udp(int dns_fd, int seed)
fprintf(stderr, "\n"); fprintf(stderr, "\n");
if (!running) if (!running)
return 0; return 0;
if (!remoteaddr) { if (!remoteaddr) {
fprintf(stderr, "Failed to get raw server IP, will use DNS mode.\n"); fprintf(stderr, "Failed to get raw server IP, will use DNS mode.\n");
return 0; return 0;
@ -1524,7 +1524,7 @@ handshake_raw_udp(int dns_fd, int seed)
raw_serv.sin_port = htons(53); raw_serv.sin_port = htons(53);
raw_serv.sin_addr = server; raw_serv.sin_addr = server;
/* do login against port 53 on remote server /* do login against port 53 on remote server
* based on the old seed. If reply received, * based on the old seed. If reply received,
* switch to raw udp mode */ * switch to raw udp mode */
for (i=0; running && i<4 ;i++) { for (i=0; running && i<4 ;i++) {
@ -1532,7 +1532,7 @@ handshake_raw_udp(int dns_fd, int seed)
tv.tv_usec = 0; tv.tv_usec = 0;
send_raw_udp_login(dns_fd, userid, seed); send_raw_udp_login(dns_fd, userid, seed);
FD_ZERO(&fds); FD_ZERO(&fds);
FD_SET(dns_fd, &fds); FD_SET(dns_fd, &fds);
@ -1545,7 +1545,7 @@ handshake_raw_udp(int dns_fd, int seed)
char hash[16]; char hash[16];
login_calculate(hash, 16, password, seed - 1); login_calculate(hash, 16, password, seed - 1);
if (memcmp(in, raw_header, RAW_HDR_IDENT_LEN) == 0 if (memcmp(in, raw_header, RAW_HDR_IDENT_LEN) == 0
&& RAW_HDR_GET_CMD(in) == RAW_HDR_CMD_LOGIN && RAW_HDR_GET_CMD(in) == RAW_HDR_CMD_LOGIN
&& memcmp(&in[RAW_HDR_LEN], hash, sizeof(hash)) == 0) { && memcmp(&in[RAW_HDR_LEN], hash, sizeof(hash)) == 0) {
fprintf(stderr, "OK\n"); fprintf(stderr, "OK\n");
@ -1556,7 +1556,7 @@ handshake_raw_udp(int dns_fd, int seed)
fprintf(stderr, "."); fprintf(stderr, ".");
fflush(stderr); fflush(stderr);
} }
fprintf(stderr, "failed\n"); fprintf(stderr, "failed\n");
return 0; return 0;
} }
@ -2024,7 +2024,7 @@ handshake_switch_codec(int dns_fd, int bits)
for (i=0; running && i<5 ;i++) { for (i=0; running && i<5 ;i++) {
send_codec_switch(dns_fd, userid, bits); send_codec_switch(dns_fd, userid, bits);
read = handshake_waitdns(dns_fd, in, sizeof(in), 's', 'S', i+1); read = handshake_waitdns(dns_fd, in, sizeof(in), 's', 'S', i+1);
if (read > 0) { if (read > 0) {
@ -2051,7 +2051,7 @@ handshake_switch_codec(int dns_fd, int bits)
fprintf(stderr, "No reply from server on codec switch. "); fprintf(stderr, "No reply from server on codec switch. ");
codec_revert: codec_revert:
fprintf(stderr, "Falling back to upstream codec %s\n", dataenc->name); fprintf(stderr, "Falling back to upstream codec %s\n", dataenc->name);
} }
@ -2103,7 +2103,7 @@ handshake_switch_downenc(int dns_fd)
fprintf(stderr, "No reply from server on codec switch. "); fprintf(stderr, "No reply from server on codec switch. ");
codec_revert: codec_revert:
fprintf(stderr, "Falling back to downstream codec Base32\n"); fprintf(stderr, "Falling back to downstream codec Base32\n");
} }
@ -2145,7 +2145,7 @@ handshake_try_lazy(int dns_fd)
fprintf(stderr, "No reply from server on lazy switch. "); fprintf(stderr, "No reply from server on lazy switch. ");
codec_revert: codec_revert:
fprintf(stderr, "Falling back to legacy mode\n"); fprintf(stderr, "Falling back to legacy mode\n");
lazymode = 0; lazymode = 0;
selecttimeout = 1; selecttimeout = 1;
@ -2262,7 +2262,7 @@ handshake_autoprobe_fragsize(int dns_fd)
int max_fragsize; int max_fragsize;
max_fragsize = 0; max_fragsize = 0;
fprintf(stderr, "Autoprobing max downstream fragment size... (skip with -m fragsize)\n"); fprintf(stderr, "Autoprobing max downstream fragment size... (skip with -m fragsize)\n");
while (running && range > 0 && (range >= 8 || max_fragsize < 300)) { while (running && range > 0 && (range >= 8 || max_fragsize < 300)) {
/* stop the slow probing early when we have enough bytes anyway */ /* stop the slow probing early when we have enough bytes anyway */
for (i=0; running && i<3 ;i++) { for (i=0; running && i<3 ;i++) {
@ -2270,7 +2270,7 @@ handshake_autoprobe_fragsize(int dns_fd)
send_fragsize_probe(dns_fd, proposed_fragsize); send_fragsize_probe(dns_fd, proposed_fragsize);
read = handshake_waitdns(dns_fd, in, sizeof(in), 'r', 'R', 1); read = handshake_waitdns(dns_fd, in, sizeof(in), 'r', 'R', 1);
if (read > 0) { if (read > 0) {
/* We got a reply */ /* We got a reply */
if (fragsize_check(in, read, proposed_fragsize, &max_fragsize) == 1) if (fragsize_check(in, read, proposed_fragsize, &max_fragsize) == 1)

View file

@ -61,7 +61,7 @@ const unsigned char raw_header[RAW_HDR_LEN] = { 0x10, 0xd1, 0x9e, 0x00 };
static int daemon(int nochdir, int noclose) static int daemon(int nochdir, int noclose)
{ {
int fd, i; int fd, i;
switch (fork()) { switch (fork()) {
case 0: case 0:
break; break;
@ -70,15 +70,15 @@ static int daemon(int nochdir, int noclose)
default: default:
_exit(0); _exit(0);
} }
if (!nochdir) { if (!nochdir) {
chdir("/"); chdir("/");
} }
if (setsid() < 0) { if (setsid() < 0) {
return -1; return -1;
} }
if (!noclose) { if (!noclose) {
if ((fd = open("/dev/null", O_RDWR)) >= 0) { if ((fd = open("/dev/null", O_RDWR)) >= 0) {
for (i = 0; i < 3; i++) { for (i = 0; i < 3; i++) {
@ -170,7 +170,7 @@ get_addr(char *host, int port, int addr_family, int flags, struct sockaddr_stora
return res; return res;
} }
int int
open_dns(struct sockaddr_storage *sockaddr, size_t sockaddr_len) open_dns(struct sockaddr_storage *sockaddr, size_t sockaddr_len)
{ {
int flag = 1; int flag = 1;
@ -291,7 +291,7 @@ read_password(char *buf, size_t len)
tcgetattr(0, &tp); tcgetattr(0, &tp);
old = tp; old = tp;
tp.c_lflag &= (~ECHO); tp.c_lflag &= (~ECHO);
tcsetattr(0, TCSANOW, &tp); tcsetattr(0, TCSANOW, &tp);
#else #else
@ -317,7 +317,7 @@ read_password(char *buf, size_t len)
fprintf(stderr, "\n"); fprintf(stderr, "\n");
#ifndef WINDOWS32 #ifndef WINDOWS32
tcsetattr(0, TCSANOW, &old); tcsetattr(0, TCSANOW, &old);
#endif #endif
strncpy(buf, pwd, len); strncpy(buf, pwd, len);
@ -360,7 +360,7 @@ check_topdomain(char *str, char **errormsg)
} else { } else {
chunklen++; chunklen++;
} }
if( (str[i] >= 'a' && str[i] <= 'z') || (str[i] >= 'A' && str[i] <= 'Z') || if( (str[i] >= 'a' && str[i] <= 'z') || (str[i] >= 'A' && str[i] <= 'Z') ||
isdigit(str[i]) || str[i] == '-' || str[i] == '.' ) { isdigit(str[i]) || str[i] == '-' || str[i] == '.' ) {
continue; continue;
} else { } else {
@ -404,7 +404,7 @@ warn(const char *fmt, ...)
if (fmt) fprintf(stderr, fmt, list); if (fmt) fprintf(stderr, fmt, list);
#ifndef ANDROID #ifndef ANDROID
if (errno == 0) { if (errno == 0) {
fprintf(stderr, ": WSA error %d\n", WSAGetLastError()); fprintf(stderr, ": WSA error %d\n", WSAGetLastError());
} else { } else {
fprintf(stderr, ": %s\n", strerror(errno)); fprintf(stderr, ": %s\n", strerror(errno));
} }

View file

@ -53,12 +53,12 @@ extern const unsigned char raw_header[RAW_HDR_LEN];
#define QUERY_NAME_SIZE 256 #define QUERY_NAME_SIZE 256
#if defined IP_RECVDSTADDR #if defined IP_RECVDSTADDR
# define DSTADDR_SOCKOPT IP_RECVDSTADDR # define DSTADDR_SOCKOPT IP_RECVDSTADDR
# define dstaddr(x) ((struct in_addr *) CMSG_DATA(x)) # define dstaddr(x) ((struct in_addr *) CMSG_DATA(x))
#elif defined IP_PKTINFO #elif defined IP_PKTINFO
# define DSTADDR_SOCKOPT IP_PKTINFO # define DSTADDR_SOCKOPT IP_PKTINFO
# define dstaddr(x) (&(((struct in_pktinfo *)(CMSG_DATA(x)))->ipi_addr)) # define dstaddr(x) (&(((struct in_pktinfo *)(CMSG_DATA(x)))->ipi_addr))
#endif #endif
#if defined IP_MTU_DISCOVER #if defined IP_MTU_DISCOVER
@ -78,7 +78,7 @@ extern const unsigned char raw_header[RAW_HDR_LEN];
#define T_UNSET 65432 #define T_UNSET 65432
/* Unused RR type; "private use" range, see http://www.bind9.net/dns-parameters */ /* Unused RR type; "private use" range, see http://www.bind9.net/dns-parameters */
struct packet struct packet
{ {
int len; /* Total packet length */ int len; /* Total packet length */
int sentlen; /* Length of chunk currently transmitted */ int sentlen; /* Length of chunk currently transmitted */

View file

@ -62,9 +62,9 @@ dns_encode(char *buf, size_t buflen, struct query *q, qr_t qr, char *data, size_
return 0; return 0;
memset(buf, 0, buflen); memset(buf, 0, buflen);
header = (HEADER*)buf; header = (HEADER*)buf;
header->id = htons(q->id); header->id = htons(q->id);
header->qr = (qr == QR_ANSWER); header->qr = (qr == QR_ANSWER);
header->opcode = 0; header->opcode = 0;
@ -78,7 +78,7 @@ dns_encode(char *buf, size_t buflen, struct query *q, qr_t qr, char *data, size_
switch (qr) { switch (qr) {
case QR_ANSWER: case QR_ANSWER:
header->qdcount = htons(1); header->qdcount = htons(1);
name = 0xc000 | ((p - buf) & 0x3fff); name = 0xc000 | ((p - buf) & 0x3fff);
/* Question section */ /* Question section */
@ -97,7 +97,7 @@ dns_encode(char *buf, size_t buflen, struct query *q, qr_t qr, char *data, size_
int namelen; int namelen;
CHECKLEN(10); CHECKLEN(10);
putshort(&p, name); putshort(&p, name);
if (q->type == T_A) if (q->type == T_A)
/* answer CNAME to A question */ /* answer CNAME to A question */
putshort(&p, T_CNAME); putshort(&p, T_CNAME);
@ -127,7 +127,7 @@ dns_encode(char *buf, size_t buflen, struct query *q, qr_t qr, char *data, size_
ancnt = 1; ancnt = 1;
while (1) { while (1) {
CHECKLEN(10); CHECKLEN(10);
putshort(&p, name); putshort(&p, name);
putshort(&p, q->type); putshort(&p, q->type);
putshort(&p, C_IN); putshort(&p, C_IN);
putlong(&p, 0); /* TTL */ putlong(&p, 0); /* TTL */
@ -162,7 +162,7 @@ dns_encode(char *buf, size_t buflen, struct query *q, qr_t qr, char *data, size_
int txtlen; int txtlen;
CHECKLEN(10); CHECKLEN(10);
putshort(&p, name); putshort(&p, name);
putshort(&p, q->type); putshort(&p, q->type);
putshort(&p, C_IN); putshort(&p, C_IN);
putlong(&p, 0); /* TTL */ putlong(&p, 0); /* TTL */
@ -179,7 +179,7 @@ dns_encode(char *buf, size_t buflen, struct query *q, qr_t qr, char *data, size_
/* NULL has raw binary data */ /* NULL has raw binary data */
CHECKLEN(10); CHECKLEN(10);
putshort(&p, name); putshort(&p, name);
putshort(&p, q->type); putshort(&p, q->type);
putshort(&p, C_IN); putshort(&p, C_IN);
putlong(&p, 0); /* TTL */ putlong(&p, 0); /* TTL */
@ -198,7 +198,7 @@ dns_encode(char *buf, size_t buflen, struct query *q, qr_t qr, char *data, size_
/* Note that iodined also uses this for forward queries */ /* Note that iodined also uses this for forward queries */
header->qdcount = htons(1); header->qdcount = htons(1);
datalen = MIN(datalen, buflen - (p - buf)); datalen = MIN(datalen, buflen - (p - buf));
putname(&p, datalen, data); putname(&p, datalen, data);
@ -221,7 +221,7 @@ dns_encode(char *buf, size_t buflen, struct query *q, qr_t qr, char *data, size_
break; break;
} }
len = p - buf; len = p - buf;
return len; return len;
@ -245,9 +245,9 @@ dns_encode_ns_response(char *buf, size_t buflen, struct query *q, char *topdomai
return 0; return 0;
memset(buf, 0, buflen); memset(buf, 0, buflen);
header = (HEADER*)buf; header = (HEADER*)buf;
header->id = htons(q->id); header->id = htons(q->id);
header->qr = 1; header->qr = 1;
header->opcode = 0; header->opcode = 0;
@ -334,9 +334,9 @@ dns_encode_a_response(char *buf, size_t buflen, struct query *q)
return 0; return 0;
memset(buf, 0, buflen); memset(buf, 0, buflen);
header = (HEADER*)buf; header = (HEADER*)buf;
header->id = htons(q->id); header->id = htons(q->id);
header->qr = 1; header->qr = 1;
header->opcode = 0; header->opcode = 0;
@ -408,7 +408,7 @@ dns_decode(char *buf, size_t buflen, struct query *q, qr_t qr, char *packet, siz
short type; short type;
char *data; char *data;
short rlen; short rlen;
int id; int id;
int rv; int rv;
q->id2 = 0; q->id2 = 0;
@ -416,9 +416,9 @@ dns_decode(char *buf, size_t buflen, struct query *q, qr_t qr, char *packet, siz
header = (HEADER*)packet; header = (HEADER*)packet;
/* Reject short packets */ /* Reject short packets */
if (packetlen < sizeof(HEADER)) if (packetlen < sizeof(HEADER))
return 0; return 0;
if (header->qr != qr) { if (header->qr != qr) {
warnx("header->qr does not match the requested qr"); warnx("header->qr does not match the requested qr");
return -1; return -1;
@ -427,13 +427,13 @@ dns_decode(char *buf, size_t buflen, struct query *q, qr_t qr, char *packet, siz
data = packet + sizeof(HEADER); data = packet + sizeof(HEADER);
qdcount = ntohs(header->qdcount); qdcount = ntohs(header->qdcount);
ancount = ntohs(header->ancount); ancount = ntohs(header->ancount);
id = ntohs(header->id); id = ntohs(header->id);
id = id & 0xFFFF; /* Kill any sign extension */ id = id & 0xFFFF; /* Kill any sign extension */
rlen = 0; rlen = 0;
if (q != NULL) if (q != NULL)
q->rcode = header->rcode; q->rcode = header->rcode;
switch (qr) { switch (qr) {
@ -443,7 +443,7 @@ dns_decode(char *buf, size_t buflen, struct query *q, qr_t qr, char *packet, siz
return -1; return -1;
} }
if (q != NULL) if (q != NULL)
q->id = id; q->id = id;
/* Read name even if no answer, to give better error message */ /* Read name even if no answer, to give better error message */
@ -451,14 +451,14 @@ dns_decode(char *buf, size_t buflen, struct query *q, qr_t qr, char *packet, siz
CHECKLEN(4); CHECKLEN(4);
readshort(packet, &data, &type); readshort(packet, &data, &type);
readshort(packet, &data, &class); readshort(packet, &data, &class);
/* if CHECKLEN okay, then we're sure to have a proper name */ /* if CHECKLEN okay, then we're sure to have a proper name */
if (q != NULL) { if (q != NULL) {
/* We only need the first char to check it */ /* We only need the first char to check it */
q->name[0] = name[0]; q->name[0] = name[0];
q->name[1] = '\0'; q->name[1] = '\0';
} }
if (ancount < 1) { if (ancount < 1) {
/* DNS errors like NXDOMAIN have ancount=0 and /* DNS errors like NXDOMAIN have ancount=0 and
stop here. CNAME may also have A; MX/SRV may have stop here. CNAME may also have A; MX/SRV may have
@ -539,7 +539,7 @@ dns_decode(char *buf, size_t buflen, struct query *q, qr_t qr, char *packet, siz
names[pref / 10 - 1][QUERY_NAME_SIZE-1] = '\0'; names[pref / 10 - 1][QUERY_NAME_SIZE-1] = '\0';
} }
/* always trust rlen, not name encoding */ /* always trust rlen, not name encoding */
data = rdatastart + rlen; data = rdatastart + rlen;
CHECKLEN(0); CHECKLEN(0);
} }

View file

@ -20,8 +20,8 @@
#include "encoding.h" #include "encoding.h"
int int
build_hostname(char *buf, size_t buflen, build_hostname(char *buf, size_t buflen,
const char *data, const size_t datalen, const char *data, const size_t datalen,
const char *topdomain, struct encoder *encoder, int maxlen) const char *topdomain, struct encoder *encoder, int maxlen)
{ {
size_t space; size_t space;
@ -34,7 +34,7 @@ build_hostname(char *buf, size_t buflen,
space -= (space / 57); /* space for dots */ space -= (space / 57); /* space for dots */
memset(buf, 0, buflen); memset(buf, 0, buflen);
encoder->encode(buf, &space, data, datalen); encoder->encode(buf, &space, data, datalen);
if (!encoder->places_dots()) if (!encoder->places_dots())
@ -45,7 +45,7 @@ build_hostname(char *buf, size_t buflen,
/* move b back one step to see if the dot is there */ /* move b back one step to see if the dot is there */
b--; b--;
if (*b != '.') if (*b != '.')
*++b = '.'; *++b = '.';
b++; b++;
/* move b ahead of the string so we can copy to it */ /* move b ahead of the string so we can copy to it */
@ -63,7 +63,7 @@ unpack_data(char *buf, size_t buflen, char *data, size_t datalen, struct encoder
return enc->decode(buf, &buflen, data, datalen); return enc->decode(buf, &buflen, data, datalen);
} }
int int
inline_dotify(char *buf, size_t buflen) inline_dotify(char *buf, size_t buflen)
{ {
unsigned dots; unsigned dots;
@ -101,7 +101,7 @@ inline_dotify(char *buf, size_t buflen)
return total; return total;
} }
int int
inline_undotify(char *buf, size_t len) inline_undotify(char *buf, size_t len)
{ {
unsigned pos; unsigned pos;
@ -124,7 +124,7 @@ inline_undotify(char *buf, size_t len)
*writer++ = *reader++; *writer++ = *reader++;
pos++; pos++;
} }
/* return new length of string */ /* return new length of string */
return len - dots; return len - dots;
} }

View file

@ -29,9 +29,9 @@ void fw_query_init()
void fw_query_put(struct fw_query *fw_query) void fw_query_put(struct fw_query *fw_query)
{ {
memcpy(&(fwq[fwq_ix]), fw_query, sizeof(struct fw_query)); memcpy(&(fwq[fwq_ix]), fw_query, sizeof(struct fw_query));
++fwq_ix; ++fwq_ix;
if (fwq_ix >= FW_QUERY_CACHE_SIZE) if (fwq_ix >= FW_QUERY_CACHE_SIZE)
fwq_ix = 0; fwq_ix = 0;
} }

View file

@ -53,7 +53,7 @@ static char *__progname;
#define PASSWORD_ENV_VAR "IODINE_PASS" #define PASSWORD_ENV_VAR "IODINE_PASS"
static void static void
sighandler(int sig) sighandler(int sig)
{ {
client_stop(); client_stop();
} }
@ -179,7 +179,7 @@ main(int argc, char **argv)
srand((unsigned) time(NULL)); srand((unsigned) time(NULL));
client_init(); client_init();
#if !defined(BSD) && !defined(__GLIBC__) #if !defined(BSD) && !defined(__GLIBC__)
__progname = strrchr(argv[0], '/'); __progname = strrchr(argv[0], '/');
if (__progname == NULL) if (__progname == NULL)
@ -227,9 +227,9 @@ main(int argc, char **argv)
case 'P': case 'P':
strncpy(password, optarg, sizeof(password)); strncpy(password, optarg, sizeof(password));
password[sizeof(password)-1] = 0; password[sizeof(password)-1] = 0;
/* XXX: find better way of cleaning up ps(1) */ /* XXX: find better way of cleaning up ps(1) */
memset(optarg, 0, strlen(optarg)); memset(optarg, 0, strlen(optarg));
break; break;
case 'm': case 'm':
autodetect_frag_size = 0; autodetect_frag_size = 0;
@ -247,7 +247,7 @@ main(int argc, char **argv)
break; break;
case 'F': case 'F':
pidfile = optarg; pidfile = optarg;
break; break;
case 'T': case 'T':
set_qtype(optarg); set_qtype(optarg);
break; break;
@ -273,7 +273,7 @@ main(int argc, char **argv)
/* NOTREACHED */ /* NOTREACHED */
} }
} }
check_superuser(usage); check_superuser(usage);
argc -= optind; argc -= optind;
@ -310,7 +310,7 @@ main(int argc, char **argv)
warnx("No nameserver found - not connected to any network?\n"); warnx("No nameserver found - not connected to any network?\n");
usage(); usage();
/* NOTREACHED */ /* NOTREACHED */
} }
if(check_topdomain(topdomain, &errormsg)) { if(check_topdomain(topdomain, &errormsg)) {
warnx("Invalid topdomain: %s", errormsg); warnx("Invalid topdomain: %s", errormsg);
@ -322,7 +322,7 @@ main(int argc, char **argv)
client_set_lazymode(lazymode); client_set_lazymode(lazymode);
client_set_topdomain(topdomain); client_set_topdomain(topdomain);
client_set_hostname_maxlen(hostname_maxlen); client_set_hostname_maxlen(hostname_maxlen);
if (username != NULL) { if (username != NULL) {
#ifndef WINDOWS32 #ifndef WINDOWS32
if ((pw = getpwnam(username)) == NULL) { if ((pw = getpwnam(username)) == NULL) {
@ -332,14 +332,14 @@ main(int argc, char **argv)
} }
#endif #endif
} }
if (strlen(password) == 0) { if (strlen(password) == 0) {
if (NULL != getenv(PASSWORD_ENV_VAR)) if (NULL != getenv(PASSWORD_ENV_VAR))
snprintf(password, sizeof(password), "%s", getenv(PASSWORD_ENV_VAR)); snprintf(password, sizeof(password), "%s", getenv(PASSWORD_ENV_VAR));
else else
read_password(password, sizeof(password)); read_password(password, sizeof(password));
} }
client_set_password(password); client_set_password(password);
if ((tun_fd = open_tun(device)) == -1) { if ((tun_fd = open_tun(device)) == -1) {
@ -365,22 +365,22 @@ main(int argc, char **argv)
retval = 1; retval = 1;
goto cleanup2; goto cleanup2;
} }
if (client_get_conn() == CONN_RAW_UDP) { if (client_get_conn() == CONN_RAW_UDP) {
fprintf(stderr, "Sending raw traffic directly to %s\n", client_get_raw_addr()); fprintf(stderr, "Sending raw traffic directly to %s\n", client_get_raw_addr());
} }
fprintf(stderr, "Connection setup complete, transmitting data.\n"); fprintf(stderr, "Connection setup complete, transmitting data.\n");
if (foreground == 0) if (foreground == 0)
do_detach(); do_detach();
if (pidfile != NULL) if (pidfile != NULL)
do_pidfile(pidfile); do_pidfile(pidfile);
if (newroot != NULL) if (newroot != NULL)
do_chroot(newroot); do_chroot(newroot);
if (username != NULL) { if (username != NULL) {
#ifndef WINDOWS32 #ifndef WINDOWS32
gid_t gids[1]; gid_t gids[1];

View file

@ -152,7 +152,7 @@ static int get_external_ip(struct in_addr *ip)
} }
static void static void
sigint(int sig) sigint(int sig)
{ {
running = 0; running = 0;
} }
@ -182,7 +182,7 @@ check_user_and_ip(int userid, struct query *q)
/* Note: duplicate in handle_raw_login() except IP-address check */ /* Note: duplicate in handle_raw_login() except IP-address check */
if (userid < 0 || userid >= created_users ) { if (userid < 0 || userid >= created_users ) {
return 1; return 1;
} }
if (!users[userid].active || users[userid].disabled) { if (!users[userid].active || users[userid].disabled) {
return 1; return 1;
@ -217,7 +217,7 @@ send_raw(int fd, char *buf, int buflen, int user, int cmd, struct query *q)
packet[RAW_HDR_CMD] = cmd | (user & 0x0F); packet[RAW_HDR_CMD] = cmd | (user & 0x0F);
if (debug >= 2) { if (debug >= 2) {
fprintf(stderr, "TX-raw: client %s, cmd %d, %d bytes\n", fprintf(stderr, "TX-raw: client %s, cmd %d, %d bytes\n",
format_addr(&q->from, q->fromlen), cmd, len); format_addr(&q->from, q->fromlen), cmd, len);
} }
@ -552,12 +552,12 @@ send_chunk_or_dataless(int dns_fd, int userid, struct query *q)
pkt[0] = (1<<7) | ((users[userid].inpacket.seqno & 7) << 4) | pkt[0] = (1<<7) | ((users[userid].inpacket.seqno & 7) << 4) |
(users[userid].inpacket.fragment & 15); (users[userid].inpacket.fragment & 15);
/* Second byte is 3 bits downstream seqno, 4 bits downstream fragment, 1 bit last flag */ /* Second byte is 3 bits downstream seqno, 4 bits downstream fragment, 1 bit last flag */
pkt[1] = ((users[userid].outpacket.seqno & 7) << 5) | pkt[1] = ((users[userid].outpacket.seqno & 7) << 5) |
((users[userid].outpacket.fragment & 15) << 1) | (last & 1); ((users[userid].outpacket.fragment & 15) << 1) | (last & 1);
if (debug >= 1) { if (debug >= 1) {
fprintf(stderr, "OUT pkt seq# %d, frag %d (last=%d), offset %d, fragsize %d, total %d, to user %d\n", fprintf(stderr, "OUT pkt seq# %d, frag %d (last=%d), offset %d, fragsize %d, total %d, to user %d\n",
users[userid].outpacket.seqno & 7, users[userid].outpacket.fragment & 15, users[userid].outpacket.seqno & 7, users[userid].outpacket.fragment & 15,
last, users[userid].outpacket.offset, datalen, users[userid].outpacket.len, userid); last, users[userid].outpacket.offset, datalen, users[userid].outpacket.len, userid);
} }
write_dns(dns_fd, q, pkt, datalen + 2, users[userid].downenc); write_dns(dns_fd, q, pkt, datalen + 2, users[userid].downenc);
@ -611,7 +611,7 @@ tunnel_tun(int tun_fd, int dns_fd)
if ((read = read_tun(tun_fd, in, sizeof(in))) <= 0) if ((read = read_tun(tun_fd, in, sizeof(in))) <= 0)
return 0; return 0;
/* find target ip in packet, in is padded with 4 bytes TUN header */ /* find target ip in packet, in is padded with 4 bytes TUN header */
header = (struct ip*) (in + 4); header = (struct ip*) (in + 4);
userid = find_user_by_ip(header->ip_dst.s_addr); userid = find_user_by_ip(header->ip_dst.s_addr);
@ -657,7 +657,7 @@ static void
send_version_response(int fd, version_ack_t ack, uint32_t payload, int userid, struct query *q) send_version_response(int fd, version_ack_t ack, uint32_t payload, int userid, struct query *q)
{ {
char out[9]; char out[9];
switch (ack) { switch (ack) {
case VERSION_ACK: case VERSION_ACK:
strncpy(out, "VACK", sizeof(out)); strncpy(out, "VACK", sizeof(out));
@ -669,7 +669,7 @@ send_version_response(int fd, version_ack_t ack, uint32_t payload, int userid, s
strncpy(out, "VFUL", sizeof(out)); strncpy(out, "VFUL", sizeof(out));
break; break;
} }
out[4] = ((payload >> 24) & 0xff); out[4] = ((payload >> 24) & 0xff);
out[5] = ((payload >> 16) & 0xff); out[5] = ((payload >> 16) & 0xff);
out[6] = ((payload >> 8) & 0xff); out[6] = ((payload >> 8) & 0xff);
@ -742,7 +742,7 @@ handle_null_request(int tun_fd, int dns_fd, struct query *q, int domain_len)
read = unpack_data(unpacked, sizeof(unpacked), &(in[1]), domain_len - 1, b32); read = unpack_data(unpacked, sizeof(unpacked), &(in[1]), domain_len - 1, b32);
/* Version greeting, compare and send ack/nak */ /* Version greeting, compare and send ack/nak */
if (read > 4) { if (read > 4) {
/* Received V + 32bits version */ /* Received V + 32bits version */
version = (((unpacked[0] & 0xff) << 24) | version = (((unpacked[0] & 0xff) << 24) |
((unpacked[1] & 0xff) << 16) | ((unpacked[1] & 0xff) << 16) |
@ -760,7 +760,7 @@ handle_null_request(int tun_fd, int dns_fd, struct query *q, int domain_len)
/* Store remote IP number */ /* Store remote IP number */
tempin = (struct sockaddr_in *) &(q->from); tempin = (struct sockaddr_in *) &(q->from);
memcpy(&(users[userid].host), &(tempin->sin_addr), sizeof(struct in_addr)); memcpy(&(users[userid].host), &(tempin->sin_addr), sizeof(struct in_addr));
memcpy(&(users[userid].q), q, sizeof(struct query)); memcpy(&(users[userid].q), q, sizeof(struct query));
users[userid].encoder = get_base32_encoder(); users[userid].encoder = get_base32_encoder();
users[userid].downenc = 'T'; users[userid].downenc = 'T';
@ -807,12 +807,12 @@ handle_null_request(int tun_fd, int dns_fd, struct query *q, int domain_len)
} else { } else {
/* No space for another user */ /* No space for another user */
send_version_response(dns_fd, VERSION_FULL, created_users, 0, q); send_version_response(dns_fd, VERSION_FULL, created_users, 0, q);
syslog(LOG_INFO, "dropped user from %s, server full", syslog(LOG_INFO, "dropped user from %s, server full",
format_addr(&q->from, q->fromlen)); format_addr(&q->from, q->fromlen));
} }
} else { } else {
send_version_response(dns_fd, VERSION_NACK, VERSION, 0, q); send_version_response(dns_fd, VERSION_NACK, VERSION, 0, q);
syslog(LOG_INFO, "dropped user from %s, sent bad version %08X", syslog(LOG_INFO, "dropped user from %s, sent bad version %08X",
format_addr(&q->from, q->fromlen), version); format_addr(&q->from, q->fromlen), version);
} }
return; return;
@ -843,7 +843,7 @@ handle_null_request(int tun_fd, int dns_fd, struct query *q, int domain_len)
tempip.s_addr = users[userid].tun_ip; tempip.s_addr = users[userid].tun_ip;
tmp[1] = strdup(inet_ntoa(tempip)); tmp[1] = strdup(inet_ntoa(tempip));
read = snprintf(out, sizeof(out), "%s-%s-%d-%d", read = snprintf(out, sizeof(out), "%s-%s-%d-%d",
tmp[0], tmp[1], my_mtu, netmask); tmp[0], tmp[1], my_mtu, netmask);
write_dns(dns_fd, q, out, read, users[userid].downenc); write_dns(dns_fd, q, out, read, users[userid].downenc);
@ -864,7 +864,7 @@ handle_null_request(int tun_fd, int dns_fd, struct query *q, int domain_len)
in_addr_t replyaddr; in_addr_t replyaddr;
unsigned addr; unsigned addr;
char reply[5]; char reply[5];
userid = b32_8to5(in[1]); userid = b32_8to5(in[1]);
if (check_user_and_ip(userid, q) != 0) { if (check_user_and_ip(userid, q) != 0) {
write_dns(dns_fd, q, "BADIP", 5, 'T'); write_dns(dns_fd, q, "BADIP", 5, 'T');
@ -902,12 +902,12 @@ handle_null_request(int tun_fd, int dns_fd, struct query *q, int domain_len)
} }
userid = b32_8to5(in[1]); userid = b32_8to5(in[1]);
if (check_user_and_ip(userid, q) != 0) { if (check_user_and_ip(userid, q) != 0) {
write_dns(dns_fd, q, "BADIP", 5, 'T'); write_dns(dns_fd, q, "BADIP", 5, 'T');
return; /* illegal id */ return; /* illegal id */
} }
codec = b32_8to5(in[2]); codec = b32_8to5(in[2]);
switch (codec) { switch (codec) {
@ -1076,9 +1076,9 @@ handle_null_request(int tun_fd, int dns_fd, struct query *q, int domain_len)
write_dns(dns_fd, q, "BADIP", 5, 'T'); write_dns(dns_fd, q, "BADIP", 5, 'T');
return; /* illegal id */ return; /* illegal id */
} }
req_frag_size = ((b32_8to5(in[1]) & 1) << 10) | ((b32_8to5(in[2]) & 31) << 5) | (b32_8to5(in[3]) & 31); req_frag_size = ((b32_8to5(in[1]) & 1) << 10) | ((b32_8to5(in[2]) & 31) << 5) | (b32_8to5(in[3]) & 31);
if (req_frag_size < 2 || req_frag_size > 2047) { if (req_frag_size < 2 || req_frag_size > 2047) {
write_dns(dns_fd, q, "BADFRAG", 7, users[userid].downenc); write_dns(dns_fd, q, "BADFRAG", 7, users[userid].downenc);
} else { } else {
char buf[2048]; char buf[2048];
@ -1111,9 +1111,9 @@ handle_null_request(int tun_fd, int dns_fd, struct query *q, int domain_len)
write_dns(dns_fd, q, "BADIP", 5, 'T'); write_dns(dns_fd, q, "BADIP", 5, 'T');
return; /* illegal id */ return; /* illegal id */
} }
max_frag_size = ((unpacked[1] & 0xff) << 8) | (unpacked[2] & 0xff); max_frag_size = ((unpacked[1] & 0xff) << 8) | (unpacked[2] & 0xff);
if (max_frag_size < 2) { if (max_frag_size < 2) {
write_dns(dns_fd, q, "BADFRAG", 7, users[userid].downenc); write_dns(dns_fd, q, "BADFRAG", 7, users[userid].downenc);
} else { } else {
users[userid].fragsize = max_frag_size; users[userid].fragsize = max_frag_size;
@ -1178,7 +1178,7 @@ handle_null_request(int tun_fd, int dns_fd, struct query *q, int domain_len)
memcpy(&(users[userid].q.from2), &(q->from), q->fromlen); memcpy(&(users[userid].q.from2), &(q->from), q->fromlen);
return; return;
} }
if (users[userid].q_sendrealsoon.id != 0 && if (users[userid].q_sendrealsoon.id != 0 &&
q->type == users[userid].q_sendrealsoon.type && q->type == users[userid].q_sendrealsoon.type &&
!strcmp(q->name, users[userid].q_sendrealsoon.name)) { !strcmp(q->name, users[userid].q_sendrealsoon.name)) {
@ -1194,7 +1194,7 @@ handle_null_request(int tun_fd, int dns_fd, struct query *q, int domain_len)
&(q->from), q->fromlen); &(q->from), q->fromlen);
return; return;
} }
dn_seq = unpacked[1] >> 4; dn_seq = unpacked[1] >> 4;
dn_frag = unpacked[1] & 15; dn_frag = unpacked[1] & 15;
@ -1289,7 +1289,7 @@ handle_null_request(int tun_fd, int dns_fd, struct query *q, int domain_len)
like to re-try early and often (with _different_ .id!) */ like to re-try early and often (with _different_ .id!) */
if (users[userid].q.id != 0 && if (users[userid].q.id != 0 &&
q->type == users[userid].q.type && q->type == users[userid].q.type &&
!strcmp(q->name, users[userid].q.name) && !strcmp(q->name, users[userid].q.name) &&
users[userid].lazy) { users[userid].lazy) {
/* We have this packet already, and it's waiting to be /* We have this packet already, and it's waiting to be
answered. Always keep the last duplicate, since the answered. Always keep the last duplicate, since the
@ -1306,7 +1306,7 @@ handle_null_request(int tun_fd, int dns_fd, struct query *q, int domain_len)
memcpy(&(users[userid].q.from2), &(q->from), q->fromlen); memcpy(&(users[userid].q.from2), &(q->from), q->fromlen);
return; return;
} }
if (users[userid].q_sendrealsoon.id != 0 && if (users[userid].q_sendrealsoon.id != 0 &&
q->type == users[userid].q_sendrealsoon.type && q->type == users[userid].q_sendrealsoon.type &&
!strcmp(q->name, users[userid].q_sendrealsoon.name)) { !strcmp(q->name, users[userid].q_sendrealsoon.name)) {
@ -1322,7 +1322,7 @@ handle_null_request(int tun_fd, int dns_fd, struct query *q, int domain_len)
&(q->from), q->fromlen); &(q->from), q->fromlen);
return; return;
} }
/* Decode data header */ /* Decode data header */
up_seq = (b32_8to5(in[1]) >> 2) & 7; up_seq = (b32_8to5(in[1]) >> 2) & 7;
@ -1333,7 +1333,7 @@ handle_null_request(int tun_fd, int dns_fd, struct query *q, int domain_len)
process_downstream_ack(userid, dn_seq, dn_frag); process_downstream_ack(userid, dn_seq, dn_frag);
if (up_seq == users[userid].inpacket.seqno && if (up_seq == users[userid].inpacket.seqno &&
up_frag <= users[userid].inpacket.fragment) { up_frag <= users[userid].inpacket.fragment) {
/* Got repeated old packet _with data_, probably /* Got repeated old packet _with data_, probably
because client didn't receive our ack. So re-send because client didn't receive our ack. So re-send
@ -1491,9 +1491,9 @@ handle_ns_request(int dns_fd, struct query *q)
warnx("dns_encode_ns_response doesn't fit"); warnx("dns_encode_ns_response doesn't fit");
return; return;
} }
if (debug >= 2) { if (debug >= 2) {
fprintf(stderr, "TX: client %s, type %d, name %s, %d bytes NS reply\n", fprintf(stderr, "TX: client %s, type %d, name %s, %d bytes NS reply\n",
format_addr(&q->from, q->fromlen), q->type, q->name, len); format_addr(&q->from, q->fromlen), q->type, q->name, len);
} }
if (sendto(dns_fd, buf, len, 0, (struct sockaddr*)&q->from, q->fromlen) <= 0) { if (sendto(dns_fd, buf, len, 0, (struct sockaddr*)&q->from, q->fromlen) <= 0) {
@ -1523,7 +1523,7 @@ handle_a_request(int dns_fd, struct query *q, int fakeip)
warnx("dns_encode_a_response doesn't fit"); warnx("dns_encode_a_response doesn't fit");
return; return;
} }
if (debug >= 2) { if (debug >= 2) {
fprintf(stderr, "TX: client %s, type %d, name %s, %d bytes A reply\n", fprintf(stderr, "TX: client %s, type %d, name %s, %d bytes A reply\n",
format_addr(&q->from, q->fromlen), q->type, q->name, len); format_addr(&q->from, q->fromlen), q->type, q->name, len);
@ -1558,7 +1558,7 @@ forward_query(int bind_fd, struct query *q)
myaddr = (struct sockaddr_in *) &(q->from); myaddr = (struct sockaddr_in *) &(q->from);
memcpy(&(myaddr->sin_addr), &newaddr, sizeof(in_addr_t)); memcpy(&(myaddr->sin_addr), &newaddr, sizeof(in_addr_t));
myaddr->sin_port = htons(bind_port); myaddr->sin_port = htons(bind_port);
if (debug >= 2) { if (debug >= 2) {
fprintf(stderr, "TX: NS reply \n"); fprintf(stderr, "TX: NS reply \n");
} }
@ -1567,7 +1567,7 @@ forward_query(int bind_fd, struct query *q)
warn("forward query error"); warn("forward query error");
} }
} }
static int static int
tunnel_bind(int bind_fd, int dns_fd) tunnel_bind(int bind_fd, int dns_fd)
{ {
@ -1579,14 +1579,14 @@ tunnel_bind(int bind_fd, int dns_fd)
int r; int r;
fromlen = sizeof(struct sockaddr); fromlen = sizeof(struct sockaddr);
r = recvfrom(bind_fd, packet, sizeof(packet), 0, r = recvfrom(bind_fd, packet, sizeof(packet), 0,
(struct sockaddr*)&from, &fromlen); (struct sockaddr*)&from, &fromlen);
if (r <= 0) if (r <= 0)
return 0; return 0;
id = dns_get_id(packet, r); id = dns_get_id(packet, r);
if (debug >= 2) { if (debug >= 2) {
fprintf(stderr, "RX: Got response on query %u from DNS\n", (id & 0xFFFF)); fprintf(stderr, "RX: Got response on query %u from DNS\n", (id & 0xFFFF));
} }
@ -1604,8 +1604,8 @@ tunnel_bind(int bind_fd, int dns_fd)
fprintf(stderr, "TX: client %s id %u, %d bytes\n", fprintf(stderr, "TX: client %s id %u, %d bytes\n",
format_addr(&query->addr, query->addrlen), (id & 0xffff), r); format_addr(&query->addr, query->addrlen), (id & 0xffff), r);
} }
if (sendto(dns_fd, packet, r, 0, (const struct sockaddr *) &(query->addr), if (sendto(dns_fd, packet, r, 0, (const struct sockaddr *) &(query->addr),
query->addrlen) <= 0) { query->addrlen) <= 0) {
warn("forward reply error"); warn("forward reply error");
} }
@ -1625,7 +1625,7 @@ tunnel_dns(int tun_fd, int dns_fd, int bind_fd)
return 0; return 0;
if (debug >= 2) { if (debug >= 2) {
fprintf(stderr, "RX: client %s, type %d, name %s\n", fprintf(stderr, "RX: client %s, type %d, name %s\n",
format_addr(&q.from, q.fromlen), q.type, q.name); format_addr(&q.from, q.fromlen), q.type, q.name);
} }
@ -1736,9 +1736,9 @@ tunnel(int tun_fd, int dns_fd, int bind_fd, int max_idle_time)
} }
i = select(maxfd + 1, &fds, NULL, NULL, &tv); i = select(maxfd + 1, &fds, NULL, NULL, &tv);
if(i < 0) { if(i < 0) {
if (running) if (running)
warn("select"); warn("select");
return 1; return 1;
} }
@ -1763,7 +1763,7 @@ tunnel(int tun_fd, int dns_fd, int bind_fd, int max_idle_time)
} }
if (FD_ISSET(dns_fd, &fds)) { if (FD_ISSET(dns_fd, &fds)) {
tunnel_dns(tun_fd, dns_fd, bind_fd); tunnel_dns(tun_fd, dns_fd, bind_fd);
} }
if (FD_ISSET(bind_fd, &fds)) { if (FD_ISSET(bind_fd, &fds)) {
tunnel_bind(bind_fd, dns_fd); tunnel_bind(bind_fd, dns_fd);
} }
@ -1791,7 +1791,7 @@ handle_full_packet(int tun_fd, int dns_fd, int userid)
int ret; int ret;
outlen = sizeof(out); outlen = sizeof(out);
ret = uncompress((uint8_t*)out, &outlen, ret = uncompress((uint8_t*)out, &outlen,
(uint8_t*)users[userid].inpacket.data, users[userid].inpacket.len); (uint8_t*)users[userid].inpacket.data, users[userid].inpacket.len);
if (ret == Z_OK) { if (ret == Z_OK) {
@ -1843,7 +1843,7 @@ static void
handle_raw_login(char *packet, int len, struct query *q, int fd, int userid) handle_raw_login(char *packet, int len, struct query *q, int fd, int userid)
{ {
char myhash[16]; char myhash[16];
if (len < 16) return; if (len < 16) return;
/* can't use check_user_and_ip() since IP address will be different, /* can't use check_user_and_ip() since IP address will be different,
@ -1869,7 +1869,7 @@ handle_raw_login(char *packet, int len, struct query *q, int fd, int userid)
/* Store remote IP number */ /* Store remote IP number */
tempin = (struct sockaddr_in *) &(q->from); tempin = (struct sockaddr_in *) &(q->from);
memcpy(&(users[userid].host), &(tempin->sin_addr), sizeof(struct in_addr)); memcpy(&(users[userid].host), &(tempin->sin_addr), sizeof(struct in_addr));
/* Correct hash, reply with hash of seed - 1 */ /* Correct hash, reply with hash of seed - 1 */
user_set_conn_type(userid, CONN_RAW_UDP); user_set_conn_type(userid, CONN_RAW_UDP);
login_calculate(myhash, 16, password, users[userid].seed - 1); login_calculate(myhash, 16, password, users[userid].seed - 1);
@ -1975,7 +1975,7 @@ read_dns(int fd, int tun_fd, struct query *q) /* FIXME: tun_fd is because of raw
msg.msg_control = address; msg.msg_control = address;
msg.msg_controllen = sizeof(address); msg.msg_controllen = sizeof(address);
msg.msg_flags = 0; msg.msg_flags = 0;
r = recvmsg(fd, &msg, 0); r = recvmsg(fd, &msg, 0);
#else #else
addrlen = sizeof(struct sockaddr); addrlen = sizeof(struct sockaddr);
@ -1993,22 +1993,22 @@ read_dns(int fd, int tun_fd, struct query *q) /* FIXME: tun_fd is because of raw
if (dns_decode(NULL, 0, q, QR_QUERY, packet, r) < 0) { if (dns_decode(NULL, 0, q, QR_QUERY, packet, r) < 0) {
return 0; return 0;
} }
#ifndef WINDOWS32 #ifndef WINDOWS32
for (cmsg = CMSG_FIRSTHDR(&msg); cmsg != NULL; for (cmsg = CMSG_FIRSTHDR(&msg); cmsg != NULL;
cmsg = CMSG_NXTHDR(&msg, cmsg)) { cmsg = CMSG_NXTHDR(&msg, cmsg)) {
if (cmsg->cmsg_level == IPPROTO_IP && if (cmsg->cmsg_level == IPPROTO_IP &&
cmsg->cmsg_type == DSTADDR_SOCKOPT) { cmsg->cmsg_type == DSTADDR_SOCKOPT) {
q->destination = *dstaddr(cmsg); q->destination = *dstaddr(cmsg);
break; break;
} }
} }
#endif #endif
return strlen(q->name); return strlen(q->name);
} else if (r < 0) { } else if (r < 0) {
/* Error */ /* Error */
warn("read dns"); warn("read dns");
} }
@ -2073,7 +2073,7 @@ write_dns_nameenc(char *buf, size_t buflen, char *data, int datalen, char downen
/* Add dot (if it wasn't there already) and topdomain */ /* Add dot (if it wasn't there already) and topdomain */
b = buf; b = buf;
b += strlen(buf) - 1; b += strlen(buf) - 1;
if (*b != '.') if (*b != '.')
*++b = '.'; *++b = '.';
b++; b++;
@ -2165,9 +2165,9 @@ write_dns(int fd, struct query *q, char *data, int datalen, char downenc)
warnx("dns_encode doesn't fit"); warnx("dns_encode doesn't fit");
return; return;
} }
if (debug >= 2) { if (debug >= 2) {
fprintf(stderr, "TX: client %s, type %d, name %s, %d bytes data\n", fprintf(stderr, "TX: client %s, type %d, name %s, %d bytes data\n",
format_addr(&q->from, q->fromlen), q->type, q->name, datalen); format_addr(&q->from, q->fromlen), q->type, q->name, datalen);
} }
@ -2247,11 +2247,11 @@ main(int argc, char **argv)
int dnsd_fd; int dnsd_fd;
int tun_fd; int tun_fd;
/* settings for forwarding normal DNS to /* settings for forwarding normal DNS to
* local real DNS server */ * local real DNS server */
int bind_fd; int bind_fd;
int bind_enable; int bind_enable;
int choice; int choice;
int port; int port;
int mtu; int mtu;
@ -2293,7 +2293,7 @@ main(int argc, char **argv)
b64 = get_base64_encoder(); b64 = get_base64_encoder();
b64u = get_base64u_encoder(); b64u = get_base64u_encoder();
b128 = get_base128_encoder(); b128 = get_base128_encoder();
retval = 0; retval = 0;
#ifdef WINDOWS32 #ifdef WINDOWS32
@ -2311,7 +2311,7 @@ main(int argc, char **argv)
memset(password, 0, sizeof(password)); memset(password, 0, sizeof(password));
srand(time(NULL)); srand(time(NULL));
fw_query_init(); fw_query_init();
while ((choice = getopt(argc, argv, "vcsfhDu:t:d:m:l:p:n:b:P:z:F:i:")) != -1) { while ((choice = getopt(argc, argv, "vcsfhDu:t:d:m:l:p:n:b:P:z:F:i:")) != -1) {
switch(choice) { switch(choice) {
case 'v': case 'v':
@ -2363,16 +2363,16 @@ main(int argc, char **argv)
break; break;
case 'F': case 'F':
pidfile = optarg; pidfile = optarg;
break; break;
case 'i': case 'i':
max_idle_time = atoi(optarg); max_idle_time = atoi(optarg);
break; break;
case 'P': case 'P':
strncpy(password, optarg, sizeof(password)); strncpy(password, optarg, sizeof(password));
password[sizeof(password)-1] = 0; password[sizeof(password)-1] = 0;
/* XXX: find better way of cleaning up ps(1) */ /* XXX: find better way of cleaning up ps(1) */
memset(optarg, 0, strlen(optarg)); memset(optarg, 0, strlen(optarg));
break; break;
case 'z': case 'z':
context = optarg; context = optarg;
@ -2388,9 +2388,9 @@ main(int argc, char **argv)
check_superuser(usage); check_superuser(usage);
if (argc != 2) if (argc != 2)
usage(); usage();
netsize = strchr(argv[0], '/'); netsize = strchr(argv[0], '/');
if (netsize) { if (netsize) {
*netsize = 0; *netsize = 0;
@ -2399,7 +2399,7 @@ main(int argc, char **argv)
} }
my_ip = inet_addr(argv[0]); my_ip = inet_addr(argv[0]);
if (my_ip == INADDR_NONE) { if (my_ip == INADDR_NONE) {
warnx("Bad IP address to use inside tunnel."); warnx("Bad IP address to use inside tunnel.");
usage(); usage();
@ -2425,12 +2425,12 @@ main(int argc, char **argv)
warnx("Bad MTU given."); warnx("Bad MTU given.");
usage(); usage();
} }
if(port < 1 || port > 65535) { if(port < 1 || port > 65535) {
warnx("Bad port number given."); warnx("Bad port number given.");
usage(); usage();
} }
if (port != 53) { if (port != 53) {
fprintf(stderr, "ALERT! Other dns servers expect you to run on port 53.\n"); fprintf(stderr, "ALERT! Other dns servers expect you to run on port 53.\n");
fprintf(stderr, "You must manually forward port 53 to port %d for things to work.\n", port); fprintf(stderr, "You must manually forward port 53 to port %d for things to work.\n", port);
@ -2485,7 +2485,7 @@ main(int argc, char **argv)
warnx("Bad netmask (%d bits). Use 8-30 bits.", netmask); warnx("Bad netmask (%d bits). Use 8-30 bits.", netmask);
usage(); usage();
} }
if (strlen(password) == 0) { if (strlen(password) == 0) {
if (NULL != getenv(PASSWORD_ENV_VAR)) if (NULL != getenv(PASSWORD_ENV_VAR))
snprintf(password, sizeof(password), "%s", getenv(PASSWORD_ENV_VAR)); snprintf(password, sizeof(password), "%s", getenv(PASSWORD_ENV_VAR));
@ -2533,16 +2533,16 @@ main(int argc, char **argv)
} }
my_mtu = mtu; my_mtu = mtu;
if (created_users < USERS) { if (created_users < USERS) {
fprintf(stderr, "Limiting to %d simultaneous users because of netmask /%d\n", fprintf(stderr, "Limiting to %d simultaneous users because of netmask /%d\n",
created_users, netmask); created_users, netmask);
} }
fprintf(stderr, "Listening to dns for domain %s\n", topdomain); fprintf(stderr, "Listening to dns for domain %s\n", topdomain);
if (foreground == 0) if (foreground == 0)
do_detach(); do_detach();
if (pidfile != NULL) if (pidfile != NULL)
do_pidfile(pidfile); do_pidfile(pidfile);
@ -2572,7 +2572,7 @@ main(int argc, char **argv)
do_setcon(context); do_setcon(context);
syslog(LOG_INFO, "started, listening on port %d", port); syslog(LOG_INFO, "started, listening on port %d", port);
tunnel(tun_fd, dnsd_fd, bind_fd, max_idle_time); tunnel(tun_fd, dnsd_fd, bind_fd, max_idle_time);
syslog(LOG_INFO, "stopping"); syslog(LOG_INFO, "stopping");
@ -2581,7 +2581,7 @@ cleanup3:
cleanup2: cleanup2:
close_dns(dnsd_fd); close_dns(dnsd_fd);
cleanup1: cleanup1:
close_tun(tun_fd); close_tun(tun_fd);
cleanup0: cleanup0:
return retval; return retval;

View file

@ -27,11 +27,11 @@
#include "md5.h" #include "md5.h"
/* /*
* Needs a 16byte array for output, and 32 bytes password * Needs a 16byte array for output, and 32 bytes password
*/ */
void void
login_calculate(char *buf, int buflen, const char *pass, int seed) login_calculate(char *buf, int buflen, const char *pass, int seed)
{ {
unsigned char temp[32]; unsigned char temp[32];
md5_state_t ctx; md5_state_t ctx;
@ -39,7 +39,7 @@ login_calculate(char *buf, int buflen, const char *pass, int seed)
int i; int i;
int k; int k;
if (buflen < 16) if (buflen < 16)
return; return;
memcpy(temp, pass, 32); memcpy(temp, pass, 32);

View file

@ -71,7 +71,7 @@ typedef struct md5_state_s {
} md5_state_t; } md5_state_t;
#ifdef __cplusplus #ifdef __cplusplus
extern "C" extern "C"
{ {
#endif #endif

View file

@ -61,7 +61,7 @@ readname_loop(char *packet, int packetlen, char **src, char *dst, size_t length,
c--; c--;
} }
if (len >= length - 1) { if (len >= length - 1) {
break; /* We used up all space */ break; /* We used up all space */
} }
@ -104,8 +104,8 @@ readlong(char *packet, char **src, uint32_t *dst)
p = (unsigned char *) *src; p = (unsigned char *) *src;
*dst = ((uint32_t)p[0] << 24) *dst = ((uint32_t)p[0] << 24)
| ((uint32_t)p[1] << 16) | ((uint32_t)p[1] << 16)
| ((uint32_t)p[2] << 8) | ((uint32_t)p[2] << 8)
| ((uint32_t)p[3]); | ((uint32_t)p[3]);
@ -163,7 +163,7 @@ putname(char **buf, size_t buflen, const char *host)
h = strdup(host); h = strdup(host);
left = buflen; left = buflen;
p = *buf; p = *buf;
word = strtok(h, "."); word = strtok(h, ".");
while(word) { while(word) {
if (strlen(word) > 63 || strlen(word) > left) { if (strlen(word) > 63 || strlen(word) > left) {
@ -231,7 +231,7 @@ int
putdata(char **dst, char *data, size_t len) putdata(char **dst, char *data, size_t len)
{ {
memcpy(*dst, data, len); memcpy(*dst, data, len);
(*dst) += len; (*dst) += len;
return len; return len;
} }

View file

@ -69,8 +69,8 @@ char if_name[250];
#include <net/if.h> #include <net/if.h>
#include <linux/if_tun.h> #include <linux/if_tun.h>
int int
open_tun(const char *tun_device) open_tun(const char *tun_device)
{ {
int i; int i;
int tun_fd; int tun_fd;
@ -88,7 +88,7 @@ open_tun(const char *tun_device)
memset(&ifreq, 0, sizeof(ifreq)); memset(&ifreq, 0, sizeof(ifreq));
ifreq.ifr_flags = IFF_TUN; ifreq.ifr_flags = IFF_TUN;
if (tun_device != NULL) { if (tun_device != NULL) {
strncpy(ifreq.ifr_name, tun_device, IFNAMSIZ); strncpy(ifreq.ifr_name, tun_device, IFNAMSIZ);
@ -129,8 +129,8 @@ open_tun(const char *tun_device)
#else /* BSD */ #else /* BSD */
int int
open_tun(const char *tun_device) open_tun(const char *tun_device)
{ {
int i; int i;
int tun_fd; int tun_fd;
@ -184,7 +184,7 @@ get_device(char *device, int device_len, const char *wanted_dev)
warnx("Error opening registry key " TAP_ADAPTER_KEY ); warnx("Error opening registry key " TAP_ADAPTER_KEY );
return; return;
} }
while (TRUE) { while (TRUE) {
char name[256]; char name[256];
char unit[256]; char unit[256];
@ -222,7 +222,7 @@ get_device(char *device, int device_len, const char *wanted_dev)
strncmp(TAP_VERSION_ID_0901, component, strlen(TAP_VERSION_ID_0901)) == 0) { strncmp(TAP_VERSION_ID_0901, component, strlen(TAP_VERSION_ID_0901)) == 0) {
/* We found a TAP32 device, get its NetCfgInstanceId */ /* We found a TAP32 device, get its NetCfgInstanceId */
char iid_string[256] = NET_CFG_INST_ID; char iid_string[256] = NET_CFG_INST_ID;
status = RegQueryValueEx(device_key, iid_string, NULL, &datatype, (LPBYTE) device, (DWORD *) &device_len); status = RegQueryValueEx(device_key, iid_string, NULL, &datatype, (LPBYTE) device, (DWORD *) &device_len);
if (status != ERROR_SUCCESS || datatype != REG_SZ) { if (status != ERROR_SUCCESS || datatype != REG_SZ) {
warnx("Error reading registry key %s\\%s on TAP device", unit, iid_string); warnx("Error reading registry key %s\\%s on TAP device", unit, iid_string);
@ -299,7 +299,7 @@ DWORD WINAPI tun_reader(LPVOID arg)
if (!res) { if (!res) {
WaitForSingleObject(olpd.hEvent, INFINITE); WaitForSingleObject(olpd.hEvent, INFINITE);
res = GetOverlappedResult(dev_handle, &olpd, (LPDWORD) &len, FALSE); res = GetOverlappedResult(dev_handle, &olpd, (LPDWORD) &len, FALSE);
res = sendto(sock, buf, len, 0, (struct sockaddr*) &(tun->addr), res = sendto(sock, buf, len, 0, (struct sockaddr*) &(tun->addr),
tun->addrlen); tun->addrlen);
} }
} }
@ -307,8 +307,8 @@ DWORD WINAPI tun_reader(LPVOID arg)
return 0; return 0;
} }
int int
open_tun(const char *tun_device) open_tun(const char *tun_device)
{ {
char adapter[256]; char adapter[256];
char tapfile[512]; char tapfile[512];
@ -328,7 +328,7 @@ open_tun(const char *tun_device)
} }
return -1; return -1;
} }
fprintf(stderr, "Opening device %s\n", if_name); fprintf(stderr, "Opening device %s\n", if_name);
snprintf(tapfile, sizeof(tapfile), "%s%s.tap", TAP_DEVICE_SPACE, adapter); snprintf(tapfile, sizeof(tapfile), "%s%s.tap", TAP_DEVICE_SPACE, adapter);
dev_handle = CreateFile(tapfile, GENERIC_WRITE | GENERIC_READ, 0, 0, OPEN_EXISTING, FILE_ATTRIBUTE_SYSTEM | FILE_FLAG_OVERLAPPED, NULL); dev_handle = CreateFile(tapfile, GENERIC_WRITE | GENERIC_READ, 0, 0, OPEN_EXISTING, FILE_ATTRIBUTE_SYSTEM | FILE_FLAG_OVERLAPPED, NULL);
@ -339,9 +339,9 @@ open_tun(const char *tun_device)
/* Use a UDP connection to forward packets from tun, /* Use a UDP connection to forward packets from tun,
* so we can still use select() in main code. * so we can still use select() in main code.
* A thread does blocking reads on tun device and * A thread does blocking reads on tun device and
* sends data as udp to this socket */ * sends data as udp to this socket */
localsock_len = get_addr("127.0.0.1", 55353, AF_INET, 0, &localsock); localsock_len = get_addr("127.0.0.1", 55353, AF_INET, 0, &localsock);
tunfd = open_dns(&localsock, localsock_len); tunfd = open_dns(&localsock, localsock_len);
@ -349,20 +349,20 @@ open_tun(const char *tun_device)
memcpy(&(data.addr), &localsock, localsock_len); memcpy(&(data.addr), &localsock, localsock_len);
data.addrlen = localsock_len; data.addrlen = localsock_len;
CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)tun_reader, &data, 0, NULL); CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)tun_reader, &data, 0, NULL);
return tunfd; return tunfd;
} }
#endif #endif
void void
close_tun(int tun_fd) close_tun(int tun_fd)
{ {
if (tun_fd >= 0) if (tun_fd >= 0)
close(tun_fd); close(tun_fd);
} }
int int
write_tun(int tun_fd, char *data, size_t len) write_tun(int tun_fd, char *data, size_t len)
{ {
#if defined (FREEBSD) || defined (DARWIN) || defined(NETBSD) || defined(WINDOWS32) #if defined (FREEBSD) || defined (DARWIN) || defined(NETBSD) || defined(WINDOWS32)
data += 4; data += 4;
@ -409,7 +409,7 @@ write_tun(int tun_fd, char *data, size_t len)
} }
ssize_t ssize_t
read_tun(int tun_fd, char *buf, size_t len) read_tun(int tun_fd, char *buf, size_t len)
{ {
#if defined (FREEBSD) || defined (DARWIN) || defined(NETBSD) || defined(WINDOWS32) #if defined (FREEBSD) || defined (DARWIN) || defined(NETBSD) || defined(WINDOWS32)
/* FreeBSD/Darwin/NetBSD has no header */ /* FreeBSD/Darwin/NetBSD has no header */
@ -471,13 +471,13 @@ tun_setip(const char *ip, const char *other_ip, int netbits)
# else # else
display_ip = ip; display_ip = ip;
# endif # endif
snprintf(cmdline, sizeof(cmdline), snprintf(cmdline, sizeof(cmdline),
IFCONFIGPATH "ifconfig %s %s %s netmask %s", IFCONFIGPATH "ifconfig %s %s %s netmask %s",
if_name, if_name,
ip, ip,
display_ip, display_ip,
inet_ntoa(net)); inet_ntoa(net));
fprintf(stderr, "Setting IP of %s to %s\n", if_name, ip); fprintf(stderr, "Setting IP of %s to %s\n", if_name, ip);
#ifndef LINUX #ifndef LINUX
netip.s_addr = inet_addr(ip); netip.s_addr = inet_addr(ip);
@ -486,7 +486,7 @@ tun_setip(const char *ip, const char *other_ip, int netbits)
if(r != 0) { if(r != 0) {
return r; return r;
} else { } else {
snprintf(cmdline, sizeof(cmdline), snprintf(cmdline, sizeof(cmdline),
"/sbin/route add %s/%d %s", "/sbin/route add %s/%d %s",
inet_ntoa(netip), netbits, ip); inet_ntoa(netip), netbits, ip);
@ -499,13 +499,13 @@ tun_setip(const char *ip, const char *other_ip, int netbits)
/* Set device as connected */ /* Set device as connected */
fprintf(stderr, "Enabling interface '%s'\n", if_name); fprintf(stderr, "Enabling interface '%s'\n", if_name);
status = 1; status = 1;
r = DeviceIoControl(dev_handle, TAP_IOCTL_SET_MEDIA_STATUS, &status, r = DeviceIoControl(dev_handle, TAP_IOCTL_SET_MEDIA_STATUS, &status,
sizeof(status), &status, sizeof(status), &len, NULL); sizeof(status), &status, sizeof(status), &len, NULL);
if (!r) { if (!r) {
fprintf(stderr, "Failed to enable interface\n"); fprintf(stderr, "Failed to enable interface\n");
return -1; return -1;
} }
if (inet_aton(ip, &addr)) { if (inet_aton(ip, &addr)) {
ipdata[0] = (DWORD) addr.s_addr; /* local ip addr */ ipdata[0] = (DWORD) addr.s_addr; /* local ip addr */
ipdata[1] = net.s_addr & ipdata[0]; /* network addr */ ipdata[1] = net.s_addr & ipdata[0]; /* network addr */
@ -515,7 +515,7 @@ tun_setip(const char *ip, const char *other_ip, int netbits)
} }
/* Tell ip/networkaddr/netmask to device for arp use */ /* Tell ip/networkaddr/netmask to device for arp use */
r = DeviceIoControl(dev_handle, TAP_IOCTL_CONFIG_TUN, &ipdata, r = DeviceIoControl(dev_handle, TAP_IOCTL_CONFIG_TUN, &ipdata,
sizeof(ipdata), &ipdata, sizeof(ipdata), &len, NULL); sizeof(ipdata), &ipdata, sizeof(ipdata), &len, NULL);
if (!r) { if (!r) {
fprintf(stderr, "Failed to set interface in TUN mode\n"); fprintf(stderr, "Failed to set interface in TUN mode\n");
@ -530,18 +530,18 @@ tun_setip(const char *ip, const char *other_ip, int netbits)
#endif #endif
} }
int int
tun_setmtu(const unsigned mtu) tun_setmtu(const unsigned mtu)
{ {
#ifndef WINDOWS32 #ifndef WINDOWS32
char cmdline[512]; char cmdline[512];
if (mtu > 200 && mtu <= 1500) { if (mtu > 200 && mtu <= 1500) {
snprintf(cmdline, sizeof(cmdline), snprintf(cmdline, sizeof(cmdline),
IFCONFIGPATH "ifconfig %s mtu %u", IFCONFIGPATH "ifconfig %s mtu %u",
if_name, if_name,
mtu); mtu);
fprintf(stderr, "Setting MTU of %s to %u\n", if_name, mtu); fprintf(stderr, "Setting MTU of %s to %u\n", if_name, mtu);
return system(cmdline); return system(cmdline);
} else { } else {

View file

@ -59,7 +59,7 @@ init_users(in_addr_t my_ip, int netbits)
maxusers = (1 << (32-netbits)) - 3; /* 3: Net addr, broadcast addr, iodined addr */ maxusers = (1 << (32-netbits)) - 3; /* 3: Net addr, broadcast addr, iodined addr */
usercount = MIN(maxusers, USERS); usercount = MIN(maxusers, USERS);
users = calloc(usercount, sizeof(struct tun_user)); users = calloc(usercount, sizeof(struct tun_user));
for (i = 0; i < usercount; i++) { for (i = 0; i < usercount; i++) {
in_addr_t ip; in_addr_t ip;
@ -98,13 +98,13 @@ users_waiting_on_reply()
ret = 0; ret = 0;
for (i = 0; i < usercount; i++) { for (i = 0; i < usercount; i++) {
if (users[i].active && !users[i].disabled && if (users[i].active && !users[i].disabled &&
users[i].last_pkt + 60 > time(NULL) && users[i].last_pkt + 60 > time(NULL) &&
users[i].q.id != 0 && users[i].conn == CONN_DNS_NULL) { users[i].q.id != 0 && users[i].conn == CONN_DNS_NULL) {
ret++; ret++;
} }
} }
return ret; return ret;
} }
@ -143,8 +143,8 @@ all_users_waiting_to_send()
for (i = 0; i < usercount; i++) { for (i = 0; i < usercount; i++) {
if (users[i].active && !users[i].disabled && if (users[i].active && !users[i].disabled &&
users[i].last_pkt + 60 > now && users[i].last_pkt + 60 > now &&
((users[i].conn == CONN_RAW_UDP) || ((users[i].conn == CONN_RAW_UDP) ||
((users[i].conn == CONN_DNS_NULL) ((users[i].conn == CONN_DNS_NULL)
#ifdef OUTPACKETQ_LEN #ifdef OUTPACKETQ_LEN
&& users[i].outpacketq_filled < 1 && users[i].outpacketq_filled < 1
#else #else
@ -183,7 +183,7 @@ user_switch_codec(int userid, struct encoder *enc)
{ {
if (userid < 0 || userid >= usercount) if (userid < 0 || userid >= usercount)
return; return;
users[userid].encoder = enc; users[userid].encoder = enc;
} }
@ -195,7 +195,7 @@ user_set_conn_type(int userid, enum connection c)
if (c < 0 || c >= CONN_MAX) if (c < 0 || c >= CONN_MAX)
return; return;
users[userid].conn = c; users[userid].conn = c;
} }

View file

@ -36,12 +36,12 @@ get_resolvconf_addr()
rv = addr; rv = addr;
pclose(fp); pclose(fp);
#else #else
rv = NULL; rv = NULL;
if ((fp = fopen("/etc/resolv.conf", "r")) == NULL) if ((fp = fopen("/etc/resolv.conf", "r")) == NULL)
err(1, "/etc/resolv.conf"); err(1, "/etc/resolv.conf");
while (feof(fp) == 0) { while (feof(fp) == 0) {
fgets(buf, sizeof(buf), fp); fgets(buf, sizeof(buf), fp);
@ -50,7 +50,7 @@ get_resolvconf_addr()
break; break;
} }
} }
fclose(fp); fclose(fp);
#endif #endif
#else /* !WINDOWS32 */ #else /* !WINDOWS32 */

View file

@ -13,9 +13,9 @@ all: $(TEST)
$(TEST): $(OBJS) $(SRCOBJS) $(TEST): $(OBJS) $(SRCOBJS)
@echo LD $(TEST) @echo LD $(TEST)
@$(CC) -o $@ $(SRCOBJS) $(OBJS) $(LDFLAGS) @$(CC) -o $@ $(SRCOBJS) $(OBJS) $(LDFLAGS)
.c.o: .c.o:
@echo CC $< @echo CC $<
@$(CC) $(CFLAGS) -c $< @$(CC) $(CFLAGS) -c $<

View file

@ -63,7 +63,7 @@ START_TEST(test_base32_decode)
char buf[4096]; char buf[4096];
struct encoder *b32; struct encoder *b32;
int val; int val;
b32 = get_base32_encoder(); b32 = get_base32_encoder();
len = sizeof(buf); len = sizeof(buf);
@ -81,7 +81,7 @@ START_TEST(test_base32_5to8_8to5)
int c; int c;
for (i = 0; i < 32; i++) { for (i = 0; i < 32; i++) {
c = b32_5to8(i); c = b32_5to8(i);
fail_unless(b32_8to5(c) == i); fail_unless(b32_8to5(c) == i);
} }
} }

View file

@ -85,7 +85,7 @@ START_TEST(test_build_hostname)
} }
buflen = sizeof(buf); buflen = sizeof(buf);
for (i = 1; i < sizeof(data); i++) { for (i = 1; i < sizeof(data); i++) {
int len = build_hostname(buf, buflen, data, i, topdomain, get_base32_encoder(), sizeof(buf)); int len = build_hostname(buf, buflen, data, i, topdomain, get_base32_encoder(), sizeof(buf));

View file

@ -28,7 +28,7 @@ START_TEST(test_fw_query_simple)
q.id = 0x848A; q.id = 0x848A;
fw_query_init(); fw_query_init();
/* Test empty cache */ /* Test empty cache */
fw_query_get(0x848A, &qp); fw_query_get(0x848A, &qp);
fail_unless(qp == NULL); fail_unless(qp == NULL);
@ -49,7 +49,7 @@ START_TEST(test_fw_query_edge)
int i; int i;
fw_query_init(); fw_query_init();
q.addrlen = 33; q.addrlen = 33;
q.id = 0x848A; q.id = 0x848A;
fw_query_put(&q); fw_query_put(&q);
@ -64,7 +64,7 @@ START_TEST(test_fw_query_edge)
fw_query_get(0x848A, &qp); fw_query_get(0x848A, &qp);
fail_unless(qp->addrlen == 33); fail_unless(qp->addrlen == 33);
fail_unless(qp->id == 0x848A); fail_unless(qp->id == 0x848A);
q.addrlen++; q.addrlen++;
q.id++; q.id++;
fw_query_put(&q); fw_query_put(&q);

View file

@ -29,11 +29,11 @@ TCase *test_user_create_tests();
TCase *test_fw_query_create_tests(); TCase *test_fw_query_create_tests();
char *va_str(const char *, ...); char *va_str(const char *, ...);
#if (CHECK_MAJOR_VERSION == 0 && \ #if (CHECK_MAJOR_VERSION == 0 && \
((CHECK_MINOR_VERSION == 9 && CHECK_MICRO_VERSION < 2) || \ ((CHECK_MINOR_VERSION == 9 && CHECK_MICRO_VERSION < 2) || \
(CHECK_MINOR_VERSION < 9))) (CHECK_MINOR_VERSION < 9)))
#define tcase_set_timeout(...) #define tcase_set_timeout(...)
#endif #endif
#endif #endif

View file

@ -62,12 +62,12 @@ START_TEST(test_users_waiting)
fail_unless(users_waiting_on_reply() == 0); fail_unless(users_waiting_on_reply() == 0);
users[3].last_pkt = time(NULL); users[3].last_pkt = time(NULL);
fail_unless(users_waiting_on_reply() == 0); fail_unless(users_waiting_on_reply() == 0);
users[3].conn = CONN_DNS_NULL; users[3].conn = CONN_DNS_NULL;
users[3].q.id = 1; users[3].q.id = 1;
fail_unless(users_waiting_on_reply() == 1); fail_unless(users_waiting_on_reply() == 1);
} }
END_TEST END_TEST
@ -83,17 +83,17 @@ START_TEST(test_find_user_by_ip)
testip = (unsigned int) inet_addr("10.0.0.1"); testip = (unsigned int) inet_addr("10.0.0.1");
fail_unless(find_user_by_ip(testip) == -1); fail_unless(find_user_by_ip(testip) == -1);
testip = (unsigned int) inet_addr("127.0.0.2"); testip = (unsigned int) inet_addr("127.0.0.2");
fail_unless(find_user_by_ip(testip) == -1); fail_unless(find_user_by_ip(testip) == -1);
users[0].active = 1; users[0].active = 1;
testip = (unsigned int) inet_addr("127.0.0.2"); testip = (unsigned int) inet_addr("127.0.0.2");
fail_unless(find_user_by_ip(testip) == -1); fail_unless(find_user_by_ip(testip) == -1);
users[0].last_pkt = time(NULL); users[0].last_pkt = time(NULL);
testip = (unsigned int) inet_addr("127.0.0.2"); testip = (unsigned int) inet_addr("127.0.0.2");
fail_unless(find_user_by_ip(testip) == 0); fail_unless(find_user_by_ip(testip) == 0);
} }
@ -107,15 +107,15 @@ START_TEST(test_all_users_waiting_to_send)
init_users(ip, 27); init_users(ip, 27);
fail_unless(all_users_waiting_to_send() == 1); fail_unless(all_users_waiting_to_send() == 1);
users[0].conn = CONN_DNS_NULL; users[0].conn = CONN_DNS_NULL;
users[0].active = 1; users[0].active = 1;
fail_unless(all_users_waiting_to_send() == 1); fail_unless(all_users_waiting_to_send() == 1);
users[0].last_pkt = time(NULL); users[0].last_pkt = time(NULL);
users[0].outpacket.len = 0; users[0].outpacket.len = 0;
fail_unless(all_users_waiting_to_send() == 0); fail_unless(all_users_waiting_to_send() == 0);
#ifdef OUTPACKETQ_LEN #ifdef OUTPACKETQ_LEN
@ -123,7 +123,7 @@ START_TEST(test_all_users_waiting_to_send)
#else #else
users[0].outpacket.len = 44; users[0].outpacket.len = 44;
#endif #endif
fail_unless(all_users_waiting_to_send() == 1); fail_unless(all_users_waiting_to_send() == 1);
} }
END_TEST END_TEST
@ -150,7 +150,7 @@ START_TEST(test_find_available_user)
fail_unless(find_available_user() == -1); fail_unless(find_available_user() == -1);
users[3].last_pkt = 55; users[3].last_pkt = 55;
fail_unless(find_available_user() == 3); fail_unless(find_available_user() == 3);
fail_unless(find_available_user() == -1); fail_unless(find_available_user() == -1);
} }
@ -178,7 +178,7 @@ START_TEST(test_find_available_user_small_net)
fail_unless(find_available_user() == -1); fail_unless(find_available_user() == -1);
users[3].last_pkt = 55; users[3].last_pkt = 55;
fail_unless(find_available_user() == 3); fail_unless(find_available_user() == 3);
fail_unless(find_available_user() == -1); fail_unless(find_available_user() == -1);
} }