Diff for /embedaddon/sudo/plugins/sudoers/boottime.c between versions 1.1.1.1 and 1.1.1.3

version 1.1.1.1, 2012/02/21 16:23:02 version 1.1.1.3, 2013/07/22 10:46:12
Line 1 Line 1
 /*  /*
 * Copyright (c) 2009-2011 Todd C. Miller <Todd.Miller@courtesan.com> * Copyright (c) 2009-2013 Todd C. Miller <Todd.Miller@courtesan.com>
  *   *
  * Permission to use, copy, modify, and distribute this software for any   * Permission to use, copy, modify, and distribute this software for any
  * purpose with or without fee is hereby granted, provided that the above   * purpose with or without fee is hereby granted, provided that the above
Line 16 Line 16
   
 #include <config.h>  #include <config.h>
   
 #include <sys/param.h>  
 #include <sys/types.h>  #include <sys/types.h>
 #include <sys/time.h>  #include <sys/time.h>
   
Line 53 Line 52
 #endif /* !__linux__ */  #endif /* !__linux__ */
   
 #include "missing.h"  #include "missing.h"
   #include "sudo_debug.h"
   
 /*  /*
  * Fill in a struct timeval with the time the system booted.   * Fill in a struct timeval with the time the system booted.
Line 63 Line 63
 int  int
 get_boottime(struct timeval *tv)  get_boottime(struct timeval *tv)
 {  {
    char *line = NULL;    char *ep, *line = NULL;
     size_t linesize = 0;      size_t linesize = 0;
     ssize_t len;      ssize_t len;
     FILE * fp;      FILE * fp;
       debug_decl(get_boottime, SUDO_DEBUG_UTIL)
   
     /* read btime from /proc/stat */      /* read btime from /proc/stat */
     fp = fopen("/proc/stat", "r");      fp = fopen("/proc/stat", "r");
     if (fp != NULL) {      if (fp != NULL) {
         while ((len = getline(&line, &linesize, fp)) != -1) {          while ((len = getline(&line, &linesize, fp)) != -1) {
             if (strncmp(line, "btime ", 6) == 0) {              if (strncmp(line, "btime ", 6) == 0) {
                tv->tv_sec = atoi(line + 6);#ifdef HAVE_STRTOLL
                tv->tv_usec = 0;                long long llval = strtoll(line + 6, &ep, 10);
                return 1;                if (line[6] != '\0' && *ep == '\0' && (time_t)llval == llval) {
                     tv->tv_sec = (time_t)llval;
                     tv->tv_usec = 0;
                     debug_return_bool(1);
                 }
 #else
                 long lval = strtol(line + 6, &ep, 10);
                 if (line[6] != '\0' && *ep == '\0' && (time_t)lval == lval) {
                     tv->tv_sec = (time_t)llval;
                     tv->tv_usec = 0;
                     debug_return_bool(1);
                 }
 #endif
             }              }
         }          }
         fclose(fp);          fclose(fp);
         free(line);          free(line);
     }      }
   
    return 0;    debug_return_bool(0);
 }  }
   
 #elif defined(HAVE_SYSCTL) && defined(KERN_BOOTTIME)  #elif defined(HAVE_SYSCTL) && defined(KERN_BOOTTIME)
Line 92  get_boottime(struct timeval *tv) Line 105  get_boottime(struct timeval *tv)
 {  {
     size_t size;      size_t size;
     int mib[2];      int mib[2];
       debug_decl(get_boottime, SUDO_DEBUG_UTIL)
   
     mib[0] = CTL_KERN;      mib[0] = CTL_KERN;
     mib[1] = KERN_BOOTTIME;      mib[1] = KERN_BOOTTIME;
     size = sizeof(*tv);      size = sizeof(*tv);
     if (sysctl(mib, 2, tv, &size, NULL, 0) != -1)      if (sysctl(mib, 2, tv, &size, NULL, 0) != -1)
        return 1;        debug_return_bool(1);
   
    return 0;    debug_return_bool(0);
 }  }
   
 #elif defined(HAVE_GETUTXID)  #elif defined(HAVE_GETUTXID)
Line 108  int Line 122  int
 get_boottime(struct timeval *tv)  get_boottime(struct timeval *tv)
 {  {
     struct utmpx *ut, key;      struct utmpx *ut, key;
       debug_decl(get_boottime, SUDO_DEBUG_UTIL)
   
     memset(&key, 0, sizeof(key));      memset(&key, 0, sizeof(key));
     key.ut_type = BOOT_TIME;      key.ut_type = BOOT_TIME;
Line 117  get_boottime(struct timeval *tv) Line 132  get_boottime(struct timeval *tv)
         tv->tv_usec = ut->ut_tv.tv_usec;          tv->tv_usec = ut->ut_tv.tv_usec;
     }      }
     endutxent();      endutxent();
    return ut != NULL;    debug_return_bool(ut != NULL);
 }  }
   
 #elif defined(HAVE_GETUTID)  #elif defined(HAVE_GETUTID)
Line 126  int Line 141  int
 get_boottime(struct timeval *tv)  get_boottime(struct timeval *tv)
 {  {
     struct utmp *ut, key;      struct utmp *ut, key;
       debug_decl(get_boottime, SUDO_DEBUG_UTIL)
   
     memset(&key, 0, sizeof(key));      memset(&key, 0, sizeof(key));
     key.ut_type = BOOT_TIME;      key.ut_type = BOOT_TIME;
Line 135  get_boottime(struct timeval *tv) Line 151  get_boottime(struct timeval *tv)
         tv->tv_usec = 0;          tv->tv_usec = 0;
     }      }
     endutent();      endutent();
    return ut != NULL;    debug_return_bool(ut != NULL);
 }  }
   
 #else  #else
Line 143  get_boottime(struct timeval *tv) Line 159  get_boottime(struct timeval *tv)
 int  int
 get_boottime(struct timeval *tv)  get_boottime(struct timeval *tv)
 {  {
    return 0;    debug_decl(get_boottime, SUDO_DEBUG_UTIL)
     debug_return_bool(0);
 }  }
 #endif  #endif

Removed from v.1.1.1.1  
changed lines
  Added in v.1.1.1.3


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>