View | Details | Raw Unified | Return to bug 111
Collapse All | Expand All

(-)log.c (-1 / +3 lines)
Lines 370-376 Link Here
370
		fprintf(stderr, "%s\r\n", msgbuf);
370
		fprintf(stderr, "%s\r\n", msgbuf);
371
	} else {
371
	} else {
372
		openlog(argv0 ? argv0 : __progname, LOG_PID, log_facility);
372
		openlog(argv0 ? argv0 : __progname, LOG_PID, log_facility);
373
		syslog(pri, "%.500s", msgbuf);
373
		/* XXX - we discard overflow */
374
		strnvis(fmtbuf, msgbuf, sizeof(fmtbuf), VIS_OCTAL);
375
		syslog(pri, "%.500s", fmtbuf);
374
		closelog();
376
		closelog();
375
	}
377
	}
376
}
378
}
(-)openbsd-compat/openbsd-compat.h (+1 lines)
Lines 26-31 Link Here
26
#include "glob.h"
26
#include "glob.h"
27
#include "readpassphrase.h"
27
#include "readpassphrase.h"
28
#include "getopt.h"
28
#include "getopt.h"
29
#include "vis.h"
29
30
30
/* Home grown routines */
31
/* Home grown routines */
31
#include "bsd-arc4random.h"
32
#include "bsd-arc4random.h"
(-)openbsd-compat/vis.c (+230 lines)
Added Link Here
1
/*-
2
 * Copyright (c) 1989, 1993
3
 *	The Regents of the University of California.  All rights reserved.
4
 *
5
 * Redistribution and use in source and binary forms, with or without
6
 * modification, are permitted provided that the following conditions
7
 * are met:
8
 * 1. Redistributions of source code must retain the above copyright
9
 *    notice, this list of conditions and the following disclaimer.
10
 * 2. Redistributions in binary form must reproduce the above copyright
11
 *    notice, this list of conditions and the following disclaimer in the
12
 *    documentation and/or other materials provided with the distribution.
13
 * 3. All advertising materials mentioning features or use of this software
14
 *    must display the following acknowledgement:
15
 *	This product includes software developed by the University of
16
 *	California, Berkeley and its contributors.
17
 * 4. Neither the name of the University nor the names of its contributors
18
 *    may be used to endorse or promote products derived from this software
19
 *    without specific prior written permission.
20
 *
21
 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
22
 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
23
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
24
 * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
25
 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
26
 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
27
 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
28
 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
29
 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
30
 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
31
 * SUCH DAMAGE.
32
 */
33
#include "config.h"
34
#if !defined(HAVE_STRVIS)
35
36
#if defined(LIBC_SCCS) && !defined(lint)
37
static char rcsid[] = "$OpenBSD: vis.c,v 1.8 2002/02/19 19:39:36 millert Exp $";
38
#endif /* LIBC_SCCS and not lint */
39
40
#include "vis.h"
41
42
#define	isoctal(c)	(((u_char)(c)) >= '0' && ((u_char)(c)) <= '7')
43
#define isvisible(c)	(((u_int)(c) <= UCHAR_MAX && isascii((u_char)(c)) && \
44
				isgraph((u_char)(c))) ||		     \
45
				((flag & VIS_SP) == 0 && (c) == ' ') ||	     \
46
				((flag & VIS_TAB) == 0 && (c) == '\t') ||    \
47
				((flag & VIS_NL) == 0 && (c) == '\n') ||     \
48
				((flag & VIS_SAFE) &&			     \
49
				((c) == '\b' || (c) == '\007' || (c) == '\r')))
50
51
/*
52
 * vis - visually encode characters
53
 */
54
char *
55
vis(dst, c, flag, nextc)
56
	register char *dst;
57
	int c, nextc;
58
	register int flag;
59
{
60
	if (isvisible(c)) {
61
		*dst++ = c;
62
		if (c == '\\' && (flag & VIS_NOSLASH) == 0)
63
			*dst++ = '\\';
64
		*dst = '\0';
65
		return (dst);
66
	}
67
68
	if (flag & VIS_CSTYLE) {
69
		switch(c) {
70
		case '\n':
71
			*dst++ = '\\';
72
			*dst++ = 'n';
73
			goto done;
74
		case '\r':
75
			*dst++ = '\\';
76
			*dst++ = 'r';
77
			goto done;
78
		case '\b':
79
			*dst++ = '\\';
80
			*dst++ = 'b';
81
			goto done;
82
		case '\a':
83
			*dst++ = '\\';
84
			*dst++ = 'a';
85
			goto done;
86
		case '\v':
87
			*dst++ = '\\';
88
			*dst++ = 'v';
89
			goto done;
90
		case '\t':
91
			*dst++ = '\\';
92
			*dst++ = 't';
93
			goto done;
94
		case '\f':
95
			*dst++ = '\\';
96
			*dst++ = 'f';
97
			goto done;
98
		case ' ':
99
			*dst++ = '\\';
100
			*dst++ = 's';
101
			goto done;
102
		case '\0':
103
			*dst++ = '\\';
104
			*dst++ = '0';
105
			if (isoctal(nextc)) {
106
				*dst++ = '0';
107
				*dst++ = '0';
108
			}
109
			goto done;
110
		}
111
	}
112
	if (((c & 0177) == ' ') || (flag & VIS_OCTAL)) {	
113
		*dst++ = '\\';
114
		*dst++ = ((u_char)c >> 6 & 07) + '0';
115
		*dst++ = ((u_char)c >> 3 & 07) + '0';
116
		*dst++ = ((u_char)c & 07) + '0';
117
		goto done;
118
	}
119
	if ((flag & VIS_NOSLASH) == 0)
120
		*dst++ = '\\';
121
	if (c & 0200) {
122
		c &= 0177;
123
		*dst++ = 'M';
124
	}
125
	if (iscntrl(c)) {
126
		*dst++ = '^';
127
		if (c == 0177)
128
			*dst++ = '?';
129
		else
130
			*dst++ = c + '@';
131
	} else {
132
		*dst++ = '-';
133
		*dst++ = c;
134
	}
135
done:
136
	*dst = '\0';
137
	return (dst);
138
}
139
140
/*
141
 * strvis, strnvis, strvisx - visually encode characters from src into dst
142
 *	
143
 *	Dst must be 4 times the size of src to account for possible
144
 *	expansion.  The length of dst, not including the trailing NULL,
145
 *	is returned. 
146
 *
147
 *	Strnvis will write no more than siz-1 bytes (and will NULL terminate).
148
 *	The number of bytes needed to fully encode the string is returned.
149
 *
150
 *	Strvisx encodes exactly len bytes from src into dst.
151
 *	This is useful for encoding a block of data.
152
 */
153
int
154
strvis(dst, src, flag)
155
	register char *dst;
156
	register const char *src;
157
	int flag;
158
{
159
	register char c;
160
	char *start;
161
162
	for (start = dst; (c = *src);)
163
		dst = vis(dst, c, flag, *++src);
164
	*dst = '\0';
165
	return (dst - start);
166
}
167
168
int
169
strnvis(dst, src, siz, flag)
170
	register char *dst;
171
	register const char *src;
172
	size_t siz;
173
	int flag;
174
{
175
	register char c;
176
	char *start, *end;
177
178
	for (start = dst, end = start + siz - 1; (c = *src) && dst < end; ) {
179
		if (isvisible(c)) {
180
			*dst++ = c;
181
			if (c == '\\' && (flag & VIS_NOSLASH) == 0) {
182
				/* need space for the extra '\\' */
183
				if (dst < end)
184
					*dst++ = '\\';
185
				else {
186
					dst--;
187
					break;
188
				}
189
			}
190
			src++;
191
		} else {
192
			/* vis(3) requires up to 4 chars */
193
			if (dst + 3 < end)
194
				dst = vis(dst, c, flag, *++src);
195
			else
196
				break;
197
		}
198
	}
199
	*dst = '\0';
200
	if (dst >= end) {
201
		char tbuf[5];
202
203
		/* adjust return value for truncation */
204
		while ((c = *src))
205
			dst += vis(tbuf, c, flag, *++src) - tbuf;
206
	}
207
	return (dst - start);
208
}
209
210
int
211
strvisx(dst, src, len, flag)
212
	register char *dst;
213
	register const char *src;
214
	register size_t len;
215
	int flag;
216
{
217
	register char c;
218
	char *start;
219
220
	for (start = dst; len > 1; len--) {
221
		c = *src;
222
		dst = vis(dst, c, flag, *++src);
223
	}
224
	if (len)
225
		dst = vis(dst, *src, flag, '\0');
226
	*dst = '\0';
227
	return (dst - start);
228
}
229
230
#endif
(-)openbsd-compat/vis.h (+88 lines)
Added Link Here
1
/*	$OpenBSD: vis.h,v 1.5 2002/02/16 21:27:17 millert Exp $	*/
2
/*	$NetBSD: vis.h,v 1.4 1994/10/26 00:56:41 cgd Exp $	*/
3
4
/*-
5
 * Copyright (c) 1990 The Regents of the University of California.
6
 * All rights reserved.
7
 *
8
 * Redistribution and use in source and binary forms, with or without
9
 * modification, are permitted provided that the following conditions
10
 * are met:
11
 * 1. Redistributions of source code must retain the above copyright
12
 *    notice, this list of conditions and the following disclaimer.
13
 * 2. Redistributions in binary form must reproduce the above copyright
14
 *    notice, this list of conditions and the following disclaimer in the
15
 *    documentation and/or other materials provided with the distribution.
16
 * 3. All advertising materials mentioning features or use of this software
17
 *    must display the following acknowledgement:
18
 *	This product includes software developed by the University of
19
 *	California, Berkeley and its contributors.
20
 * 4. Neither the name of the University nor the names of its contributors
21
 *    may be used to endorse or promote products derived from this software
22
 *    without specific prior written permission.
23
 *
24
 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
25
 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
26
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
27
 * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
28
 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
29
 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
30
 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
31
 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
32
 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
33
 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
34
 * SUCH DAMAGE.
35
 *
36
 *	@(#)vis.h	5.9 (Berkeley) 4/3/91
37
 */
38
#include "config.h"
39
#if !defined(HAVE_STRVIS)
40
41
#ifndef _VIS_H_
42
#define	_VIS_H_
43
44
/*
45
 * to select alternate encoding format
46
 */
47
#define	VIS_OCTAL	0x01	/* use octal \ddd format */
48
#define	VIS_CSTYLE	0x02	/* use \[nrft0..] where appropriate */
49
50
/*
51
 * to alter set of characters encoded (default is to encode all
52
 * non-graphic except space, tab, and newline).
53
 */
54
#define	VIS_SP		0x04	/* also encode space */
55
#define	VIS_TAB		0x08	/* also encode tab */
56
#define	VIS_NL		0x10	/* also encode newline */
57
#define	VIS_WHITE	(VIS_SP | VIS_TAB | VIS_NL)
58
#define	VIS_SAFE	0x20	/* only encode "unsafe" characters */
59
60
/*
61
 * other
62
 */
63
#define	VIS_NOSLASH	0x40	/* inhibit printing '\' */
64
65
/*
66
 * unvis return codes
67
 */
68
#define	UNVIS_VALID	 1	/* character valid */
69
#define	UNVIS_VALIDPUSH	 2	/* character valid, push back passed char */
70
#define	UNVIS_NOCHAR	 3	/* valid sequence, no character produced */
71
#define	UNVIS_SYNBAD	-1	/* unrecognized escape sequence */
72
#define	UNVIS_ERROR	-2	/* decoder in unknown state (unrecoverable) */
73
74
/*
75
 * unvis flags
76
 */
77
#define	UNVIS_END	1	/* no more characters */
78
79
char	*vis(char *, int, int, int);
80
int	strvis(char *, const char *, int);
81
int	strnvis(char *, const char *, size_t, int);
82
int	strvisx(char *, const char *, size_t, int);
83
int	strunvis(char *, const char *);
84
int	unvis(char *, char, int *, int);
85
86
#endif /* !_VIS_H_ */
87
88
#endif /* !HAVE_STRVIS */

Return to bug 111