]> andersk Git - openssh.git/blob - log-server.c
1143b3489e7cc1086f4b6369a24705888f3f74be
[openssh.git] / log-server.c
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"
18 RCSID("$Id$");
19
20 #include <syslog.h>
21 #include "packet.h"
22 #include "xmalloc.h"
23 #include "ssh.h"
24
25 static LogLevel log_level = SYSLOG_LEVEL_INFO;
26 static int log_on_stderr = 0;
27 static int log_facility = LOG_AUTH;
28
29 /* Initialize the log.
30      av0        program name (should be argv[0])
31      on_stderr  print also on stderr
32      level      logging level
33      */
34
35 void log_init(char *av0, LogLevel level, SyslogFacility facility, int on_stderr)
36 {
37   
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
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
100 void
101 do_log(LogLevel level, const char *fmt, va_list args)
102 {
103   char msgbuf[MSGBUFSIZE];
104   char fmtbuf[MSGBUFSIZE];
105   char *txt = NULL;
106   int pri = LOG_INFO;
107   extern char *__progname;
108
109   if (level > log_level)
110     return;
111   switch (level)
112     {
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;
135     }
136
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);
142   }
143   if (log_on_stderr)
144     fprintf(stderr, "%s\n", msgbuf);
145   openlog(__progname, LOG_PID, log_facility);
146   syslog(pri, "%.500s", msgbuf);
147   closelog();
148 }
This page took 0.034457 seconds and 3 git commands to generate.