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>