Home
       tnet-analyzer/openbsd-netcat: Add 1.105 with musl fixes. - parlay - yet another gentoo overlay
  HTML git clone https://git.parazyd.org/parlay
   DIR Log
   DIR Files
   DIR Refs
   DIR README
       ---
   DIR commit ee29bf888c2fa031af0626d0ac9b585238f556f6
   DIR parent fb5c5abcc8a8d458a0b9ceb184b60201059ac856
  HTML Author: parazyd <parazyd@dyne.org>
       Date:   Mon, 24 Oct 2016 22:14:26 +0200
       
       net-analyzer/openbsd-netcat: Add 1.105 with musl fixes.
       
       Diffstat:
         A net-analyzer/openbsd-netcat/Manife… |       2 ++
         A net-analyzer/openbsd-netcat/files/… |     347 +++++++++++++++++++++++++++++++
         A net-analyzer/openbsd-netcat/files/… |      86 ++++++++++++++++++++++++++++++
         A net-analyzer/openbsd-netcat/openbs… |      57 +++++++++++++++++++++++++++++++
       
       4 files changed, 492 insertions(+), 0 deletions(-)
       ---
   DIR diff --git a/net-analyzer/openbsd-netcat/Manifest b/net-analyzer/openbsd-netcat/Manifest
       t@@ -0,0 +1,2 @@
       +DIST netcat-openbsd_1.105-7.debian.tar.gz 31843 SHA256 eee759327ffea293e81d0dde67921b7fcfcad279ffd7a2c9d037bbc8f882b363 SHA512 ec507c858a9f0e75f5a8d6ee8e60eef5200428e55091e831a7acba6c61d70f97af01103c9b65354b0ce773214b0758d957852af793debb70be8aab5b5900b3f6 WHIRLPOOL 62878c51077b26578626f45e1282f2c1f16ae869714b355ef1797ec2911b8773ef07c81468e35bae02087f9f061b828be39200333c204e77b0bdb1ac9eceb957
       +DIST netcat-openbsd_1.105.orig.tar.gz 14891 SHA256 40653fe66c1516876b61b07e093d826e2a5463c5d994f1b7e6ce328f3edb211e SHA512 1e515b5af83a12c6f270d6e8bede6406cc7c9f83ca0e316816508dfe2e2c49cda3fffb6b24a3922bf9908dc8b70d540eb8cc49e9cbfe867e49133c004d3f4703 WHIRLPOOL 7e80dde953575b5fc21399ef1d1d40c8cd6b40a5d6cd81d8a606d14b35ce8432c304d3e1bdaf9fb4697cf6dffc017b565cd60033ec0700d2442bc3ea3ca6aa9a
   DIR diff --git a/net-analyzer/openbsd-netcat/files/openbsd-netcat-1.105-base64.patch b/net-analyzer/openbsd-netcat/files/openbsd-netcat-1.105-base64.patch
       t@@ -0,0 +1,347 @@
       +From 6e369bfe1330cca97e30d8eef075777399418c65 Mon Sep 17 00:00:00 2001
       +From: parazyd <parazyd@dyne.org>
       +Date: Mon, 24 Oct 2016 22:11:11 +0200
       +Subject: [PATCH] patch for musl
       +
       +---
       + base64.c | 315 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
       + socks.c  |   1 +
       + 2 files changed, 316 insertions(+)
       + create mode 100644 base64.c
       +
       +diff --git a/base64.c b/base64.c
       +new file mode 100644
       +index 0000000..e90696d
       +--- /dev/null
       ++++ b/base64.c
       +@@ -0,0 +1,315 @@
       ++/*        $OpenBSD: base64.c,v 1.8 2015/01/16 16:48:51 deraadt Exp $        */
       ++
       ++/*
       ++ * Copyright (c) 1996 by Internet Software Consortium.
       ++ *
       ++ * Permission to use, copy, modify, and distribute this software for any
       ++ * purpose with or without fee is hereby granted, provided that the above
       ++ * copyright notice and this permission notice appear in all copies.
       ++ *
       ++ * THE SOFTWARE IS PROVIDED "AS IS" AND INTERNET SOFTWARE CONSORTIUM DISCLAIMS
       ++ * ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES
       ++ * OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL INTERNET SOFTWARE
       ++ * CONSORTIUM BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
       ++ * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
       ++ * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
       ++ * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
       ++ * SOFTWARE.
       ++ */
       ++
       ++/*
       ++ * Portions Copyright (c) 1995 by International Business Machines, Inc.
       ++ *
       ++ * International Business Machines, Inc. (hereinafter called IBM) grants
       ++ * permission under its copyrights to use, copy, modify, and distribute this
       ++ * Software with or without fee, provided that the above copyright notice and
       ++ * all paragraphs of this notice appear in all copies, and that the name of IBM
       ++ * not be used in connection with the marketing of any product incorporating
       ++ * the Software or modifications thereof, without specific, written prior
       ++ * permission.
       ++ *
       ++ * To the extent it has a right to do so, IBM grants an immunity from suit
       ++ * under its patents, if any, for the use, sale or manufacture of products to
       ++ * the extent that such products are used for performing Domain Name System
       ++ * dynamic updates in TCP/IP networks by means of the Software.  No immunity is
       ++ * granted for any product per se or for any other function of any product.
       ++ *
       ++ * THE SOFTWARE IS PROVIDED "AS IS", AND IBM DISCLAIMS ALL WARRANTIES,
       ++ * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
       ++ * PARTICULAR PURPOSE.  IN NO EVENT SHALL IBM BE LIABLE FOR ANY SPECIAL,
       ++ * DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER ARISING
       ++ * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE, EVEN
       ++ * IF IBM IS APPRISED OF THE POSSIBILITY OF SUCH DAMAGES.
       ++ */
       ++
       ++#include <sys/types.h>
       ++#include <sys/socket.h>
       ++#include <netinet/in.h>
       ++#include <arpa/inet.h>
       ++#include <arpa/nameser.h>
       ++
       ++#include <ctype.h>
       ++#include <resolv.h>
       ++#include <stdio.h>
       ++
       ++#include <stdlib.h>
       ++#include <string.h>
       ++
       ++static const char Base64[] =
       ++        "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
       ++static const char Pad64 = '=';
       ++
       ++/* (From RFC1521 and draft-ietf-dnssec-secext-03.txt)
       ++   The following encoding technique is taken from RFC 1521 by Borenstein
       ++   and Freed.  It is reproduced here in a slightly edited form for
       ++   convenience.
       ++
       ++   A 65-character subset of US-ASCII is used, enabling 6 bits to be
       ++   represented per printable character. (The extra 65th character, "=",
       ++   is used to signify a special processing function.)
       ++
       ++   The encoding process represents 24-bit groups of input bits as output
       ++   strings of 4 encoded characters. Proceeding from left to right, a
       ++   24-bit input group is formed by concatenating 3 8-bit input groups.
       ++   These 24 bits are then treated as 4 concatenated 6-bit groups, each
       ++   of which is translated into a single digit in the base64 alphabet.
       ++
       ++   Each 6-bit group is used as an index into an array of 64 printable
       ++   characters. The character referenced by the index is placed in the
       ++   output string.
       ++
       ++                         Table 1: The Base64 Alphabet
       ++
       ++      Value Encoding  Value Encoding  Value Encoding  Value Encoding
       ++          0 A            17 R            34 i            51 z
       ++          1 B            18 S            35 j            52 0
       ++          2 C            19 T            36 k            53 1
       ++          3 D            20 U            37 l            54 2
       ++          4 E            21 V            38 m            55 3
       ++          5 F            22 W            39 n            56 4
       ++          6 G            23 X            40 o            57 5
       ++          7 H            24 Y            41 p            58 6
       ++          8 I            25 Z            42 q            59 7
       ++          9 J            26 a            43 r            60 8
       ++         10 K            27 b            44 s            61 9
       ++         11 L            28 c            45 t            62 +
       ++         12 M            29 d            46 u            63 /
       ++         13 N            30 e            47 v
       ++         14 O            31 f            48 w         (pad) =
       ++         15 P            32 g            49 x
       ++         16 Q            33 h            50 y
       ++
       ++   Special processing is performed if fewer than 24 bits are available
       ++   at the end of the data being encoded.  A full encoding quantum is
       ++   always completed at the end of a quantity.  When fewer than 24 input
       ++   bits are available in an input group, zero bits are added (on the
       ++   right) to form an integral number of 6-bit groups.  Padding at the
       ++   end of the data is performed using the '=' character.
       ++
       ++   Since all base64 input is an integral number of octets, only the
       ++         -------------------------------------------------                       
       ++   following cases can arise:
       ++   
       ++       (1) the final quantum of encoding input is an integral
       ++           multiple of 24 bits; here, the final unit of encoded
       ++           output will be an integral multiple of 4 characters
       ++           with no "=" padding,
       ++       (2) the final quantum of encoding input is exactly 8 bits;
       ++           here, the final unit of encoded output will be two
       ++           characters followed by two "=" padding characters, or
       ++       (3) the final quantum of encoding input is exactly 16 bits;
       ++           here, the final unit of encoded output will be three
       ++           characters followed by one "=" padding character.
       ++   */
       ++
       ++int
       ++b64_ntop(src, srclength, target, targsize)
       ++        u_char const *src;
       ++        size_t srclength;
       ++        char *target;
       ++        size_t targsize;
       ++{
       ++        size_t datalength = 0;
       ++        u_char input[3];
       ++        u_char output[4];
       ++        int i;
       ++
       ++        while (2 < srclength) {
       ++                input[0] = *src++;
       ++                input[1] = *src++;
       ++                input[2] = *src++;
       ++                srclength -= 3;
       ++
       ++                output[0] = input[0] >> 2;
       ++                output[1] = ((input[0] & 0x03) << 4) + (input[1] >> 4);
       ++                output[2] = ((input[1] & 0x0f) << 2) + (input[2] >> 6);
       ++                output[3] = input[2] & 0x3f;
       ++
       ++                if (datalength + 4 > targsize)
       ++                        return (-1);
       ++                target[datalength++] = Base64[output[0]];
       ++                target[datalength++] = Base64[output[1]];
       ++                target[datalength++] = Base64[output[2]];
       ++                target[datalength++] = Base64[output[3]];
       ++        }
       ++    
       ++        /* Now we worry about padding. */
       ++        if (0 != srclength) {
       ++                /* Get what's left. */
       ++                input[0] = input[1] = input[2] = '\0';
       ++                for (i = 0; i < srclength; i++)
       ++                        input[i] = *src++;
       ++        
       ++                output[0] = input[0] >> 2;
       ++                output[1] = ((input[0] & 0x03) << 4) + (input[1] >> 4);
       ++                output[2] = ((input[1] & 0x0f) << 2) + (input[2] >> 6);
       ++
       ++                if (datalength + 4 > targsize)
       ++                        return (-1);
       ++                target[datalength++] = Base64[output[0]];
       ++                target[datalength++] = Base64[output[1]];
       ++                if (srclength == 1)
       ++                        target[datalength++] = Pad64;
       ++                else
       ++                        target[datalength++] = Base64[output[2]];
       ++                target[datalength++] = Pad64;
       ++        }
       ++        if (datalength >= targsize)
       ++                return (-1);
       ++        target[datalength] = '\0';        /* Returned value doesn't count \0. */
       ++        return (datalength);
       ++}
       ++
       ++/* skips all whitespace anywhere.
       ++   converts characters, four at a time, starting at (or after)
       ++   src from base - 64 numbers into three 8 bit bytes in the target area.
       ++   it returns the number of data bytes stored at the target, or -1 on error.
       ++ */
       ++
       ++int
       ++b64_pton(src, target, targsize)
       ++        char const *src;
       ++        u_char *target;
       ++        size_t targsize;
       ++{
       ++        int tarindex, state, ch;
       ++        u_char nextbyte;
       ++        char *pos;
       ++
       ++        state = 0;
       ++        tarindex = 0;
       ++
       ++        while ((ch = (unsigned char)*src++) != '\0') {
       ++                if (isspace(ch))        /* Skip whitespace anywhere. */
       ++                        continue;
       ++
       ++                if (ch == Pad64)
       ++                        break;
       ++
       ++                pos = strchr(Base64, ch);
       ++                if (pos == 0)                 /* A non-base64 character. */
       ++                        return (-1);
       ++
       ++                switch (state) {
       ++                case 0:
       ++                        if (target) {
       ++                                if (tarindex >= targsize)
       ++                                        return (-1);
       ++                                target[tarindex] = (pos - Base64) << 2;
       ++                        }
       ++                        state = 1;
       ++                        break;
       ++                case 1:
       ++                        if (target) {
       ++                                if (tarindex >= targsize)
       ++                                        return (-1);
       ++                                target[tarindex]   |=  (pos - Base64) >> 4;
       ++                                nextbyte = ((pos - Base64) & 0x0f) << 4;
       ++                                if (tarindex + 1 < targsize)
       ++                                        target[tarindex+1] = nextbyte;
       ++                                else if (nextbyte)
       ++                                        return (-1);
       ++                        }
       ++                        tarindex++;
       ++                        state = 2;
       ++                        break;
       ++                case 2:
       ++                        if (target) {
       ++                                if (tarindex >= targsize)
       ++                                        return (-1);
       ++                                target[tarindex]   |=  (pos - Base64) >> 2;
       ++                                nextbyte = ((pos - Base64) & 0x03) << 6;
       ++                                if (tarindex + 1 < targsize)
       ++                                        target[tarindex+1] = nextbyte;
       ++                                else if (nextbyte)
       ++                                        return (-1);
       ++                        }
       ++                        tarindex++;
       ++                        state = 3;
       ++                        break;
       ++                case 3:
       ++                        if (target) {
       ++                                if (tarindex >= targsize)
       ++                                        return (-1);
       ++                                target[tarindex] |= (pos - Base64);
       ++                        }
       ++                        tarindex++;
       ++                        state = 0;
       ++                        break;
       ++                }
       ++        }
       ++
       ++        /*
       ++         * We are done decoding Base-64 chars.  Let's see if we ended
       ++         * on a byte boundary, and/or with erroneous trailing characters.
       ++         */
       ++
       ++        if (ch == Pad64) {                        /* We got a pad char. */
       ++                ch = (unsigned char)*src++;        /* Skip it, get next. */
       ++                switch (state) {
       ++                case 0:                /* Invalid = in first position */
       ++                case 1:                /* Invalid = in second position */
       ++                        return (-1);
       ++
       ++                case 2:                /* Valid, means one byte of info */
       ++                        /* Skip any number of spaces. */
       ++                        for (; ch != '\0'; ch = (unsigned char)*src++)
       ++                                if (!isspace(ch))
       ++                                        break;
       ++                        /* Make sure there is another trailing = sign. */
       ++                        if (ch != Pad64)
       ++                                return (-1);
       ++                        ch = (unsigned char)*src++;                /* Skip the = */
       ++                        /* Fall through to "single trailing =" case. */
       ++                        /* FALLTHROUGH */
       ++
       ++                case 3:                /* Valid, means two bytes of info */
       ++                        /*
       ++                         * We know this char is an =.  Is there anything but
       ++                         * whitespace after it?
       ++                         */
       ++                        for (; ch != '\0'; ch = (unsigned char)*src++)
       ++                                if (!isspace(ch))
       ++                                        return (-1);
       ++
       ++                        /*
       ++                         * Now make sure for cases 2 and 3 that the "extra"
       ++                         * bits that slopped past the last full byte were
       ++                         * zeros.  If we don't check them, they become a
       ++                         * subliminal channel.
       ++                         */
       ++                        if (target && tarindex < targsize &&
       ++                            target[tarindex] != 0)
       ++                                return (-1);
       ++                }
       ++        } else {
       ++                /*
       ++                 * We ended by seeing the end of the string.  Make sure we
       ++                 * have no partial bytes lying around.
       ++                 */
       ++                if (state != 0)
       ++                        return (-1);
       ++        }
       ++
       ++        return (tarindex);
       ++}
       +diff --git a/socks.c b/socks.c
       +index befd0a9..700b6af 100644
       +--- a/socks.c
       ++++ b/socks.c
       +@@ -40,6 +40,7 @@
       + #include <resolv.h>
       + #include <bsd/readpassphrase.h>
       + #include "atomicio.h"
       ++#include "base64.c"
       + 
       + #define SOCKS_PORT        "1080"
       + #define HTTP_PROXY_PORT        "3128"
       +-- 
       +2.7.3
       +
   DIR diff --git a/net-analyzer/openbsd-netcat/files/openbsd-netcat-1.105-darwin.patch b/net-analyzer/openbsd-netcat/files/openbsd-netcat-1.105-darwin.patch
       t@@ -0,0 +1,86 @@
       +Allow compilation on Darwin
       +
       +--- netcat.c
       ++++ netcat.c
       +@@ -43,11 +43,13 @@
       + #include <arpa/telnet.h>
       + #include <arpa/inet.h>
       + 
       ++#ifndef IPTOS_LOWCOST
       ++# define IPTOS_LOWCOST 0x02
       ++#endif
       + #ifndef IPTOS_LOWDELAY
       + # define IPTOS_LOWDELAY 0x10
       + # define IPTOS_THROUGHPUT 0x08
       + # define IPTOS_RELIABILITY 0x04
       +-# define IPTOS_LOWCOST 0x02
       + # define IPTOS_MINCOST IPTOS_LOWCOST
       + #endif /* IPTOS_LOWDELAY */
       + 
       +@@ -96,8 +98,9 @@
       + #include <unistd.h>
       + #include <fcntl.h>
       + #include <limits.h>
       +-#include <bsd/stdlib.h>
       +-#include <bsd/string.h>
       ++#include <stdlib.h>
       ++#include <string.h>
       ++#include <ctype.h>
       + #include "atomicio.h"
       + 
       + #ifndef SUN_LEN
       +@@ -169,6 +172,43 @@
       +         socklen_t salen, int ctimeout);
       + static void quit();
       + 
       ++static char* strtonumerrs[] = {
       ++        "too large",
       ++        "too small",
       ++        "invalid"
       ++};
       ++
       ++static long long
       ++strtonum(
       ++                const char *nptr,
       ++                long long minval,
       ++                long long maxval,
       ++                const char **errstr)
       ++{
       ++        long long val;
       ++        
       ++        while (*nptr != '\0' && isspace(*nptr))
       ++                nptr++;
       ++        if (*nptr == '\0') {
       ++                if (errstr != NULL)
       ++                        *errstr = strtonumerrs[2];
       ++                return 0;
       ++        }
       ++        val = atoll(nptr);
       ++        if (val < minval) {
       ++                if (errstr != NULL)
       ++                        *errstr = strtonumerrs[1];
       ++                return 0;
       ++        }
       ++        if (val > maxval) {
       ++                if (errstr != NULL)
       ++                        *errstr = strtonumerrs[0];
       ++                return 0;
       ++        }
       ++        *errstr = NULL;
       ++        return val;
       ++}
       ++
       + int
       + main(int argc, char *argv[])
       + {
       +--- socks.c
       ++++ socks.c
       +@@ -38,7 +38,7 @@
       + #include <string.h>
       + #include <unistd.h>
       + #include <resolv.h>
       +-#include <bsd/readpassphrase.h>
       ++#include <readpassphrase.h>
       + #include "atomicio.h"
       + 
       + #define SOCKS_PORT        "1080"
   DIR diff --git a/net-analyzer/openbsd-netcat/openbsd-netcat-1.105-r99.ebuild b/net-analyzer/openbsd-netcat/openbsd-netcat-1.105-r99.ebuild
       t@@ -0,0 +1,57 @@
       +# Copyright 1999-2016 Gentoo Foundation
       +# Distributed under the terms of the GNU General Public License v2
       +# $Id$
       +
       +EAPI=6
       +
       +inherit toolchain-funcs eutils
       +
       +DESCRIPTION="The OpenBSD network swiss army knife"
       +HOMEPAGE="http://www.openbsd.org/cgi-bin/cvsweb/src/usr.bin/nc/"
       +SRC_URI="http://http.debian.net/debian/pool/main/n/netcat-openbsd/netcat-openbsd_${PV}.orig.tar.gz
       +        http://http.debian.net/debian/pool/main/n/netcat-openbsd/netcat-openbsd_${PV}-7.debian.tar.gz"
       +LICENSE="BSD"
       +SLOT="0"
       +IUSE="elibc_Darwin"
       +
       +KEYWORDS="~amd64 ~x86 ~amd64-linux ~x64-macos"
       +
       +DEPEND="virtual/pkgconfig"
       +RDEPEND="!elibc_Darwin? ( dev-libs/libbsd )
       +        !net-analyzer/netcat
       +        !net-analyzer/netcat6
       +"
       +
       +S=${WORKDIR}/netcat-openbsd-${PV}
       +
       +PATCHES=( "${WORKDIR}/debian/patches" )
       +
       +src_prepare() {
       +        default
       +        if [[ ${CHOST} == *-darwin* ]] ; then
       +                # this undoes some of the Debian/Linux changes
       +                epatch "${FILESDIR}"/${P}-darwin.patch
       +        fi
       +        # base64 musl fix
       +        epatch "${FILESDIR}"/${P}-base64.patch
       +}
       +
       +src_compile() {
       +        emake CC=$(tc-getCC) CFLAGS="${CFLAGS}" LDFLAGS="${LDFLAGS}" || die
       +}
       +
       +src_install() {
       +        dobin nc
       +        doman nc.1
       +        cd "${WORKDIR}/debian"
       +        newdoc netcat-openbsd.README.Debian README
       +        dodoc -r examples
       +}
       +
       +pkg_postinst() {
       +        if [[ ${KERNEL} = "linux" ]]; then
       +                ewarn "FO_REUSEPORT is introduced in linux 3.9. If your running kernel is older"
       +                ewarn "and kernel header is newer, nc will not listen correctly. Matching the header"
       +                ewarn "to the running kernel will do. See bug #490246 for details."
       +        fi
       +}