From: Richard Levitte Date: Thu, 2 Mar 2000 07:45:31 +0000 (+0000) Subject: Make bss_log.c a bit more readable, and implement it for VMS as well. X-Git-Tag: OpenSSL_0_9_5a-beta1~122 X-Git-Url: https://git.librecmc.org/?a=commitdiff_plain;h=84339237d1b7347806162bd25487cb7735ac1993;p=oweals%2Fopenssl.git Make bss_log.c a bit more readable, and implement it for VMS as well. --- diff --git a/crypto/bio/bss_log.c b/crypto/bio/bss_log.c index 4308b19663..3c8e6dc0ac 100644 --- a/crypto/bio/bss_log.c +++ b/crypto/bio/bss_log.c @@ -57,8 +57,8 @@ Why BIO_s_log? BIO_s_log is useful for system daemons (or services under NT). - It is one-way BIO, it sends all stuff to syslogd (or event log - under NT). + It is one-way BIO, it sends all stuff to syslogd (on system that + commonly use that), or event log (on NT), or OPCOM (on OpenVMS). */ @@ -66,29 +66,55 @@ #include #include -#ifndef WIN32 -#ifdef __ultrix +#if defined(WIN32) +#include +#elif defined(VMS) || defined(__VMS) +#include +#include +#elif defined(__ultrix) #include #else #include #endif -#else -#include -#endif #include "cryptlib.h" #include #include #ifndef NO_SYSLOG +#if defined(WIN32) +#define LOG_EMERG 0 +#define LOG_ALERT 1 +#define LOG_CRIT 2 +#define LOG_ERR 3 +#define LOG_WARNING 4 +#define LOG_NOTICE 5 +#define LOG_INFO 6 +#define LOG_DEBUG 7 + +#define LOG_DAEMON (3<<3) +#elif defined(VMS) +/* On VMS, we don't really care about these, but we need them to compile */ +#define LOG_EMERG 0 +#define LOG_ALERT 1 +#define LOG_CRIT 2 +#define LOG_ERR 3 +#define LOG_WARNING 4 +#define LOG_NOTICE 5 +#define LOG_INFO 6 +#define LOG_DEBUG 7 + +#define LOG_DAEMON OPC$M_NM_NTWORK +#endif static int MS_CALLBACK slg_write(BIO *h,char *buf,int num); static int MS_CALLBACK slg_puts(BIO *h,char *str); static long MS_CALLBACK slg_ctrl(BIO *h,int cmd,long arg1,char *arg2); static int MS_CALLBACK slg_new(BIO *h); static int MS_CALLBACK slg_free(BIO *data); -static int xopenlog(BIO* bp, const char* name, int level); -static int xcloselog(BIO* bp); +static void xopenlog(BIO* bp, const char* name, int level); +static void xsyslog(BIO* bp, int priority, const char* string); +static void xcloselog(BIO* bp); static BIO_METHOD methods_slg= { @@ -113,11 +139,7 @@ static int MS_CALLBACK slg_new(BIO *bi) bi->init=1; bi->num=0; bi->ptr=NULL; -#ifndef WIN32 xopenlog(bi, "application", LOG_DAEMON); -#else - xopenlog(bi, "application", 0); -#endif return(1); } @@ -133,43 +155,14 @@ static int MS_CALLBACK slg_write(BIO *b, char *in, int inl) int ret= inl; char* buf= in; char* pp; -#if defined(WIN32) - LPCSTR lpszStrings[2]; - WORD evtype= EVENTLOG_ERROR_TYPE; - int pid = _getpid(); - char pidbuf[20]; -#else int priority; -#endif if((buf= (char *)Malloc(inl+ 1)) == NULL){ return(0); } strncpy(buf, in, inl); buf[inl]= '\0'; -#if defined(WIN32) - if(strncmp(buf, "ERR ", 4) == 0){ - evtype= EVENTLOG_ERROR_TYPE; - pp= buf+ 4; - }else if(strncmp(buf, "WAR ", 4) == 0){ - evtype= EVENTLOG_WARNING_TYPE; - pp= buf+ 4; - }else if(strncmp(buf, "INF ", 4) == 0){ - evtype= EVENTLOG_INFORMATION_TYPE; - pp= buf+ 4; - }else{ - evtype= EVENTLOG_ERROR_TYPE; - pp= buf; - } - - sprintf(pidbuf, "[%d] ", pid); - lpszStrings[0] = pidbuf; - lpszStrings[1] = pp; - if(b->ptr) - ReportEvent(b->ptr, evtype, 0, 1024, NULL, 2, 0, - lpszStrings, NULL); -#else if(strncmp(buf, "ERR ", 4) == 0){ priority= LOG_ERR; pp= buf+ 4; @@ -184,8 +177,8 @@ static int MS_CALLBACK slg_write(BIO *b, char *in, int inl) pp= buf; } - syslog(priority, "%s", pp); -#endif + xsyslog(b, priority, pp); + Free(buf); return(ret); } @@ -213,28 +206,115 @@ static int MS_CALLBACK slg_puts(BIO *bp, char *str) return(ret); } -static int xopenlog(BIO* bp, const char* name, int level) -{ #if defined(WIN32) + +static void xopenlog(BIO* bp, const char* name, int level) +{ if((bp->ptr= (char *)RegisterEventSource(NULL, name)) == NULL){ return(0); } -#else - openlog(name, LOG_PID|LOG_CONS, level); -#endif return(1); } -static int xcloselog(BIO* bp) +static void xsyslog(BIO *bp, int priority, const char *string) +{ + LPCSTR lpszStrings[2]; + WORD evtype= EVENTLOG_ERROR_TYPE; + int pid = _getpid(); + char pidbuf[20]; + + switch (priority) + { + case LOG_ERR: + evtype = EVENTLOG_ERROR_TYPE; + break; + case LOG_WARNING: + evtype = EVENTLOG_WARNING_TYPE; + break; + case LOG_INFO: + evtype = EVENTLOG_INFORMATION_TYPE; + break; + default: + evtype = EVENTLOG_ERROR_TYPE; + break; + } + + sprintf(pidbuf, "[%d] ", pid); + lpszStrings[0] = pidbuf; + lpszStrings[1] = pp; + + if(bp->ptr) + ReportEvent(bp->ptr, evtype, 0, 1024, NULL, 2, 0, + lpszStrings, NULL); + return 1; +} + +static void xcloselog(BIO* bp) { -#if defined(WIN32) if(bp->ptr) DeregisterEventSource((HANDLE)(bp->ptr)); bp->ptr= NULL; + return(1); +} + +#elif defined(VMS) + +static int VMS_OPC_target = OPC$M_NM_NTWORK; + +static void xopenlog(BIO* bp, const char* name, int level) +{ + VMS_OPC_target = level; +} + +statis void xsyslog(BIO *bp, int priority, const char *string) +{ + struct descriptor_s opc_dsc; + struct opcdef *opcdef_p; + char buf[10240]; + unsigned int len; + $DESCRIPTOR(buf_dsc, buf); + $DESCRIPTOR(fao_cmd, "!AZ"); + + lib$sys_fao(&fao_cmd, &len, &buf_dsc, s); + + /* we knoe there's an 8 byte header. That's documented */ + opcdef_p = (struct opcdef *) Malloc(8 + strlen(s)); + opcdef_p->opc$b_ms_type = OPC$_RQ_RQST; + memcpy(opcdef_p->opc$b_ms_target, &priority, 3); + opcdef_p->opc$l_ms_rqstid = 0; + memcpy(&opcdef_p->opc$l_ms_text, buf, len); + + opc_dsc.dsc$b_dtype = DSC$K_DTYPE_T; + opc_dsc.dsc$b_class = DSC$K_CLASS_S; + opc_dsc.dsc$a_pointer = opcdef_p; + opc_dsc.dsc$w_length = len + 8; + + sys$sndopc(opc_dsc, 0); + + Free(opcdef_p); +} + +static void xcloselog(BIO* bp) +{ +} + #else + +static void xopenlog(BIO* bp, const char* name, int level) +{ + openlog(name, LOG_PID|LOG_CONS, level); +} + +static void xsyslog(BIO *bp, int priority, const char *string) +{ + syslog(priority, "%s", string); +} + +static void xcloselog(BIO* bp) +{ closelog(); -#endif - return(1); } #endif + +#endif diff --git a/crypto/crypto-lib.com b/crypto/crypto-lib.com index 79d86771e8..61c432d66f 100644 --- a/crypto/crypto-lib.com +++ b/crypto/crypto-lib.com @@ -208,7 +208,7 @@ $ LIB_BIO = "bio_lib,bio_cb,bio_err,"+ - "bss_mem,bss_null,bss_fd,"+ - "bss_file,bss_sock,bss_conn,"+ - "bf_null,bf_buff,b_print,b_dump,"+ - - "b_sock,bss_acpt,bf_nbio,bss_rtcp,bss_bio" ! + ",bss_log" for syslog + "b_sock,bss_acpt,bf_nbio,bss_rtcp,bss_bio,bss_log" $ LIB_STACK = "stack" $ LIB_LHASH = "lhash,lh_stats" $ LIB_RAND = "md_rand,randfile,rand_lib,rand_err,rand_egd"