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

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.6       markus     18: RCSID("$Id: log-server.c,v 1.5 1999/10/17 20:39:11 dugsong 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;
                     27:
                     28: /* Initialize the log.
                     29:      av0       program name (should be argv[0])
                     30:      on_stderr print also on stderr
1.7     ! markus     31:      level     logging level
1.1       deraadt    32:      */
                     33:
1.7     ! markus     34: void log_init(char *av0, LogLevel level, SyslogFacility facility, int on_stderr)
1.1       deraadt    35: {
                     36:   int log_facility;
                     37:
1.7     ! markus     38:   switch (level)
        !            39:     {
        !            40:     case SYSLOG_LEVEL_QUIET:
        !            41:     case SYSLOG_LEVEL_ERROR:
        !            42:     case SYSLOG_LEVEL_FATAL:
        !            43:     case SYSLOG_LEVEL_INFO:
        !            44:     case SYSLOG_LEVEL_CHAT:
        !            45:     case SYSLOG_LEVEL_DEBUG:
        !            46:       log_level = level;
        !            47:       break;
        !            48:     default:
        !            49:       fprintf(stderr, "Unrecognized internal syslog level code %d\n",
        !            50:              (int)level);
        !            51:       exit(1);
        !            52:     }
        !            53:
1.1       deraadt    54:   switch (facility)
                     55:     {
                     56:     case SYSLOG_FACILITY_DAEMON:
                     57:       log_facility = LOG_DAEMON;
                     58:       break;
                     59:     case SYSLOG_FACILITY_USER:
                     60:       log_facility = LOG_USER;
                     61:       break;
                     62:     case SYSLOG_FACILITY_AUTH:
                     63:       log_facility = LOG_AUTH;
                     64:       break;
                     65:     case SYSLOG_FACILITY_LOCAL0:
                     66:       log_facility = LOG_LOCAL0;
                     67:       break;
                     68:     case SYSLOG_FACILITY_LOCAL1:
                     69:       log_facility = LOG_LOCAL1;
                     70:       break;
                     71:     case SYSLOG_FACILITY_LOCAL2:
                     72:       log_facility = LOG_LOCAL2;
                     73:       break;
                     74:     case SYSLOG_FACILITY_LOCAL3:
                     75:       log_facility = LOG_LOCAL3;
                     76:       break;
                     77:     case SYSLOG_FACILITY_LOCAL4:
                     78:       log_facility = LOG_LOCAL4;
                     79:       break;
                     80:     case SYSLOG_FACILITY_LOCAL5:
                     81:       log_facility = LOG_LOCAL5;
                     82:       break;
                     83:     case SYSLOG_FACILITY_LOCAL6:
                     84:       log_facility = LOG_LOCAL6;
                     85:       break;
                     86:     case SYSLOG_FACILITY_LOCAL7:
                     87:       log_facility = LOG_LOCAL7;
                     88:       break;
                     89:     default:
                     90:       fprintf(stderr, "Unrecognized internal syslog facility code %d\n",
                     91:              (int)facility);
                     92:       exit(1);
                     93:     }
                     94:
                     95:   log_on_stderr = on_stderr;
                     96:   closelog(); /* Close any previous log. */
                     97:   openlog(av0, LOG_PID, log_facility);
                     98: }
                     99:
                    100: #define MSGBUFSIZE 1024
                    101:
1.7     ! markus    102: void
        !           103: do_log(LogLevel level, const char *fmt, va_list args)
1.1       deraadt   104: {
1.7     ! markus    105:   char msgbuf[MSGBUFSIZE];
        !           106:   char fmtbuf[MSGBUFSIZE];
        !           107:   char *txt = NULL;
        !           108:   int pri = LOG_INFO;
1.1       deraadt   109:
1.7     ! markus    110:   if (level > log_level)
1.1       deraadt   111:     return;
1.7     ! markus    112:   switch (level)
1.1       deraadt   113:     {
1.7     ! markus    114:     case SYSLOG_LEVEL_ERROR:
        !           115:       txt = "error";
        !           116:       pri = LOG_ERR;
        !           117:       break;
        !           118:     case SYSLOG_LEVEL_FATAL:
        !           119:       txt = "fatal";
        !           120:       pri = LOG_ERR;
        !           121:       break;
        !           122:     case SYSLOG_LEVEL_INFO:
        !           123:       pri = LOG_INFO;
        !           124:       break;
        !           125:     case SYSLOG_LEVEL_CHAT:
        !           126:       pri = LOG_INFO;
        !           127:       break;
        !           128:     case SYSLOG_LEVEL_DEBUG:
        !           129:       txt = "debug";
        !           130:       pri = LOG_DEBUG;
        !           131:       break;
        !           132:     default:
        !           133:       txt = "internal error";
        !           134:       pri = LOG_ERR;
        !           135:       break;
1.1       deraadt   136:     }
                    137:
1.7     ! markus    138:   if (txt != NULL) {
        !           139:     snprintf(fmtbuf, sizeof(fmtbuf), "%s: %s", txt, fmt);
        !           140:     vsnprintf(msgbuf, sizeof(msgbuf), fmtbuf, args);
        !           141:   }else{
        !           142:     vsnprintf(msgbuf, sizeof(msgbuf), fmt, args);
1.6       markus    143:   }
1.7     ! markus    144:   if (log_on_stderr)
        !           145:     fprintf(stderr, "%s\n", msgbuf);
        !           146:   syslog(pri, "%.500s", msgbuf);
1.1       deraadt   147: }