diff options
Diffstat (limited to 'net-misc/nstx')
-rw-r--r-- | net-misc/nstx/ChangeLog | 15 | ||||
-rw-r--r-- | net-misc/nstx/Manifest | 13 | ||||
-rw-r--r-- | net-misc/nstx/files/nstx-1.1_beta6_00-linux-tuntap.patch | 465 | ||||
-rw-r--r-- | net-misc/nstx/files/nstx-1.1_beta6_01-bind-interface-name.patch | 134 | ||||
-rw-r--r-- | net-misc/nstx/files/nstx-1.1_beta6_02-warn-on-frag.patch | 22 | ||||
-rw-r--r-- | net-misc/nstx/files/nstx-1.1_beta6_03-delete-dwrite.patch | 18 | ||||
-rw-r--r-- | net-misc/nstx/files/nstx-1.1_beta6_04-delete-werror.patch | 9 | ||||
-rw-r--r-- | net-misc/nstx/files/nstxcd.conf | 46 | ||||
-rw-r--r-- | net-misc/nstx/files/nstxcd.init | 104 | ||||
-rw-r--r-- | net-misc/nstx/files/nstxd.conf | 35 | ||||
-rw-r--r-- | net-misc/nstx/files/nstxd.init | 95 | ||||
-rw-r--r-- | net-misc/nstx/nstx-1.1_beta6-r3.ebuild | 56 |
12 files changed, 1010 insertions, 2 deletions
diff --git a/net-misc/nstx/ChangeLog b/net-misc/nstx/ChangeLog index 6d24132f43eb..d26fc7faa4d2 100644 --- a/net-misc/nstx/ChangeLog +++ b/net-misc/nstx/ChangeLog @@ -1,6 +1,19 @@ # ChangeLog for net-misc/nstx # Copyright 1999-2009 Gentoo Foundation; Distributed under the GPL v2 -# $Header: /var/cvsroot/gentoo-x86/net-misc/nstx/ChangeLog,v 1.8 2009/09/23 19:42:03 patrick Exp $ +# $Header: /var/cvsroot/gentoo-x86/net-misc/nstx/ChangeLog,v 1.9 2009/12/06 19:37:39 robbat2 Exp $ + +*nstx-1.1_beta6-r3 (06 Dec 2009) + + 06 Dec 2009; Robin H. Johnson <robbat2@gentoo.org> + +nstx-1.1_beta6-r3.ebuild, +files/nstx-1.1_beta6_00-linux-tuntap.patch, + +files/nstx-1.1_beta6_01-bind-interface-name.patch, + +files/nstx-1.1_beta6_02-warn-on-frag.patch, + +files/nstx-1.1_beta6_03-delete-dwrite.patch, + +files/nstx-1.1_beta6_04-delete-werror.patch, +files/nstxcd.conf, + +files/nstxcd.init, +files/nstxd.conf, +files/nstxd.init: + Bug #262765, #260925, #156491: Submission by Steve Brudenell + <steven.brudenell@gmail.com> that fixes outstanding bugs and adds init + scripts. 23 Sep 2009; Patrick Lauer <patrick@gentoo.org> nstx-1.1_beta6-r2.ebuild: Remove virtual/libc diff --git a/net-misc/nstx/Manifest b/net-misc/nstx/Manifest index a672c29b2da9..0406ad25a8ec 100644 --- a/net-misc/nstx/Manifest +++ b/net-misc/nstx/Manifest @@ -1,5 +1,16 @@ +AUX nstx-1.1_beta6_00-linux-tuntap.patch 13121 RMD160 24efa0524424136aafd9279636ade5f48a556ccc SHA1 560b1cfc8dfdbd792a7b5dfcb17cd8c7e2feea97 SHA256 8364704e63fc1ce6c0d4f2b88ec25d6d4b5484d0316dd3fd1ae69b9753a8c2d4 +AUX nstx-1.1_beta6_01-bind-interface-name.patch 4226 RMD160 34dcf9f47060a6ebdb0fa1c6d68f19540ab88754 SHA1 216652853f32d3ba4efb62fe2b666483152d8bd5 SHA256 1b2927fedb57314b5581db1f8cec837dc05eff5e3a0bd79769224c17667e80f7 +AUX nstx-1.1_beta6_02-warn-on-frag.patch 736 RMD160 466cbaf1034ac998934bcd003e86c723bcac1968 SHA1 095593ab35835e13a09d8b5bcc70c3dda1bf057e SHA256 278b1399afa22d2077650db3bb877a19bf56fe75f53f87b3104c6a04af7a9484 +AUX nstx-1.1_beta6_03-delete-dwrite.patch 508 RMD160 13e68edf37c5b976a04d44eab81f6f4b4788b80c SHA1 50cb6328d607e38ac80e105c0fe4dbff9a25f592 SHA256 77165b0575a72c054cb43d4133a11d6a555e685e4e4775c2baed25871d5f6acd +AUX nstx-1.1_beta6_04-delete-werror.patch 433 RMD160 2a74a19537ac54d6da8fe3affd948fb339ef7aaf SHA1 48c47127337ec8ba813450cfda9043f66275cc43 SHA256 362f07ae993e9480669673493055cfac4428a1fbe12e4ba88855794db5bf0a3e +AUX nstxcd.conf 2237 RMD160 864b340701eaa3ef30fe597439daeb36a6926d0a SHA1 394c3b183b8a4cf95dbd7adad01ab3d8c5220ec0 SHA256 b5db1816444f44899820119fa7cb05bbea0b0c2d41f0151dd7c1afbaae78c089 +AUX nstxcd.init 2444 RMD160 fbad89e8a045a9bab1b8525755c1dab24e58d2c0 SHA1 76f9c8e48ee250ddccbab8dbf716342500747ddd SHA256 0ff59f3b6c9f63057470f061660389d619cefd224a68f95e00a15be7e81cbc02 +AUX nstxd.conf 1377 RMD160 e7222ab1a736fa4ab918c4ab51e6500724eb7d9b SHA1 e716962bf806b9bf02c1d6803b9b7d1570a9e8dc SHA256 eed0298b1a7866a3f9ef2469467b8e18156464b0de9906fc9815bce0ebe6fea0 +AUX nstxd.init 2392 RMD160 364f69d0922893d62745024c6074377e3f51d129 SHA1 7fe5223b5ef5eb7daa2e64171fef6d03d754c3ea SHA256 b5c27e13a0c3981f61d75ccdb417f8fa3cca8cd1d717aee9318f89fd46caef03 DIST nstx-1.1-beta6.tgz 20458 RMD160 1392d7f96c9668cc40b65fa30cbaf8cf1b64feb2 SHA1 82d339f499c6e625708371f5f729b7f7bf38a6a0 SHA256 57a1962a66e9cb64fe70839d852c56cd253092260eab589a8173740b75b21450 DIST nstx_1.1-beta6-4.diff.gz 7743 RMD160 dc4d153ee5c38b3813e1612fecf079683b72e8e0 SHA1 a80cbdfa2b0f8e21d43467a974bb64ffe76fcb32 SHA256 f2fc046cc08831599f2a95c874b7a028238c73e1f2cd4964ee86aa4c4307b8a8 +DIST nstx_1.1-beta6-5.diff.gz 10063 RMD160 746dd30e12bf5a74411b6a3b832e9e772382de3e SHA1 5973bca267d0e273b1c7aa159e88ac552676d2f3 SHA256 ee301d0bee2a3e44f576a6c8cf1534878264f6d79a489eae5ca7237262cd0d32 EBUILD nstx-1.1_beta6-r2.ebuild 1036 RMD160 f710b69fba7e7d92aafcf3b6250da751c92bc2aa SHA1 987e3b7b8b5a6004a9a17aead27877dd38a90832 SHA256 78e602619c55ef8203cce54ce5158127c8cb5d9b04d357123819937a41299b95 -MISC ChangeLog 1439 RMD160 90f831d7ebf2b0aa577607575c688b4a0d0259c2 SHA1 b956e18075917489c063134cfb60b82d1fadb380 SHA256 d626cba02615ffc9444adb63c41bd31e927e0ea455a43e441d51971e7fbbc106 +EBUILD nstx-1.1_beta6-r3.ebuild 1563 RMD160 20d80b00483e5326736fd0840f1257aac9700cca SHA1 293f2496b36d8c88eba224909d855ca3353b124d SHA256 31630334add8dfd25b9a5d94030b0e0e614dfad7cfab4b51ee6b3acd4bbc77c5 +MISC ChangeLog 2025 RMD160 0ef1ef84017b660b2e2671c176e47bc18de10f07 SHA1 0e506eff7fc3209345186ca27a892e68af40deb1 SHA256 4b32abd4cdc0970e69d3dff299ab8be43f0553678c02695a02364d7a7c950a91 MISC metadata.xml 223 RMD160 ffa99612cf27469c417944deed0e0c9155e64331 SHA1 607c637402dd253406aa6ee684471a702c5d1a99 SHA256 d6bb9ba68629616062b4433ab3b8fb01dfcafae5bb47804d9e06cdd6c66daa44 diff --git a/net-misc/nstx/files/nstx-1.1_beta6_00-linux-tuntap.patch b/net-misc/nstx/files/nstx-1.1_beta6_00-linux-tuntap.patch new file mode 100644 index 000000000000..524fd705a86e --- /dev/null +++ b/net-misc/nstx/files/nstx-1.1_beta6_00-linux-tuntap.patch @@ -0,0 +1,465 @@ +diff -ru nstx-1.1-beta6.orig/nstx_tuntap.c nstx-1.1-beta6/nstx_tuntap.c +--- nstx-1.1-beta6.orig/nstx_tuntap.c 2009-03-16 05:31:24.000000000 +0000 ++++ nstx-1.1-beta6/nstx_tuntap.c 2009-03-16 22:45:28.000000000 +0000 +@@ -19,13 +19,15 @@ + + #ifdef linux + #include <linux/if_tun.h> +-#define TUNDEV "/dev/net/tun" ++#define TUNINT "tun0" ++#define TUNDEVNODE "/dev/net/tun" + #else + # include <net/if_tun.h> ++# define TUNINT "NULL?" + # if __FreeBSD_version < 500000 +-# define TUNDEV "/dev/tun2" ++# define TUNDEVNODE "/dev/tun2" + # else +-# define TUNDEV "/dev/tun" ++# define TUNDEVNODE "/dev/tun" + # endif + #endif + +@@ -33,127 +35,135 @@ + + #define MAXPKT 2000 + +-#define TAPDEV "/dev/tap0" ++#define TAPINT "tap0" ++#define TAPDEVNODE "/dev/net/tun" + + int tfd = -1, nfd = -1; + static char dev[IFNAMSIZ+1]; + +-static int tun_alloc (const char *path); ++static int tun_alloc (const char * interface, const char * device_node); ++static int tap_alloc (const char * interface, const char * device_node); ++ + #ifdef linux +-static int tap_alloc (const char *path); ++static int tuntap_alloc_linux(const char * interface, const char * device_node, ++ int mode); ++#else ++static int tun_alloc_bsd(const char * interface, const char * device_node); + #endif + + void +-open_tuntap(const char *device) ++open_tuntap(const char * interface, const char * device_node, int tun) + { +- int tunerr; +-#ifdef linux +- int taperr; +-#endif ++ int err; ++ ++ if (!interface) ++ interface = (tun ? TUNINT : TAPINT); ++ ++ if (!device_node) ++ device_node = (tun ? TUNDEVNODE : TAPDEVNODE); ++ ++ fprintf(stderr, "Opening %s interface %s at %s... ", tun ? "tun" : "tap", ++ interface, device_node); ++ ++ err = (tun ? tun_alloc(interface, device_node) : tap_alloc(interface, ++ device_node)); ++ ++ if (!err) { ++ fprintf(stderr, "using interface %s\n", dev); ++ ++ if (tun) ++ fprintf(stderr, "you will now need to assign an ip and routing to " ++ "this interface\n"); ++ else ++ fprintf(stderr, "you will now need to add bridging or other rules " ++ "to this interface\n"); ++ return; ++ } + +- fprintf(stderr, "Opening tun/tap-device... "); +- if ((tunerr = tun_alloc(device ? device : TUNDEV)) ++ fprintf(stderr, "failed! (%s)\n", strerror(err)); ++ ++ fprintf(stderr, "Diagnostics: "); ++ ++ if (err == EPERM) ++ fprintf(stderr, "you usually have to be root to use nstx.\n"); ++ else if (err == ENOENT) ++ fprintf(stderr, "maybe you need kernel support -- did you modprobe " ++ "tap?\n"); ++ else if (err == ENODEV) ++ fprintf(stderr, "maybe you need kernel support -- did you modprobe " ++ "tap?\n"); + #ifdef linux +- && (taperr = tap_alloc(device ? device : TAPDEV)) ++#else ++ else if ((err == EINVAL) && !tun) ++ fprintf(stderr, "tap support is only available under linux\n"); + #endif +- ) { +- fprintf(stderr, "failed!\n" +- "Diagnostics:\nTun ("TUNDEV"): "); +- switch (tunerr) { +- case EPERM: +- fprintf(stderr, "Permission denied. You usually have to " +- "be root to use nstx.\n"); +- break; +- case ENOENT: +- fprintf(stderr, TUNDEV " not found. Please create /dev/net/ and\n" +- " mknod /dev/net/tun c 10 200 to use the tun-device\n"); +- break; +- case ENODEV: +- fprintf(stderr, "Device not available. Make sure you have " +- "kernel-support\n for the tun-device. Under linux, you " +- "need tun.o (Universal tun/tap-device)\n"); +- break; +- default: +- perror("Unexpected error"); +- break; +- } +- fprintf(stderr, "Tap ("TAPDEV"):\n(only available under linux)\n"); ++ else ++ fprintf(stderr, "none, sorry\n"); ++ ++ exit(EXIT_FAILURE); ++} ++ ++int tun_alloc(const char * interface, const char * device_node) ++{ + #ifdef linux +- switch (taperr) { +- case EPERM: +- fprintf(stderr, "Permission denied. You generally have to " +- "be root to use nstx.\n"); +- break; +- case ENOENT: +- fprintf(stderr, TAPDEV " not found. Please\n" +- " mknod /dev/tap0 c 36 16 to use the tap-device\n"); +- break; +- case ENODEV: +- fprintf(stderr, "Device not available. Make sure you have kernel-support\n" +- " for the tap-device. Under linux, you need netlink_dev.o and ethertap.o\n"); +- break; +- default: +- fprintf(stderr, "Unexpected error: %s\n", strerror(taperr)); +- break; +- } ++ return tuntap_alloc_linux(interface, device_node, IFF_TUN); ++#else ++ return tun_alloc_bsd(interface, device_node); + #endif +- exit(EXIT_FAILURE); +- } +- +- fprintf(stderr, "using device %s\n" +- "Please configure this device appropriately (IP, routes, etc.)\n", dev); + } + +-int +-tun_alloc (const char *path) ++int tap_alloc(const char * interface, const char * device_node) + { + #ifdef linux +- struct ifreq ifr; ++ return tuntap_alloc_linux(interface, device_node, IFF_TAP); + #else +- struct stat st; ++ return EINVAL; + #endif +- +- if ((tfd = open(path, O_RDWR)) < 0) +- return errno; ++} + + #ifdef linux +- memset(&ifr, 0, sizeof(ifr)); ++ ++int tuntap_alloc_linux(const char * interface, const char * device_node, ++ int mode) ++{ ++ struct ifreq ifr; ++ ++ if ((tfd = open(device_node, O_RDWR)) < 0) ++ return errno; ++ ++ memset(&ifr, 0, sizeof(ifr)); + +- ifr.ifr_flags = IFF_TUN|IFF_NO_PI; ++ ifr.ifr_flags = mode | IFF_NO_PI; ++ strncpy(ifr.ifr_name, interface, sizeof(ifr.ifr_name)); ++ ifr.ifr_name[sizeof(ifr.ifr_name) - 1] = 0; + +- if (ioctl(tfd, TUNSETIFF, (void *) &ifr) < 0) +- { +- close(tfd); +- tfd = -1; +- return errno; +- } +- strncpy(dev, ifr.ifr_name, IFNAMSIZ+1); +-#else +- fstat(tfd, &st); +- strncpy(dev, devname(st.st_rdev, S_IFCHR), IFNAMSIZ+1); +-#endif ++ if (ioctl(tfd, TUNSETIFF, (void *) &ifr) < 0) { ++ close(tfd); ++ tfd = -1; ++ return errno; ++ } ++ ++ strncpy(dev, ifr.ifr_name, IFNAMSIZ+1); + +- return 0; ++ return 0; + } + ++#else /* bsd */ + +-#ifdef linux +-int +-tap_alloc(const char *path) ++int tun_alloc_bsd(const char * interface, const char * device_node) + { +- char *ptr; +- +- if ((tfd = open(path, O_RDWR)) < 0) ++ struct stat st; ++ ++ if ((tfd = open(device_node, O_RDWR)) < 0) + return errno; +- +- if ((ptr = strrchr(path, '/'))) +- strncpy(dev, ptr+1, IFNAMSIZ+1); +- else +- strncpy(dev, path, IFNAMSIZ+1); ++ ++ fstat(tfd, &st); ++ strncpy(dev, devname(st.st_rdev, S_IFCHR), IFNAMSIZ+1); + + return 0; + } +-#endif ++ ++#endif /* linux/bsd */ + + void + open_ns(const char *ip) +diff -ru nstx-1.1-beta6.orig/nstxcd.8 nstx-1.1-beta6/nstxcd.8 +--- nstx-1.1-beta6.orig/nstxcd.8 2009-03-16 05:31:24.000000000 +0000 ++++ nstx-1.1-beta6/nstxcd.8 2009-03-16 23:16:21.000000000 +0000 +@@ -3,7 +3,7 @@ + nstxcd \- IP over DNS tunneling client + + .SH SYNOPSIS +-.B "nstxcd \fIDOMAIN\fR \fIIPADDRESS\fR" ++.B "nstxcd \fIOPTIONS\fR \fIDOMAIN\fR \fIIPADDRESS\fR" + + .SH DESCRIPTION + .B nstxcd +@@ -13,6 +13,14 @@ + .SH OPTIONS + .B nstxcd + takes the following options: ++.IP \-I tun/tap interface ++Use this tun/tap interface instead of the default (tun0/tap0) ++.IP \-d tun/tap device node ++Use this tun/tap device node instead of the default (/dev/net/tun on Linux) ++.IP \-t ++Tun mode (default) ++.IP \-T ++Tap mode + .IP "domain" + The domain that nstxcd will send requests to. This domain must be delegated + to a machine that is running nstxd. +@@ -22,9 +30,9 @@ + .SH USAGE + .Bnstxcd + should be run against a domain that has been delegated to a machine running +-nstxd. It will then take any packets that are sent to the tun0 interface and +-send them over DNS to the other tunnel endpoint. Responses will appear on +-the tun0 interface. ++nstxd. It will then take any packets that are sent to the tun/tap interface and ++send them over DNS to the other tunnel endpoint. Responses will appear on the ++tun/tap interface. + + .SH AUTHORS + +diff -ru nstx-1.1-beta6.orig/nstxcd.c nstx-1.1-beta6/nstxcd.c +--- nstx-1.1-beta6.orig/nstxcd.c 2009-03-16 05:31:24.000000000 +0000 ++++ nstx-1.1-beta6/nstxcd.c 2009-03-16 23:16:07.000000000 +0000 +@@ -55,25 +55,44 @@ + static void + usage(const char *prog, int code) + { +- fprintf(stderr, "Usage: %s [-d tun-device] <domainname> <dns-server>\n" +- "Example: %s tun.yomama.com 125.23.53.12\n", prog, prog); ++ fprintf(stderr, "Usage: %s [options] <domainname> <dns-server>\n" ++ "Where options are:\n" ++ "\t-d path (use this tun/tap device node instead of default)\n" ++ "\t-I interface (use this tun/tap interface instead of default)\n" ++#ifdef linux ++ "\t-t (tun mode, default)\n" ++ "\t-T (tap mode)\n" ++#endif ++ "example:\n" ++ "%s tun.yomama.com 125.23.53.12\n", prog, prog); + exit(code); + } + + int main (int argc, char * argv[]) { + struct nstxmsg *msg; +- const char *device = NULL; ++ const char *interface = NULL; ++ const char *device_node = NULL; + int ch; ++ int tun = 1; + + nsid = time(NULL); + + if (argc < 3) + usage(argv[0], EX_USAGE); + +- while ((ch = getopt(argc, argv, "hd:")) != -1) { ++ while ((ch = getopt(argc, argv, "hd:I:tT")) != -1) { + switch (ch) { ++ case 'I': ++ interface = optarg; ++ break; + case 'd': +- device = optarg; ++ device_node = optarg; ++ break; ++ case 't': ++ tun = 1; ++ break; ++ case 'T': ++ tun = 0; + break; + case 'h': + usage(argv[0], 0); +@@ -85,7 +104,7 @@ + dns_setsuffix(argv[optind]); + + qsettimeout(10); +- open_tuntap(device); ++ open_tuntap(interface, device_node, tun); + open_ns(argv[optind + 1]); + + for (;;) { +diff -ru nstx-1.1-beta6.orig/nstxd.8 nstx-1.1-beta6/nstxd.8 +--- nstx-1.1-beta6.orig/nstxd.8 2009-03-16 05:31:24.000000000 +0000 ++++ nstx-1.1-beta6/nstxd.8 2009-03-16 23:16:32.000000000 +0000 +@@ -3,7 +3,7 @@ + nstxd \- IP over DNS tunneling daemon + + .SH SYNOPSIS +-.B "nstxd \fIOPTION\fR \fIDOMAIN\fR" ++.B "nstxd \fIOPTIONS\fR \fIDOMAIN\fR" + + .SH DESCRIPTION + .B nstxd +@@ -14,8 +14,14 @@ + .SH OPTIONS + .B nstxd + takes the following option: +-.IP \-d tun-device +-Use this tun device instead of tun0 ++.IP \-I tun/tap interface ++Use this tun/tap interface instead of the default (tun0/tap0) ++.IP \-d tun/tap device node ++Use this tun/tap device node instead of the default (/dev/net/tun on linux) ++.IP \-t ++Tun mode (default) ++.IP \-T ++Tap mode + .IP \-i ipaddr + Bind to this IP address rather than every available address + .IP \-C dir +@@ -33,9 +39,9 @@ + .SH USAGE + A domain should be delegated to the machine that will run nstxd. nstxd should + then be run giving that domain as the only argument. nstxd will then listen +-for requests and translate them into IP packets that will appear on the tun0 +-interface. Packets sent to the tun0 interface will be transferred back to +-the client as DNS answers. ++for requests and translate them into IP packets that will appear on the given ++tun/tap interface. Packets sent to the tun/tap interface will be transferred ++back to the client as DNS answers. + + .SH AUTHORS + +diff -ru nstx-1.1-beta6.orig/nstxd.c nstx-1.1-beta6/nstxd.c +--- nstx-1.1-beta6.orig/nstxd.c 2009-03-16 05:31:24.000000000 +0000 ++++ nstx-1.1-beta6/nstxd.c 2009-03-16 23:15:30.000000000 +0000 +@@ -55,7 +55,12 @@ + { + fprintf (stderr, "usage: %s [options] <domainname>\n" + "Where options are:\n" +- "\t-d tun-device (use this tun/tap device instead of default\n" ++ "\t-d path (use this tun/tap device node instead of default)\n" ++ "\t-I interface (use this tun/tap interface instead of default)\n" ++#ifdef linux ++ "\t-t (tun mode, default)\n" ++ "\t-T (tap mode)\n" ++#endif + "\t-i ip.to.bi.nd (bind to port 53 on this IP only)\n" + "\t-C dir (chroot() to this directory after initialization)\n" + "\t-D (call daemon(3) to detach from terminal)\n" +@@ -68,13 +73,15 @@ + + int main (int argc, char *argv[]) { + signed char ch; +- const char *device = NULL, *dir = NULL; ++ const char *interface = NULL, *dir = NULL; ++ const char *device_node = NULL; + in_addr_t bindto = INADDR_ANY; + uid_t uid = 0; + int daemonize = 0; + int logmask = LOG_UPTO(LOG_INFO); ++ int tun = 1; + +- while ((ch = getopt(argc, argv, "gDC:u:hd:i:")) != -1) { ++ while ((ch = getopt(argc, argv, "gDC:u:hd:I:i:tT")) != -1) { + switch(ch) { + case 'i': + bindto = inet_addr(optarg); +@@ -84,8 +91,17 @@ + exit(EX_USAGE); + } + break; ++ case 'I': ++ interface = optarg; ++ break; + case 'd': +- device = optarg; ++ device_node = optarg; ++ break; ++ case 't': ++ tun = 1; ++ break; ++ case 'T': ++ tun = 0; + break; + case 'D': + daemonize = 1; +@@ -121,7 +137,7 @@ + + dns_setsuffix(argv[optind]); + +- open_tuntap(device); ++ open_tuntap(interface, device_node, tun); + open_ns_bind(bindto); + + if (dir) { +diff -ru nstx-1.1-beta6.orig/nstxfun.h nstx-1.1-beta6/nstxfun.h +--- nstx-1.1-beta6.orig/nstxfun.h 2009-03-16 05:31:24.000000000 +0000 ++++ nstx-1.1-beta6/nstxfun.h 2009-03-16 22:40:44.000000000 +0000 +@@ -52,7 +52,7 @@ + + /* DNS */ + +-void open_tuntap (const char *device); ++void open_tuntap (const char * interface, const char * device_node, int tun); + void open_ns (const char *ip); + void open_ns_bind(in_addr_t ip); + diff --git a/net-misc/nstx/files/nstx-1.1_beta6_01-bind-interface-name.patch b/net-misc/nstx/files/nstx-1.1_beta6_01-bind-interface-name.patch new file mode 100644 index 000000000000..0d65f0f6d68b --- /dev/null +++ b/net-misc/nstx/files/nstx-1.1_beta6_01-bind-interface-name.patch @@ -0,0 +1,134 @@ +diff -ru nstx-1.1-beta6.tuntap/Makefile nstx-1.1-beta6/Makefile +--- nstx-1.1-beta6.tuntap/Makefile 2009-03-16 23:22:11.000000000 +0000 ++++ nstx-1.1-beta6/Makefile 2009-03-16 23:27:09.000000000 +0000 +@@ -1,9 +1,9 @@ + CFLAGS += -ggdb -Wall -Werror -Wsign-compare + +-NSTXD_SRCS = nstxd.c nstx_encode.c nstx_pstack.c nstx_dns.c nstx_tuntap.c nstx_queue.c ++NSTXD_SRCS = nstxd.c nstx_encode.c nstx_pstack.c nstx_dns.c nstx_tuntap.c nstx_queue.c nstx_util.c + NSTXD_OBJS = ${NSTXD_SRCS:.c=.o} + +-NSTXCD_SRCS = nstxcd.c nstx_encode.c nstx_pstack.c nstx_dns.c nstx_tuntap.o nstx_queue.c ++NSTXCD_SRCS = nstxcd.c nstx_encode.c nstx_pstack.c nstx_dns.c nstx_tuntap.o nstx_queue.c nstx_util.c + NSTXCD_OBJS = ${NSTXCD_SRCS:.c=.o} + + PROGS = nstxd nstxcd +diff -ru nstx-1.1-beta6.tuntap/nstx_util.c nstx-1.1-beta6/nstx_util.c +--- nstx-1.1-beta6.tuntap/nstx_util.c 2004-06-27 21:43:34.000000000 +0000 ++++ nstx-1.1-beta6/nstx_util.c 2009-03-16 23:28:37.000000000 +0000 +@@ -27,6 +27,10 @@ + #include <stdio.h> + #include <sys/types.h> + #include <sys/socket.h> ++#include <net/if.h> ++#include <sys/ioctl.h> ++#include <arpa/inet.h> ++#include <errno.h> + + #include "nstxfun.h" + +@@ -48,6 +52,48 @@ + close(fd); + } + ++static int iface_addr(const char * name, in_addr_t * result) { ++ int r, s; ++ struct ifreq ifr; ++ struct sockaddr_in * sin; ++ ++ s = socket(AF_INET, SOCK_DGRAM, 0); ++ ++ if (s < 0) { ++ perror("socket"); ++ return s; ++ } ++ ++ strncpy(ifr.ifr_name, name, sizeof(ifr.ifr_name)); ++ ifr.ifr_name[sizeof(ifr.ifr_name) - 1] = 0; ++ ++ r = ioctl(s, SIOCGIFADDR, &ifr); ++ ++ if (r < 0) { ++ perror("ioctl(SIOCGIFADDR)"); ++ return r; ++ } ++ ++ sin = (struct sockaddr_in *)&ifr.ifr_addr; ++ *result = sin->sin_addr.s_addr; ++ ++ if (*result == INADDR_ANY || *result == INADDR_NONE) { ++ fprintf(stderr, "interface %s has no assigned address\n", name); ++ return -EINVAL; ++ } ++ ++ return 0; ++} ++ ++int addr_convert(const char * s, in_addr_t * result) { ++ *result = inet_addr(s); ++ ++ if (*result != INADDR_NONE) ++ return 0; ++ ++ return iface_addr(s, result); ++} ++ + #ifdef WITH_PKTDUMP + void + pktdump (const char *prefix, unsigned short id, const char *data, +diff -ru nstx-1.1-beta6.tuntap/nstxd.8 nstx-1.1-beta6/nstxd.8 +--- nstx-1.1-beta6.tuntap/nstxd.8 2009-03-16 23:23:46.000000000 +0000 ++++ nstx-1.1-beta6/nstxd.8 2009-03-16 23:29:59.000000000 +0000 +@@ -22,8 +22,8 @@ + Tun mode (default) + .IP \-T + Tap mode +-.IP \-i ipaddr +-Bind to this IP address rather than every available address ++.IP \-i ipaddr|interface ++Bind to this IP address or interface rather than every available address + .IP \-C dir + Chroot to this directory on startup + .IP \-D +diff -ru nstx-1.1-beta6.tuntap/nstxd.c nstx-1.1-beta6/nstxd.c +--- nstx-1.1-beta6.tuntap/nstxd.c 2009-03-16 23:23:46.000000000 +0000 ++++ nstx-1.1-beta6/nstxd.c 2009-03-16 23:32:45.000000000 +0000 +@@ -61,7 +61,7 @@ + "\t-t (tun mode, default)\n" + "\t-T (tap mode)\n" + #endif +- "\t-i ip.to.bi.nd (bind to port 53 on this IP only)\n" ++ "\t-i ip|interface (bind to port 53 on this IP/interface only)\n" + "\t-C dir (chroot() to this directory after initialization)\n" + "\t-D (call daemon(3) to detach from terminal)\n" + "\t-g (enable debug messages)\n" +@@ -80,14 +80,15 @@ + int daemonize = 0; + int logmask = LOG_UPTO(LOG_INFO); + int tun = 1; ++ int r; + + while ((ch = getopt(argc, argv, "gDC:u:hd:I:i:tT")) != -1) { + switch(ch) { + case 'i': +- bindto = inet_addr(optarg); +- if (bindto == INADDR_NONE) { +- fprintf(stderr, "`%s' is not an IP-address\n", +- optarg); ++ r = addr_convert(optarg, &bindto); ++ if (r < 0) { ++ fprintf(stderr, "couldn't use interface %s: %s\n", optarg, ++ strerror(-r)); + exit(EX_USAGE); + } + break; +diff -ru nstx-1.1-beta6.tuntap/nstxfun.h nstx-1.1-beta6/nstxfun.h +--- nstx-1.1-beta6.tuntap/nstxfun.h 2009-03-16 23:23:46.000000000 +0000 ++++ nstx-1.1-beta6/nstxfun.h 2009-03-16 23:28:37.000000000 +0000 +@@ -102,4 +102,6 @@ + void pktdump (const char *, unsigned short, const char *, size_t, int); + #endif + ++int addr_convert(const char *, in_addr_t *); ++ + #endif /* _NSTXHDR_H */ diff --git a/net-misc/nstx/files/nstx-1.1_beta6_02-warn-on-frag.patch b/net-misc/nstx/files/nstx-1.1_beta6_02-warn-on-frag.patch new file mode 100644 index 000000000000..251ad583150b --- /dev/null +++ b/net-misc/nstx/files/nstx-1.1_beta6_02-warn-on-frag.patch @@ -0,0 +1,22 @@ +Only in nstx-1.1-beta6.orig/: nstx_dns.o +Only in nstx-1.1-beta6.orig/: nstx_encode.o +Only in nstx-1.1-beta6.orig/: nstx_pstack.o +diff -ru nstx-1.1-beta6.orig/nstx_tuntap.c nstx-1.1-beta6/nstx_tuntap.c +--- nstx-1.1-beta6.orig/nstx_tuntap.c 2009-03-16 23:56:02.000000000 +0000 ++++ nstx-1.1-beta6/nstx_tuntap.c 2009-03-17 00:06:00.000000000 +0000 +@@ -274,7 +274,13 @@ + sendtun(const char *data, size_t len) + { + // printf("Sent len %d, csum %d\n", len, checksum(data, len)); +- write(tfd, data, len); ++ size_t w = write(tfd, data, len); ++ ++ if (w < len) { ++ fprintf(stderr, "packet was descrutively fragmented! (len=%zd, " ++ "wrote=%zd)\n", ++ len, w); ++ } + } + + void +Only in nstx-1.1-beta6.orig/: nstxd.o diff --git a/net-misc/nstx/files/nstx-1.1_beta6_03-delete-dwrite.patch b/net-misc/nstx/files/nstx-1.1_beta6_03-delete-dwrite.patch new file mode 100644 index 000000000000..e943fa106b73 --- /dev/null +++ b/net-misc/nstx/files/nstx-1.1_beta6_03-delete-dwrite.patch @@ -0,0 +1,18 @@ +diff -ru nstx-1.1-beta6.orig/nstx_util.c nstx-1.1-beta6/nstx_util.c +--- nstx-1.1-beta6.orig/nstx_util.c 2009-03-17 00:08:18.000000000 +0000 ++++ nstx-1.1-beta6/nstx_util.c 2009-03-17 00:08:37.000000000 +0000 +@@ -44,14 +44,6 @@ + return x; + } + +-void dwrite (char *path, char *buf, int len) { +- int fd; +- +- fd = open(path, O_RDWR|O_CREAT|O_TRUNC, 0600); +- write(fd, buf, len); +- close(fd); +-} +- + static int iface_addr(const char * name, in_addr_t * result) { + int r, s; + struct ifreq ifr; diff --git a/net-misc/nstx/files/nstx-1.1_beta6_04-delete-werror.patch b/net-misc/nstx/files/nstx-1.1_beta6_04-delete-werror.patch new file mode 100644 index 000000000000..35f7d0199b9d --- /dev/null +++ b/net-misc/nstx/files/nstx-1.1_beta6_04-delete-werror.patch @@ -0,0 +1,9 @@ +diff -ru nstx-1.1-beta6.orig/Makefile nstx-1.1-beta6/Makefile +--- nstx-1.1-beta6.orig/Makefile 2009-03-17 03:29:43.000000000 +0000 ++++ nstx-1.1-beta6/Makefile 2009-03-17 03:29:53.000000000 +0000 +@@ -1,4 +1,4 @@ +-CFLAGS += -ggdb -Wall -Werror -Wsign-compare ++CFLAGS += -ggdb -Wall -Wsign-compare + + NSTXD_SRCS = nstxd.c nstx_encode.c nstx_pstack.c nstx_dns.c nstx_tuntap.c nstx_queue.c nstx_util.c + NSTXD_OBJS = ${NSTXD_SRCS:.c=.o} diff --git a/net-misc/nstx/files/nstxcd.conf b/net-misc/nstx/files/nstxcd.conf new file mode 100644 index 000000000000..a04b9d09571e --- /dev/null +++ b/net-misc/nstx/files/nstxcd.conf @@ -0,0 +1,46 @@ +# /etc/conf.d/nstxcd: config file for /etc/init.d/nstxcd + +# DOMAIN is the DNS domain which will be the base for NSTX tunneling. You must +# set up this domain such that its nameserver points to this machine. For +# example, if your tunnel domain is "tunnelhere.example.com", the nameserver for +# example.com should have the following record: +# +# tunnelhere.example.com IN NS this.machine.example.com +#DOMAIN="tunnelhere.example.com" + +# Set to "TUN" for TUN (IP/layer-3) mode, or "TAP" for TAP (ethernet/layer-2) +# mode. You must use the same mode your server is using, or you will send and +# receive only garbage. +MODE="TUN" + +# This will be the virtual TUN/TAP interface created by nstxcd. If unset, +# defaults to tun0 or tap0. Note that no IP configuration will be supplied by +# nstxd -- you must do this yourself using net scripts. +#TUNTAP_INTERFACE=tun53 + +# The DNS server where nstxcd will send queries. This is not necessarily the +# same server as the one where the nstxd server is running. What constitutes a +# good choice here depends on your situation: if you can send DNS queries to an +# arbitrary address on the Internet, you could simply point straight to the +# instance of nstxd, if you know its IP address. If you don't, you might use a +# public DNS server, like one of the ones hosted by Level3 (4.2.2.1-4.2.2.6), +# although it is almost certainly better to set up your nstxd server instance +# with dynamic DNS so you can always find it. +# +# If you are constrained to sending DNS queries to a DHCP-provided server on +# your local LAN, your only choice is to point to that server. This will always +# work, but may yield limited performance relative to directly talking to nstxd +# or talking via a high-performance DNS server. +# +# If you leave DNS_SERVER unset, the init script will select the first +# nameserver from resolv.conf. This is the most fault-tolerant configuration. +#DNS_SERVER="" + +# This option contains a space-separated list of interfaces that should be up +# before we start. It's convenient to put your DHCP-facing address in here, so +# autodetection of DNS_SERVER from resolv.conf will work. +#NEED_INTERFACES="" + +# Other miscellaneous options to pass to nstxcd (man 7 nstxcd for details) +#NSTXCD_OPTS="" + diff --git a/net-misc/nstx/files/nstxcd.init b/net-misc/nstx/files/nstxcd.init new file mode 100644 index 000000000000..fad1ac801433 --- /dev/null +++ b/net-misc/nstx/files/nstxcd.init @@ -0,0 +1,104 @@ +#!/sbin/runscript +# Copyright 1999-2006 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 +# (Written by Phillip Berndt <phillip.berndt at gmail dot com>) +# (Modified by Steven Brudenell <steven dot brudenell at gmail>) +# $Header: /var/cvsroot/gentoo-x86/net-misc/nstx/files/nstxcd.init,v 1.1 2009/12/06 19:37:38 robbat2 Exp $ + +depend() { + local iface + + for iface in ${NEED_INTERFACES} ; do + need net.${iface} + done + + # If the user set TUNTAP_INTERFACE, they probably have a net script + # configuring that interface. nstxcd is responsible for actually creating + # the stupid thing, so we need to run before the config. + if [ ! -z ${TUNTAP_INTERFACE} ] ; then + if [ -x /etc/init.d/net.${TUNTAP_INTERFACE} ] ; then + before net.${TUNTAP_INTERFACE} + fi + fi +} + +loadtun() { + if [ ! -e /dev/net/tun ] + then + ebegin "Loading TUN/TAP kernel module" + modprobe -q tun + eend $? + fi + + if [ ! -e /dev/net/tun ] + then + eend 1 "Failed to load TUN driver! (did you compile your kernel with TUN/TAP support?)" + return 1 + fi + + return 0 +} + +checkconfig() { + if [ -z "${DOMAIN}" ] ; then + eerror "DOMAIN must be set" + return 1 + fi + + [ -z "${TUNTAP_INTERFACE}" ] || NSTXCD_OPTS="${NSTXCD_OPTS} -I ${TUNTAP_INTERFACE}" + [ -z "${TUNTAP_DEVICE}" ] || NSTXCD_OPTS="${NSTXCD_OPTS} -d ${TUNTAP_DEVICE}" + + case "${MODE}" in + TUN) + NSTXCD_OPTS="${NSTXCD_OPTS} -t" + ;; + TAP) + NSTXCD_OPTS="${NSTXCD_OPTS} -T" + ;; + *) + eerror "MODE must be either TUN or TAP" + return 1 + ;; + esac + + if [ -z "${DNS_SERVER}" ] ; then + DNS_SERVER=`awk '/^nameserver/{ print $2; exit; }' /etc/resolv.conf` + + if [ -z "${DNS_SERVER}" ] ; then + eerror "DNS_SERVER not set, and couldn't determine a nameserver from /etc/resolv.conf" + return 1 + fi + export DNS_SERVER + fi + + return 0 +} + +start() { + checkconfig || return 1 + + loadtun || return 1 + + ebegin "Starting nstxcd" + + start-stop-daemon \ + --start \ + --background \ + --make-pidfile \ + --exec /usr/sbin/nstxcd \ + --pidfile "/var/run/nstxcd.pid" \ + -- ${NSTXCD_OPTS} ${DOMAIN} ${DNS_SERVER} + + eend $? +} + +stop() { + ebegin "Stopping nstxcd" + + start-stop-daemon \ + --stop \ + --exec /usr/sbin/nstxcd \ + --pidfile "/var/run/nstxcd.pid" + + eend $? +} diff --git a/net-misc/nstx/files/nstxd.conf b/net-misc/nstx/files/nstxd.conf new file mode 100644 index 000000000000..4d3365a7142d --- /dev/null +++ b/net-misc/nstx/files/nstxd.conf @@ -0,0 +1,35 @@ +# /etc/conf.d/nstxd: config file for /etc/init.d/nstxd + +# DOMAIN is the DNS domain which will be the base for NSTX tunneling. You must +# set up this domain such that its nameserver points to this machine. For +# example, if your tunnel domain is "tunnelhere.example.com", the nameserver for +# example.com should have the following record: +# +# tunnelhere.example.com IN NS this.machine.example.com +#DOMAIN="tunnelhere.example.com" + +# Set to "TUN" for TUN (IP/layer-3) mode, or "TAP" for TAP (ethernet/layer-2) +# mode. Your clients must run in the same mode, or you will send and receive +# only garbage. +MODE="TUN" + +# This will be the virtual TUN/TAP interface created by nstxd. If unset, +# defaults to tun0 or tap0. Note that no IP configuration will be supplied by +# nstxd -- you must do this yourself using net scripts. +#TUNTAP_INTERFACE=tun53 + +# Interface to bind to, instead of binding to all available interfaces. You can +# supply either an interface name or IP address here. Useful if you run an +# internal DNS server but want to run NSTX on your external interface. Note that +# nstxd always binds to port 53. +#BIND_INTERFACE=eth1 +#BIND_INTERFACE=1.2.3.4 + +# Chroot to this directory after startup +#CHROOT=/dev/null + +# Drop privileges to this user after startup +#NSTXD_USER=nstxd + +# Other miscellaneous options to pass to nstxd (man 7 nstxd for details) +#NSTXD_OPTS="" diff --git a/net-misc/nstx/files/nstxd.init b/net-misc/nstx/files/nstxd.init new file mode 100644 index 000000000000..4dda041b5172 --- /dev/null +++ b/net-misc/nstx/files/nstxd.init @@ -0,0 +1,95 @@ +#!/sbin/runscript +# Copyright 1999-2006 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 +# (Written by Phillip Berndt <phillip.berndt at gmail dot com>) +# (Modified by Steven Brudenell <steven dot brudenell at gmail>) +# $Header: /var/cvsroot/gentoo-x86/net-misc/nstx/files/nstxd.init,v 1.1 2009/12/06 19:37:38 robbat2 Exp $ + +depend() { + if [ ! -z "${BIND_INTERFACE}" ] ; then + if [ -x /etc/init.d/net.${BIND_INTERFACE} ] ; then + need net.${BIND_INTERFACE} + fi + fi + + # If the user set TUNTAP_INTERFACE, they probably have a net script + # configuring that interface. nstxcd is responsible for actually creating + # the stupid thing, so we need to run before the config. + if [ ! -z "${TUNTAP_INTERFACE}" ] ; then + if [ -x /etc/init.d/net.${TUNTAP_INTERFACE} ] ; then + before net.${TUNTAP_INTERFACE} + fi + fi +} + +loadtun() { + if [ ! -e /dev/net/tun ] + then + ebegin "Loading TUN/TAP kernel module" + modprobe -q tun + eend $? + fi + + if [ ! -e /dev/net/tun ] + then + eend 1 "Failed to load TUN driver! (did you compile your kernel with TUN/TAP support?)" + return 1 + fi + + return 0 +} + +checkconfig() { + if [ -z "${DOMAIN}" ] ; then + eerror "DOMAIN must be set" + return 1 + fi + + [ -z "${TUNTAP_INTERFACE}" ] || NSTXD_OPTS="${NSTXD_OPTS} -I ${TUNTAP_INTERFACE}" + [ -z "${TUNTAP_DEVICE}" ] || NSTXD_OPTS="${NSTXD_OPTS} -d ${TUNTAP_DEVICE}" + [ -z "${BIND_INTERFACE}" ] || NSTXD_OPTS="${NSTXD_OPTS} -i ${BIND_INTERFACE}" + [ -z "${CHROOT}" ] || NSTXD_OPTS="${NSTXD_OPTS} -C ${CHROOT}" + [ -z "${NSTXD_USER}" ] || NSTXD_OPTS="${NSTXD_OPTS} -u ${NSTXD_USER}" + + case "${MODE}" in + TUN) + NSTXD_OPTS="${NSTXD_OPTS} -t" + ;; + TAP) + NSTXD_OPTS="${NSTXD_OPTS} -T" + ;; + *) + eerror "MODE must be either TUN or TAP" + return 1 + ;; + esac +} + +start() { + checkconfig || return 1 + + loadtun || return 1 + + ebegin "Starting nstxd" + + start-stop-daemon \ + --start \ + --background \ + --make-pidfile \ + --exec /usr/sbin/nstxd \ + --pidfile "/var/run/nstxd.pid" \ + -- ${NSTXD_OPTS} ${DOMAIN} + + eend $? +} + +stop() { + ebegin "Stopping nstxd" + + start-stop-daemon \ + --stop \ + --exec /usr/sbin/nstxd \ + --pidfile "/var/run/nstxd.pid" + + eend $? +} diff --git a/net-misc/nstx/nstx-1.1_beta6-r3.ebuild b/net-misc/nstx/nstx-1.1_beta6-r3.ebuild new file mode 100644 index 000000000000..baa599e24a16 --- /dev/null +++ b/net-misc/nstx/nstx-1.1_beta6-r3.ebuild @@ -0,0 +1,56 @@ +# Copyright 1999-2009 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 +# $Header: /var/cvsroot/gentoo-x86/net-misc/nstx/nstx-1.1_beta6-r3.ebuild,v 1.1 2009/12/06 19:37:39 robbat2 Exp $ + +inherit versionator toolchain-funcs eutils linux-info + +MY_PV=$(replace_version_separator 2 - "${PV}") +MY_P="${PN}-${MY_PV}" +DEBIAN_PV="5" +DEBIAN_A="${PN}_${MY_PV}-${DEBIAN_PV}.diff.gz" + +DESCRIPTION="IP over DNS tunnel" +SRC_URI="http://dereference.de/nstx/${MY_P}.tgz + mirror://debian/pool/main/${PN:0:1}/${PN}/${DEBIAN_A}" +HOMEPAGE="http://dereference.de/nstx/" +RDEPEND="virtual/libc" +DEPEND="virtual/os-headers + ${RDEPEND}" +KEYWORDS="~amd64 ~x86" +IUSE="" +LICENSE="GPL-2" +SLOT="0" +S="${WORKDIR}/${MY_P}" + +CONFIG_CHECK="~TUN" + +src_unpack() { + unpack "${MY_P}.tgz" + epatch "${DISTDIR}"/${DEBIAN_A} + epatch "${FILESDIR}"/${PN}-1.1_beta6_00-linux-tuntap.patch + epatch "${FILESDIR}"/${PN}-1.1_beta6_01-bind-interface-name.patch + epatch "${FILESDIR}"/${PN}-1.1_beta6_02-warn-on-frag.patch + epatch "${FILESDIR}"/${PN}-1.1_beta6_03-delete-dwrite.patch + epatch "${FILESDIR}"/${PN}-1.1_beta6_04-delete-werror.patch +} + +src_compile() { + emake CC="$(tc-getCC)" || die +} + +src_install() { + into /usr + dosbin nstxcd nstxd + dodoc README Changelog + doman *.8 + + newinitd "${FILESDIR}"/nstxd.init nstxd + newconfd "${FILESDIR}"/nstxd.conf nstxd + newinitd "${FILESDIR}"/nstxcd.init nstxcd + newconfd "${FILESDIR}"/nstxcd.conf nstxcd +} + +pkg_postinst() { + einfo "Please read the documentation provided in" + einfo " `find /usr/share/doc/${PF}/ -name 'README*'`" +} |