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

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.8     ! markus     18: RCSID("$Id: log-server.c,v 1.7 1999/11/10 23:36:44 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.
                     30:      av0       program name (should be argv[0])
                     31:      on_stderr print also on stderr
1.7       markus     32:      level     logging level
1.1       deraadt    33:      */
                     34:
1.7       markus     35: void log_init(char *av0, LogLevel level, SyslogFacility facility, int on_stderr)
1.1       deraadt    36: {
                     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: }
                     97:
                     98: #define MSGBUFSIZE 1024
                     99:
1.7       markus    100: void
                    101: do_log(LogLevel level, const char *fmt, va_list args)
1.1       deraadt   102: {
1.7       markus    103:   char msgbuf[MSGBUFSIZE];
                    104:   char fmtbuf[MSGBUFSIZE];
                    105:   char *txt = NULL;
                    106:   int pri = LOG_INFO;
1.8     ! markus    107:   extern char *__progname;
1.1       deraadt   108:
1.7       markus    109:   if (level > log_level)
1.1       deraadt   110:     return;
1.7       markus    111:   switch (level)
1.1       deraadt   112:     {
1.7       markus    113:     case SYSLOG_LEVEL_ERROR:
                    114:       txt = "error";
                    115:       pri = LOG_ERR;
                    116:       break;
                    117:     case SYSLOG_LEVEL_FATAL:
                    118:       txt = "fatal";
                    119:       pri = LOG_ERR;
                    120:       break;
                    121:     case SYSLOG_LEVEL_INFO:
                    122:       pri = LOG_INFO;
                    123:       break;
                    124:     case SYSLOG_LEVEL_CHAT:
                    125:       pri = LOG_INFO;
                    126:       break;
                    127:     case SYSLOG_LEVEL_DEBUG:
                    128:       txt = "debug";
                    129:       pri = LOG_DEBUG;
                    130:       break;
                    131:     default:
                    132:       txt = "internal error";
                    133:       pri = LOG_ERR;
                    134:       break;
1.1       deraadt   135:     }
                    136:
1.7       markus    137:   if (txt != NULL) {
                    138:     snprintf(fmtbuf, sizeof(fmtbuf), "%s: %s", txt, fmt);
                    139:     vsnprintf(msgbuf, sizeof(msgbuf), fmtbuf, args);
                    140:   }else{
                    141:     vsnprintf(msgbuf, sizeof(msgbuf), fmt, args);
1.6       markus    142:   }
1.7       markus    143:   if (log_on_stderr)
                    144:     fprintf(stderr, "%s\n", msgbuf);
1.8     ! markus    145:   openlog(__progname, LOG_PID, log_facility);
1.7       markus    146:   syslog(pri, "%.500s", msgbuf);
1.8     ! markus    147:   closelog();
1.1       deraadt   148: }