Annotation of embedaddon/ntp/lib/isc/win32/syslog.c, revision 1.1
1.1 ! misho 1: /*
! 2: * Copyright (C) 2004, 2007 Internet Systems Consortium, Inc. ("ISC")
! 3: * Copyright (C) 2001-2003 Internet Software Consortium.
! 4: *
! 5: * Permission to use, copy, modify, and/or distribute this software for any
! 6: * purpose with or without fee is hereby granted, provided that the above
! 7: * copyright notice and this permission notice appear in all copies.
! 8: *
! 9: * THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
! 10: * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
! 11: * AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
! 12: * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
! 13: * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
! 14: * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
! 15: * PERFORMANCE OF THIS SOFTWARE.
! 16: */
! 17:
! 18: /* $Id: syslog.c,v 1.10 2007/06/19 23:47:19 tbox Exp $ */
! 19:
! 20: #include <config.h>
! 21:
! 22: #include <stdio.h>
! 23: #include <windows.h>
! 24: #include <string.h>
! 25: #include <stdlib.h>
! 26: #include <syslog.h>
! 27:
! 28: #include <isc/bindevt.h>
! 29: #include <isc/result.h>
! 30: #include <isc/syslog.h>
! 31: #include <isc/util.h>
! 32:
! 33: static HANDLE hAppLog = NULL;
! 34: static FILE *log_stream;
! 35: static int debug_level = 0;
! 36:
! 37: static struct dsn_c_pvt_sfnt {
! 38: int val;
! 39: const char *strval;
! 40: } facilities[] = {
! 41: { LOG_KERN, "kern" },
! 42: { LOG_USER, "user" },
! 43: { LOG_MAIL, "mail" },
! 44: { LOG_DAEMON, "daemon" },
! 45: { LOG_AUTH, "auth" },
! 46: { LOG_SYSLOG, "syslog" },
! 47: { LOG_LPR, "lpr" },
! 48: #ifdef LOG_NEWS
! 49: { LOG_NEWS, "news" },
! 50: #endif
! 51: #ifdef LOG_UUCP
! 52: { LOG_UUCP, "uucp" },
! 53: #endif
! 54: #ifdef LOG_CRON
! 55: { LOG_CRON, "cron" },
! 56: #endif
! 57: #ifdef LOG_AUTHPRIV
! 58: { LOG_AUTHPRIV, "authpriv" },
! 59: #endif
! 60: #ifdef LOG_FTP
! 61: { LOG_FTP, "ftp" },
! 62: #endif
! 63: { LOG_LOCAL0, "local0"},
! 64: { LOG_LOCAL1, "local1"},
! 65: { LOG_LOCAL2, "local2"},
! 66: { LOG_LOCAL3, "local3"},
! 67: { LOG_LOCAL4, "local4"},
! 68: { LOG_LOCAL5, "local5"},
! 69: { LOG_LOCAL6, "local6"},
! 70: { LOG_LOCAL7, "local7"},
! 71: { 0, NULL }
! 72: };
! 73:
! 74: isc_result_t
! 75: isc_syslog_facilityfromstring(const char *str, int *facilityp) {
! 76: int i;
! 77:
! 78: REQUIRE(str != NULL);
! 79: REQUIRE(facilityp != NULL);
! 80:
! 81: for (i = 0; facilities[i].strval != NULL; i++) {
! 82: if (strcasecmp(facilities[i].strval, str) == 0) {
! 83: *facilityp = facilities[i].val;
! 84: return (ISC_R_SUCCESS);
! 85: }
! 86: }
! 87: return (ISC_R_NOTFOUND);
! 88: }
! 89:
! 90: /*
! 91: * Log to the NT Event Log
! 92: */
! 93: void
! 94: syslog(int level, const char *fmt, ...) {
! 95: va_list ap;
! 96: char buf[1024];
! 97: char *str[1];
! 98:
! 99: str[0] = buf;
! 100:
! 101: va_start(ap, fmt);
! 102: vsprintf(buf, fmt, ap);
! 103: va_end(ap);
! 104:
! 105: /* Make sure that the channel is open to write the event */
! 106: if (hAppLog != NULL) {
! 107: switch (level) {
! 108: case LOG_INFO:
! 109: case LOG_NOTICE:
! 110: case LOG_DEBUG:
! 111: ReportEvent(hAppLog, EVENTLOG_INFORMATION_TYPE, 0,
! 112: BIND_INFO_MSG, NULL, 1, 0, str, NULL);
! 113: break;
! 114: case LOG_WARNING:
! 115: ReportEvent(hAppLog, EVENTLOG_WARNING_TYPE, 0,
! 116: BIND_WARN_MSG, NULL, 1, 0, str, NULL);
! 117: break;
! 118: default:
! 119: ReportEvent(hAppLog, EVENTLOG_ERROR_TYPE, 0,
! 120: BIND_ERR_MSG, NULL, 1, 0, str, NULL);
! 121: break;
! 122: }
! 123: }
! 124: }
! 125:
! 126: /*
! 127: * Initialize event logging
! 128: */
! 129: void
! 130: openlog(const char *name, int flags, ...) {
! 131: /* Get a handle to the Application event log */
! 132: hAppLog = RegisterEventSource(NULL, name);
! 133: }
! 134:
! 135: /*
! 136: * Close the Handle to the application Event Log
! 137: * We don't care whether or not we succeeded so ignore return values
! 138: * In fact if we failed then we would have nowhere to put the message
! 139: */
! 140: void
! 141: closelog() {
! 142: DeregisterEventSource(hAppLog);
! 143: }
! 144:
! 145: /*
! 146: * Keep event logging synced with the current debug level
! 147: */
! 148: void
! 149: ModifyLogLevel(int level) {
! 150: debug_level = level;
! 151: }
! 152:
! 153: /*
! 154: * Initialize logging for the port section of libbind.
! 155: * Piggyback onto stream given.
! 156: */
! 157: void
! 158: InitNTLogging(FILE *stream, int debug) {
! 159: log_stream = stream;
! 160: ModifyLogLevel(debug);
! 161: }
! 162: /*
! 163: * This function is for reporting errors to the application
! 164: * event log in case the regular syslog is not available
! 165: * mainly during startup. It should not be used under normal
! 166: * circumstances.
! 167: */
! 168: void
! 169: NTReportError(const char *name, const char *str) {
! 170: HANDLE hNTAppLog = NULL;
! 171: const char *buf[1];
! 172:
! 173: buf[0] = str;
! 174:
! 175: hNTAppLog = RegisterEventSource(NULL, name);
! 176:
! 177: ReportEvent(hNTAppLog, EVENTLOG_ERROR_TYPE, 0,
! 178: BIND_ERR_MSG, NULL, 1, 0, buf, NULL);
! 179:
! 180: DeregisterEventSource(hNTAppLog);
! 181: }
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>