summaryrefslogtreecommitdiff
path: root/usr.bin/ssh
diff options
context:
space:
mode:
authorMarkus Friedl <markus@cvs.openbsd.org>2000-05-04 22:38:01 +0000
committerMarkus Friedl <markus@cvs.openbsd.org>2000-05-04 22:38:01 +0000
commit2c81c2093a3028231aa7c5f95463122bd2048918 (patch)
tree207f4245602df598c83b5fada539c7331aa6aee7 /usr.bin/ssh
parent60abf7cc1b62eff8e4373d8294f2392ef03b43f9 (diff)
replace broken uuencode w/ libc b64_ntop
Diffstat (limited to 'usr.bin/ssh')
-rw-r--r--usr.bin/ssh/dsa.c4
-rw-r--r--usr.bin/ssh/key.c8
-rw-r--r--usr.bin/ssh/radix.c4
-rw-r--r--usr.bin/ssh/ssh.h4
-rw-r--r--usr.bin/ssh/sshconnect1.c6
-rw-r--r--usr.bin/ssh/uuencode.c100
-rw-r--r--usr.bin/ssh/uuencode.h4
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