[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.10

1.1       deraadt     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"
1.10    ! markus     18: RCSID("$Id: log-server.c,v 1.9 1999/11/22 21:02:38 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.10    ! markus     35: void
        !            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:
                     94: #define MSGBUFSIZE 1024
                     95:
1.7       markus     96: void
                     97: do_log(LogLevel level, const char *fmt, va_list args)
1.1       deraadt    98: {
1.10    ! markus     99:        char msgbuf[MSGBUFSIZE];
        !           100:        char fmtbuf[MSGBUFSIZE];
        !           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:        }
        !           135:        if (log_on_stderr)
        !           136:                fprintf(stderr, "%s\n", msgbuf);
        !           137:        openlog(__progname, LOG_PID, log_facility);
        !           138:        syslog(pri, "%.500s", msgbuf);
        !           139:        closelog();
1.1       deraadt   140: }