]> andersk Git - openssh.git/blame - log-server.c
- Merged more OpenBSD CVS changes:
[openssh.git] / log-server.c
CommitLineData
8efc0c15 1/*
2
3log-server.c
4
5Author: Tatu Ylonen <ylo@cs.hut.fi>
6
7Copyright (c) 1995 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland
8 All rights reserved
9
10Created: Mon Mar 20 21:19:30 1995 ylo
11
12Server-side versions of debug(), log(), etc. These normally send the output
13to the system log.
14
15*/
16
17#include "includes.h"
18RCSID("$Id$");
19
20#include <syslog.h>
21#include "packet.h"
22#include "xmalloc.h"
23#include "ssh.h"
24
6a17f9c2 25static LogLevel log_level = SYSLOG_LEVEL_INFO;
8efc0c15 26static int log_on_stderr = 0;
27
28/* Initialize the log.
29 av0 program name (should be argv[0])
30 on_stderr print also on stderr
6a17f9c2 31 level logging level
8efc0c15 32 */
33
6a17f9c2 34void log_init(char *av0, LogLevel level, SyslogFacility facility, int on_stderr)
8efc0c15 35{
36 int log_facility;
37
6a17f9c2 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
8efc0c15 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
8efc0c15 95 log_on_stderr = on_stderr;
96 closelog(); /* Close any previous log. */
97 openlog(av0, LOG_PID, log_facility);
98}
99
100#define MSGBUFSIZE 1024
101
6a17f9c2 102void
103do_log(LogLevel level, const char *fmt, va_list args)
8efc0c15 104{
6a17f9c2 105 char msgbuf[MSGBUFSIZE];
106 char fmtbuf[MSGBUFSIZE];
107 char *txt = NULL;
108 int pri = LOG_INFO;
8efc0c15 109
6a17f9c2 110 if (level > log_level)
8efc0c15 111 return;
6a17f9c2 112 switch (level)
8efc0c15 113 {
6a17f9c2 114 case SYSLOG_LEVEL_ERROR:
115 txt = "error";
116 pri = LOG_ERR;
117 break;
118 case SYSLOG_LEVEL_FATAL:
119 txt = "fatal";
120 pri = LOG_ERR;
121 break;
122 case SYSLOG_LEVEL_INFO:
123 pri = LOG_INFO;
124 break;
125 case SYSLOG_LEVEL_CHAT:
126 pri = LOG_INFO;
127 break;
128 case SYSLOG_LEVEL_DEBUG:
129 txt = "debug";
130 pri = LOG_DEBUG;
131 break;
132 default:
133 txt = "internal error";
134 pri = LOG_ERR;
135 break;
8efc0c15 136 }
8efc0c15 137
6a17f9c2 138 if (txt != NULL) {
139 snprintf(fmtbuf, sizeof(fmtbuf), "%s: %s", txt, fmt);
140 vsnprintf(msgbuf, sizeof(msgbuf), fmtbuf, args);
141 }else{
142 vsnprintf(msgbuf, sizeof(msgbuf), fmt, args);
143 }
8efc0c15 144 if (log_on_stderr)
6a17f9c2 145 fprintf(stderr, "%s\n", msgbuf);
146 syslog(pri, "%.500s", msgbuf);
8efc0c15 147}
This page took 0.109471 seconds and 5 git commands to generate.