Annotation of src/usr.bin/ssh/uuencode.c, Revision 1.19
1.1 markus 1: /*
1.4 markus 2: * Copyright (c) 2000 Markus Friedl. All rights reserved.
1.7 deraadt 3: *
4: * Redistribution and use in source and binary forms, with or without
5: * modification, are permitted provided that the following conditions
6: * are met:
7: * 1. Redistributions of source code must retain the above copyright
8: * notice, this list of conditions and the following disclaimer.
9: * 2. Redistributions in binary form must reproduce the above copyright
10: * notice, this list of conditions and the following disclaimer in the
11: * documentation and/or other materials provided with the distribution.
12: *
13: * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
14: * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
15: * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
16: * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
17: * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
18: * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
19: * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
20: * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
21: * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
22: * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
1.1 markus 23: */
1.7 deraadt 24:
1.1 markus 25: #include "includes.h"
1.15 stevesk 26:
1.1 markus 27: #include "xmalloc.h"
1.10 itojun 28: #include "uuencode.h"
1.1 markus 29:
1.12 deraadt 30: #include <resolv.h>
1.6 djm 31:
1.1 markus 32: int
1.17 jakob 33: uuencode(const u_char *src, u_int srclength,
1.4 markus 34: char *target, size_t targsize)
1.1 markus 35: {
1.5 markus 36: return __b64_ntop(src, srclength, target, targsize);
1.1 markus 37: }
38:
39: int
1.8 markus 40: uudecode(const char *src, u_char *target, size_t targsize)
1.1 markus 41: {
1.5 markus 42: int len;
43: char *encoded, *p;
44:
45: /* copy the 'readonly' source */
46: encoded = xstrdup(src);
47: /* skip whitespace and data */
48: for (p = encoded; *p == ' ' || *p == '\t'; p++)
49: ;
50: for (; *p != '\0' && *p != ' ' && *p != '\t'; p++)
51: ;
1.13 markus 52: /* and remove trailing whitespace because __b64_pton needs this */
1.5 markus 53: *p = '\0';
54: len = __b64_pton(encoded, target, targsize);
55: xfree(encoded);
56: return len;
1.1 markus 57: }
58:
59: void
1.14 markus 60: dump_base64(FILE *fp, u_char *data, u_int len)
1.1 markus 61: {
1.19 ! djm 62: char *buf;;
1.1 markus 63: int i, n;
1.9 deraadt 64:
1.19 ! djm 65: if (len > 65536) {
! 66: fprintf(fp, "dump_base64: len > 65536\n");
! 67: return;
! 68: }
! 69: buf = xmalloc(2*len);
1.4 markus 70: n = uuencode(data, len, buf, 2*len);
1.1 markus 71: for (i = 0; i < n; i++) {
72: fprintf(fp, "%c", buf[i]);
73: if (i % 70 == 69)
74: fprintf(fp, "\n");
75: }
76: if (i % 70 != 69)
77: fprintf(fp, "\n");
78: xfree(buf);
79: }