2 * Author: Tatu Ylonen <ylo@cs.hut.fi>
3 * Copyright (c) 1995 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland
5 * Server-side versions of debug(), log(), etc. These normally send the output
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".
15 * Copyright (c) 2000 Markus Friedl. All rights reserved.
17 * Redistribution and use in source and binary forms, with or without
18 * modification, are permitted provided that the following conditions
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.
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.
39 RCSID("$OpenBSD: log-server.c,v 1.17 2000/09/12 20:53:10 markus Exp $");
46 #ifdef HAVE___PROGNAME
47 extern char *__progname;
48 #else /* HAVE___PROGNAME */
49 static const char *__progname = "sshd";
50 #endif /* HAVE___PROGNAME */
52 static LogLevel log_level = SYSLOG_LEVEL_INFO;
53 static int log_on_stderr = 0;
54 static int log_facility = LOG_AUTH;
56 /* Initialize the log.
57 * av0 program name (should be argv[0])
58 * on_stderr print also on stderr
63 log_init(char *av0, LogLevel level, SyslogFacility facility, int on_stderr)
66 case SYSLOG_LEVEL_QUIET:
67 case SYSLOG_LEVEL_ERROR:
68 case SYSLOG_LEVEL_FATAL:
69 case SYSLOG_LEVEL_INFO:
70 case SYSLOG_LEVEL_VERBOSE:
71 case SYSLOG_LEVEL_DEBUG1:
72 case SYSLOG_LEVEL_DEBUG2:
73 case SYSLOG_LEVEL_DEBUG3:
77 fprintf(stderr, "Unrecognized internal syslog level code %d\n",
82 case SYSLOG_FACILITY_DAEMON:
83 log_facility = LOG_DAEMON;
85 case SYSLOG_FACILITY_USER:
86 log_facility = LOG_USER;
88 case SYSLOG_FACILITY_AUTH:
89 log_facility = LOG_AUTH;
91 case SYSLOG_FACILITY_LOCAL0:
92 log_facility = LOG_LOCAL0;
94 case SYSLOG_FACILITY_LOCAL1:
95 log_facility = LOG_LOCAL1;
97 case SYSLOG_FACILITY_LOCAL2:
98 log_facility = LOG_LOCAL2;
100 case SYSLOG_FACILITY_LOCAL3:
101 log_facility = LOG_LOCAL3;
103 case SYSLOG_FACILITY_LOCAL4:
104 log_facility = LOG_LOCAL4;
106 case SYSLOG_FACILITY_LOCAL5:
107 log_facility = LOG_LOCAL5;
109 case SYSLOG_FACILITY_LOCAL6:
110 log_facility = LOG_LOCAL6;
112 case SYSLOG_FACILITY_LOCAL7:
113 log_facility = LOG_LOCAL7;
116 fprintf(stderr, "Unrecognized internal syslog facility code %d\n",
120 log_on_stderr = on_stderr;
123 #define MSGBUFSIZ 1024
126 do_log(LogLevel level, const char *fmt, va_list args)
128 char msgbuf[MSGBUFSIZ];
129 char fmtbuf[MSGBUFSIZ];
133 if (level > log_level)
136 case SYSLOG_LEVEL_ERROR:
140 case SYSLOG_LEVEL_FATAL:
144 case SYSLOG_LEVEL_INFO:
145 case SYSLOG_LEVEL_VERBOSE:
148 case SYSLOG_LEVEL_DEBUG1:
152 case SYSLOG_LEVEL_DEBUG2:
156 case SYSLOG_LEVEL_DEBUG3:
161 txt = "internal error";
166 snprintf(fmtbuf, sizeof(fmtbuf), "%s: %s", txt, fmt);
167 vsnprintf(msgbuf, sizeof(msgbuf), fmtbuf, args);
169 vsnprintf(msgbuf, sizeof(msgbuf), fmt, args);
172 fprintf(stderr, "%s\n", msgbuf);
174 openlog(__progname, LOG_PID, log_facility);
175 syslog(pri, "%.500s", msgbuf);