summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'sys-apps/gawk/files/gawk-3.1.5-ipv6.patch')
-rw-r--r--sys-apps/gawk/files/gawk-3.1.5-ipv6.patch301
1 files changed, 0 insertions, 301 deletions
diff --git a/sys-apps/gawk/files/gawk-3.1.5-ipv6.patch b/sys-apps/gawk/files/gawk-3.1.5-ipv6.patch
deleted file mode 100644
index 1bb2345618c9..000000000000
--- a/sys-apps/gawk/files/gawk-3.1.5-ipv6.patch
+++ /dev/null
@@ -1,301 +0,0 @@
-Ripped from Fedora
-
-diff -bru gawk-3.1.5.orig/io.c gawk-3.1.5/io.c
---- gawk-3.1.5.orig/io.c 2006-07-07 16:13:08.000000000 +0200
-+++ gawk-3.1.5/io.c 2006-07-10 13:18:13.000000000 +0200
-@@ -71,7 +71,6 @@
- extern int MRL;
-
- #ifdef HAVE_SOCKETS
--enum inet_prot { INET_NONE, INET_TCP, INET_UDP, INET_RAW };
-
- #ifndef SHUT_RD
- #define SHUT_RD 0
-@@ -1133,24 +1132,60 @@
- /* socketopen --- open a socket and set it into connected state */
-
- static int
--socketopen(enum inet_prot type, int localport, int remoteport, const char *remotehostname)
-+socketopen(int type, const char *localpname, const char *remotepname,
-+ const char *remotehostname)
- {
-- struct hostent *hp = gethostbyname(remotehostname);
-- struct sockaddr_in local_addr, remote_addr;
-+ struct addrinfo *lres, *lres0;
-+ struct addrinfo lhints;
-+ struct addrinfo *rres, *rres0;
-+ struct addrinfo rhints;
-+
-+ int lerror;
-+ int rerror;
-+
- int socket_fd;
- int any_remote_host = strcmp(remotehostname, "0");
-
-+ memset (&lhints, '\0', sizeof (lhints));
-+ lhints.ai_flags = AI_PASSIVE | AI_ADDRCONFIG;
-+ lhints.ai_socktype = type;
-+
-+ lerror = getaddrinfo (NULL, localpname, &lhints, &lres);
-+ if (lerror) {
-+ if (strcmp(localpname, "0"))
-+ fatal(_("local port invalid in `/inet'"));
-+ lres0 = NULL;
-+ lres = &lhints;
-+ } else
-+ lres0 = lres;
-+
-+ while (lres) {
-+ memset (&rhints, '\0', sizeof (rhints));
-+ rhints.ai_flags = lhints.ai_flags;
-+ rhints.ai_socktype = lhints.ai_socktype;
-+ rhints.ai_family = lhints.ai_family;
-+ rhints.ai_protocol = lhints.ai_protocol;
-+
-+ rerror = getaddrinfo (remotehostname, remotepname, &rhints, &rres);
-+ if (rerror) {
-+ if (lres0)
-+ freeaddrinfo(lres0);
-+ fatal(_("remote host and port information invalid"));
-+ }
-+ rres0 = rres;
- socket_fd = INVALID_HANDLE;
-- switch (type) {
-- case INET_TCP:
-- if (localport != 0 || remoteport != 0) {
-+ while (rres) {
-+ socket_fd = socket (rres->ai_family,
-+ rres->ai_socktype, rres->ai_protocol);
-+ if (socket_fd < 0 || socket_fd == INVALID_HANDLE)
-+ goto nextrres;
-+
-+ if (type == SOCK_STREAM) {
- int on = 1;
- #ifdef SO_LINGER
- struct linger linger;
--
- memset(& linger, '\0', sizeof(linger));
- #endif
-- socket_fd = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
- setsockopt(socket_fd, SOL_SOCKET, SO_REUSEADDR,
- (char *) & on, sizeof(on));
- #ifdef SO_LINGER
-@@ -1160,57 +1195,27 @@
- (char *) & linger, sizeof(linger));
- #endif
- }
-- break;
-- case INET_UDP:
-- if (localport != 0 || remoteport != 0)
-- socket_fd = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
-- break;
-- case INET_RAW:
--#ifdef SOCK_RAW
-- if (localport == 0 && remoteport == 0)
-- socket_fd = socket(AF_INET, SOCK_RAW, IPPROTO_RAW);
--#endif
-- break;
-- case INET_NONE:
-- /* fall through */
-- default:
-- cant_happen();
-- break;
-- }
-+ if (bind(socket_fd, lres->ai_addr, lres->ai_addrlen) != 0)
-+ goto nextrres;
-
-- if (socket_fd < 0 || socket_fd == INVALID_HANDLE
-- || (hp == NULL && any_remote_host != 0))
-- return INVALID_HANDLE;
--
-- local_addr.sin_family = remote_addr.sin_family = AF_INET;
-- local_addr.sin_addr.s_addr = htonl(INADDR_ANY);
-- remote_addr.sin_addr.s_addr = htonl(INADDR_ANY);
-- local_addr.sin_port = htons(localport);
-- remote_addr.sin_port = htons(remoteport);
-- if (bind(socket_fd, (struct sockaddr *) &local_addr, sizeof(local_addr)) == 0) {
- if (any_remote_host != 0) { /* not ANY => create a client */
-- if (type == INET_TCP || type == INET_UDP) {
-- memcpy(&remote_addr.sin_addr, hp->h_addr,
-- sizeof(remote_addr.sin_addr));
-- if (connect(socket_fd,
-- (struct sockaddr *) &remote_addr,
-- sizeof(remote_addr)) != 0) {
-- close(socket_fd);
-- if (localport == 0)
-- socket_fd = INVALID_HANDLE;
-- else
-- socket_fd = socketopen(type, localport, 0, "0");
-- }
-+ if (type != SOCK_RAW) {
-+ if (connect(socket_fd, rres->ai_addr,
-+ rres->ai_addrlen) == 0)
-+ break;
- } else {
- /* /inet/raw client not ready yet */
- fatal(_("/inet/raw client not ready yet, sorry"));
- if (geteuid() != 0)
-+ /* FIXME: is this second fatal ever reached? */
- fatal(_("only root may use `/inet/raw'."));
- }
- } else { /* remote host is ANY => create a server */
-- if (type == INET_TCP) {
-+ if (type == SOCK_STREAM) {
- int clientsocket_fd = INVALID_HANDLE;
-- socklen_t namelen = sizeof(remote_addr);
-+
-+ struct sockaddr_storage remote_addr;
-+ socklen_t namelen = sizeof (remote_addr);
-
- if (listen(socket_fd, 1) >= 0
- && (clientsocket_fd = accept(socket_fd,
-@@ -1218,25 +1223,22 @@
- &namelen)) >= 0) {
- close(socket_fd);
- socket_fd = clientsocket_fd;
-- } else {
-- close(socket_fd);
-- socket_fd = INVALID_HANDLE;
-+ break;
- }
-- } else if (type == INET_UDP) {
-+ } else if (type == SOCK_DGRAM) {
- #ifdef MSG_PEEK
- char buf[10];
-+ struct sockaddr_storage remote_addr;
- socklen_t readle;
-
- if (recvfrom(socket_fd, buf, 1, MSG_PEEK,
- (struct sockaddr *) & remote_addr,
-- & readle) < 1
-- || readle != sizeof(remote_addr)
-- || connect(socket_fd,
-+ & readle) >= 0
-+ && readle
-+ && connect(socket_fd,
- (struct sockaddr *)& remote_addr,
-- readle) != 0) {
-- close(socket_fd);
-- socket_fd = INVALID_HANDLE;
-- }
-+ readle) == 0)
-+ break;
- #endif
- } else {
- /* /inet/raw server not ready yet */
-@@ -1245,10 +1247,20 @@
- fatal(_("only root may use `/inet/raw'."));
- }
- }
-- } else {
-+
-+nextrres:
-+ if (socket_fd != INVALID_HANDLE)
- close(socket_fd);
- socket_fd = INVALID_HANDLE;
-+ rres = rres->ai_next;
-+ }
-+ freeaddrinfo(rres0);
-+ if (socket_fd != INVALID_HANDLE)
-+ break;
-+ lres = lres->ai_next;
- }
-+ if (lres0)
-+ freeaddrinfo(lres0);
-
- return socket_fd;
- }
-@@ -1313,30 +1325,24 @@
- } else if (STREQN(name, "/inet/", 6)) {
- #ifdef HAVE_SOCKETS
- /* /inet/protocol/localport/hostname/remoteport */
-- enum inet_prot protocol = INET_NONE;
-- int localport, remoteport;
-+ int protocol;
- char *hostname;
- char *hostnameslastcharp;
- char *localpname;
-- char proto[4];
-- struct servent *service;
-+ char *localpnamelastcharp;
-
- cp = (char *) name + 6;
- /* which protocol? */
- if (STREQN(cp, "tcp/", 4))
-- protocol = INET_TCP;
-+ protocol = SOCK_STREAM;
- else if (STREQN(cp, "udp/", 4))
-- protocol = INET_UDP;
-+ protocol = SOCK_DGRAM;
- else if (STREQN(cp, "raw/", 4))
-- protocol = INET_RAW;
-+ protocol = SOCK_RAW;
- else
- fatal(_("no (known) protocol supplied in special filename `%s'"),
- name);
-
-- proto[0] = cp[0];
-- proto[1] = cp[1];
-- proto[2] = cp[2];
-- proto[3] = '\0';
- cp += 4;
-
- /* which localport? */
-@@ -1354,25 +1360,17 @@
- * By using atoi() the use of decimal numbers is enforced.
- */
- *cp = '\0';
--
-- localport = atoi(localpname);
-- if (strcmp(localpname, "0") != 0
-- && (localport <= 0 || localport > 65535)) {
-- service = getservbyname(localpname, proto);
-- if (service == NULL)
-- fatal(_("local port invalid in `%s'"), name);
-- else
-- localport = ntohs(service->s_port);
-- }
-- *cp = '/';
-+ localpnamelastcharp = cp;
-
- /* which hostname? */
- cp++;
- hostname = cp;
- while (*cp != '/' && *cp != '\0')
- cp++;
-- if (*cp != '/' || cp == hostname)
-+ if (*cp != '/' || cp == hostname) {
-+ *localpnamelastcharp = '/';
- fatal(_("must supply a remote hostname to `/inet'"));
-+ }
- *cp = '\0';
- hostnameslastcharp = cp;
-
-@@ -1386,22 +1384,15 @@
- * Here too, require a port, let them explicitly put 0 if
- * they don't care.
- */
-- if (*cp == '\0')
-+ if (*cp == '\0') {
-+ *localpnamelastcharp = '/';
-+ *hostnameslastcharp = '/';
- fatal(_("must supply a remote port to `/inet'"));
-- remoteport = atoi(cp);
-- if (strcmp(cp, "0") != 0
-- && (remoteport <= 0 || remoteport > 65535)) {
-- service = getservbyname(cp, proto);
-- if (service == NULL)
-- fatal(_("remote port invalid in `%s'"), name);
-- else
-- remoteport = ntohs(service->s_port);
- }
-
-- /* Open Sesame! */
-- openfd = socketopen(protocol, localport, remoteport, hostname);
-+ openfd = socketopen(protocol, localpname, cp, hostname);
-+ *localpnamelastcharp = '/';
- *hostnameslastcharp = '/';
--
- #else /* ! HAVE_SOCKETS */
- fatal(_("TCP/IP communications are not supported"));
- #endif /* HAVE_SOCKETS */