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