From e38a1e2b8de9c38fd0d0802b7a4759dfae4feaf4 Mon Sep 17 00:00:00 2001 From: Vishal Biswas Date: Wed, 8 Feb 2017 04:43:27 +0530 Subject: [PATCH] add package krb5 (#588) * add package krb5 * improve getpass handling instead of bombarding every linking with getpass.o, include it where necessary --- packages/krb5/build.sh | 25 ++++++++++ packages/krb5/dnsglue.h.patch | 15 ++++++ packages/krb5/getpass.patch | 13 ++++++ packages/krb5/netbsd_getpass.c | 104 +++++++++++++++++++++++++++++++++++++++++ packages/krb5/sethostent.patch | 11 +++++ 5 files changed, 168 insertions(+) create mode 100644 packages/krb5/build.sh create mode 100644 packages/krb5/dnsglue.h.patch create mode 100644 packages/krb5/getpass.patch create mode 100644 packages/krb5/netbsd_getpass.c create mode 100644 packages/krb5/sethostent.patch diff --git a/packages/krb5/build.sh b/packages/krb5/build.sh new file mode 100644 index 00000000..de53ca6a --- /dev/null +++ b/packages/krb5/build.sh @@ -0,0 +1,25 @@ +TERMUX_PKG_HOMEPAGE='https://web.mit.edu/kerberos' +TERMUX_PKG_DESCRIPTION='The Kerberos network authentication system' +TERMUX_PKG_VERSION='1.15' +TERMUX_PKG_DEPENDS="libandroid-support, libandroid-glob, readline, c-ares" +TERMUX_PKG_SRCURL="https://web.mit.edu/kerberos/dist/krb5/$TERMUX_PKG_VERSION/krb5-$TERMUX_PKG_VERSION.tar.gz" +TERMUX_PKG_SHA256='fd34752774c808ab4f6f864f935c49945f5a56b62240b1ad4ab1af7b4ded127c' +TERMUX_PKG_FOLDERNAME="krb5-$TERMUX_PKG_VERSION/src" +TERMUX_PKG_MAINTAINER='Vishal Biswas @vishalbiswas' +TERMUX_PKG_EXTRA_CONFIGURE_ARGS=' --with-readline --with-netlib=-lcares' + +termux_step_pre_configure () { + # cannot test these when cross compiling + export krb5_cv_attr_constructor_destructor='yes,yes' + export ac_cv_func_regcomp='yes' + export ac_cv_printf_positional='yes' + + # disable some -Werror= + export krb5_cv_cc_flag__dash_Werror_eq_uninitialized='no' + export krb5_cv_cc_flag__dash_Werror_dash_implicit_dash_function_dash_declaration='no' + + # bionic doesn't have getpass + cp "$TERMUX_PKG_BUILDER_DIR/netbsd_getpass.c" "$TERMUX_PKG_SRCDIR/clients/kpasswd/" + + LDFLAGS="$LDFLAGS -landroid-glob -llog" +} diff --git a/packages/krb5/dnsglue.h.patch b/packages/krb5/dnsglue.h.patch new file mode 100644 index 00000000..35119d29 --- /dev/null +++ b/packages/krb5/dnsglue.h.patch @@ -0,0 +1,15 @@ +--- ./lib/krb5/os/dnsglue.h 2016-12-02 04:01:25.000000000 +0530 ++++ ../dnsglue.h 2016-12-06 23:46:48.394430806 +0530 +@@ -150,6 +150,12 @@ + (ptr) += (incr); \ + } while (0) + ++/* Bionic has res_init() but it's not in any header */ ++#ifdef __BIONIC__ ++extern int res_init (void); ++extern int res_search (const char *dname, int class, int type,unsigned char *answer, int anslen); ++#endif ++ + struct krb5int_dns_state; + + int krb5int_dns_init(struct krb5int_dns_state **, char *, int, int); diff --git a/packages/krb5/getpass.patch b/packages/krb5/getpass.patch new file mode 100644 index 00000000..22bf9430 --- /dev/null +++ b/packages/krb5/getpass.patch @@ -0,0 +1,13 @@ +--- ./clients/kpasswd/ksetpwd.c 2016-12-02 04:01:24.000000000 +0530 ++++ ../ksetpwd.c 2016-12-12 20:56:16.223675060 +0530 +@@ -4,6 +4,10 @@ + #include + #include + ++#ifdef __ANDROID__ ++#include "netbsd_getpass.c" ++#endif ++ + #define TKTTIMELEFT 60*10 /* ten minutes */ + + static int verify_creds() diff --git a/packages/krb5/netbsd_getpass.c b/packages/krb5/netbsd_getpass.c new file mode 100644 index 00000000..a10565fc --- /dev/null +++ b/packages/krb5/netbsd_getpass.c @@ -0,0 +1,104 @@ +/* $NetBSD: getpass.c,v 1.15 2003/08/07 16:42:50 agc Exp $ */ +/* + * Copyright (c) 1988, 1993 + * The Regents of the University of California. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ +#if 0 +#include +#if defined(LIBC_SCCS) && !defined(lint) +#if 0 +static char sccsid[] = "@(#)getpass.c 8.1 (Berkeley) 6/4/93"; +#else +__RCSID("$NetBSD: getpass.c,v 1.15 2003/08/07 16:42:50 agc Exp $"); +#endif +#endif /* LIBC_SCCS and not lint */ +#include "namespace.h" +#endif +#include +#include +#include +#include +#include +#include +#include +#if 0 +#ifdef __weak_alias +__weak_alias(getpass,_getpass) +#endif +#endif +char * +getpass(prompt) + const char *prompt; +{ + struct termios term; + int ch; + char *p; + FILE *fp, *outfp; + int echo; + static char buf[_PASSWORD_LEN + 1]; + sigset_t oset, nset; +#if 0 + _DIAGASSERT(prompt != NULL); +#endif + /* + * read and write to /dev/tty if possible; else read from + * stdin and write to stderr. + */ + if ((outfp = fp = fopen(_PATH_TTY, "w+")) == NULL) { + outfp = stderr; + fp = stdin; + } + /* + * note - blocking signals isn't necessarily the + * right thing, but we leave it for now. + */ + sigemptyset(&nset); + sigaddset(&nset, SIGINT); + sigaddset(&nset, SIGTSTP); + (void)sigprocmask(SIG_BLOCK, &nset, &oset); + (void)tcgetattr(fileno(fp), &term); + if ((echo = (term.c_lflag & ECHO)) != 0) { + term.c_lflag &= ~ECHO; + (void)tcsetattr(fileno(fp), TCSAFLUSH /*|TCSASOFT*/, &term); + } + if (prompt != NULL) + (void)fputs(prompt, outfp); + rewind(outfp); /* implied flush */ + for (p = buf; (ch = getc(fp)) != EOF && ch != '\n';) + if (p < buf + _PASSWORD_LEN) + *p++ = ch; + *p = '\0'; + (void)write(fileno(outfp), "\n", 1); + if (echo) { + term.c_lflag |= ECHO; + (void)tcsetattr(fileno(fp), TCSAFLUSH/*|TCSASOFT*/, &term); + } + (void)sigprocmask(SIG_SETMASK, &oset, NULL); + if (fp != stdin) + (void)fclose(fp); + return(buf); +} diff --git a/packages/krb5/sethostent.patch b/packages/krb5/sethostent.patch new file mode 100644 index 00000000..2882cf56 --- /dev/null +++ b/packages/krb5/sethostent.patch @@ -0,0 +1,11 @@ +--- ./tests/resolve/resolve.c 2016-12-02 04:01:25.000000000 +0530 ++++ ../resolve.c 2016-12-07 11:10:38.473122715 +0530 +@@ -111,7 +111,7 @@ + + + /* Set the hosts db to close each time - effectively rewinding file */ +- sethostent(0); ++ /* sethostent(0); */ + + if((host = gethostbyname (myname)) == NULL) { + fprintf(stderr, -- 2.11.0