add package krb5 (#588)
authorVishal Biswas <vshlbiswas@ymail.com>
Tue, 7 Feb 2017 23:13:27 +0000 (04:43 +0530)
committerFredrik Fornwall <fredrik@fornwall.net>
Tue, 7 Feb 2017 23:13:27 +0000 (00:13 +0100)
* add package krb5

* improve getpass handling

instead of bombarding every linking with getpass.o,
include it where necessary

packages/krb5/build.sh [new file with mode: 0644]
packages/krb5/dnsglue.h.patch [new file with mode: 0644]
packages/krb5/getpass.patch [new file with mode: 0644]
packages/krb5/netbsd_getpass.c [new file with mode: 0644]
packages/krb5/sethostent.patch [new file with mode: 0644]

diff --git a/packages/krb5/build.sh b/packages/krb5/build.sh
new file mode 100644 (file)
index 0000000..de53ca6
--- /dev/null
@@ -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 (file)
index 0000000..35119d2
--- /dev/null
@@ -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 (file)
index 0000000..22bf943
--- /dev/null
@@ -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 <unistd.h>
+ #include <time.h>
++#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 (file)
index 0000000..a10565f
--- /dev/null
@@ -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 <sys/cdefs.h>
+#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 <assert.h>
+#include <paths.h>
+#include <pwd.h>
+#include <signal.h>
+#include <stdio.h>
+#include <termios.h>
+#include <unistd.h>
+#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 (file)
index 0000000..2882cf5
--- /dev/null
@@ -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,