diff options
author | Peter Volkov <pva@gentoo.org> | 2008-10-25 15:33:22 +0000 |
---|---|---|
committer | Peter Volkov <pva@gentoo.org> | 2008-10-25 15:33:22 +0000 |
commit | f055830bff323ca538865f381401a6f8466f78d2 (patch) | |
tree | bd4325d78a4ca25a6768efcf63d63ac51e9226d2 /net-analyzer/netcat6/files | |
parent | Nuke the useless bootstrap USE flag for >=python-2.5. Thanks to Arfrever. (diff) | |
download | gentoo-2-f055830bff323ca538865f381401a6f8466f78d2.tar.gz gentoo-2-f055830bff323ca538865f381401a6f8466f78d2.tar.bz2 gentoo-2-f055830bff323ca538865f381401a6f8466f78d2.zip |
Added patch to make netcat6 listen on unix sockets, bug #235160, thank Georgi Georgiev for this patch. Added bluetooth support. Removed old version.
(Portage version: 2.2_rc12/cvs/Linux 2.6.26-openvz.git-777e816 i686)
Diffstat (limited to 'net-analyzer/netcat6/files')
-rw-r--r-- | net-analyzer/netcat6/files/netcat6-1.0-unix-sockets.patch | 311 |
1 files changed, 311 insertions, 0 deletions
diff --git a/net-analyzer/netcat6/files/netcat6-1.0-unix-sockets.patch b/net-analyzer/netcat6/files/netcat6-1.0-unix-sockets.patch new file mode 100644 index 000000000000..d5cb90bd1ec9 --- /dev/null +++ b/net-analyzer/netcat6/files/netcat6-1.0-unix-sockets.patch @@ -0,0 +1,311 @@ +=== modified file 'docs/nc6.1.in' +--- docs/nc6.1.in 2008-10-25 14:16:55 +0000 ++++ docs/nc6.1.in 2008-10-25 14:17:11 +0000 +@@ -160,6 +160,10 @@ + With this option set, netcat6 will use UDP as the transport protocol (TCP is + the default). + .TP 13 ++.I \-U, --unix ++With this option set, netcat6 will connect to a unix domain socket. ++The listen mode has not been implemented yet. ++.TP 13 + .I \-v + Enable verbose mode. This gives some basic information about what netcat6 + is doing. Use it twice for extra verbosity. + +=== modified file 'src/Makefile.am' +--- src/Makefile.am 2008-10-25 14:16:55 +0000 ++++ src/Makefile.am 2008-10-25 14:17:09 +0000 +@@ -6,6 +6,7 @@ + network.h \ + afindep.h \ + bluez.h \ ++ unixsocket.h \ + netsupport.h \ + parser.h \ + readwrite.h \ +@@ -20,6 +21,7 @@ + afindep.c \ + netsupport.c \ + parser.c \ ++ unixsocket.c \ + readwrite.c \ + io_stream.c \ + connection.c + +=== modified file 'src/connection.c' +--- src/connection.c 2008-10-25 14:16:55 +0000 ++++ src/connection.c 2008-10-25 14:17:09 +0000 +@@ -109,6 +109,9 @@ + fatal_internal("unavailable bluez support required"); + #endif + break; ++ case PROTO_UNIX: ++ ainfo->ai_family = PF_UNIX; ++ break; + default: + fatal_internal("unknown socket domain"); + } +@@ -144,6 +147,10 @@ + fatal_internal("unavailable bluez support required"); + #endif + break; ++ case UNIX_PROTOCOL: ++ ainfo->ai_protocol = 0; ++ ainfo->ai_socktype = SOCK_STREAM; ++ break; + default: + fatal_internal("unknown socket type"); + } + +=== modified file 'src/connection.h' +--- src/connection.h 2008-10-25 14:16:55 +0000 ++++ src/connection.h 2008-10-25 14:17:09 +0000 +@@ -31,12 +31,14 @@ + PROTO_UNSPECIFIED, + PROTO_IPv6, + PROTO_IPv4, ++ PROTO_UNIX, + PROTO_BLUEZ + } sock_family_t; + + typedef enum sock_protocol { + TCP_PROTOCOL, + UDP_PROTOCOL, ++ UNIX_PROTOCOL, + SCO_PROTOCOL, + L2CAP_PROTOCOL + } sock_protocol_t; + +=== modified file 'src/network.c' +--- src/network.c 2008-10-25 14:16:55 +0000 ++++ src/network.c 2008-10-25 14:17:09 +0000 +@@ -23,6 +23,7 @@ + #include "network.h" + #include "connection.h" + #include "afindep.h" ++#include "unixsocket.h" + #ifdef ENABLE_BLUEZ + #include "bluez.h" + #endif/*ENABLE_BLUEZ*/ +@@ -113,6 +114,11 @@ + + /* invoke the appropriate connector for the protocol family */ + switch (ca_family(attrs)) { ++ case PROTO_UNIX: ++ fd = unixsocket_connect(&hints, ++ remote->address, ++ timeout, &socktype); ++ break; + #ifdef ENABLE_BLUEZ + case PROTO_BLUEZ: + fd = bluez_connect(&hints, + +=== modified file 'src/parser.c' +--- src/parser.c 2008-10-25 14:16:55 +0000 ++++ src/parser.c 2008-10-25 14:17:09 +0000 +@@ -109,7 +109,9 @@ + {"bluetooth", no_argument, NULL, 'b'}, + #define OPT_SCO 24 + {"sco", no_argument, NULL, 0 }, +-#define OPT_MAX 25 ++#define OPT_UNIX_SOCKET 25 ++ {"unix", no_argument, NULL, 'U'}, ++#define OPT_MAX 26 + {0, 0, 0, 0} + }; + +@@ -160,7 +162,7 @@ + _verbosity_level = 0; + + /* option recognition loop */ +- while ((c = getopt_long(argc, argv, "46be:hlnp:q:s:uvw:xX", ++ while ((c = getopt_long(argc, argv, "46be:hlnp:q:s:uUvw:xX", + long_options, &option_index)) >= 0) + { + switch (c) { +@@ -231,6 +233,9 @@ + family = PROTO_IPv6; + ca_set_flag(attrs, CA_STRICT_IPV6); + break; ++ case 'U': ++ family = PROTO_UNIX; ++ break; + case 'b': + family = PROTO_BLUEZ; + break; +@@ -330,6 +335,9 @@ + /* set default protocols */ + if (protocol == PROTO_UNSPECIFIED) { + switch (family) { ++ case PROTO_UNIX: ++ protocol = UNIX_PROTOCOL; ++ break; + case PROTO_BLUEZ: + protocol = L2CAP_PROTOCOL; + break; +@@ -344,6 +352,11 @@ + fatal(_("cannot specify UDP protocol and bluetooth")); + if (protocol == SCO_PROTOCOL && family != PROTO_BLUEZ) + fatal(_("--sco requires --bluetooth (-b)")); ++ if (protocol == UNIX_PROTOCOL && family != PROTO_UNIX) ++ fatal(_("--unix does not need protocol specifications")); ++ ++ if (family == PROTO_UNIX && listen_mode) ++ fatal(_("--unix cannot --listen yet")); + + /* check compiled options */ + #ifndef ENABLE_BLUEZ +@@ -380,6 +393,10 @@ + fatal_internal("unknown/unsupported bluetooth " + "protocol %d", protocol); + break; ++ case PROTO_UNIX: ++ if (protocol != UNIX_PROTOCOL) ++ fatal_internal("unknown/unsupported UNIX protocol %d", protocol); ++ break; + default: + fatal_internal("invalid protocol family %d", family); + } +@@ -425,18 +442,18 @@ + fatal(_("cannot set both --recv-only and --send-only")); + } + +- /* check ports have not been specified with --sco */ +- if (protocol == SCO_PROTOCOL) { ++ /* check ports have not been specified with --sco and --unix */ ++ if (protocol == SCO_PROTOCOL || protocol == UNIX_PROTOCOL) { + if (remote_address.service != NULL) +- fatal(_("--sco does not support remote port")); ++ fatal(_("--sco and --unix do not support remote port")); + if (local_address.service != NULL) +- fatal(_("--sco does not support local port (-p)")); ++ fatal(_("--sco and --unix do not support local port (-p)")); + } + + /* check mode specific option availability and interactions */ + if (listen_mode == true) { + /* check port has been specified (except with sco) */ +- if (local_address.service == NULL && protocol != SCO_PROTOCOL) { ++ if (local_address.service == NULL && protocol != SCO_PROTOCOL && protocol != UNIX_PROTOCOL) { + fatal(_("in listen mode you must specify a port " + "with the -p switch")); + } +@@ -450,6 +467,7 @@ + /* check port has been specified (except with sco) */ + if (remote_address.address == NULL || + (remote_address.service == NULL && ++ protocol != UNIX_PROTOCOL && + protocol != SCO_PROTOCOL)) + { + fatal(_("you must specify the address/port couple " +@@ -553,6 +571,8 @@ + fprintf(fp, " -6 %s\n", _("Use only IPv6")); + fprintf(fp, " -b, --bluetooth %s\n", + _("Use Bluetooth (defaults to L2CAP protocol)")); ++ fprintf(fp, " -U, --unix %s\n", ++ _("Connect to unix domain sockets")); + fprintf(fp, " --buffer-size=BYTES %s\n", _("Set buffer size")); + fprintf(fp, " --continuous %s\n", + _("Continuously accept connections\n" + +=== added file 'src/unixsocket.c' +--- src/unixsocket.c 1970-01-01 00:00:00 +0000 ++++ src/unixsocket.c 2008-10-25 14:17:09 +0000 +@@ -0,0 +1,78 @@ ++/* ++ * unixsocket.c - address family independant networking functions ++ */ ++#include "system.h" ++#include "unixsocket.h" ++#include "misc.h" ++#include "netsupport.h" ++#include "parser.h" ++ ++#include <assert.h> ++#include <errno.h> ++#include <string.h> ++#include <stdlib.h> ++#include <sys/types.h> ++#include <sys/socket.h> ++#include <sys/un.h> ++#include <unistd.h> ++#include <limits.h> ++ ++RCSID("@(#) $Header: /var/cvsroot/gentoo-x86/net-analyzer/netcat6/files/netcat6-1.0-unix-sockets.patch,v 1.1 2008/10/25 15:33:22 pva Exp $"); ++ ++ ++int unixsocket_connect(const struct addrinfo *hints, ++ const char *remote_address, ++ time_t timeout, int *rt_socktype) ++{ ++ int err, fd = -1; ++ struct sockaddr_un sa; ++ const struct addrinfo *ptr = hints; ++ ++ /* make sure arguments are valid and preconditions are respected */ ++ assert(hints != NULL); ++ assert(remote_address != NULL && strlen(remote_address) > 0); ++ assert(sizeof(sa.sun_path) >= strlen(remote_address)); ++ ++ sa.sun_family = ptr->ai_family; ++ strncpy(sa.sun_path, remote_address, sizeof(sa.sun_path)); ++ ++ ++ /* create the socket */ ++ fd = socket(ptr->ai_family, ptr->ai_socktype, ptr->ai_protocol); ++ if (fd < 0) { ++ warning("cannot create the socket: %s", strerror(errno)); ++ return -1; ++ } ++ ++ /* attempt the connection */ ++ err = connect_with_timeout(fd, (struct sockaddr *)&sa, sizeof(sa), timeout); ++ ++ if (err != 0) ++ { ++ /* check error code */ ++ if (verbose_mode()) { ++ /* use different error message for timeout */ ++ if (errno == ETIMEDOUT) { ++ /* connection timed out */ ++ warning(_("timeout while connecting to %s"), remote_address); ++ } ++ else { ++ /* connection failed */ ++ warning(_("cannot connect to %s: %s"), remote_address, strerror(errno)); ++ } ++ } ++ close(fd); ++ return -1; ++ } ++ ++ assert(ptr == NULL || fd >= 0); ++ ++ /* let the user know the connection has been established */ ++ if (verbose_mode()) warning(_("%s open"), remote_address); ++ ++ /* return the socktype */ ++ if (rt_socktype != NULL) *rt_socktype = ptr->ai_socktype; ++ ++ return fd; ++} ++ + +=== added file 'src/unixsocket.h' +--- src/unixsocket.h 1970-01-01 00:00:00 +0000 ++++ src/unixsocket.h 2008-10-25 14:17:09 +0000 +@@ -0,0 +1,12 @@ ++#ifndef UNIXSOCKET_H ++#define UNIXSOCKET_H ++ ++#include <netdb.h> ++#include <sys/types.h> ++ ++/* establish a connection and return a new fd and socktype */ ++int unixsocket_connect(const struct addrinfo *hints, ++ const char *remote_address, ++ time_t timeout, int *socktype); ++ ++#endif + |