[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.25.2.2 and 1.26

version 1.25.2.2, 2004/03/04 18:18:15 version 1.26, 2003/04/08 20:21:28
Line 40 
Line 40 
 #include "xmalloc.h"  #include "xmalloc.h"
   
 #include <syslog.h>  #include <syslog.h>
 #include <vis.h>  
   
 static LogLevel log_level = SYSLOG_LEVEL_INFO;  static LogLevel log_level = SYSLOG_LEVEL_INFO;
 static int log_on_stderr = 1;  static int log_on_stderr = 1;
Line 178 
Line 177 
         va_end(args);          va_end(args);
 }  }
   
   /* Fatal cleanup */
   
   struct fatal_cleanup {
           struct fatal_cleanup *next;
           void (*proc) (void *);
           void *context;
   };
   
   static struct fatal_cleanup *fatal_cleanups = NULL;
   
   /* Registers a cleanup function to be called by fatal() before exiting. */
   
   void
   fatal_add_cleanup(void (*proc) (void *), void *context)
   {
           struct fatal_cleanup *cu;
   
           cu = xmalloc(sizeof(*cu));
           cu->proc = proc;
           cu->context = context;
           cu->next = fatal_cleanups;
           fatal_cleanups = cu;
   }
   
   /* Removes a cleanup frunction to be called at fatal(). */
   
   void
   fatal_remove_cleanup(void (*proc) (void *context), void *context)
   {
           struct fatal_cleanup **cup, *cu;
   
           for (cup = &fatal_cleanups; *cup; cup = &cu->next) {
                   cu = *cup;
                   if (cu->proc == proc && cu->context == context) {
                           *cup = cu->next;
                           xfree(cu);
                           return;
                   }
           }
           fatal("fatal_remove_cleanup: no such cleanup function: 0x%lx 0x%lx",
               (u_long) proc, (u_long) context);
   }
   
   /* Remove all cleanups, to be called after fork() */
   void
   fatal_remove_all_cleanups(void)
   {
           struct fatal_cleanup *cu, *next_cu;
   
           for (cu = fatal_cleanups; cu; cu = next_cu) {
                   next_cu = cu->next;
                   xfree(cu);
           }
           fatal_cleanups = NULL;
   }
   
   /* Cleanup and exit */
   void
   fatal_cleanup(void)
   {
           struct fatal_cleanup *cu, *next_cu;
           static int called = 0;
   
           if (called)
                   exit(255);
           called = 1;
           /* Call cleanup functions. */
           for (cu = fatal_cleanups; cu; cu = next_cu) {
                   next_cu = cu->next;
                   debug("Calling cleanup 0x%lx(0x%lx)",
                       (u_long) cu->proc, (u_long) cu->context);
                   (*cu->proc) (cu->context);
           }
           exit(255);
   }
   
   
 /*  /*
  * Initialize the log.   * Initialize the log.
  */   */
Line 255 
Line 331 
 void  void
 do_log(LogLevel level, const char *fmt, va_list args)  do_log(LogLevel level, const char *fmt, va_list args)
 {  {
         struct syslog_data sdata = SYSLOG_DATA_INIT;  
         char msgbuf[MSGBUFSIZ];          char msgbuf[MSGBUFSIZ];
         char fmtbuf[MSGBUFSIZ];          char fmtbuf[MSGBUFSIZ];
         char *txt = NULL;          char *txt = NULL;
Line 304 
Line 379 
         } else {          } else {
                 vsnprintf(msgbuf, sizeof(msgbuf), fmt, args);                  vsnprintf(msgbuf, sizeof(msgbuf), fmt, args);
         }          }
         strnvis(fmtbuf, msgbuf, sizeof(fmtbuf), VIS_SAFE|VIS_OCTAL);  
         if (log_on_stderr) {          if (log_on_stderr) {
                 snprintf(msgbuf, sizeof msgbuf, "%s\r\n", fmtbuf);                  fprintf(stderr, "%s\r\n", msgbuf);
                 write(STDERR_FILENO, msgbuf, strlen(msgbuf));  
         } else {          } else {
                 openlog_r(argv0 ? argv0 : __progname, LOG_PID, log_facility, &sdata);                  openlog(argv0 ? argv0 : __progname, LOG_PID, log_facility);
                 syslog_r(pri, &sdata, "%.500s", fmtbuf);                  syslog(pri, "%.500s", msgbuf);
                 closelog_r(&sdata);                  closelog();
         }          }
 }  }

Legend:
Removed from v.1.25.2.2  
changed lines
  Added in v.1.26