]> granicus.if.org Git - sudo/commitdiff
Use fseeko() for legacy utmp handling if available.
authorTodd C. Miller <Todd.Miller@courtesan.com>
Wed, 29 Aug 2012 14:32:49 +0000 (10:32 -0400)
committerTodd C. Miller <Todd.Miller@courtesan.com>
Wed, 29 Aug 2012 14:32:49 +0000 (10:32 -0400)
config.h.in
configure
configure.in
src/utmp.c

index 9f7990dad3e83779c711e2baffe5c1a25b418f6a..eb5e593d95dab2002763d9e55dcbc5016cb773b6 100644 (file)
 /* Define to 1 if you have the `freeifaddrs' function. */
 #undef HAVE_FREEIFADDRS
 
+/* Define to 1 if you have the `fseeko' function. */
+#undef HAVE_FSEEKO
+
 /* Define to 1 if you have the `futime' function. */
 #undef HAVE_FUTIME
 
index 7a2748a25970a4bf0697eab3cecd2238cec93d1a..a46f43472c4e543b87373999c03b18a455f6ef4f 100755 (executable)
--- a/configure
+++ b/configure
@@ -16710,6 +16710,17 @@ if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
 #define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
 _ACEOF
  break
+fi
+done
+
+    for ac_func in fseeko
+do :
+  ac_fn_c_check_func "$LINENO" "fseeko" "ac_cv_func_fseeko"
+if test "x$ac_cv_func_fseeko" = xyes; then :
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_FSEEKO 1
+_ACEOF
+
 fi
 done
 
index ce27db9b821913f9f29a889527d5aea3b45032fe..f3b4f5d5be71dc24833d63e3973450fd8a9bc66e 100644 (file)
@@ -2213,6 +2213,7 @@ utmp_style=LEGACY
 AC_CHECK_FUNCS(getutxid getutid, [utmp_style=POSIX; break])
 if test "$utmp_style" = "LEGACY"; then
     AC_CHECK_FUNCS(getttyent ttyslot, [break])
+    AC_CHECK_FUNCS(fseeko)
 fi
 
 AC_CHECK_FUNCS(sysctl, [AC_CHECK_MEMBERS([struct kinfo_proc.ki_tdev], [],
index 91ff144dd2154759a0b5dd8bc3563391cf3a0da0..97a1ea659b63413ac748f546dbb4a73759e865a1 100644 (file)
@@ -328,7 +328,11 @@ utmp_login(const char *from_line, const char *to_line, int ttyfd,
        }
     }
     utmp_fill(to_line, user, ut_old, &utbuf);
+#ifdef HAVE_FSEEKO
+    if (fseeko(fp, slot * (off_t)sizeof(utbuf), SEEK_SET) == 0) {
+#else
     if (fseek(fp, slot * (long)sizeof(utbuf), SEEK_SET) == 0) {
+#endif
        if (fwrite(&utbuf, sizeof(utbuf), 1, fp) == 1)
            rval = true;
     }
@@ -361,7 +365,11 @@ utmp_logout(const char *line, int status)
 # endif
            utmp_settime(&utbuf);
            /* Back up and overwrite record. */
+#ifdef HAVE_FSEEKO
+           if (fseeko(fp, (off_t)0 - (off_t)sizeof(utbuf), SEEK_CUR) == 0) {
+#else
            if (fseek(fp, 0L - (long)sizeof(utbuf), SEEK_CUR) == 0) {
+#endif
                if (fwrite(&utbuf, sizeof(utbuf), 1, fp) == 1)
                    rval = true;
            }