[BACK]Return to log-server.c CVS log [TXT][DIR] Up to [local] / src / usr.bin / ssh

Annotation of src/usr.bin/ssh/log-server.c, Revision 1.15

1.1       deraadt     1: /*
1.14      markus      2:  *
1.11      deraadt     3:  * log-server.c
1.14      markus      4:  *
1.11      deraadt     5:  * Author: Tatu Ylonen <ylo@cs.hut.fi>
1.14      markus      6:  *
1.11      deraadt     7:  * Copyright (c) 1995 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland
                      8:  *                    All rights reserved
1.14      markus      9:  *
1.11      deraadt    10:  * Created: Mon Mar 20 21:19:30 1995 ylo
1.14      markus     11:  *
1.11      deraadt    12:  * Server-side versions of debug(), log(), etc.  These normally send the output
                     13:  * to the system log.
1.14      markus     14:  *
1.11      deraadt    15:  */
1.1       deraadt    16:
                     17: #include "includes.h"
1.15    ! markus     18: RCSID("$OpenBSD: log-server.c,v 1.14 2000/04/14 10:30:31 markus Exp $");
1.1       deraadt    19:
                     20: #include <syslog.h>
                     21: #include "packet.h"
                     22: #include "xmalloc.h"
                     23: #include "ssh.h"
                     24:
1.7       markus     25: static LogLevel log_level = SYSLOG_LEVEL_INFO;
1.1       deraadt    26: static int log_on_stderr = 0;
1.8       markus     27: static int log_facility = LOG_AUTH;
1.1       deraadt    28:
                     29: /* Initialize the log.
1.10      markus     30:  *   av0       program name (should be argv[0])
                     31:  *   on_stderr print also on stderr
                     32:  *   level     logging level
                     33:  */
1.1       deraadt    34:
1.14      markus     35: void
1.10      markus     36: log_init(char *av0, LogLevel level, SyslogFacility facility, int on_stderr)
1.1       deraadt    37: {
1.10      markus     38:        switch (level) {
                     39:        case SYSLOG_LEVEL_QUIET:
                     40:        case SYSLOG_LEVEL_ERROR:
                     41:        case SYSLOG_LEVEL_FATAL:
                     42:        case SYSLOG_LEVEL_INFO:
                     43:        case SYSLOG_LEVEL_VERBOSE:
                     44:        case SYSLOG_LEVEL_DEBUG:
                     45:                log_level = level;
                     46:                break;
                     47:        default:
                     48:                fprintf(stderr, "Unrecognized internal syslog level code %d\n",
                     49:                        (int) level);
                     50:                exit(1);
                     51:        }
                     52:        switch (facility) {
                     53:        case SYSLOG_FACILITY_DAEMON:
                     54:                log_facility = LOG_DAEMON;
                     55:                break;
                     56:        case SYSLOG_FACILITY_USER:
                     57:                log_facility = LOG_USER;
                     58:                break;
                     59:        case SYSLOG_FACILITY_AUTH:
                     60:                log_facility = LOG_AUTH;
                     61:                break;
                     62:        case SYSLOG_FACILITY_LOCAL0:
                     63:                log_facility = LOG_LOCAL0;
                     64:                break;
                     65:        case SYSLOG_FACILITY_LOCAL1:
                     66:                log_facility = LOG_LOCAL1;
                     67:                break;
                     68:        case SYSLOG_FACILITY_LOCAL2:
                     69:                log_facility = LOG_LOCAL2;
                     70:                break;
                     71:        case SYSLOG_FACILITY_LOCAL3:
                     72:                log_facility = LOG_LOCAL3;
                     73:                break;
                     74:        case SYSLOG_FACILITY_LOCAL4:
                     75:                log_facility = LOG_LOCAL4;
                     76:                break;
                     77:        case SYSLOG_FACILITY_LOCAL5:
                     78:                log_facility = LOG_LOCAL5;
                     79:                break;
                     80:        case SYSLOG_FACILITY_LOCAL6:
                     81:                log_facility = LOG_LOCAL6;
                     82:                break;
                     83:        case SYSLOG_FACILITY_LOCAL7:
                     84:                log_facility = LOG_LOCAL7;
                     85:                break;
                     86:        default:
                     87:                fprintf(stderr, "Unrecognized internal syslog facility code %d\n",
                     88:                        (int) facility);
                     89:                exit(1);
                     90:        }
                     91:        log_on_stderr = on_stderr;
1.1       deraadt    92: }
                     93:
1.12      deraadt    94: #define MSGBUFSIZ 1024
1.1       deraadt    95:
1.7       markus     96: void
                     97: do_log(LogLevel level, const char *fmt, va_list args)
1.1       deraadt    98: {
1.12      deraadt    99:        char msgbuf[MSGBUFSIZ];
                    100:        char fmtbuf[MSGBUFSIZ];
1.10      markus    101:        char *txt = NULL;
                    102:        int pri = LOG_INFO;
                    103:        extern char *__progname;
                    104:
                    105:        if (level > log_level)
                    106:                return;
                    107:        switch (level) {
                    108:        case SYSLOG_LEVEL_ERROR:
                    109:                txt = "error";
                    110:                pri = LOG_ERR;
                    111:                break;
                    112:        case SYSLOG_LEVEL_FATAL:
                    113:                txt = "fatal";
                    114:                pri = LOG_ERR;
                    115:                break;
                    116:        case SYSLOG_LEVEL_INFO:
                    117:        case SYSLOG_LEVEL_VERBOSE:
                    118:                pri = LOG_INFO;
                    119:                break;
                    120:        case SYSLOG_LEVEL_DEBUG:
                    121:                txt = "debug";
                    122:                pri = LOG_DEBUG;
                    123:                break;
                    124:        default:
                    125:                txt = "internal error";
                    126:                pri = LOG_ERR;
                    127:                break;
                    128:        }
                    129:        if (txt != NULL) {
                    130:                snprintf(fmtbuf, sizeof(fmtbuf), "%s: %s", txt, fmt);
                    131:                vsnprintf(msgbuf, sizeof(msgbuf), fmtbuf, args);
                    132:        } else {
                    133:                vsnprintf(msgbuf, sizeof(msgbuf), fmt, args);
                    134:        }
1.13      markus    135:        if (log_on_stderr) {
1.10      markus    136:                fprintf(stderr, "%s\n", msgbuf);
1.13      markus    137:        } else {
                    138:                openlog(__progname, LOG_PID, log_facility);
                    139:                syslog(pri, "%.500s", msgbuf);
                    140:                closelog();
                    141:        }
1.1       deraadt   142: }