Initial revision
[platform/upstream/busybox.git] / dutmp.c
1 /*
2  * public domain -- Dave 'Kill a Cop' Cinege <dcinege@psychosis.com>
3  * 
4  * dutmp
5  * Takes utmp formated file on stdin and dumps it's contents 
6  * out in colon delimited fields. Easy to 'cut' for shell based 
7  * versions of 'who', 'last', etc. IP Addr is output in hex, 
8  * little endian on x86.
9  * 
10  * made against libc6
11  */
12  
13 #include "internal.h"
14 #include <stdio.h>
15 #include <utmp.h>
16
17 const char      dutmp_usage[] = "dutmp\n"
18 "\n"
19 "\tDump file or stdin utmp file format to stdout, pipe delimited.\n"
20 "\tdutmp /var/run/utmp\n";
21
22 extern int
23 dutmp_fn(const struct FileInfo * i)
24 {
25
26 FILE *  f = stdin;
27 struct utmp * ut = (struct utmp *) malloc(sizeof(struct utmp) );
28
29         if ( i ) 
30                 if (! (f = fopen(i->source, "r"))) {
31                         name_and_error(i->source);
32                         return 1;
33                 }
34
35         while (fread (ut, 1, sizeof(struct utmp), f)) {
36                 //printf("%d:%d:%s:%s:%s:%s:%d:%d:%ld:%ld:%ld:%x\n", 
37                 printf("%d|%d|%s|%s|%s|%s|%d|%d|%ld|%ld|%ld|%x\n",
38                 ut->ut_type, ut->ut_pid, ut->ut_line,
39                 ut->ut_id, ut->ut_user, ut->ut_host,
40                 ut->ut_exit.e_termination, ut->ut_exit.e_exit,
41                 ut->ut_session,
42                 ut->ut_tv.tv_sec, ut->ut_tv.tv_usec,
43                 ut->ut_addr);
44         }
45
46 return 0;       
47 }