/*
- * Copyright (c) 2011 Todd C. Miller <Todd.Miller@courtesan.com>
+ * Copyright (c) 2011-2013 Todd C. Miller <Todd.Miller@courtesan.com>
*
* Permission to use, copy, modify, and distribute this software for any
* purpose with or without fee is hereby granted, provided that the above
#include <config.h>
#include <sys/types.h>
-#include <sys/param.h>
#include <sys/time.h>
#include <sys/wait.h>
#include <stdio.h>
# include <ttyent.h>
#endif
#include <fcntl.h>
+#include <signal.h>
#include "sudo.h"
#include "sudo_exec.h"
* doesn't take an argument.
*/
if ((sfd = dup(STDIN_FILENO)) == -1)
- error(1, _("unable to save stdin"));
+ fatal(_("unable to save stdin"));
if (dup2(ttyfd, STDIN_FILENO) == -1)
- error(1, _("unable to dup2 stdin"));
+ fatal(_("unable to dup2 stdin"));
slot = ttyslot();
if (dup2(sfd, STDIN_FILENO) == -1)
- error(1, _("unable to restore stdin"));
+ fatal(_("unable to restore stdin"));
close(sfd);
debug_return_int(slot);
}
}
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;
}
# 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;
}