diff options
author | Markus Friedl <markus@cvs.openbsd.org> | 2000-05-04 22:38:01 +0000 |
---|---|---|
committer | Markus Friedl <markus@cvs.openbsd.org> | 2000-05-04 22:38:01 +0000 |
commit | 2c81c2093a3028231aa7c5f95463122bd2048918 (patch) | |
tree | 207f4245602df598c83b5fada539c7331aa6aee7 /usr.bin/ssh | |
parent | 60abf7cc1b62eff8e4373d8294f2392ef03b43f9 (diff) |
replace broken uuencode w/ libc b64_ntop
Diffstat (limited to 'usr.bin/ssh')
-rw-r--r-- | usr.bin/ssh/dsa.c | 4 | ||||
-rw-r--r-- | usr.bin/ssh/key.c | 8 | ||||
-rw-r--r-- | usr.bin/ssh/radix.c | 4 | ||||
-rw-r--r-- | usr.bin/ssh/ssh.h | 4 | ||||
-rw-r--r-- | usr.bin/ssh/sshconnect1.c | 6 | ||||
-rw-r--r-- | usr.bin/ssh/uuencode.c | 100 | ||||
-rw-r--r-- | usr.bin/ssh/uuencode.h | 4 |
7 files changed, 24 insertions, 106 deletions
diff --git a/usr.bin/ssh/dsa.c b/usr.bin/ssh/dsa.c index a4f6d3e7857..58059080939 100644 --- a/usr.bin/ssh/dsa.c +++ b/usr.bin/ssh/dsa.c @@ -28,7 +28,7 @@ */ #include "includes.h" -RCSID("$Id: dsa.c,v 1.5 2000/04/26 20:56:29 markus Exp $"); +RCSID("$Id: dsa.c,v 1.6 2000/05/04 22:37:59 markus Exp $"); #include "ssh.h" #include "xmalloc.h" @@ -63,7 +63,7 @@ dsa_key_from_blob( Key *key; #ifdef DEBUG_DSS - dump_base64(blob, blen); + dump_base64(stderr, blob, blen); #endif /* fetch & parse DSA/DSS pubkey */ key = key_new(KEY_DSA); diff --git a/usr.bin/ssh/key.c b/usr.bin/ssh/key.c index 1ce08ad7008..572317a6416 100644 --- a/usr.bin/ssh/key.c +++ b/usr.bin/ssh/key.c @@ -297,11 +297,13 @@ key_write(Key *key, FILE *f) unsigned char *blob, *uu; dsa_make_key_blob(key, &blob, &len); uu = xmalloc(2*len); - n = uuencode(blob, len, uu); - fprintf(f, "%s %s", SSH_DSS, uu); + n = uuencode(blob, len, uu, 2*len); + if (n > 0) { + fprintf(f, "%s %s", SSH_DSS, uu); + success = 1; + } xfree(blob); xfree(uu); - success = 1; } return success; } diff --git a/usr.bin/ssh/radix.c b/usr.bin/ssh/radix.c index 9d1c999a12b..4a8e9df069b 100644 --- a/usr.bin/ssh/radix.c +++ b/usr.bin/ssh/radix.c @@ -69,7 +69,7 @@ typedef unsigned short my_u_short; int -creds_to_radix(CREDENTIALS *creds, unsigned char *buf) +creds_to_radix(CREDENTIALS *creds, unsigned char *buf, size_t buflen) { char *p, *s; int len; @@ -119,7 +119,7 @@ creds_to_radix(CREDENTIALS *creds, unsigned char *buf) p += creds->ticket_st.length; len = p - temp; - return (uuencode((unsigned char *)temp, len, (char *)buf)); + return (uuencode((unsigned char *)temp, len, (char *)buf, buflen)); } int diff --git a/usr.bin/ssh/ssh.h b/usr.bin/ssh/ssh.h index 2b6712aecbe..ac3698562a7 100644 --- a/usr.bin/ssh/ssh.h +++ b/usr.bin/ssh/ssh.h @@ -13,7 +13,7 @@ * */ -/* RCSID("$Id: ssh.h,v 1.43 2000/05/03 10:21:48 markus Exp $"); */ +/* RCSID("$Id: ssh.h,v 1.44 2000/05/04 22:38:00 markus Exp $"); */ #ifndef SSH_H #define SSH_H @@ -489,7 +489,7 @@ int auth_krb4_password(struct passwd * pw, const char *password); int auth_kerberos_tgt(struct passwd * pw, const char *string); int auth_afs_token(struct passwd * pw, const char *token_string); -int creds_to_radix(CREDENTIALS * creds, unsigned char *buf); +int creds_to_radix(CREDENTIALS * creds, unsigned char *buf, size_t buflen); int radix_to_creds(const char *buf, CREDENTIALS * creds); #endif /* AFS */ diff --git a/usr.bin/ssh/sshconnect1.c b/usr.bin/ssh/sshconnect1.c index c5a76654bc6..31ee9843cde 100644 --- a/usr.bin/ssh/sshconnect1.c +++ b/usr.bin/ssh/sshconnect1.c @@ -9,7 +9,7 @@ */ #include "includes.h" -RCSID("$OpenBSD: sshconnect1.c,v 1.1 2000/04/26 21:28:33 markus Exp $"); +RCSID("$OpenBSD: sshconnect1.c,v 1.2 2000/05/04 22:38:00 markus Exp $"); #include <openssl/bn.h> #include <openssl/dsa.h> @@ -505,7 +505,7 @@ send_kerberos_tgt() debug("Kerberos V4 ticket expired: %s", TKT_FILE); return 0; } - creds_to_radix(creds, (unsigned char *)buffer); + creds_to_radix(creds, (unsigned char *)buffer, sizeof buffer); xfree(creds); packet_start(SSH_CMSG_HAVE_KERBEROS_TGT); @@ -573,7 +573,7 @@ send_afs_tokens(void) creds.pinst[0] = '\0'; /* Encode token, ship it off. */ - if (!creds_to_radix(&creds, (unsigned char*) buffer)) + if (creds_to_radix(&creds, (unsigned char*) buffer, sizeof buffer) <= 0) break; packet_start(SSH_CMSG_HAVE_AFS_TOKEN); packet_put_string(buffer, strlen(buffer)); diff --git a/usr.bin/ssh/uuencode.c b/usr.bin/ssh/uuencode.c index 62689005090..a67040b2fb1 100644 --- a/usr.bin/ssh/uuencode.c +++ b/usr.bin/ssh/uuencode.c @@ -1,106 +1,22 @@ /* - * base-64 encoding pinched from lynx2-7-2, who pinched it from rpem. - * Originally written by Mark Riordan 12 August 1990 and 17 Feb 1991 - * and placed in the public domain. - * - * Dug Song <dugsong@UMICH.EDU> + * Copyright (c) 2000 Markus Friedl. All rights reserved. */ - #include "includes.h" #include "xmalloc.h" -char six2pr[64] = { - 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', - 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', - 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', - 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', - '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '+', '/' -}; - -unsigned char pr2six[256]; +#include <resolv.h> int -uuencode(unsigned char *bufin, unsigned int nbytes, char *bufcoded) +uuencode(unsigned char *src, unsigned int srclength, + char *target, size_t targsize) { - /* ENC is the basic 1 character encoding function to make a char printing */ -#define ENC(c) six2pr[c] - - register char *outptr = bufcoded; - unsigned int i; - - for (i = 0; i < nbytes; i += 3) { - *(outptr++) = ENC(*bufin >> 2); /* c1 */ - *(outptr++) = ENC(((*bufin << 4) & 060) | ((bufin[1] >> 4) & 017)); /* c2 */ - *(outptr++) = ENC(((bufin[1] << 2) & 074) | ((bufin[2] >> 6) & 03)); /* c3 */ - *(outptr++) = ENC(bufin[2] & 077); /* c4 */ - bufin += 3; - } - if (i == nbytes + 1) { - outptr[-1] = '='; - } else if (i == nbytes + 2) { - outptr[-1] = '='; - outptr[-2] = '='; - } else if (i == nbytes) { - *(outptr++) = '='; - } - *outptr = '\0'; - return (outptr - bufcoded); + return b64_ntop(src, srclength, target, targsize); } int -uudecode(const char *bufcoded, unsigned char *bufplain, int outbufsize) +uudecode(const char *src, unsigned char *target, size_t targsize) { - /* single character decode */ -#define DEC(c) pr2six[(unsigned char)c] -#define MAXVAL 63 - - static int first = 1; - int nbytesdecoded, j; - const char *bufin = bufcoded; - register unsigned char *bufout = bufplain; - register int nprbytes; - - /* If this is the first call, initialize the mapping table. */ - if (first) { - first = 0; - for (j = 0; j < 256; j++) - pr2six[j] = MAXVAL + 1; - for (j = 0; j < 64; j++) - pr2six[(unsigned char) six2pr[j]] = (unsigned char) j; - } - /* Strip leading whitespace. */ - while (*bufcoded == ' ' || *bufcoded == '\t') - bufcoded++; - - /* - * Figure out how many characters are in the input buffer. If this - * would decode into more bytes than would fit into the output - * buffer, adjust the number of input bytes downwards. - */ - bufin = bufcoded; - while (DEC(*(bufin++)) <= MAXVAL) - ; - nprbytes = bufin - bufcoded - 1; - nbytesdecoded = ((nprbytes + 3) / 4) * 3; - if (nbytesdecoded > outbufsize) - nprbytes = (outbufsize * 4) / 3; - - bufin = bufcoded; - - while (nprbytes > 0) { - *(bufout++) = (unsigned char) (DEC(*bufin) << 2 | DEC(bufin[1]) >> 4); - *(bufout++) = (unsigned char) (DEC(bufin[1]) << 4 | DEC(bufin[2]) >> 2); - *(bufout++) = (unsigned char) (DEC(bufin[2]) << 6 | DEC(bufin[3])); - bufin += 4; - nprbytes -= 4; - } - if (nprbytes & 03) { - if (DEC(bufin[-2]) > MAXVAL) - nbytesdecoded -= 2; - else - nbytesdecoded -= 1; - } - return (nbytesdecoded); + return b64_pton(src, target, targsize); } void @@ -108,7 +24,7 @@ dump_base64(FILE *fp, unsigned char *data, int len) { unsigned char *buf = xmalloc(2*len); int i, n; - n = uuencode(data, len, buf); + n = uuencode(data, len, buf, 2*len); for (i = 0; i < n; i++) { fprintf(fp, "%c", buf[i]); if (i % 70 == 69) diff --git a/usr.bin/ssh/uuencode.h b/usr.bin/ssh/uuencode.h index d3f4462845b..c92c62744cc 100644 --- a/usr.bin/ssh/uuencode.h +++ b/usr.bin/ssh/uuencode.h @@ -1,6 +1,6 @@ #ifndef UUENCODE_H #define UUENCODE_H -int uuencode(unsigned char *bufin, unsigned int nbytes, char *bufcoded); -int uudecode(const char *bufcoded, unsigned char *bufplain, int outbufsize); +int uuencode(unsigned char *src, unsigned int srclength, char *target, size_t targsize); +int uudecode(const char *src, unsigned char *target, size_t targsize); void dump_base64(FILE *fp, unsigned char *data, int len); #endif |