]> granicus.if.org Git - sudo/commitdiff
Use timeval directly instead of converting to timespec when dealing
authorTodd C. Miller <Todd.Miller@courtesan.com>
Tue, 20 Apr 2010 20:44:02 +0000 (16:44 -0400)
committerTodd C. Miller <Todd.Miller@courtesan.com>
Tue, 20 Apr 2010 20:44:02 +0000 (16:44 -0400)
with file times and time of day.

config.h.in
configure
configure.in
include/compat.h
plugins/sudoers/check.c
plugins/sudoers/gettime.c
plugins/sudoers/sudoers.h
plugins/sudoers/visudo.c
src/fileops.c

index 85fbb77799e982c96d4ef47998381890a2a6faf5..ac410948ffa84686754c7294759f08c2a5ac1c76 100644 (file)
 
 /* Define to 1 if you have a timespecsub macro or function that takes two
    arguments (not three) */
-#undef HAVE_TIMESPECSUB2
+#undef HAVE_TIMERSUB2
 
 /* Define to 1 if you have the `tzset' function. */
 #undef HAVE_TZSET
 #undef volatile
 
 /*
- * Macros to pull sec and nsec parts of mtime from struct stat.
- * We need to be able to convert between timeval and timespec
- * so the last 3 digits of tv_nsec are not significant.
+ * Macros to convert ctime and mtime into timevals.
  */
 #ifdef HAVE_ST_MTIM
 # ifdef HAVE_ST__TIM
-#  define mtim_getsec(_x)      ((_x).st_mtim.st__tim.tv_sec)
-#  define mtim_getnsec(_x)     (((_x).st_mtim.st__tim.tv_nsec / 1000) * 1000)
+#  define ctim_get(_x, _y)     do { (_y)->tv_sec = (_x)->st_ctim.st__tim.tv_sec; (_y)->tv_usec = (_x)->st_ctim.st__tim.tv_usec / 1000; } while (0)
+#  define mtim_get(_x, _y)     do { (_y)->tv_sec = (_x)->st_mtim.st__tim.tv_sec; (_y)->tv_usec = (_x)->st_mtim.st__tim.tv_usec / 1000; } while (0)
 # else
-#  define mtim_getsec(_x)      ((_x).st_mtim.tv_sec)
-#  define mtim_getnsec(_x)     (((_x).st_mtim.tv_nsec / 1000) * 1000)
+#  define ctim_get(_x, _y)     do { (_y)->tv_sec = (_x)->st_ctim.tv_sec; (_y)->tv_usec = (_x)->st_ctim.tv_usec / 1000; } while (0)
+#  define mtim_get(_x, _y)     do { (_y)->tv_sec = (_x)->st_mtim.tv_sec; (_y)->tv_usec = (_x)->st_mtim.tv_usec / 1000; } while (0)
 # endif
 #else
 # ifdef HAVE_ST_MTIMESPEC
-#  define mtim_getsec(_x)      ((_x).st_mtimespec.tv_sec)
-#  define mtim_getnsec(_x)     (((_x).st_mtimespec.tv_nsec / 1000) * 1000)
+#  define ctim_get(_x, _y)     do { (_y)->tv_sec = (_x)->st_ctimespec.tv_sec; (_y)->tv_usec = (_x)->st_ctimespec.tv_usec / 1000; } while (0)
+#  define mtim_get(_x, _y)     do { (_y)->tv_sec = (_x)->st_mtimespec.tv_sec; (_y)->tv_usec = (_x)->st_mtimespec.tv_usec / 1000; } while (0)
 # else
-#  define mtim_getsec(_x)      ((_x).st_mtime)
-#  define mtim_getnsec(_x)     (0)
+#  define ctim_get(_x, _y)     do { (_y)->tv_sec = (_x)->st_ctime; (_y)->tv_usec = 0; } while (0)
+#  define mtim_get(_x, _y)     do { (_y)->tv_sec = (_x)->st_mtime; (_y)->tv_usec = 0; } while (0)
 # endif /* HAVE_ST_MTIMESPEC */
 #endif /* HAVE_ST_MTIM */
 
index c5faf6db7de6b3fd7b5f28c7d22cf436f5c67f37..07cbb657b1ebd54f5bf83681490fb754f614958b 100755 (executable)
--- a/configure
+++ b/configure
@@ -1460,7 +1460,7 @@ Fine tuning of the installation directories:
   --bindir=DIR           user executables [EPREFIX/bin]
   --sbindir=DIR          system admin executables [EPREFIX/sbin]
   --libexecdir=DIR       program executables [EPREFIX/libexec]
-  --sysconfdir=DIR       read-only single-machine data [etc]
+  --sysconfdir=DIR       read-only single-machine data [PREFIX/etc]
   --sharedstatedir=DIR   modifiable architecture-independent data [PREFIX/com]
   --localstatedir=DIR    modifiable single-machine data [PREFIX/var]
   --libdir=DIR           object code libraries [EPREFIX/lib]
@@ -6871,7 +6871,7 @@ if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
 else
   ac_cv_header_stdc=no
 fi
-rm -f conftest*
+rm -f -r conftest*
 
 fi
 
@@ -6892,7 +6892,7 @@ if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
 else
   ac_cv_header_stdc=no
 fi
-rm -f conftest*
+rm -f -r conftest*
 
 fi
 
@@ -13184,7 +13184,7 @@ if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
 else
   ac_cv_prog_gcc_traditional=no
 fi
-rm -f conftest*
+rm -f -r conftest*
 
 
   if test $ac_cv_prog_gcc_traditional = no; then
@@ -13201,7 +13201,7 @@ if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
   $EGREP "$ac_pattern" >/dev/null 2>&1; then
   ac_cv_prog_gcc_traditional=yes
 fi
-rm -f conftest*
+rm -f -r conftest*
 
   fi
 fi
@@ -13723,7 +13723,7 @@ if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
 else
   ac_cv_header_stdc=no
 fi
-rm -f conftest*
+rm -f -r conftest*
 
 fi
 
@@ -13744,7 +13744,7 @@ if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
 else
   ac_cv_header_stdc=no
 fi
-rm -f conftest*
+rm -f -r conftest*
 
 fi
 
@@ -14873,7 +14873,7 @@ if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
 else
   ac_cv_type_uid_t=no
 fi
-rm -f conftest*
+rm -f -r conftest*
 
 fi
 { echo "$as_me:$LINENO: result: $ac_cv_type_uid_t" >&5
@@ -15303,7 +15303,7 @@ if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
 else
   sudo_cv_type_size_t=no
 fi
-rm -f conftest*
+rm -f -r conftest*
 
 fi
 { echo "$as_me:$LINENO: result: $sudo_cv_type_size_t" >&5
@@ -15342,7 +15342,7 @@ if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
 else
   sudo_cv_type_ssize_t=no
 fi
-rm -f conftest*
+rm -f -r conftest*
 
 fi
 { echo "$as_me:$LINENO: result: $sudo_cv_type_ssize_t" >&5
@@ -15381,7 +15381,7 @@ if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
 else
   sudo_cv_type_dev_t=no
 fi
-rm -f conftest*
+rm -f -r conftest*
 
 fi
 { echo "$as_me:$LINENO: result: $sudo_cv_type_dev_t" >&5
@@ -15420,7 +15420,7 @@ if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
 else
   sudo_cv_type_ino_t=no
 fi
-rm -f conftest*
+rm -f -r conftest*
 
 fi
 { echo "$as_me:$LINENO: result: $sudo_cv_type_ino_t" >&5
@@ -15862,7 +15862,7 @@ if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
 else
   ac_cv_type_getgroups=int
 fi
-rm -f conftest*
+rm -f -r conftest*
 
 fi
 fi
@@ -20522,8 +20522,8 @@ fi
 
 fi
 
-    { echo "$as_me:$LINENO: checking for two-parameter timespecsub" >&5
-echo $ECHO_N "checking for two-parameter timespecsub... $ECHO_C" >&6; }
+    { echo "$as_me:$LINENO: checking for two-parameter timersub" >&5
+echo $ECHO_N "checking for two-parameter timersub... $ECHO_C" >&6; }
     cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
 _ACEOF
@@ -20535,12 +20535,12 @@ cat >>conftest.$ac_ext <<_ACEOF
 int
 main ()
 {
-struct timespec ts1, ts2;
-ts1.tv_sec = 1; ts1.tv_nsec = 0; ts2.tv_sec = 0; ts2.tv_nsec = 0;
-#ifndef timespecsub
-#error missing timespecsub
+struct timeval ts1, ts2;
+ts1.tv_sec = 1; ts1.tv_usec = 0; ts2.tv_sec = 0; ts2.tv_usec = 0;
+#ifndef timersub
+#error missing timersub
 #endif
-timespecsub(&ts1, &ts2);
+timersub(&ts1, &ts2);
   ;
   return 0;
 }
@@ -20563,7 +20563,7 @@ eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
         test ! -s conftest.err
        } && test -s conftest.$ac_objext; then
   cat >>confdefs.h <<\_ACEOF
-#define HAVE_TIMESPECSUB2 1
+#define HAVE_TIMERSUB2 1
 _ACEOF
 
     { echo "$as_me:$LINENO: result: yes" >&5
@@ -20895,7 +20895,7 @@ else
 echo "$as_me: WARNING: unable to find socket() trying -lsocket -lnsl" >&2;}
 { echo "$as_me:$LINENO: checking for socket in -lsocket" >&5
 echo $ECHO_N "checking for socket in -lsocket... $ECHO_C" >&6; }
-if test "${ac_cv_lib_socket_socket_lnsl+set}" = set; then
+if test "${ac_cv_lib_socket_socket+set}" = set; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
 else
   ac_check_lib_save_LIBS=$LIBS
@@ -20940,21 +20940,21 @@ eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
         test ! -s conftest.err
        } && test -s conftest$ac_exeext &&
        $as_test_x conftest$ac_exeext; then
-  ac_cv_lib_socket_socket_lnsl=yes
+  ac_cv_lib_socket_socket=yes
 else
   echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
-       ac_cv_lib_socket_socket_lnsl=no
+       ac_cv_lib_socket_socket=no
 fi
 
 rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
       conftest$ac_exeext conftest.$ac_ext
 LIBS=$ac_check_lib_save_LIBS
 fi
-{ echo "$as_me:$LINENO: result: $ac_cv_lib_socket_socket_lnsl" >&5
-echo "${ECHO_T}$ac_cv_lib_socket_socket_lnsl" >&6; }
-if test $ac_cv_lib_socket_socket_lnsl = yes; then
+{ echo "$as_me:$LINENO: result: $ac_cv_lib_socket_socket" >&5
+echo "${ECHO_T}$ac_cv_lib_socket_socket" >&6; }
+if test $ac_cv_lib_socket_socket = yes; then
   NET_LIBS="${NET_LIBS} -lsocket -lnsl"; LIBS="${LIBS} -lsocket -lnsl"
 fi
 
@@ -21264,7 +21264,7 @@ else
 echo "$as_me: WARNING: unable to find inet_addr() trying -lsocket -lnsl" >&2;}
 { echo "$as_me:$LINENO: checking for inet_addr in -lsocket" >&5
 echo $ECHO_N "checking for inet_addr in -lsocket... $ECHO_C" >&6; }
-if test "${ac_cv_lib_socket_inet_addr_lnsl+set}" = set; then
+if test "${ac_cv_lib_socket_inet_addr+set}" = set; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
 else
   ac_check_lib_save_LIBS=$LIBS
@@ -21309,21 +21309,21 @@ eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
         test ! -s conftest.err
        } && test -s conftest$ac_exeext &&
        $as_test_x conftest$ac_exeext; then
-  ac_cv_lib_socket_inet_addr_lnsl=yes
+  ac_cv_lib_socket_inet_addr=yes
 else
   echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
-       ac_cv_lib_socket_inet_addr_lnsl=no
+       ac_cv_lib_socket_inet_addr=no
 fi
 
 rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
       conftest$ac_exeext conftest.$ac_ext
 LIBS=$ac_check_lib_save_LIBS
 fi
-{ echo "$as_me:$LINENO: result: $ac_cv_lib_socket_inet_addr_lnsl" >&5
-echo "${ECHO_T}$ac_cv_lib_socket_inet_addr_lnsl" >&6; }
-if test $ac_cv_lib_socket_inet_addr_lnsl = yes; then
+{ echo "$as_me:$LINENO: result: $ac_cv_lib_socket_inet_addr" >&5
+echo "${ECHO_T}$ac_cv_lib_socket_inet_addr" >&6; }
+if test $ac_cv_lib_socket_inet_addr = yes; then
   NET_LIBS="${NET_LIBS} -lsocket -lnsl"; LIBS="${LIBS} -lsocket -lnsl"
 fi
 
@@ -22820,7 +22820,7 @@ if test ${with_SecurID-'no'} != "no"; then
     #
     { echo "$as_me:$LINENO: checking for SD_Init in -laceclnt" >&5
 echo $ECHO_N "checking for SD_Init in -laceclnt... $ECHO_C" >&6; }
-if test "${ac_cv_lib_aceclnt_SD_Init_______lpthread_______+set}" = set; then
+if test "${ac_cv_lib_aceclnt_SD_Init+set}" = set; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
 else
   ac_check_lib_save_LIBS=$LIBS
@@ -22868,21 +22868,21 @@ eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
         test ! -s conftest.err
        } && test -s conftest$ac_exeext &&
        $as_test_x conftest$ac_exeext; then
-  ac_cv_lib_aceclnt_SD_Init_______lpthread_______=yes
+  ac_cv_lib_aceclnt_SD_Init=yes
 else
   echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
-       ac_cv_lib_aceclnt_SD_Init_______lpthread_______=no
+       ac_cv_lib_aceclnt_SD_Init=no
 fi
 
 rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
       conftest$ac_exeext conftest.$ac_ext
 LIBS=$ac_check_lib_save_LIBS
 fi
-{ echo "$as_me:$LINENO: result: $ac_cv_lib_aceclnt_SD_Init_______lpthread_______" >&5
-echo "${ECHO_T}$ac_cv_lib_aceclnt_SD_Init_______lpthread_______" >&6; }
-if test $ac_cv_lib_aceclnt_SD_Init_______lpthread_______ = yes; then
+{ echo "$as_me:$LINENO: result: $ac_cv_lib_aceclnt_SD_Init" >&5
+echo "${ECHO_T}$ac_cv_lib_aceclnt_SD_Init" >&6; }
+if test $ac_cv_lib_aceclnt_SD_Init = yes; then
 
            AUTH_OBJS="$AUTH_OBJS securid5.lo";
            SUDO_LIBS="${SUDO_LIBS} -laceclnt -lpthread"
@@ -23369,10 +23369,9 @@ echo "${ECHO_T}no" >&6; }
 fi
 
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-                as_ac_Lib=`echo "ac_cv_lib_krb_main$K4LIBS" | $as_tr_sh`
-{ echo "$as_me:$LINENO: checking for main in -lkrb" >&5
+                { echo "$as_me:$LINENO: checking for main in -lkrb" >&5
 echo $ECHO_N "checking for main in -lkrb... $ECHO_C" >&6; }
-if { as_var=$as_ac_Lib; eval "test \"\${$as_var+set}\" = set"; }; then
+if test "${ac_cv_lib_krb_main+set}" = set; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
 else
   ac_check_lib_save_LIBS=$LIBS
@@ -23411,29 +23410,27 @@ eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
         test ! -s conftest.err
        } && test -s conftest$ac_exeext &&
        $as_test_x conftest$ac_exeext; then
-  eval "$as_ac_Lib=yes"
+  ac_cv_lib_krb_main=yes
 else
   echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
-       eval "$as_ac_Lib=no"
+       ac_cv_lib_krb_main=no
 fi
 
 rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
       conftest$ac_exeext conftest.$ac_ext
 LIBS=$ac_check_lib_save_LIBS
 fi
-ac_res=`eval echo '${'$as_ac_Lib'}'`
-              { echo "$as_me:$LINENO: result: $ac_res" >&5
-echo "${ECHO_T}$ac_res" >&6; }
-if test `eval echo '${'$as_ac_Lib'}'` = yes; then
+{ echo "$as_me:$LINENO: result: $ac_cv_lib_krb_main" >&5
+echo "${ECHO_T}$ac_cv_lib_krb_main" >&6; }
+if test $ac_cv_lib_krb_main = yes; then
   K4LIBS="-lkrb $K4LIBS"
 else
 
-       as_ac_Lib=`echo "ac_cv_lib_krb4_main$K4LIBS" | $as_tr_sh`
-{ echo "$as_me:$LINENO: checking for main in -lkrb4" >&5
+       { echo "$as_me:$LINENO: checking for main in -lkrb4" >&5
 echo $ECHO_N "checking for main in -lkrb4... $ECHO_C" >&6; }
-if { as_var=$as_ac_Lib; eval "test \"\${$as_var+set}\" = set"; }; then
+if test "${ac_cv_lib_krb4_main+set}" = set; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
 else
   ac_check_lib_save_LIBS=$LIBS
@@ -23472,22 +23469,21 @@ eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
         test ! -s conftest.err
        } && test -s conftest$ac_exeext &&
        $as_test_x conftest$ac_exeext; then
-  eval "$as_ac_Lib=yes"
+  ac_cv_lib_krb4_main=yes
 else
   echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
-       eval "$as_ac_Lib=no"
+       ac_cv_lib_krb4_main=no
 fi
 
 rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
       conftest$ac_exeext conftest.$ac_ext
 LIBS=$ac_check_lib_save_LIBS
 fi
-ac_res=`eval echo '${'$as_ac_Lib'}'`
-              { echo "$as_me:$LINENO: result: $ac_res" >&5
-echo "${ECHO_T}$ac_res" >&6; }
-if test `eval echo '${'$as_ac_Lib'}'` = yes; then
+{ echo "$as_me:$LINENO: result: $ac_cv_lib_krb4_main" >&5
+echo "${ECHO_T}$ac_cv_lib_krb4_main" >&6; }
+if test $ac_cv_lib_krb4_main = yes; then
   K4LIBS="-lkrb4 $K4LIBS"
 else
   K4LIBS="-lkrb $K4LIBS"
index d811a3d102d1b4f8aa02a6a7accc4f95c0314b65..10ac91810bdc755f5e278ed80aced9cbbd5046c6 100644 (file)
@@ -1964,14 +1964,14 @@ if test X"$ac_cv_type_struct_timespec" != X"no"; then
     AC_CHECK_MEMBER([struct stat.st_mtim], [AC_DEFINE(HAVE_ST_MTIM)]
        [AC_CHECK_MEMBER([struct stat.st_mtim.st__tim], AC_DEFINE(HAVE_ST__TIM))],
        [AC_CHECK_MEMBER([struct stat.st_mtimespec], AC_DEFINE([HAVE_ST_MTIMESPEC]))])
-    AC_MSG_CHECKING([for two-parameter timespecsub])
+    AC_MSG_CHECKING([for two-parameter timersub])
     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <sys/types.h>
-#include <sys/time.h>]], [[struct timespec ts1, ts2;
-ts1.tv_sec = 1; ts1.tv_nsec = 0; ts2.tv_sec = 0; ts2.tv_nsec = 0;
-#ifndef timespecsub
-#error missing timespecsub
+#include <sys/time.h>]], [[struct timeval ts1, ts2;
+ts1.tv_sec = 1; ts1.tv_usec = 0; ts2.tv_sec = 0; ts2.tv_usec = 0;
+#ifndef timersub
+#error missing timersub
 #endif
-timespecsub(&ts1, &ts2);]])], [AC_DEFINE(HAVE_TIMESPECSUB2)
+timersub(&ts1, &ts2);]])], [AC_DEFINE(HAVE_TIMERSUB2)
     AC_MSG_RESULT(yes)], [AC_MSG_RESULT(no)])
 fi
 dnl
@@ -2825,25 +2825,23 @@ AH_TOP([#ifndef _SUDO_CONFIG_H
 #define _SUDO_CONFIG_H])
 
 AH_BOTTOM([/*
- * Macros to pull sec and nsec parts of mtime from struct stat.
- * We need to be able to convert between timeval and timespec
- * so the last 3 digits of tv_nsec are not significant.
+ * Macros to convert ctime and mtime into timevals.
  */
 #ifdef HAVE_ST_MTIM
 # ifdef HAVE_ST__TIM
-#  define mtim_getsec(_x)      ((_x).st_mtim.st__tim.tv_sec)
-#  define mtim_getnsec(_x)     (((_x).st_mtim.st__tim.tv_nsec / 1000) * 1000)
+#  define ctim_get(_x, _y)     do { (_y)->tv_sec = (_x)->st_ctim.st__tim.tv_sec; (_y)->tv_usec = (_x)->st_ctim.st__tim.tv_usec / 1000; } while (0)
+#  define mtim_get(_x, _y)     do { (_y)->tv_sec = (_x)->st_mtim.st__tim.tv_sec; (_y)->tv_usec = (_x)->st_mtim.st__tim.tv_usec / 1000; } while (0)
 # else
-#  define mtim_getsec(_x)      ((_x).st_mtim.tv_sec)
-#  define mtim_getnsec(_x)     (((_x).st_mtim.tv_nsec / 1000) * 1000)
+#  define ctim_get(_x, _y)     do { (_y)->tv_sec = (_x)->st_ctim.tv_sec; (_y)->tv_usec = (_x)->st_ctim.tv_usec / 1000; } while (0)
+#  define mtim_get(_x, _y)     do { (_y)->tv_sec = (_x)->st_mtim.tv_sec; (_y)->tv_usec = (_x)->st_mtim.tv_usec / 1000; } while (0)
 # endif
 #else
 # ifdef HAVE_ST_MTIMESPEC
-#  define mtim_getsec(_x)      ((_x).st_mtimespec.tv_sec)
-#  define mtim_getnsec(_x)     (((_x).st_mtimespec.tv_nsec / 1000) * 1000)
+#  define ctim_get(_x, _y)     do { (_y)->tv_sec = (_x)->st_ctimespec.tv_sec; (_y)->tv_usec = (_x)->st_ctimespec.tv_usec / 1000; } while (0)
+#  define mtim_get(_x, _y)     do { (_y)->tv_sec = (_x)->st_mtimespec.tv_sec; (_y)->tv_usec = (_x)->st_mtimespec.tv_usec / 1000; } while (0)
 # else
-#  define mtim_getsec(_x)      ((_x).st_mtime)
-#  define mtim_getnsec(_x)     (0)
+#  define ctim_get(_x, _y)     do { (_y)->tv_sec = (_x)->st_ctime; (_y)->tv_usec = 0; } while (0)
+#  define mtim_get(_x, _y)     do { (_y)->tv_sec = (_x)->st_mtime; (_y)->tv_usec = 0; } while (0)
 # endif /* HAVE_ST_MTIMESPEC */
 #endif /* HAVE_ST_MTIM */
 
index 2fc9ad4466df82c34bd09cfbdf4b6699cf45e057..3e332ca52a4cebbcfaad364df29d5382df9eb868 100644 (file)
@@ -252,24 +252,12 @@ void setprogname(const char *);
 #endif /* HAVE___PROGNAME */
 #endif /* !HAVE_GETPROGNAME */
 
-#ifndef timespecclear
-# define timespecclear(ts)     (ts)->tv_sec = (ts)->tv_nsec = 0
+#ifndef timerclear
+# define timerclear(ts)        (ts)->tv_sec = (ts)->tv_nsec = 0
 #endif
-#ifndef timespecisset
-# define timespecisset(ts)     ((ts)->tv_sec || (ts)->tv_nsec)
+#ifndef timerisset
+# define timerisset(ts)        ((ts)->tv_sec || (ts)->tv_nsec)
 #endif
-#ifndef timespecsub
-# define timespecsub(minuend, subrahend, difference)                          \
-    do {                                                                      \
-           (difference)->tv_sec = (minuend)->tv_sec - (subrahend)->tv_sec;    \
-           (difference)->tv_nsec = (minuend)->tv_nsec - (subrahend)->tv_nsec; \
-           if ((difference)->tv_nsec < 0) {                                   \
-                   (difference)->tv_nsec += 1000000000L;                      \
-                   (difference)->tv_sec--;                                    \
-           }                                                                  \
-    } while (0)
-#endif
-
 #ifndef timeradd
 # define timeradd(tv1, tv2, total)                                            \
     do {                                                                      \
@@ -281,7 +269,6 @@ void setprogname(const char *);
        }                                                                      \
     } while (0)
 #endif
-
 #ifndef timersub
 # define timersub(minuend, subrahend, difference)                             \
     do {                                                                      \
index 8aafa28aa068db1d07995196bd9d6934b6bfbb28..84576ff993f06ff0ecb84aeab931b29a3fbd20a7 100644 (file)
@@ -23,6 +23,7 @@
 
 #include <sys/types.h>
 #include <sys/param.h>
+#include <sys/time.h>
 #include <sys/stat.h>
 #ifndef __TANDEM
 # include <sys/file.h>
 #ifdef HAVE_UNISTD_H
 # include <unistd.h>
 #endif /* HAVE_UNISTD_H */
+#if TIME_WITH_SYS_TIME
+# include <time.h>
+#endif
 #include <errno.h>
 #include <fcntl.h>
 #include <signal.h>
-#include <time.h>
 #include <pwd.h>
 #include <grp.h>
-#ifndef HAVE_TIMESPEC
-# include <compat/timespec.h>
-#endif
 
 #include "sudoers.h"
 
@@ -560,7 +560,7 @@ timestamp_status(timestampdir, timestampfile, user, flags)
        if (def_timestamp_timeout < 0 && sb.st_mtime != 0)
            status = TS_CURRENT;
        else {
-           /* XXX - should use timespec here */
+           /* XXX - should use timeval here */
            now = time(NULL);
            boottime = get_boottime();
            if (def_timestamp_timeout &&
@@ -600,7 +600,7 @@ void
 remove_timestamp(remove)
     int remove;
 {
-    struct timespec ts;
+    struct timeval tv;
     char *timestampdir, *timestampfile, *path;
     int status;
 
@@ -622,8 +622,8 @@ remove_timestamp(remove)
                remove = FALSE;
            }
        } else {
-           timespecclear(&ts);
-           if (touch(-1, path, &ts) == -1)
+           timerclear(&tv);
+           if (touch(-1, path, &tv) == -1)
                error(1, "can't reset %s to Epoch", path);
        }
     }
index 3e9ec43aecf7b5eb3bf8f1f38c2dd13a4178b041..1f498dbc44b1dc780883a9b4baf0bf58d3de3f9d 100644 (file)
@@ -22,9 +22,6 @@
 #if TIME_WITH_SYS_TIME
 # include <time.h>
 #endif
-#ifndef HAVE_TIMESPEC
-# include <compat/timespec.h>
-#endif
 
 #include <compat.h>
 
  * timespecs in struct stat or, otherwise, using time().
  */
 int
-gettime(ts)
-    struct timespec *ts;
+gettime(tv)
+    struct timeval *tv;
 {
     int rval;
 #if defined(HAVE_GETTIMEOFDAY) && (defined(HAVE_ST_MTIM) || defined(HAVE_ST_MTIMESPEC))
-    struct timeval tv;
-
-    rval = gettimeofday(&tv, NULL);
-    ts->tv_sec = tv.tv_sec;
-    ts->tv_nsec = tv.tv_usec * 1000;
+    rval = gettimeofday(tv, NULL);
 #else
-    rval = (int)time(&ts->tv_sec);
-    ts->tv_nsec = 0;
+    rval = (int)time(&tv->tv_sec);
+    tv->tv_usec = 0;
 #endif
     return (rval);
 }
index 2776953af0488b215f4ccfaeaac847b3773a01dc..494a15fd2bcc6a721e21189fe5e920c665c3eade 100644 (file)
@@ -247,13 +247,13 @@ void pass_warn(void);
 void dump_defaults(void);
 void dump_auth_methods(void);
 int lock_file(int, int);
-int touch(int, char *, struct timespec *);
+int touch(int, char *, struct timeval *);
 int user_is_exempt(void);
 void set_fqdn(void);
 char *sudo_getepw(const struct passwd *);
 int pam_prep_user(struct passwd *);
 void zero_bytes(volatile void *, size_t);
-int gettime(struct timespec *);
+int gettime(struct timeval *);
 FILE *open_sudoers(const char *, int, int *);
 void display_privs(struct sudo_nss_list *, struct passwd *);
 int display_cmnd(struct sudo_nss_list *, struct passwd *);
index 5d20135a130a146112b28531cdf56ee79dfc7865..9a7b146925b5f09f75be1fa1dc4d52833cd23d61 100644 (file)
@@ -76,9 +76,6 @@
 #else
 # include <varargs.h>
 #endif
-#ifndef HAVE_TIMESPEC
-# include <compat/timespec.h>
-#endif
 
 #include "sudoers.h"
 #include "interfaces.h"
@@ -266,8 +263,8 @@ edit_sudoers(sp, editor, args, lineno)
     char *cp;                          /* scratch char pointer */
     char buf[PATH_MAX*2];              /* buffer used for copying files */
     char linestr[64];                  /* string version of lineno */
-    struct timespec ts1, ts2;          /* time before and after edit */
-    struct timespec orig_mtim;         /* starting mtime of sudoers file */
+    struct timeval tv, tv1, tv2;       /* time before and after edit */
+    struct timeval orig_mtim;          /* starting mtime of sudoers file */
     off_t orig_size;                   /* starting size of sudoers file */
     ssize_t nread;                     /* number of bytes read */
     struct stat sb;                    /* stat buffer */
@@ -279,8 +276,7 @@ edit_sudoers(sp, editor, args, lineno)
 #endif
        error(1, "can't stat %s", sp->path);
     orig_size = sb.st_size;
-    orig_mtim.tv_sec = mtim_getsec(sb);
-    orig_mtim.tv_nsec = mtim_getnsec(sb);
+    mtim_get(&sb, &orig_mtim);
 
     /* Create the temp file if needed and set timestamp. */
     if (sp->tpath == NULL) {
@@ -346,9 +342,9 @@ edit_sudoers(sp, editor, args, lineno)
      *  XPG4 specifies that vi's exit value is a function of the
      *  number of errors during editing (?!?!).
      */
-    gettime(&ts1);
+    gettime(&tv1);
     if (run_command(editor, av) != -1) {
-       gettime(&ts2);
+       gettime(&tv2);
        /*
         * Sanity checks.
         */
@@ -370,19 +366,20 @@ edit_sudoers(sp, editor, args, lineno)
 
     /* Set modified bit if use changed the file. */
     modified = TRUE;
+    mtim_get(&sb, &tv);
     if (orig_size == sb.st_size &&
-       orig_mtim.tv_sec == mtim_getsec(sb) &&
-       orig_mtim.tv_nsec == mtim_getnsec(sb)) {
+       orig_mtim.tv_sec == tv.tv_sec &&
+       orig_mtim.tv_usec == tv.tv_usec) {
        /*
         * If mtime and size match but the user spent no measurable
         * time in the editor we can't tell if the file was changed.
         */
-#ifdef HAVE_TIMESPECSUB2
-       timespecsub(&ts1, &ts2);
+#ifdef HAVE_TIMERSUB2
+       timersub(&tv1, &tv2);
 #else
-       timespecsub(&ts1, &ts2, &ts2);
+       timersub(&tv1, &tv2, &tv2);
 #endif
-       if (timespecisset(&ts2))
+       if (timerisset(&tv2))
            modified = FALSE;
     }
 
index af942c5119d5708dea3836d5f64b6f62670dac50..50c7cbc107cff64b53d40e03fec79081db9be56b 100644 (file)
  * Update the access and modify times on an fd or file.
  */
 int
-touch(int fd, char *path, struct timespec *tsp)
+touch(int fd, char *path, struct timeval *tvp)
 {
     struct timeval times[2];
 
-    if (tsp != NULL) {
-       times[0].tv_sec = times[1].tv_sec = tsp->tv_sec;
-       times[0].tv_usec = times[1].tv_usec = tsp->tv_nsec / 1000;
+    if (tvp != NULL) {
+       times[0].tv_sec = times[1].tv_sec = tvp->tv_sec;
+       times[0].tv_usec = times[1].tv_usec = tvp->tv_usec;
     }
 
 #if defined(HAVE_FUTIME) || defined(HAVE_FUTIMES)
     if (fd != -1)
-       return(futimes(fd, tsp ? times : NULL));
+       return(futimes(fd, tvp ? times : NULL));
     else
 #endif
     if (path != NULL)
-       return(utimes(path, tsp ? times : NULL));
+       return(utimes(path, tvp ? times : NULL));
     else
        return(-1);
 }