]> andersk Git - openssh.git/commitdiff
- (djm) Sync openbsd-compat with OpenBSD -current
authordjm <djm>
Wed, 11 Sep 2002 00:29:11 +0000 (00:29 +0000)
committerdjm <djm>
Wed, 11 Sep 2002 00:29:11 +0000 (00:29 +0000)
ChangeLog
openbsd-compat/base64.c
openbsd-compat/dirname.c
openbsd-compat/glob.c
openbsd-compat/glob.h
openbsd-compat/inet_ntoa.c
openbsd-compat/inet_ntop.c
openbsd-compat/mktemp.c
openbsd-compat/readpassphrase.c
openbsd-compat/readpassphrase.h

index 070e02283f822ccae039a5aa6377e46c074de4da..342176e50aea5c889e2c2645a718a40bfaa747fb 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,6 @@
+20020911
+ - (djm) Sync openbsd-compat with OpenBSD -current
+
 20020910
  - (djm) Bug #365: Read /.ssh/environment properly under CygWin. 
    Patch from Mark Bradshaw <bradshaw@staff.crosswalk.com>
index 48ba5425666fbd3f2b01d86aecd8964129f7465b..005170b80dfd55fbb83c5f4053a80eab023f422b 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: base64.c,v 1.3 1997/11/08 20:46:55 deraadt Exp $      */
+/*     $OpenBSD: base64.c,v 1.4 2002/01/02 23:00:10 deraadt Exp $      */
 
 /*
  * Copyright (c) 1996 by Internet Software Consortium.
@@ -60,6 +60,7 @@
 
 #include "base64.h"
 
+/* XXX abort illegal in library */
 #define Assert(Cond) if (!(Cond)) abort()
 
 static const char Base64[] =
index 391b2dd81cfce10041ba30bcdb539ca294cb9a4b..35c7d8ec7e226a52169ab5fa3168a4003bf3854f 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: dirname.c,v 1.6 2001/06/28 04:27:19 pjanzen Exp $     */
+/*     $OpenBSD: dirname.c,v 1.7 2002/05/24 21:22:37 deraadt Exp $     */
 
 /*
  * Copyright (c) 1997 Todd C. Miller <Todd.Miller@courtesan.com>
@@ -31,7 +31,7 @@
 #ifndef HAVE_DIRNAME
 
 #if defined(LIBC_SCCS) && !defined(lint)
-static char rcsid[] = "$OpenBSD: dirname.c,v 1.6 2001/06/28 04:27:19 pjanzen Exp $";
+static char rcsid[] = "$OpenBSD: dirname.c,v 1.7 2002/05/24 21:22:37 deraadt Exp $";
 #endif /* LIBC_SCCS and not lint */
 
 #include <errno.h>
@@ -47,7 +47,7 @@ dirname(path)
 
        /* Empty or NULL string gets treated as "." */
        if (path == NULL || *path == '\0') {
-               (void)strcpy(bname, ".");
+               (void)strlcpy(bname, ".", sizeof bname);
                return(bname);
        }
 
@@ -62,7 +62,7 @@ dirname(path)
 
        /* Either the dir is "/" or there are no slashes */
        if (endp == path) {
-               (void)strcpy(bname, *endp == '/' ? "/" : ".");
+               (void)strlcpy(bname, *endp == '/' ? "/" : ".", sizeof bname);
                return(bname);
        } else {
                do {
index 14c91420dc1c10525e6b472db6c67d0b46d877ea..e928a2272c15526fe0c27f0c54a54b644575857b 100644 (file)
@@ -56,7 +56,7 @@ get_arg_max(void)
 #if 0
 static char sccsid[] = "@(#)glob.c     8.3 (Berkeley) 10/13/93";
 #else
-static char rcsid[] = "$OpenBSD: glob.c,v 1.16 2001/04/05 18:36:12 deraadt Exp $";
+static char rcsid[] = "$OpenBSD: glob.c,v 1.20 2002/06/14 21:34:58 todd Exp $";
 #endif
 #endif /* LIBC_SCCS and not lint */
 
@@ -137,32 +137,32 @@ typedef char Char;
 #define        ismeta(c)       (((c)&M_QUOTE) != 0)
 
 
-static int      compare __P((const void *, const void *));
-static int      g_Ctoc __P((const Char *, char *, u_int));
-static int      g_lstat __P((Char *, struct stat *, glob_t *));
-static DIR     *g_opendir __P((Char *, glob_t *));
-static Char    *g_strchr __P((Char *, int));
-static int      g_stat __P((Char *, struct stat *, glob_t *));
-static int      glob0 __P((const Char *, glob_t *));
-static int      glob1 __P((Char *, Char *, glob_t *, size_t *));
-static int      glob2 __P((Char *, Char *, Char *, Char *, Char *, Char *,
-                   glob_t *, size_t *));
-static int      glob3 __P((Char *, Char *, Char *, Char *, Char *, Char *,
-                   Char *, Char *, glob_t *, size_t *));
-static int      globextend __P((const Char *, glob_t *, size_t *));
+static int      compare(const void *, const void *);
+static int      g_Ctoc(const Char *, char *, u_int);
+static int      g_lstat(Char *, struct stat *, glob_t *);
+static DIR     *g_opendir(Char *, glob_t *);
+static Char    *g_strchr(Char *, int);
+static int      g_stat(Char *, struct stat *, glob_t *);
+static int      glob0(const Char *, glob_t *);
+static int      glob1(Char *, Char *, glob_t *, size_t *);
+static int      glob2(Char *, Char *, Char *, Char *, Char *, Char *,
+                   glob_t *, size_t *);
+static int      glob3(Char *, Char *, Char *, Char *, Char *, Char *,
+                   Char *, Char *, glob_t *, size_t *);
+static int      globextend(const Char *, glob_t *, size_t *);
 static const Char *
-                globtilde __P((const Char *, Char *, size_t, glob_t *));
-static int      globexp1 __P((const Char *, glob_t *));
-static int      globexp2 __P((const Char *, const Char *, glob_t *, int *));
-static int      match __P((Char *, Char *, Char *));
+                globtilde(const Char *, Char *, size_t, glob_t *);
+static int      globexp1(const Char *, glob_t *);
+static int      globexp2(const Char *, const Char *, glob_t *, int *);
+static int      match(Char *, Char *, Char *);
 #ifdef DEBUG
-static void     qprintf __P((const char *, Char *));
+static void     qprintf(const char *, Char *);
 #endif
 
 int
 glob(pattern, flags, errfunc, pglob)
        const char *pattern;
-       int flags, (*errfunc) __P((const char *, int));
+       int flags, (*errfunc)(const char *, int);
        glob_t *pglob;
 {
        const u_char *patnext;
@@ -677,7 +677,7 @@ glob3(pathbuf, pathbuf_last, pathend, pathend_last, pattern, pattern_last,
 
 
 /*
- * Extend the gl_pathv member of a glob_t structure to accomodate a new item,
+ * Extend the gl_pathv member of a glob_t structure to accommodate a new item,
  * add the new item, and update gl_pathc.
  *
  * This assumes the BSD realloc, which only copies the block when its size
@@ -822,7 +822,7 @@ g_opendir(str, pglob)
        char buf[MAXPATHLEN];
 
        if (!*str)
-               strcpy(buf, ".");
+               strlcpy(buf, ".", sizeof buf);
        else {
                if (g_Ctoc(str, buf, sizeof(buf)))
                        return(NULL);
index b4c8f7aaa642f58b554f80d9cd3958c1055e078b..6421f7049a8b479bcb6218b454ea929d8ed3511e 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: glob.h,v 1.5 2001/03/18 17:18:58 deraadt Exp $        */
+/*     $OpenBSD: glob.h,v 1.7 2002/02/17 19:42:21 millert Exp $        */
 /*     $NetBSD: glob.h,v 1.5 1994/10/26 00:55:56 cgd Exp $     */
 
 /*
@@ -53,18 +53,18 @@ typedef struct {
        int gl_flags;           /* Copy of flags parameter to glob. */
        char **gl_pathv;        /* List of paths matching pattern. */
                                /* Copy of errfunc parameter to glob. */
-       int (*gl_errfunc) __P((const char *, int));
+       int (*gl_errfunc)(const char *, int);
 
        /*
         * Alternate filesystem access methods for glob; replacement
         * versions of closedir(3), readdir(3), opendir(3), stat(2)
         * and lstat(2).
         */
-       void (*gl_closedir) __P((void *));
-       struct dirent *(*gl_readdir) __P((void *));     
-       void *(*gl_opendir) __P((const char *));
-       int (*gl_lstat) __P((const char *, struct stat *));
-       int (*gl_stat) __P((const char *, struct stat *));
+       void (*gl_closedir)(void *);
+       struct dirent *(*gl_readdir)(void *);   
+       void *(*gl_opendir)(const char *);
+       int (*gl_lstat)(const char *, struct stat *);
+       int (*gl_stat)(const char *, struct stat *);
 } glob_t;
 
 /* Flags */
@@ -91,8 +91,8 @@ typedef struct {
 #define        GLOB_NOSYS      (-4)    /* Function not supported. */
 #define GLOB_ABEND     GLOB_ABORTED
 
-int    glob __P((const char *, int, int (*)(const char *, int), glob_t *));
-void   globfree __P((glob_t *));
+int    glob(const char *, int, int (*)(const char *, int), glob_t *);
+void   globfree(glob_t *);
 
 #endif /* !_GLOB_H_ */
 
index ad228229cc4e008325dbc25bad103097644f2c13..ac5f567081eb56603372060cf4491eb95cebc67d 100644 (file)
@@ -36,7 +36,7 @@
 #if defined(BROKEN_INET_NTOA) || !defined(HAVE_INET_NTOA)
 
 #if defined(LIBC_SCCS) && !defined(lint)
-static char rcsid[] = "$OpenBSD: inet_ntoa.c,v 1.2 1996/08/19 08:29:16 tholo Exp $";
+static char rcsid[] = "$OpenBSD: inet_ntoa.c,v 1.3 2002/06/27 10:14:01 itojun Exp $";
 #endif /* LIBC_SCCS and not lint */
 
 /*
@@ -57,7 +57,7 @@ char *inet_ntoa(struct in_addr in)
        p = (char *)&in;
 #define        UC(b)   (((int)b)&0xff)
        (void)snprintf(b, sizeof(b),
-           "%d.%d.%d.%d", UC(p[0]), UC(p[1]), UC(p[2]), UC(p[3]));
+           "%u.%u.%u.%u", UC(p[0]), UC(p[1]), UC(p[2]), UC(p[3]));
        return (b);
 }
 
index 3a91aecd4754371ec202ce2e5e0bff2c986d8217..3bea519afb8c4fa9e46bf27eb1c177e78afc220a 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: inet_ntop.c,v 1.1 1997/03/13 19:07:32 downsj Exp $    */
+/*     $OpenBSD: inet_ntop.c,v 1.5 2002/08/23 16:27:31 itojun Exp $    */
 
 /* Copyright (c) 1996 by Internet Software Consortium.
  *
@@ -24,7 +24,7 @@
 #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 $";
+static char rcsid[] = "$OpenBSD: inet_ntop.c,v 1.5 2002/08/23 16:27:31 itojun Exp $";
 #endif
 #endif /* LIBC_SCCS and not lint */
 
@@ -54,8 +54,8 @@ static char rcsid[] = "$OpenBSD: inet_ntop.c,v 1.1 1997/03/13 19:07:32 downsj Ex
  * 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));
+static const char *inet_ntop4(const u_char *src, char *dst, size_t size);
+static const char *inet_ntop6(const u_char *src, char *dst, size_t size);
 
 /* char *
  * inet_ntop(af, src, dst, size)
@@ -103,13 +103,14 @@ inet_ntop4(src, dst, size)
 {
        static const char fmt[] = "%u.%u.%u.%u";
        char tmp[sizeof "255.255.255.255"];
+       int l;
 
-       if (snprintf(tmp, sizeof(tmp), fmt, src[0], src[1], src[2],
-           src[3]) > size) {
+       l = snprintf(tmp, size, fmt, src[0], src[1], src[2], src[3]);
+       if (l <= 0 || l >= size) {
                errno = ENOSPC;
                return (NULL);
        }
-       strcpy(dst, tmp);
+       strlcpy(dst, tmp, size);
        return (dst);
 }
 
@@ -132,10 +133,12 @@ inet_ntop6(src, dst, size)
         * 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;
+       char tmp[sizeof "ffff:ffff:ffff:ffff:ffff:ffff:255.255.255.255"];
+       char *tp, *ep;
        struct { int base, len; } best, cur;
        u_int words[IN6ADDRSZ / INT16SZ];
        int i;
+       int advance;
 
        /*
         * Preprocess:
@@ -172,31 +175,45 @@ inet_ntop6(src, dst, size)
         * Format the result.
         */
        tp = tmp;
-       for (i = 0; i < (IN6ADDRSZ / INT16SZ); i++) {
+       ep = tmp + sizeof(tmp);
+       for (i = 0; i < (IN6ADDRSZ / INT16SZ) && tp < ep; 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)
+                       if (i == best.base) {
+                               if (tp + 1 >= ep)
+                                       return (NULL);
                                *tp++ = ':';
+                       }
                        continue;
                }
                /* Are we following an initial run of 0x00s or any real hex? */
-               if (i != 0)
+               if (i != 0) {
+                       if (tp + 1 >= ep)
+                               return (NULL);
                        *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)))
+                       if (!inet_ntop4(src+12, tp, (size_t)(ep - tp)))
                                return (NULL);
                        tp += strlen(tp);
                        break;
                }
-               snprintf(tp, sizeof(tmp - (tp - tmp)), "%x", words[i]);
-               tp += strlen(tp);
+               advance = snprintf(tp, ep - tp, "%x", words[i]);
+               if (advance <= 0 || advance >= ep - tp)
+                       return (NULL);
+               tp += advance;
        }
        /* Was it a trailing run of 0x00's? */
-       if (best.base != -1 && (best.base + best.len) == (IN6ADDRSZ / INT16SZ))
+       if (best.base != -1 && (best.base + best.len) == (IN6ADDRSZ / INT16SZ)) {
+               if (tp + 1 >= ep)
+                       return (NULL);
                *tp++ = ':';
+       }
+       if (tp + 1 >= ep)
+               return (NULL);
        *tp++ = '\0';
 
        /*
@@ -206,7 +223,7 @@ inet_ntop6(src, dst, size)
                errno = ENOSPC;
                return (NULL);
        }
-       strcpy(dst, tmp);
+       strlcpy(dst, tmp, size);
        return (dst);
 }
 
index d69dc5c24a5bb75d5c5ab244d714fa1e5a57745b..d256ee448a4c1304dae65686d619ea908ddbfe85 100644 (file)
@@ -39,7 +39,7 @@
 #ifndef HAVE_MKDTEMP
 
 #if defined(LIBC_SCCS) && !defined(lint)
-static char rcsid[] = "$OpenBSD: mktemp.c,v 1.14 2002/01/02 20:18:32 deraadt Exp $";
+static char rcsid[] = "$OpenBSD: mktemp.c,v 1.16 2002/05/27 18:20:45 millert Exp $";
 #endif /* LIBC_SCCS and not lint */
 
 #ifdef HAVE_CYGWIN
@@ -102,11 +102,11 @@ _gettemp(path, doopen, domkdir, slen)
                return (0);
        }
        pid = getpid();
-       while (*trv == 'X' && pid != 0) {
+       while (trv >= path && *trv == 'X' && pid != 0) {
                *trv-- = (pid % 10) + '0';
                pid /= 10;
        }
-       while (*trv == 'X') {
+       while (trv >= path && *trv == 'X') {
                char c;
 
                pid = (arc4random() & 0xffff) % (26+26);
index 8c2f5f8416863647c944583def02f81fa0370721..4e549b62b91e73253ac9b86f5a3431f5e130de34 100644 (file)
@@ -1,7 +1,7 @@
-/*     $OpenBSD: readpassphrase.c,v 1.12 2001/12/15 05:41:00 millert Exp $     */
+/*     $OpenBSD: readpassphrase.c,v 1.14 2002/06/28 01:43:58 millert Exp $     */
 
 /*
- * Copyright (c) 2000 Todd C. Miller <Todd.Miller@courtesan.com>
+ * Copyright (c) 2000-2002 Todd C. Miller <Todd.Miller@courtesan.com>
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -28,7 +28,7 @@
  */
 
 #if defined(LIBC_SCCS) && !defined(lint)
-static const char rcsid[] = "$OpenBSD: readpassphrase.c,v 1.12 2001/12/15 05:41:00 millert Exp $";
+static const char rcsid[] = "$OpenBSD: readpassphrase.c,v 1.14 2002/06/28 01:43:58 millert Exp $";
 #endif /* LIBC_SCCS and not lint */
 
 #include "includes.h"
@@ -60,8 +60,8 @@ readpassphrase(const char *prompt, char *buf, size_t bufsiz, int flags)
        int input, output, save_errno;
        char ch, *p, *end;
        struct termios term, oterm;
-       struct sigaction sa, saveint, savehup, savequit, saveterm;
-       struct sigaction savetstp, savettin, savettou;
+       struct sigaction sa, savealrm, saveint, savehup, savequit, saveterm;
+       struct sigaction savetstp, savettin, savettou, savepipe;
 
        /* I suppose we could alloc on demand in this case (XXX). */
        if (bufsiz == 0) {
@@ -70,11 +70,13 @@ readpassphrase(const char *prompt, char *buf, size_t bufsiz, int flags)
        }
 
 restart:
+       signo = 0;
        /*
         * Read and write to /dev/tty if available.  If not, read from
         * stdin and write to stderr unless a tty is required.
         */
-       if ((input = output = open(_PATH_TTY, O_RDWR)) == -1) {
+       if ((flags & RPP_STDIN) ||
+           (input = output = open(_PATH_TTY, O_RDWR)) == -1) {
                if (flags & RPP_REQUIRE_TTY) {
                        errno = ENOTTY;
                        return(NULL);
@@ -86,13 +88,15 @@ restart:
        /*
         * Catch signals that would otherwise cause the user to end
         * up with echo turned off in the shell.  Don't worry about
-        * things like SIGALRM and SIGPIPE for now.
+        * things like SIGXCPU and SIGVTALRM for now.
         */
        sigemptyset(&sa.sa_mask);
        sa.sa_flags = 0;                /* don't restart system calls */
        sa.sa_handler = handler;
-       (void)sigaction(SIGINT, &sa, &saveint);
+       (void)sigaction(SIGALRM, &sa, &savealrm);
        (void)sigaction(SIGHUP, &sa, &savehup);
+       (void)sigaction(SIGINT, &sa, &saveint);
+       (void)sigaction(SIGPIPE, &sa, &savepipe);
        (void)sigaction(SIGQUIT, &sa, &savequit);
        (void)sigaction(SIGTERM, &sa, &saveterm);
        (void)sigaction(SIGTSTP, &sa, &savetstp);
@@ -100,7 +104,7 @@ restart:
        (void)sigaction(SIGTTOU, &sa, &savettou);
 
        /* Turn off echo if possible. */
-       if (tcgetattr(input, &oterm) == 0) {
+       if (input != STDIN_FILENO && tcgetattr(input, &oterm) == 0) {
                memcpy(&term, &oterm, sizeof(term));
                if (!(flags & RPP_ECHO_ON))
                        term.c_lflag &= ~(ECHO | ECHONL);
@@ -111,10 +115,13 @@ restart:
                (void)tcsetattr(input, _T_FLUSH, &term);
        } else {
                memset(&term, 0, sizeof(term));
+               term.c_lflag |= ECHO;
                memset(&oterm, 0, sizeof(oterm));
+               oterm.c_lflag |= ECHO;
        }
 
-       (void)write(output, prompt, strlen(prompt));
+       if (!(flags & RPP_STDIN))
+               (void)write(output, prompt, strlen(prompt));
        end = buf + bufsiz - 1;
        for (p = buf; (nr = read(input, &ch, 1)) == 1 && ch != '\n' && ch != '\r';) {
                if (p < end) {
@@ -137,13 +144,14 @@ restart:
        /* Restore old terminal settings and signals. */
        if (memcmp(&term, &oterm, sizeof(term)) != 0)
                (void)tcsetattr(input, _T_FLUSH, &oterm);
-       (void)sigaction(SIGINT, &saveint, NULL);
+       (void)sigaction(SIGALRM, &savealrm, NULL);
        (void)sigaction(SIGHUP, &savehup, NULL);
+       (void)sigaction(SIGINT, &saveint, NULL);
        (void)sigaction(SIGQUIT, &savequit, NULL);
+       (void)sigaction(SIGPIPE, &savepipe, NULL);
        (void)sigaction(SIGTERM, &saveterm, NULL);
        (void)sigaction(SIGTSTP, &savetstp, NULL);
        (void)sigaction(SIGTTIN, &savettin, NULL);
-       (void)sigaction(SIGTTOU, &savettou, NULL);
        if (input != STDIN_FILENO)
                (void)close(input);
 
@@ -152,12 +160,11 @@ restart:
         * now that we have restored the signal handlers.
         */
        if (signo) {
-               kill(getpid(), signo); 
+               kill(getpid(), signo);
                switch (signo) {
                case SIGTSTP:
                case SIGTTIN:
                case SIGTTOU:
-                       signo = 0;
                        goto restart;
                }
        }
index 9077b6e0847b9168d890948e345099a5c17d6e12..92908a48955211aa199a68415d13d4739d34d6c1 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: readpassphrase.h,v 1.1 2000/11/21 00:48:38 millert Exp $      */
+/*     $OpenBSD: readpassphrase.h,v 1.3 2002/06/28 12:32:22 millert Exp $      */
 
 /*
  * Copyright (c) 2000 Todd C. Miller <Todd.Miller@courtesan.com>
@@ -40,8 +40,9 @@
 #define RPP_FORCELOWER  0x04           /* Force input to lower case. */
 #define RPP_FORCEUPPER  0x08           /* Force input to upper case. */
 #define RPP_SEVENBIT    0x10           /* Strip the high bit from input. */
+#define RPP_STDIN       0x20           /* Read from stdin, not /dev/tty */
 
-char *readpassphrase(const char *, char *, size_t, int);
+char * readpassphrase(const char *, char *, size_t, int);
 
 #endif /* HAVE_READPASSPHRASE */
 
This page took 0.087153 seconds and 5 git commands to generate.