summaryrefslogtreecommitdiffstats
path: root/ax25/axspawn.c
diff options
context:
space:
mode:
authorRalf Baechle <ralf@linux-mips.org>2009-06-14 13:27:50 +0000
committerRalf Baechle <ralf@linux-mips.org>2009-06-14 13:27:50 +0000
commita7c513d8dc2f4dc2f9a7ae91736f2f2870f2c892 (patch)
tree81ecb1f5a85b85335df4aff81c3eca43553a24d7 /ax25/axspawn.c
parent378a483bd88de4c91e34e0646e90b92cd2d03ec9 (diff)
Fix utmp time code
Thanks to using the antiquated time(2) call the microsecond field of the struct utmp being manipulated was never initialized resulting in random values. On some 64-bit systems this also manifested itself in below warnings. axspawn.c: In function ‘cleanup’: axspawn.c:1017: warning: passing argument 1 of ‘time’ from incompatible pointer type /usr/include/time.h:186: note: expected ‘time_t *’ but argument is of type ‘int32_t *’ [...] axspawn.c: In function ‘main’: [...] axspawn.c:1693: warning: passing argument 1 of ‘time’ from incompatible pointer type /usr/include/time.h:186: note: expected ‘time_t *’ but argument is of type ‘int32_t *’ Fixed by changing it to the recommended initialization sequenze based on gettimeofday().
Diffstat (limited to 'ax25/axspawn.c')
-rw-r--r--ax25/axspawn.c14
1 files changed, 10 insertions, 4 deletions
diff --git a/ax25/axspawn.c b/ax25/axspawn.c
index d28130e..a1af4c9 100644
--- a/ax25/axspawn.c
+++ b/ax25/axspawn.c
@@ -1,6 +1,6 @@
/*
*
- * $Id: axspawn.c,v 1.19 2008/11/08 19:07:19 dl9sau Exp $
+ * $Id: axspawn.c,v 1.20 2009/06/14 13:27:51 ralf Exp $
*
* axspawn.c - run a program from ax25d.
*
@@ -1003,8 +1003,10 @@ int get_assoc(struct sockaddr_ax25 *sax25)
void cleanup(char *tty)
{
struct utmp ut, *ut_line;
+ struct timeval tv;
FILE *fp;
+
setutent();
ut.ut_type = LOGIN_PROCESS;
strncpy(ut.ut_id, tty + 3, sizeof(ut.ut_id));
@@ -1014,8 +1016,9 @@ void cleanup(char *tty)
ut_line->ut_type = DEAD_PROCESS;
ut_line->ut_host[0] = '\0';
ut_line->ut_user[0] = '\0';
- time(&ut_line->ut_time);
- pututline(ut_line);
+ gettimeofday(&tv, NULL);
+ ut_line->ut_tv.tv_sec = tv.tv_sec;
+ ut_line->ut_tv.tv_usec = tv.tv_usec;
if ((fp = fopen(_PATH_WTMP, "r+")) != NULL) {
fseek(fp, 0L, SEEK_END);
if (fwrite(ut_line, sizeof(ut), 1, fp) != 1)
@@ -1341,6 +1344,7 @@ int main(int argc, char **argv)
char call[20], user[20], as_user[20];
char buf[2048];
int k, cnt, digits, letters, invalid, ssid, ssidcnt, addrlen;
+ struct timeval tv;
pid_t pid = -1;
char *p;
fd_set fds_read, fds_err;
@@ -1688,7 +1692,9 @@ again:
strncpy(ut_line.ut_id, ptyslave + 8, sizeof(ut_line.ut_id));
strncpy(ut_line.ut_user, "LOGIN", sizeof(ut_line.ut_user));
strncpy(ut_line.ut_host, protocol, sizeof(ut_line.ut_host));
- time(&ut_line.ut_time);
+ gettimeofday(&tv, NULL);
+ ut_line.ut_tv.tv_sec = tv.tv_sec;
+ ut_line.ut_tv.tv_usec = tv.tv_usec;
ut_line.ut_addr = 0;
pututline(&ut_line);
endutent();