Annotation of src/usr.bin/ssh/log-server.c, Revision 1.10
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.10 ! markus 18: RCSID("$Id: log-server.c,v 1.9 1999/11/22 21:02:38 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.10 ! markus 35: void
! 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:
94: #define MSGBUFSIZE 1024
95:
1.7 markus 96: void
97: do_log(LogLevel level, const char *fmt, va_list args)
1.1 deraadt 98: {
1.10 ! markus 99: char msgbuf[MSGBUFSIZE];
! 100: char fmtbuf[MSGBUFSIZE];
! 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: }
! 135: if (log_on_stderr)
! 136: fprintf(stderr, "%s\n", msgbuf);
! 137: openlog(__progname, LOG_PID, log_facility);
! 138: syslog(pri, "%.500s", msgbuf);
! 139: closelog();
1.1 deraadt 140: }