Annotation of embedaddon/ntp/lib/isc/win32/syslog.c, revision 1.1.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>