]> andersk Git - openssh.git/blame - log-server.c
20001123
[openssh.git] / log-server.c
CommitLineData
8efc0c15 1/*
5260325f 2 * Author: Tatu Ylonen <ylo@cs.hut.fi>
5260325f 3 * Copyright (c) 1995 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland
4 * All rights reserved
5260325f 5 * Server-side versions of debug(), log(), etc. These normally send the output
6 * to the system log.
6ae2364d 7 *
bcbf86ec 8 * As far as I am concerned, the code I have written for this software
9 * can be used freely for any purpose. Any derived versions of this
10 * software must be clearly marked as such, and if the derived work is
11 * incompatible with the protocol description in the RFC file, it must be
12 * called by a name other than "ssh" or "Secure Shell".
13 *
14 *
15 * Copyright (c) 2000 Markus Friedl. All rights reserved.
16 *
17 * Redistribution and use in source and binary forms, with or without
18 * modification, are permitted provided that the following conditions
19 * are met:
20 * 1. Redistributions of source code must retain the above copyright
21 * notice, this list of conditions and the following disclaimer.
22 * 2. Redistributions in binary form must reproduce the above copyright
23 * notice, this list of conditions and the following disclaimer in the
24 * documentation and/or other materials provided with the distribution.
25 *
26 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
27 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
28 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
29 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
30 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
31 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
32 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
33 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
34 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
35 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
5260325f 36 */
8efc0c15 37
38#include "includes.h"
bcbf86ec 39RCSID("$OpenBSD: log-server.c,v 1.17 2000/09/12 20:53:10 markus Exp $");
8efc0c15 40
41#include <syslog.h>
42#include "packet.h"
43#include "xmalloc.h"
44#include "ssh.h"
45
6a17f9c2 46static LogLevel log_level = SYSLOG_LEVEL_INFO;
8efc0c15 47static int log_on_stderr = 0;
e7c0f9d5 48static int log_facility = LOG_AUTH;
8efc0c15 49
50/* Initialize the log.
5260325f 51 * av0 program name (should be argv[0])
52 * on_stderr print also on stderr
53 * level logging level
54 */
8efc0c15 55
6ae2364d 56void
5260325f 57log_init(char *av0, LogLevel level, SyslogFacility facility, int on_stderr)
8efc0c15 58{
5260325f 59 switch (level) {
60 case SYSLOG_LEVEL_QUIET:
61 case SYSLOG_LEVEL_ERROR:
62 case SYSLOG_LEVEL_FATAL:
63 case SYSLOG_LEVEL_INFO:
64 case SYSLOG_LEVEL_VERBOSE:
bcbf86ec 65 case SYSLOG_LEVEL_DEBUG1:
66 case SYSLOG_LEVEL_DEBUG2:
67 case SYSLOG_LEVEL_DEBUG3:
5260325f 68 log_level = level;
69 break;
70 default:
71 fprintf(stderr, "Unrecognized internal syslog level code %d\n",
72 (int) level);
73 exit(1);
74 }
75 switch (facility) {
76 case SYSLOG_FACILITY_DAEMON:
77 log_facility = LOG_DAEMON;
78 break;
79 case SYSLOG_FACILITY_USER:
80 log_facility = LOG_USER;
81 break;
82 case SYSLOG_FACILITY_AUTH:
83 log_facility = LOG_AUTH;
84 break;
85 case SYSLOG_FACILITY_LOCAL0:
86 log_facility = LOG_LOCAL0;
87 break;
88 case SYSLOG_FACILITY_LOCAL1:
89 log_facility = LOG_LOCAL1;
90 break;
91 case SYSLOG_FACILITY_LOCAL2:
92 log_facility = LOG_LOCAL2;
93 break;
94 case SYSLOG_FACILITY_LOCAL3:
95 log_facility = LOG_LOCAL3;
96 break;
97 case SYSLOG_FACILITY_LOCAL4:
98 log_facility = LOG_LOCAL4;
99 break;
100 case SYSLOG_FACILITY_LOCAL5:
101 log_facility = LOG_LOCAL5;
102 break;
103 case SYSLOG_FACILITY_LOCAL6:
104 log_facility = LOG_LOCAL6;
105 break;
106 case SYSLOG_FACILITY_LOCAL7:
107 log_facility = LOG_LOCAL7;
108 break;
109 default:
110 fprintf(stderr, "Unrecognized internal syslog facility code %d\n",
111 (int) facility);
112 exit(1);
113 }
114 log_on_stderr = on_stderr;
8efc0c15 115}
116
c8d54615 117#define MSGBUFSIZ 1024
8efc0c15 118
6a17f9c2 119void
120do_log(LogLevel level, const char *fmt, va_list args)
8efc0c15 121{
c8d54615 122 char msgbuf[MSGBUFSIZ];
123 char fmtbuf[MSGBUFSIZ];
5260325f 124 char *txt = NULL;
125 int pri = LOG_INFO;
260d427b 126 extern char *__progname;
5260325f 127
128 if (level > log_level)
129 return;
130 switch (level) {
131 case SYSLOG_LEVEL_ERROR:
132 txt = "error";
133 pri = LOG_ERR;
134 break;
135 case SYSLOG_LEVEL_FATAL:
136 txt = "fatal";
137 pri = LOG_ERR;
138 break;
139 case SYSLOG_LEVEL_INFO:
140 case SYSLOG_LEVEL_VERBOSE:
141 pri = LOG_INFO;
142 break;
bcbf86ec 143 case SYSLOG_LEVEL_DEBUG1:
144 txt = "debug1";
145 pri = LOG_DEBUG;
146 break;
147 case SYSLOG_LEVEL_DEBUG2:
148 txt = "debug2";
149 pri = LOG_DEBUG;
150 break;
151 case SYSLOG_LEVEL_DEBUG3:
152 txt = "debug3";
5260325f 153 pri = LOG_DEBUG;
154 break;
155 default:
156 txt = "internal error";
157 pri = LOG_ERR;
158 break;
159 }
160 if (txt != NULL) {
161 snprintf(fmtbuf, sizeof(fmtbuf), "%s: %s", txt, fmt);
162 vsnprintf(msgbuf, sizeof(msgbuf), fmtbuf, args);
163 } else {
164 vsnprintf(msgbuf, sizeof(msgbuf), fmt, args);
165 }
7368a6c8 166 if (log_on_stderr) {
5260325f 167 fprintf(stderr, "%s\n", msgbuf);
7368a6c8 168 } else {
169 openlog(__progname, LOG_PID, log_facility);
170 syslog(pri, "%.500s", msgbuf);
171 closelog();
172 }
8efc0c15 173}
This page took 0.80425 seconds and 5 git commands to generate.