Add support for openbsd routing domain, #95

This commit is contained in:
Laurent Ghigonis 2010-11-25 18:07:59 +00:00 committed by Erik Ekman
parent cf40787371
commit 312e228b1b
5 changed files with 25 additions and 1 deletions

View file

@ -33,6 +33,8 @@ CHANGES:
- Fix DNS tunneling bug caused by uninitialized variable, #94
- Handle spaces when entering password interactively, fixes #93.
Patch by Hagar.
- Add -R option to set OpenBSD routing domain for the DNS socket.
Patch by laurent at gouloum fr, fixes #95.
2009-06-01: 0.5.2 "WifiFree"
- Fixed client segfault on OS X, #57

View file

@ -17,6 +17,8 @@ iodine, iodined \- tunnel IPv4 over DNS
.I chrootdir
.B ] [-d
.I device
.B ] [-R
.I rdomain
.B ] [-m
.I fragsize
.B ] [-M
@ -129,6 +131,9 @@ Skip raw UDP mode. If not used, iodine will try getting the public IP address
of the iodined host and test if it is reachable directly. If it is, traffic
will be sent to the server instead of the DNS relay.
.TP
.B -R rdomain
Use OpenBSD routing domain 'rdomain' for the DNS connection.
.TP
.B -m fragsize
Force maximum downstream fragment size. Not setting this will cause the
client to automatically probe the maximum accepted downstream fragment size.

View file

@ -132,6 +132,7 @@ main(int argc, char **argv)
int lazymode;
int selecttimeout;
int hostname_maxlen;
int rtable = 0;
nameserv_addr = NULL;
topdomain = NULL;
@ -170,7 +171,7 @@ main(int argc, char **argv)
__progname++;
#endif
while ((choice = getopt(argc, argv, "vfhru:t:d:P:m:M:F:T:O:L:I:")) != -1) {
while ((choice = getopt(argc, argv, "vfhru:t:d:R:P:m:M:F:T:O:L:I:")) != -1) {
switch(choice) {
case 'v':
version();
@ -194,6 +195,9 @@ main(int argc, char **argv)
case 'd':
device = optarg;
break;
case 'R':
rtable = atoi(optarg);
break;
case 'P':
strncpy(password, optarg, sizeof(password));
password[sizeof(password)-1] = 0;
@ -321,6 +325,10 @@ main(int argc, char **argv)
retval = 1;
goto cleanup2;
}
#ifdef OPENBSD
if (rtable > 0)
socket_setrtable(dns_fd, rtable);
#endif
signal(SIGINT, sighandler);
signal(SIGTERM, sighandler);

View file

@ -67,3 +67,11 @@ get_resolvconf_addr()
return rv;
}
#ifdef OPENBSD
void
socket_setrtable(int fd, int rtable)
{
if (setsockopt (fd, IPPROTO_IP, SO_RTABLE, &rtable, sizeof(rtable)) == -1)
err(1, "Failed to set routing table %d", rtable);
}
#endif

View file

@ -2,5 +2,6 @@
#define __UTIL_H__
char *get_resolvconf_addr();
void socket_setrtable(int fd, int rtable);
#endif