5 * Author: Tatu Ylonen <ylo@cs.hut.fi>
7 * Copyright (c) 1995 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland
10 * Created: Mon Mar 20 21:19:30 1995 ylo
12 * Server-side versions of debug(), log(), etc. These normally send the output
25 #ifdef HAVE___PROGNAME
26 extern char *__progname;
27 #else /* HAVE___PROGNAME */
28 static const char *__progname = "sshd";
29 #endif /* HAVE___PROGNAME */
31 static LogLevel log_level = SYSLOG_LEVEL_INFO;
32 static int log_on_stderr = 0;
33 static int log_facility = LOG_AUTH;
35 /* Initialize the log.
36 * av0 program name (should be argv[0])
37 * on_stderr print also on stderr
42 log_init(char *av0, LogLevel level, SyslogFacility facility, int on_stderr)
45 case SYSLOG_LEVEL_QUIET:
46 case SYSLOG_LEVEL_ERROR:
47 case SYSLOG_LEVEL_FATAL:
48 case SYSLOG_LEVEL_INFO:
49 case SYSLOG_LEVEL_VERBOSE:
50 case SYSLOG_LEVEL_DEBUG:
54 fprintf(stderr, "Unrecognized internal syslog level code %d\n",
59 case SYSLOG_FACILITY_DAEMON:
60 log_facility = LOG_DAEMON;
62 case SYSLOG_FACILITY_USER:
63 log_facility = LOG_USER;
65 case SYSLOG_FACILITY_AUTH:
66 log_facility = LOG_AUTH;
68 case SYSLOG_FACILITY_LOCAL0:
69 log_facility = LOG_LOCAL0;
71 case SYSLOG_FACILITY_LOCAL1:
72 log_facility = LOG_LOCAL1;
74 case SYSLOG_FACILITY_LOCAL2:
75 log_facility = LOG_LOCAL2;
77 case SYSLOG_FACILITY_LOCAL3:
78 log_facility = LOG_LOCAL3;
80 case SYSLOG_FACILITY_LOCAL4:
81 log_facility = LOG_LOCAL4;
83 case SYSLOG_FACILITY_LOCAL5:
84 log_facility = LOG_LOCAL5;
86 case SYSLOG_FACILITY_LOCAL6:
87 log_facility = LOG_LOCAL6;
89 case SYSLOG_FACILITY_LOCAL7:
90 log_facility = LOG_LOCAL7;
93 fprintf(stderr, "Unrecognized internal syslog facility code %d\n",
97 log_on_stderr = on_stderr;
100 #define MSGBUFSIZ 1024
103 do_log(LogLevel level, const char *fmt, va_list args)
105 char msgbuf[MSGBUFSIZ];
106 char fmtbuf[MSGBUFSIZ];
110 if (level > log_level)
113 case SYSLOG_LEVEL_ERROR:
117 case SYSLOG_LEVEL_FATAL:
121 case SYSLOG_LEVEL_INFO:
122 case SYSLOG_LEVEL_VERBOSE:
125 case SYSLOG_LEVEL_DEBUG:
130 txt = "internal error";
135 snprintf(fmtbuf, sizeof(fmtbuf), "%s: %s", txt, fmt);
136 vsnprintf(msgbuf, sizeof(msgbuf), fmtbuf, args);
138 vsnprintf(msgbuf, sizeof(msgbuf), fmt, args);
141 fprintf(stderr, "%s\n", msgbuf);
143 openlog(__progname, LOG_PID, log_facility);
144 syslog(pri, "%.500s", msgbuf);