|
|
| version 1.1.1.1, 2012/02/21 16:23:02 | version 1.1.1.2, 2012/05/29 12:26:49 |
|---|---|
| Line 53 | Line 53 |
| #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 67 get_boottime(struct timeval *tv) | Line 68 get_boottime(struct timeval *tv) |
| 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"); |
| Line 75 get_boottime(struct timeval *tv) | Line 77 get_boottime(struct timeval *tv) |
| if (strncmp(line, "btime ", 6) == 0) { | if (strncmp(line, "btime ", 6) == 0) { |
| tv->tv_sec = atoi(line + 6); | tv->tv_sec = atoi(line + 6); |
| tv->tv_usec = 0; | tv->tv_usec = 0; |
| return 1; | debug_return_bool(1); |
| } | } |
| } | } |
| 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 94 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 111 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 121 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 130 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 140 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 148 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 |