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