1656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/* crypto/bio/bss_log.c */
2656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/* ====================================================================
3656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * Copyright (c) 1999 The OpenSSL Project.  All rights reserved.
4656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project *
5656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * Redistribution and use in source and binary forms, with or without
6656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * modification, are permitted provided that the following conditions
7656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * are met:
8656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project *
9656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * 1. Redistributions of source code must retain the above copyright
10656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project *    notice, this list of conditions and the following disclaimer.
11656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project *
12656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * 2. Redistributions in binary form must reproduce the above copyright
13656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project *    notice, this list of conditions and the following disclaimer in
14656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project *    the documentation and/or other materials provided with the
15656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project *    distribution.
16656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project *
17656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * 3. All advertising materials mentioning features or use of this
18656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project *    software must display the following acknowledgment:
19656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project *    "This product includes software developed by the OpenSSL Project
20656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project *    for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)"
21656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project *
22656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
23656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project *    endorse or promote products derived from this software without
24656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project *    prior written permission. For written permission, please contact
25656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project *    licensing@OpenSSL.org.
26656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project *
27656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * 5. Products derived from this software may not be called "OpenSSL"
28656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project *    nor may "OpenSSL" appear in their names without prior written
29656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project *    permission of the OpenSSL Project.
30656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project *
31656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * 6. Redistributions of any form whatsoever must retain the following
32656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project *    acknowledgment:
33656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project *    "This product includes software developed by the OpenSSL Project
34656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project *    for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)"
35656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project *
36656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
37656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
38656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
39656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE OpenSSL PROJECT OR
40656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
41656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
42656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
43656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
44656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
45656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
46656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
47656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * OF THE POSSIBILITY OF SUCH DAMAGE.
48656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * ====================================================================
49656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project *
50656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * This product includes cryptographic software written by Eric Young
51656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * (eay@cryptsoft.com).  This product includes software written by Tim
52656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * Hudson (tjh@cryptsoft.com).
53656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project *
54656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project */
55656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
56656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/*
57656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	Why BIO_s_log?
58656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
59656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	BIO_s_log is useful for system daemons (or services under NT).
60656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	It is one-way BIO, it sends all stuff to syslogd (on system that
61656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	commonly use that), or event log (on NT), or OPCOM (on OpenVMS).
62656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
63656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project*/
64656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
65656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
66656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#include <stdio.h>
67656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#include <errno.h>
68656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
69656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#include "cryptlib.h"
70656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
71656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#if defined(OPENSSL_SYS_WINCE)
72656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#elif defined(OPENSSL_SYS_WIN32)
73656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#elif defined(OPENSSL_SYS_VMS)
74656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#  include <opcdef.h>
75656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#  include <descrip.h>
76656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#  include <lib$routines.h>
77656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#  include <starlet.h>
78ee7afb3c942c4eefef6ed06201eafaf8ec58e2e3Brian Carlstrom/* Some compiler options may mask the declaration of "_malloc32". */
79ee7afb3c942c4eefef6ed06201eafaf8ec58e2e3Brian Carlstrom#  if __INITIAL_POINTER_SIZE && defined _ANSI_C_SOURCE
80ee7afb3c942c4eefef6ed06201eafaf8ec58e2e3Brian Carlstrom#    if __INITIAL_POINTER_SIZE == 64
81ee7afb3c942c4eefef6ed06201eafaf8ec58e2e3Brian Carlstrom#      pragma pointer_size save
82ee7afb3c942c4eefef6ed06201eafaf8ec58e2e3Brian Carlstrom#      pragma pointer_size 32
83ee7afb3c942c4eefef6ed06201eafaf8ec58e2e3Brian Carlstrom    void * _malloc32  (__size_t);
84ee7afb3c942c4eefef6ed06201eafaf8ec58e2e3Brian Carlstrom#      pragma pointer_size restore
85ee7afb3c942c4eefef6ed06201eafaf8ec58e2e3Brian Carlstrom#    endif /* __INITIAL_POINTER_SIZE == 64 */
86ee7afb3c942c4eefef6ed06201eafaf8ec58e2e3Brian Carlstrom#  endif /* __INITIAL_POINTER_SIZE && defined _ANSI_C_SOURCE */
87656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#elif defined(__ultrix)
88656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#  include <sys/syslog.h>
89656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#elif defined(OPENSSL_SYS_NETWARE)
90656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#  define NO_SYSLOG
91656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#elif (!defined(MSDOS) || defined(WATT32)) && !defined(OPENSSL_SYS_VXWORKS) && !defined(NO_SYSLOG)
92656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#  include <syslog.h>
93656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#endif
94656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
95656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#include <openssl/buffer.h>
96656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#include <openssl/err.h>
97656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
98656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#ifndef NO_SYSLOG
99656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
100656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#if defined(OPENSSL_SYS_WIN32)
101656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define LOG_EMERG	0
102656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define LOG_ALERT	1
103656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define LOG_CRIT	2
104656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define LOG_ERR		3
105656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define LOG_WARNING	4
106656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define LOG_NOTICE	5
107656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define LOG_INFO	6
108656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define LOG_DEBUG	7
109656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
110656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define LOG_DAEMON	(3<<3)
111656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#elif defined(OPENSSL_SYS_VMS)
112656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/* On VMS, we don't really care about these, but we need them to compile */
113656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define LOG_EMERG	0
114656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define LOG_ALERT	1
115656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define LOG_CRIT	2
116656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define LOG_ERR		3
117656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define LOG_WARNING	4
118656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define LOG_NOTICE	5
119656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define LOG_INFO	6
120656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define LOG_DEBUG	7
121656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
122656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define LOG_DAEMON	OPC$M_NM_NTWORK
123656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#endif
124656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
125656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectstatic int MS_CALLBACK slg_write(BIO *h, const char *buf, int num);
126656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectstatic int MS_CALLBACK slg_puts(BIO *h, const char *str);
127656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectstatic long MS_CALLBACK slg_ctrl(BIO *h, int cmd, long arg1, void *arg2);
128656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectstatic int MS_CALLBACK slg_new(BIO *h);
129656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectstatic int MS_CALLBACK slg_free(BIO *data);
130656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectstatic void xopenlog(BIO* bp, char* name, int level);
131656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectstatic void xsyslog(BIO* bp, int priority, const char* string);
132656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectstatic void xcloselog(BIO* bp);
133656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
134656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectstatic BIO_METHOD methods_slg=
135656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	{
136656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	BIO_TYPE_MEM,"syslog",
137656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	slg_write,
138656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	NULL,
139656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	slg_puts,
140656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	NULL,
141656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	slg_ctrl,
142656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	slg_new,
143656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	slg_free,
144656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	NULL,
145656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	};
146656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
147656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source ProjectBIO_METHOD *BIO_s_log(void)
148656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	{
149656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	return(&methods_slg);
150656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	}
151656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
152656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectstatic int MS_CALLBACK slg_new(BIO *bi)
153656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	{
154656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	bi->init=1;
155656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	bi->num=0;
156656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	bi->ptr=NULL;
157656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	xopenlog(bi, "application", LOG_DAEMON);
158656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	return(1);
159656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	}
160656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
161656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectstatic int MS_CALLBACK slg_free(BIO *a)
162656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	{
163656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	if (a == NULL) return(0);
164656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	xcloselog(a);
165656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	return(1);
166656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	}
167656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
168656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectstatic int MS_CALLBACK slg_write(BIO *b, const char *in, int inl)
169656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	{
170656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	int ret= inl;
171656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	char* buf;
172656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	char* pp;
173656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	int priority, i;
174221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom	static const struct
175656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		{
176656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		int strl;
177656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		char str[10];
178656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		int log_level;
179656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		}
180656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	mapping[] =
181656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		{
182656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		{ 6, "PANIC ", LOG_EMERG },
183656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		{ 6, "EMERG ", LOG_EMERG },
184656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		{ 4, "EMR ", LOG_EMERG },
185656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		{ 6, "ALERT ", LOG_ALERT },
186656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		{ 4, "ALR ", LOG_ALERT },
187656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		{ 5, "CRIT ", LOG_CRIT },
188656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		{ 4, "CRI ", LOG_CRIT },
189656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		{ 6, "ERROR ", LOG_ERR },
190656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		{ 4, "ERR ", LOG_ERR },
191656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		{ 8, "WARNING ", LOG_WARNING },
192656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		{ 5, "WARN ", LOG_WARNING },
193656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		{ 4, "WAR ", LOG_WARNING },
194656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		{ 7, "NOTICE ", LOG_NOTICE },
195656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		{ 5, "NOTE ", LOG_NOTICE },
196656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		{ 4, "NOT ", LOG_NOTICE },
197656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		{ 5, "INFO ", LOG_INFO },
198656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		{ 4, "INF ", LOG_INFO },
199656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		{ 6, "DEBUG ", LOG_DEBUG },
200656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		{ 4, "DBG ", LOG_DEBUG },
201656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		{ 0, "", LOG_ERR } /* The default */
202656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		};
203656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
204656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	if((buf= (char *)OPENSSL_malloc(inl+ 1)) == NULL){
205656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		return(0);
206656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	}
207656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	strncpy(buf, in, inl);
208656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	buf[inl]= '\0';
209656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
210656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	i = 0;
211656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	while(strncmp(buf, mapping[i].str, mapping[i].strl) != 0) i++;
212656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	priority = mapping[i].log_level;
213656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	pp = buf + mapping[i].strl;
214656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
215656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	xsyslog(b, priority, pp);
216656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
217656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	OPENSSL_free(buf);
218656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	return(ret);
219656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	}
220656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
221656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectstatic long MS_CALLBACK slg_ctrl(BIO *b, int cmd, long num, void *ptr)
222656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	{
223656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	switch (cmd)
224656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		{
225656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	case BIO_CTRL_SET:
226656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		xcloselog(b);
227656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		xopenlog(b, ptr, num);
228656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		break;
229656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	default:
230656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		break;
231656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		}
232656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	return(0);
233656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	}
234656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
235656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectstatic int MS_CALLBACK slg_puts(BIO *bp, const char *str)
236656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	{
237656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	int n,ret;
238656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
239656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	n=strlen(str);
240656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ret=slg_write(bp,str,n);
241656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	return(ret);
242656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	}
243656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
244656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#if defined(OPENSSL_SYS_WIN32)
245656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
246656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectstatic void xopenlog(BIO* bp, char* name, int level)
247656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project{
2487f7ea2d72f2e316ba518e82f06513e3477840c15Kenny Root	if (check_winnt())
249221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom		bp->ptr = RegisterEventSourceA(NULL,name);
250221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom	else
251221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom		bp->ptr = NULL;
252656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project}
253656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
254656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectstatic void xsyslog(BIO *bp, int priority, const char *string)
255656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project{
256656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	LPCSTR lpszStrings[2];
257656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	WORD evtype= EVENTLOG_ERROR_TYPE;
258221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom	char pidbuf[DECIMAL_SIZE(DWORD)+4];
259221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom
260221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom	if (bp->ptr == NULL)
261221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom		return;
262656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
263656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	switch (priority)
264656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		{
265656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	case LOG_EMERG:
266656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	case LOG_ALERT:
267656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	case LOG_CRIT:
268656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	case LOG_ERR:
269656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		evtype = EVENTLOG_ERROR_TYPE;
270656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		break;
271656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	case LOG_WARNING:
272656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		evtype = EVENTLOG_WARNING_TYPE;
273656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		break;
274656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	case LOG_NOTICE:
275656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	case LOG_INFO:
276656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	case LOG_DEBUG:
277656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		evtype = EVENTLOG_INFORMATION_TYPE;
278656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		break;
279656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	default:		/* Should never happen, but set it
280656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project				   as error anyway. */
281656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		evtype = EVENTLOG_ERROR_TYPE;
282656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		break;
283656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		}
284656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
285221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom	sprintf(pidbuf, "[%u] ", GetCurrentProcessId());
286656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	lpszStrings[0] = pidbuf;
287656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	lpszStrings[1] = string;
288656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
289221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom	ReportEventA(bp->ptr, evtype, 0, 1024, NULL, 2, 0,
290656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project				lpszStrings, NULL);
291656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project}
292656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
293656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectstatic void xcloselog(BIO* bp)
294656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project{
295221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom	if(bp->ptr)
296221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom		DeregisterEventSource((HANDLE)(bp->ptr));
297656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	bp->ptr= NULL;
298656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project}
299656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
300656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#elif defined(OPENSSL_SYS_VMS)
301656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
302656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectstatic int VMS_OPC_target = LOG_DAEMON;
303656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
304656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectstatic void xopenlog(BIO* bp, char* name, int level)
305656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project{
306656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	VMS_OPC_target = level;
307656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project}
308656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
309656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectstatic void xsyslog(BIO *bp, int priority, const char *string)
310656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project{
311656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	struct dsc$descriptor_s opc_dsc;
312ee7afb3c942c4eefef6ed06201eafaf8ec58e2e3Brian Carlstrom
313ee7afb3c942c4eefef6ed06201eafaf8ec58e2e3Brian Carlstrom/* Arrange 32-bit pointer to opcdef buffer and malloc(), if needed. */
314ee7afb3c942c4eefef6ed06201eafaf8ec58e2e3Brian Carlstrom#if __INITIAL_POINTER_SIZE == 64
315ee7afb3c942c4eefef6ed06201eafaf8ec58e2e3Brian Carlstrom# pragma pointer_size save
316ee7afb3c942c4eefef6ed06201eafaf8ec58e2e3Brian Carlstrom# pragma pointer_size 32
317ee7afb3c942c4eefef6ed06201eafaf8ec58e2e3Brian Carlstrom# define OPCDEF_TYPE __char_ptr32
318ee7afb3c942c4eefef6ed06201eafaf8ec58e2e3Brian Carlstrom# define OPCDEF_MALLOC _malloc32
319ee7afb3c942c4eefef6ed06201eafaf8ec58e2e3Brian Carlstrom#else /* __INITIAL_POINTER_SIZE == 64 */
320ee7afb3c942c4eefef6ed06201eafaf8ec58e2e3Brian Carlstrom# define OPCDEF_TYPE char *
321ee7afb3c942c4eefef6ed06201eafaf8ec58e2e3Brian Carlstrom# define OPCDEF_MALLOC OPENSSL_malloc
322ee7afb3c942c4eefef6ed06201eafaf8ec58e2e3Brian Carlstrom#endif /* __INITIAL_POINTER_SIZE == 64 [else] */
323ee7afb3c942c4eefef6ed06201eafaf8ec58e2e3Brian Carlstrom
324656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	struct opcdef *opcdef_p;
325ee7afb3c942c4eefef6ed06201eafaf8ec58e2e3Brian Carlstrom
326ee7afb3c942c4eefef6ed06201eafaf8ec58e2e3Brian Carlstrom#if __INITIAL_POINTER_SIZE == 64
327ee7afb3c942c4eefef6ed06201eafaf8ec58e2e3Brian Carlstrom# pragma pointer_size restore
328ee7afb3c942c4eefef6ed06201eafaf8ec58e2e3Brian Carlstrom#endif /* __INITIAL_POINTER_SIZE == 64 */
329ee7afb3c942c4eefef6ed06201eafaf8ec58e2e3Brian Carlstrom
330656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	char buf[10240];
331656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	unsigned int len;
332656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project        struct dsc$descriptor_s buf_dsc;
333656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	$DESCRIPTOR(fao_cmd, "!AZ: !AZ");
334656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	char *priority_tag;
335656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
336656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	switch (priority)
337656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	  {
338656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	  case LOG_EMERG: priority_tag = "Emergency"; break;
339656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	  case LOG_ALERT: priority_tag = "Alert"; break;
340656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	  case LOG_CRIT: priority_tag = "Critical"; break;
341656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	  case LOG_ERR: priority_tag = "Error"; break;
342656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	  case LOG_WARNING: priority_tag = "Warning"; break;
343656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	  case LOG_NOTICE: priority_tag = "Notice"; break;
344656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	  case LOG_INFO: priority_tag = "Info"; break;
345656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	  case LOG_DEBUG: priority_tag = "DEBUG"; break;
346656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	  }
347656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
348656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	buf_dsc.dsc$b_dtype = DSC$K_DTYPE_T;
349656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	buf_dsc.dsc$b_class = DSC$K_CLASS_S;
350656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	buf_dsc.dsc$a_pointer = buf;
351656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	buf_dsc.dsc$w_length = sizeof(buf) - 1;
352656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
353656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	lib$sys_fao(&fao_cmd, &len, &buf_dsc, priority_tag, string);
354656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
355ee7afb3c942c4eefef6ed06201eafaf8ec58e2e3Brian Carlstrom	/* We know there's an 8-byte header.  That's documented. */
356ee7afb3c942c4eefef6ed06201eafaf8ec58e2e3Brian Carlstrom	opcdef_p = OPCDEF_MALLOC( 8+ len);
357656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	opcdef_p->opc$b_ms_type = OPC$_RQ_RQST;
358656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	memcpy(opcdef_p->opc$z_ms_target_classes, &VMS_OPC_target, 3);
359656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	opcdef_p->opc$l_ms_rqstid = 0;
360656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	memcpy(&opcdef_p->opc$l_ms_text, buf, len);
361656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
362656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	opc_dsc.dsc$b_dtype = DSC$K_DTYPE_T;
363656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	opc_dsc.dsc$b_class = DSC$K_CLASS_S;
364ee7afb3c942c4eefef6ed06201eafaf8ec58e2e3Brian Carlstrom	opc_dsc.dsc$a_pointer = (OPCDEF_TYPE) opcdef_p;
365656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	opc_dsc.dsc$w_length = len + 8;
366656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
367656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	sys$sndopr(opc_dsc, 0);
368656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
369656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	OPENSSL_free(opcdef_p);
370656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project}
371656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
372656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectstatic void xcloselog(BIO* bp)
373656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project{
374656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project}
375656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
376656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#else /* Unix/Watt32 */
377656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
378656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectstatic void xopenlog(BIO* bp, char* name, int level)
379656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project{
380656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#ifdef WATT32   /* djgpp/DOS */
381656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	openlog(name, LOG_PID|LOG_CONS|LOG_NDELAY, level);
382656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#else
383656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	openlog(name, LOG_PID|LOG_CONS, level);
384656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#endif
385656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project}
386656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
387656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectstatic void xsyslog(BIO *bp, int priority, const char *string)
388656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project{
389656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	syslog(priority, "%s", string);
390656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project}
391656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
392656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectstatic void xcloselog(BIO* bp)
393656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project{
394656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	closelog();
395656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project}
396656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
397656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#endif /* Unix */
398656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
399656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#endif /* NO_SYSLOG */
400