From e991e3cf221c9f898b7ec0c5e7492bb1202cefc4 Mon Sep 17 00:00:00 2001 From: Tim Rice Date: Tue, 7 Aug 2001 15:29:07 -0700 Subject: - (tim) [configure.in sshconnect.c openbsd-compat/Makefile.in openbsd-compat/openbsd-compat.h ] Add inet_ntop.c inet_ntop.h back in. Needed for sshconnect.c [sshconnect.c] fix INET6_ADDRSTRLEN for non IPv6 machines [configure.in] make tests with missing libraries fail patch by Wendy Palm Added openbsd-compat/bsd-cray.h. Selective patches from William L. Jones --- ChangeLog | 12 ++- configure.in | 14 +-- openbsd-compat/Makefile.in | 4 +- openbsd-compat/bsd-cray.h | 13 +++ openbsd-compat/inet_ntop.c | 211 ++++++++++++++++++++++++++++++++++++++++ openbsd-compat/inet_ntop.h | 13 +++ openbsd-compat/openbsd-compat.h | 3 +- sshconnect.c | 4 + 8 files changed, 263 insertions(+), 11 deletions(-) create mode 100644 openbsd-compat/bsd-cray.h create mode 100644 openbsd-compat/inet_ntop.c create mode 100644 openbsd-compat/inet_ntop.h diff --git a/ChangeLog b/ChangeLog index 14f54496b..46a8b2907 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,13 @@ +20010807 + - (tim) [configure.in sshconnect.c openbsd-compat/Makefile.in + openbsd-compat/openbsd-compat.h ] Add inet_ntop.c inet_ntop.h back + in. Needed for sshconnect.c + [sshconnect.c] fix INET6_ADDRSTRLEN for non IPv6 machines + [configure.in] make tests with missing libraries fail + patch by Wendy Palm + Added openbsd-compat/bsd-cray.h. Selective patches from + William L. Jones + 20010806 - OpenBSD CVS Sync - markus@cvs.openbsd.org 2001/07/22 21:32:27 @@ -6260,4 +6270,4 @@ - Wrote replacements for strlcpy and mkdtemp - Released 1.0pre1 -$Id: ChangeLog,v 1.1467 2001/08/06 23:29:16 mouring Exp $ +$Id: ChangeLog,v 1.1468 2001/08/07 22:29:07 tim Exp $ diff --git a/configure.in b/configure.in index 4210d3e94..28843226d 100644 --- a/configure.in +++ b/configure.in @@ -1,4 +1,4 @@ -# $Id: configure.in,v 1.305 2001/08/06 23:29:17 mouring Exp $ +# $Id: configure.in,v 1.306 2001/08/07 22:29:08 tim Exp $ AC_INIT(ssh.c) @@ -242,12 +242,12 @@ mips-sony-bsd|mips-sony-newsos4) MANTYPE=man ;; *-*-unicos*) - no_libsocket=1 - no_libnsl=1 + no_libsocket=1 + no_libnsl=1 AC_DEFINE(USE_PIPES) - LDFLAGS="$LDFLAGS -L/usr/local/lib" - LIBS="$LIBS -lgen -lrsc" - ;; + LDFLAGS="$LDFLAGS -Wl,-Dmsglevel=334:fatal,-L/usr/local/lib" + LIBS="$LIBS -lgen -lrsc" + ;; *-dec-osf*) AC_MSG_CHECKING(for Digital Unix SIA) no_osfsia="" @@ -469,7 +469,7 @@ AC_ARG_WITH(tcp-wrappers, ) dnl Checks for library functions. -AC_CHECK_FUNCS(arc4random atexit b64_ntop bcopy bindresvport_sa clock dirname fchown fchmod freeaddrinfo futimes gai_strerror getcwd getaddrinfo getgrouplist getopt getnameinfo getrlimit getrusage getttyent glob inet_aton inet_ntoa innetgr login_getcapbool md5_crypt memmove mkdtemp on_exit openpty readpassphrase realpath rresvport_af setdtablesize setenv setegid seteuid setlogin setproctitle setresgid setreuid setrlimit setsid setvbuf sigaction sigvec snprintf strerror strlcat strlcpy strmode strsep sysconf tcgetpgrp utimes vsnprintf vhangup vis waitpid _getpty __b64_ntop) +AC_CHECK_FUNCS(arc4random atexit b64_ntop bcopy bindresvport_sa clock dirname fchown fchmod freeaddrinfo futimes gai_strerror getcwd getaddrinfo getgrouplist getopt getnameinfo getrlimit getrusage getttyent glob inet_aton inet_ntoa inet_ntop innetgr login_getcapbool md5_crypt memmove mkdtemp on_exit openpty readpassphrase realpath rresvport_af setdtablesize setenv setegid seteuid setlogin setproctitle setresgid setreuid setrlimit setsid setvbuf sigaction sigvec snprintf strerror strlcat strlcpy strmode strsep sysconf tcgetpgrp utimes vsnprintf vhangup vis waitpid _getpty __b64_ntop) dnl Checks for time functions AC_CHECK_FUNCS(gettimeofday time) dnl Checks for libutil functions diff --git a/openbsd-compat/Makefile.in b/openbsd-compat/Makefile.in index 8ce35e531..c6b3c959e 100644 --- a/openbsd-compat/Makefile.in +++ b/openbsd-compat/Makefile.in @@ -1,4 +1,4 @@ -# $Id: Makefile.in,v 1.17 2001/07/22 19:32:01 mouring Exp $ +# $Id: Makefile.in,v 1.18 2001/08/07 22:29:09 tim Exp $ sysconfdir=@sysconfdir@ piddir=@piddir@ @@ -16,7 +16,7 @@ RANLIB=@RANLIB@ INSTALL=@INSTALL@ LDFLAGS=-L. @LDFLAGS@ -OPENBSD=base64.o bindresvport.o daemon.o dirname.o getcwd.o getgrouplist.o getopt.o glob.o inet_aton.o inet_ntoa.o mktemp.o readpassphrase.o realpath.o rresvport.o setenv.o setproctitle.o sigact.o strlcat.o strlcpy.o strmode.o strsep.o vis.o +OPENBSD=base64.o bindresvport.o daemon.o dirname.o getcwd.o getgrouplist.o getopt.o glob.o inet_aton.o inet_ntoa.o inet_ntop.o mktemp.o readpassphrase.o realpath.o rresvport.o setenv.o setproctitle.o sigact.o strlcat.o strlcpy.o strmode.o strsep.o vis.o COMPAT=bsd-arc4random.o bsd-cray.o bsd-cygwin_util.o bsd-misc.o bsd-nextstep.o bsd-snprintf.o bsd-waitpid.o fake-getaddrinfo.o fake-getnameinfo.o diff --git a/openbsd-compat/bsd-cray.h b/openbsd-compat/bsd-cray.h new file mode 100644 index 000000000..4ca2dbe51 --- /dev/null +++ b/openbsd-compat/bsd-cray.h @@ -0,0 +1,13 @@ + +#ifndef _BSD_CRAY_H +#define _BSD_CRAY_H + +#ifdef _CRAY +void cray_init_job(struct passwd *); /* init cray job */ +void cray_job_termination_handler(int); /* process end of job signal */ +void cray_setup(uid_t, char *); /* set cray limits */ +extern char cray_tmpdir[]; /* cray tmpdir */ +#endif + + +#endif /* _BSD_CRAY_H */ diff --git a/openbsd-compat/inet_ntop.c b/openbsd-compat/inet_ntop.c new file mode 100644 index 000000000..bf3d97ade --- /dev/null +++ b/openbsd-compat/inet_ntop.c @@ -0,0 +1,211 @@ +/* $OpenBSD: inet_ntop.c,v 1.1 1997/03/13 19:07:32 downsj 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. + */ + +#include "config.h" + +#ifndef HAVE_INET_NTOP + +#if defined(LIBC_SCCS) && !defined(lint) +#if 0 +static char rcsid[] = "$From: inet_ntop.c,v 8.7 1996/08/05 08:41:18 vixie Exp $"; +#else +static char rcsid[] = "$OpenBSD: inet_ntop.c,v 1.1 1997/03/13 19:07:32 downsj Exp $"; +#endif +#endif /* LIBC_SCCS and not lint */ + +#include +#include +#include +#include "openbsd-compat/fake-socket.h" +#include +#include +#ifndef HAVE_CYGWIN +#include +#endif +#include +#include +#include + +#ifndef IN6ADDRSZ +#define IN6ADDRSZ 16 /* IPv6 T_AAAA */ +#endif + +#ifndef INT16SZ +#define INT16SZ 2 /* for systems without 16-bit ints */ +#endif + +/* + * WARNING: Don't even consider trying to compile this on a system where + * sizeof(int) < 4. sizeof(int) > 4 is fine; all the world's not a VAX. + */ + +static const char *inet_ntop4 __P((const u_char *src, char *dst, size_t size)); +static const char *inet_ntop6 __P((const u_char *src, char *dst, size_t size)); + +/* char * + * inet_ntop(af, src, dst, size) + * convert a network format address to presentation format. + * return: + * pointer to presentation format address (`dst'), or NULL (see errno). + * author: + * Paul Vixie, 1996. + */ +const char * +inet_ntop(af, src, dst, size) + int af; + const void *src; + char *dst; + size_t size; +{ + switch (af) { + case AF_INET: + return (inet_ntop4(src, dst, size)); + case AF_INET6: + return (inet_ntop6(src, dst, size)); + default: + errno = EAFNOSUPPORT; + return (NULL); + } + /* NOTREACHED */ +} + +/* const char * + * inet_ntop4(src, dst, size) + * format an IPv4 address, more or less like inet_ntoa() + * return: + * `dst' (as a const) + * notes: + * (1) uses no statics + * (2) takes a u_char* not an in_addr as input + * author: + * Paul Vixie, 1996. + */ +static const char * +inet_ntop4(src, dst, size) + const u_char *src; + char *dst; + size_t size; +{ + static const char fmt[] = "%u.%u.%u.%u"; + char tmp[sizeof "255.255.255.255"]; + + if (sprintf(tmp, fmt, src[0], src[1], src[2], src[3]) > size) { + errno = ENOSPC; + return (NULL); + } + strcpy(dst, tmp); + return (dst); +} + +/* const char * + * inet_ntop6(src, dst, size) + * convert IPv6 binary address into presentation (printable) format + * author: + * Paul Vixie, 1996. + */ +static const char * +inet_ntop6(src, dst, size) + const u_char *src; + char *dst; + size_t size; +{ + /* + * Note that int32_t and int16_t need only be "at least" large enough + * to contain a value of the specified size. On some systems, like + * Crays, there is no such thing as an integer variable with 16 bits. + * Keep this in mind if you think this function should have been coded + * to use pointer overlays. All the world's not a VAX. + */ + char tmp[sizeof "ffff:ffff:ffff:ffff:ffff:ffff:255.255.255.255"], *tp; + struct { int base, len; } best, cur; + u_int words[IN6ADDRSZ / INT16SZ]; + int i; + + /* + * Preprocess: + * Copy the input (bytewise) array into a wordwise array. + * Find the longest run of 0x00's in src[] for :: shorthanding. + */ + memset(words, '\0', sizeof words); + for (i = 0; i < IN6ADDRSZ; i++) + words[i / 2] |= (src[i] << ((1 - (i % 2)) << 3)); + best.base = -1; + cur.base = -1; + for (i = 0; i < (IN6ADDRSZ / INT16SZ); i++) { + if (words[i] == 0) { + if (cur.base == -1) + cur.base = i, cur.len = 1; + else + cur.len++; + } else { + if (cur.base != -1) { + if (best.base == -1 || cur.len > best.len) + best = cur; + cur.base = -1; + } + } + } + if (cur.base != -1) { + if (best.base == -1 || cur.len > best.len) + best = cur; + } + if (best.base != -1 && best.len < 2) + best.base = -1; + + /* + * Format the result. + */ + tp = tmp; + for (i = 0; i < (IN6ADDRSZ / INT16SZ); i++) { + /* Are we inside the best run of 0x00's? */ + if (best.base != -1 && i >= best.base && + i < (best.base + best.len)) { + if (i == best.base) + *tp++ = ':'; + continue; + } + /* Are we following an initial run of 0x00s or any real hex? */ + if (i != 0) + *tp++ = ':'; + /* Is this address an encapsulated IPv4? */ + if (i == 6 && best.base == 0 && + (best.len == 6 || (best.len == 5 && words[5] == 0xffff))) { + if (!inet_ntop4(src+12, tp, sizeof tmp - (tp - tmp))) + return (NULL); + tp += strlen(tp); + break; + } + tp += sprintf(tp, "%x", words[i]); + } + /* Was it a trailing run of 0x00's? */ + if (best.base != -1 && (best.base + best.len) == (IN6ADDRSZ / INT16SZ)) + *tp++ = ':'; + *tp++ = '\0'; + + /* + * Check for overflow, copy, and we're done. + */ + if ((size_t)(tp - tmp) > size) { + errno = ENOSPC; + return (NULL); + } + strcpy(dst, tmp); + return (dst); +} + +#endif /* !HAVE_INET_NTOP */ diff --git a/openbsd-compat/inet_ntop.h b/openbsd-compat/inet_ntop.h new file mode 100644 index 000000000..ab0f14835 --- /dev/null +++ b/openbsd-compat/inet_ntop.h @@ -0,0 +1,13 @@ +/* $Id: inet_ntop.h,v 1.3 2001/08/07 22:29:10 tim Exp $ */ + +#ifndef _BSD_RRESVPORT_H +#define _BSD_RRESVPORT_H + +#include "config.h" + +#ifndef HAVE_INET_NTOP +const char * +inet_ntop(int af, const void *src, char *dst, size_t size); +#endif /* !HAVE_INET_NTOP */ + +#endif /* _BSD_RRESVPORT_H */ diff --git a/openbsd-compat/openbsd-compat.h b/openbsd-compat/openbsd-compat.h index ab07315b6..eba9ca051 100644 --- a/openbsd-compat/openbsd-compat.h +++ b/openbsd-compat/openbsd-compat.h @@ -1,4 +1,4 @@ -/* $Id: openbsd-compat.h,v 1.12 2001/08/06 23:29:18 mouring Exp $ */ +/* $Id: openbsd-compat.h,v 1.13 2001/08/07 22:29:09 tim Exp $ */ #ifndef _OPENBSD_H #define _OPENBSD_H @@ -19,6 +19,7 @@ #include "base64.h" #include "sigact.h" #include "inet_ntoa.h" +#include "inet_ntop.h" #include "strsep.h" #include "vis.h" #include "setproctitle.h" diff --git a/sshconnect.c b/sshconnect.c index 27b338719..0ae100fed 100644 --- a/sshconnect.c +++ b/sshconnect.c @@ -41,6 +41,10 @@ extern char *__progname; /* AF_UNSPEC or AF_INET or AF_INET6 */ extern int IPv4or6; +#ifndef INET6_ADDRSTRLEN /* for non IPv6 machines */ +#define INET6_ADDRSTRLEN 46 +#endif + static const char * sockaddr_ntop(struct sockaddr *sa) { -- cgit v1.2.3