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

Diff for /src/usr.bin/ssh/log.c between version 1.3 and 1.4

version 1.3, 1999/11/22 21:02:38 version 1.4, 1999/11/23 22:25:54
Line 13 
Line 13 
 /* Fatal messages.  This function never returns. */  /* Fatal messages.  This function never returns. */
   
 void  void
 fatal(const char *fmt, ...)  fatal(const char *fmt,...)
 {  {
   va_list args;          va_list args;
   va_start(args, fmt);          va_start(args, fmt);
   do_log(SYSLOG_LEVEL_FATAL, fmt, args);          do_log(SYSLOG_LEVEL_FATAL, fmt, args);
   va_end(args);          va_end(args);
   fatal_cleanup();          fatal_cleanup();
 }  }
   
 /* Error messages that should be logged. */  /* Error messages that should be logged. */
   
 void  void
 error(const char *fmt, ...)  error(const char *fmt,...)
 {  {
   va_list args;          va_list args;
   va_start(args, fmt);          va_start(args, fmt);
   do_log(SYSLOG_LEVEL_ERROR, fmt, args);          do_log(SYSLOG_LEVEL_ERROR, fmt, args);
   va_end(args);          va_end(args);
 }  }
   
 /* Log this message (information that usually should go to the log). */  /* Log this message (information that usually should go to the log). */
   
 void  void
 log(const char *fmt, ...)  log(const char *fmt,...)
 {  {
   va_list args;          va_list args;
   va_start(args, fmt);          va_start(args, fmt);
   do_log(SYSLOG_LEVEL_INFO, fmt, args);          do_log(SYSLOG_LEVEL_INFO, fmt, args);
   va_end(args);          va_end(args);
 }  }
   
 /* More detailed messages (information that does not need to go to the log). */  /* More detailed messages (information that does not need to go to the log). */
   
 void  void
 verbose(const char *fmt, ...)  verbose(const char *fmt,...)
 {  {
   va_list args;          va_list args;
   va_start(args, fmt);          va_start(args, fmt);
   do_log(SYSLOG_LEVEL_VERBOSE, fmt, args);          do_log(SYSLOG_LEVEL_VERBOSE, fmt, args);
   va_end(args);          va_end(args);
 }  }
   
 /* Debugging messages that should not be logged during normal operation. */  /* Debugging messages that should not be logged during normal operation. */
   
 void  void
 debug(const char *fmt, ...)  debug(const char *fmt,...)
 {  {
   va_list args;          va_list args;
   va_start(args, fmt);          va_start(args, fmt);
   do_log(SYSLOG_LEVEL_DEBUG, fmt, args);          do_log(SYSLOG_LEVEL_DEBUG, fmt, args);
   va_end(args);          va_end(args);
 }  }
   
 /* Fatal cleanup */  /* Fatal cleanup */
   
 struct fatal_cleanup  struct fatal_cleanup {
 {          struct fatal_cleanup *next;
   struct fatal_cleanup *next;          void (*proc) (void *);
   void (*proc)(void *);          void *context;
   void *context;  
 };  };
   
 static struct fatal_cleanup *fatal_cleanups = NULL;  static struct fatal_cleanup *fatal_cleanups = NULL;
Line 80 
Line 79 
 /* Registers a cleanup function to be called by fatal() before exiting. */  /* Registers a cleanup function to be called by fatal() before exiting. */
   
 void  void
 fatal_add_cleanup(void (*proc)(void *), void *context)  fatal_add_cleanup(void (*proc) (void *), void *context)
 {  {
   struct fatal_cleanup *cu;          struct fatal_cleanup *cu;
   
   cu = xmalloc(sizeof(*cu));          cu = xmalloc(sizeof(*cu));
   cu->proc = proc;          cu->proc = proc;
   cu->context = context;          cu->context = context;
   cu->next = fatal_cleanups;          cu->next = fatal_cleanups;
   fatal_cleanups = cu;          fatal_cleanups = cu;
 }  }
   
 /* Removes a cleanup frunction to be called at fatal(). */  /* Removes a cleanup frunction to be called at fatal(). */
   
 void  void
 fatal_remove_cleanup(void (*proc)(void *context), void *context)  fatal_remove_cleanup(void (*proc) (void *context), void *context)
 {  {
   struct fatal_cleanup **cup, *cu;          struct fatal_cleanup **cup, *cu;
   
   for (cup = &fatal_cleanups; *cup; cup = &cu->next)          for (cup = &fatal_cleanups; *cup; cup = &cu->next) {
     {                  cu = *cup;
       cu = *cup;                  if (cu->proc == proc && cu->context == context) {
       if (cu->proc == proc && cu->context == context)                          *cup = cu->next;
         {                          xfree(cu);
           *cup = cu->next;                          return;
           xfree(cu);                  }
           return;  
         }          }
     }          fatal("fatal_remove_cleanup: no such cleanup function: 0x%lx 0x%lx\n",
   fatal("fatal_remove_cleanup: no such cleanup function: 0x%lx 0x%lx\n",                (unsigned long) proc, (unsigned long) context);
         (unsigned long)proc, (unsigned long)context);  
 }  }
   
 /* Cleanup and exit */  /* Cleanup and exit */
 void  void
 fatal_cleanup(void)  fatal_cleanup(void)
 {  {
   struct fatal_cleanup *cu, *next_cu;          struct fatal_cleanup *cu, *next_cu;
   static int called = 0;          static int called = 0;
   if (called)  
     exit(255);  
   called = 1;  
   
   /* Call cleanup functions. */          if (called)
   for (cu = fatal_cleanups; cu; cu = next_cu)                  exit(255);
     {          called = 1;
       next_cu = cu->next;          /* Call cleanup functions. */
       debug("Calling cleanup 0x%lx(0x%lx)",          for (cu = fatal_cleanups; cu; cu = next_cu) {
             (unsigned long)cu->proc, (unsigned long)cu->context);                  next_cu = cu->next;
       (*cu->proc)(cu->context);                  debug("Calling cleanup 0x%lx(0x%lx)",
     }                        (unsigned long) cu->proc, (unsigned long) cu->context);
                   (*cu->proc) (cu->context);
   exit(255);          }
           exit(255);
 }  }
   
 /* textual representation of log-facilities/levels */  /* textual representation of log-facilities/levels */
   
   static struct {
 static struct          const char *name;
 {          SyslogFacility val;
   const char *name;  } log_facilities[] = {
   SyslogFacility val;          { "DAEMON",     SYSLOG_FACILITY_DAEMON },
 } log_facilities[] =          { "USER",       SYSLOG_FACILITY_USER },
 {          { "AUTH",       SYSLOG_FACILITY_AUTH },
   { "DAEMON", SYSLOG_FACILITY_DAEMON },          { "LOCAL0",     SYSLOG_FACILITY_LOCAL0 },
   { "USER", SYSLOG_FACILITY_USER },          { "LOCAL1",     SYSLOG_FACILITY_LOCAL1 },
   { "AUTH", SYSLOG_FACILITY_AUTH },          { "LOCAL2",     SYSLOG_FACILITY_LOCAL2 },
   { "LOCAL0", SYSLOG_FACILITY_LOCAL0 },          { "LOCAL3",     SYSLOG_FACILITY_LOCAL3 },
   { "LOCAL1", SYSLOG_FACILITY_LOCAL1 },          { "LOCAL4",     SYSLOG_FACILITY_LOCAL4 },
   { "LOCAL2", SYSLOG_FACILITY_LOCAL2 },          { "LOCAL5",     SYSLOG_FACILITY_LOCAL5 },
   { "LOCAL3", SYSLOG_FACILITY_LOCAL3 },          { "LOCAL6",     SYSLOG_FACILITY_LOCAL6 },
   { "LOCAL4", SYSLOG_FACILITY_LOCAL4 },          { "LOCAL7",     SYSLOG_FACILITY_LOCAL7 },
   { "LOCAL5", SYSLOG_FACILITY_LOCAL5 },          { NULL, 0 }
   { "LOCAL6", SYSLOG_FACILITY_LOCAL6 },  
   { "LOCAL7", SYSLOG_FACILITY_LOCAL7 },  
   { NULL, 0 }  
 };  };
   
 static struct  static struct {
 {          const char *name;
   const char *name;          LogLevel val;
   LogLevel val;  
 } log_levels[] =  } log_levels[] =
 {  {
   { "QUIET",   SYSLOG_LEVEL_QUIET },          { "QUIET",      SYSLOG_LEVEL_QUIET },
   { "FATAL",   SYSLOG_LEVEL_FATAL },          { "FATAL",      SYSLOG_LEVEL_FATAL },
   { "ERROR",   SYSLOG_LEVEL_ERROR },          { "ERROR",      SYSLOG_LEVEL_ERROR },
   { "INFO",    SYSLOG_LEVEL_INFO },          { "INFO",       SYSLOG_LEVEL_INFO },
   { "VERBOSE", SYSLOG_LEVEL_VERBOSE },          { "VERBOSE",    SYSLOG_LEVEL_VERBOSE },
   { "DEBUG",   SYSLOG_LEVEL_DEBUG },          { "DEBUG",      SYSLOG_LEVEL_DEBUG },
   { NULL, 0 }          { NULL, 0 }
 };  };
   
 SyslogFacility  SyslogFacility
 log_facility_number(char *name)  log_facility_number(char *name)
 {  {
   int i;          int i;
   if (name != NULL)          if (name != NULL)
     for (i = 0; log_facilities[i].name; i++)                  for (i = 0; log_facilities[i].name; i++)
       if (strcasecmp(log_facilities[i].name, name) == 0)                          if (strcasecmp(log_facilities[i].name, name) == 0)
         return log_facilities[i].val;                                  return log_facilities[i].val;
   return (SyslogFacility)-1;          return (SyslogFacility) - 1;
 }  }
   
 LogLevel  LogLevel
 log_level_number(char *name)  log_level_number(char *name)
 {  {
   int i;          int i;
   if (name != NULL)          if (name != NULL)
     for (i = 0; log_levels[i].name; i++)                  for (i = 0; log_levels[i].name; i++)
       if (strcasecmp(log_levels[i].name, name) == 0)                          if (strcasecmp(log_levels[i].name, name) == 0)
         return log_levels[i].val;                                  return log_levels[i].val;
   return (LogLevel)-1;          return (LogLevel) - 1;
 }  }

Legend:
Removed from v.1.3  
changed lines
  Added in v.1.4