Annotation of src/usr.bin/ssh/log-server.c, Revision 1.15
1.1 deraadt 1: /*
1.14 markus 2: *
1.11 deraadt 3: * log-server.c
1.14 markus 4: *
1.11 deraadt 5: * Author: Tatu Ylonen <ylo@cs.hut.fi>
1.14 markus 6: *
1.11 deraadt 7: * Copyright (c) 1995 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland
8: * All rights reserved
1.14 markus 9: *
1.11 deraadt 10: * Created: Mon Mar 20 21:19:30 1995 ylo
1.14 markus 11: *
1.11 deraadt 12: * Server-side versions of debug(), log(), etc. These normally send the output
13: * to the system log.
1.14 markus 14: *
1.11 deraadt 15: */
1.1 deraadt 16:
17: #include "includes.h"
1.15 ! markus 18: RCSID("$OpenBSD: log-server.c,v 1.14 2000/04/14 10:30:31 markus Exp $");
1.1 deraadt 19:
20: #include <syslog.h>
21: #include "packet.h"
22: #include "xmalloc.h"
23: #include "ssh.h"
24:
1.7 markus 25: static LogLevel log_level = SYSLOG_LEVEL_INFO;
1.1 deraadt 26: static int log_on_stderr = 0;
1.8 markus 27: static int log_facility = LOG_AUTH;
1.1 deraadt 28:
29: /* Initialize the log.
1.10 markus 30: * av0 program name (should be argv[0])
31: * on_stderr print also on stderr
32: * level logging level
33: */
1.1 deraadt 34:
1.14 markus 35: void
1.10 markus 36: log_init(char *av0, LogLevel level, SyslogFacility facility, int on_stderr)
1.1 deraadt 37: {
1.10 markus 38: switch (level) {
39: case SYSLOG_LEVEL_QUIET:
40: case SYSLOG_LEVEL_ERROR:
41: case SYSLOG_LEVEL_FATAL:
42: case SYSLOG_LEVEL_INFO:
43: case SYSLOG_LEVEL_VERBOSE:
44: case SYSLOG_LEVEL_DEBUG:
45: log_level = level;
46: break;
47: default:
48: fprintf(stderr, "Unrecognized internal syslog level code %d\n",
49: (int) level);
50: exit(1);
51: }
52: switch (facility) {
53: case SYSLOG_FACILITY_DAEMON:
54: log_facility = LOG_DAEMON;
55: break;
56: case SYSLOG_FACILITY_USER:
57: log_facility = LOG_USER;
58: break;
59: case SYSLOG_FACILITY_AUTH:
60: log_facility = LOG_AUTH;
61: break;
62: case SYSLOG_FACILITY_LOCAL0:
63: log_facility = LOG_LOCAL0;
64: break;
65: case SYSLOG_FACILITY_LOCAL1:
66: log_facility = LOG_LOCAL1;
67: break;
68: case SYSLOG_FACILITY_LOCAL2:
69: log_facility = LOG_LOCAL2;
70: break;
71: case SYSLOG_FACILITY_LOCAL3:
72: log_facility = LOG_LOCAL3;
73: break;
74: case SYSLOG_FACILITY_LOCAL4:
75: log_facility = LOG_LOCAL4;
76: break;
77: case SYSLOG_FACILITY_LOCAL5:
78: log_facility = LOG_LOCAL5;
79: break;
80: case SYSLOG_FACILITY_LOCAL6:
81: log_facility = LOG_LOCAL6;
82: break;
83: case SYSLOG_FACILITY_LOCAL7:
84: log_facility = LOG_LOCAL7;
85: break;
86: default:
87: fprintf(stderr, "Unrecognized internal syslog facility code %d\n",
88: (int) facility);
89: exit(1);
90: }
91: log_on_stderr = on_stderr;
1.1 deraadt 92: }
93:
1.12 deraadt 94: #define MSGBUFSIZ 1024
1.1 deraadt 95:
1.7 markus 96: void
97: do_log(LogLevel level, const char *fmt, va_list args)
1.1 deraadt 98: {
1.12 deraadt 99: char msgbuf[MSGBUFSIZ];
100: char fmtbuf[MSGBUFSIZ];
1.10 markus 101: char *txt = NULL;
102: int pri = LOG_INFO;
103: extern char *__progname;
104:
105: if (level > log_level)
106: return;
107: switch (level) {
108: case SYSLOG_LEVEL_ERROR:
109: txt = "error";
110: pri = LOG_ERR;
111: break;
112: case SYSLOG_LEVEL_FATAL:
113: txt = "fatal";
114: pri = LOG_ERR;
115: break;
116: case SYSLOG_LEVEL_INFO:
117: case SYSLOG_LEVEL_VERBOSE:
118: pri = LOG_INFO;
119: break;
120: case SYSLOG_LEVEL_DEBUG:
121: txt = "debug";
122: pri = LOG_DEBUG;
123: break;
124: default:
125: txt = "internal error";
126: pri = LOG_ERR;
127: break;
128: }
129: if (txt != NULL) {
130: snprintf(fmtbuf, sizeof(fmtbuf), "%s: %s", txt, fmt);
131: vsnprintf(msgbuf, sizeof(msgbuf), fmtbuf, args);
132: } else {
133: vsnprintf(msgbuf, sizeof(msgbuf), fmt, args);
134: }
1.13 markus 135: if (log_on_stderr) {
1.10 markus 136: fprintf(stderr, "%s\n", msgbuf);
1.13 markus 137: } else {
138: openlog(__progname, LOG_PID, log_facility);
139: syslog(pri, "%.500s", msgbuf);
140: closelog();
141: }
1.1 deraadt 142: }