diff options
Diffstat (limited to 'riemann.fmi.uni-sofia.bg/ngetty/ngetty-1.1/dumputmp.c')
| -rw-r--r-- | riemann.fmi.uni-sofia.bg/ngetty/ngetty-1.1/dumputmp.c | 63 |
1 files changed, 63 insertions, 0 deletions
diff --git a/riemann.fmi.uni-sofia.bg/ngetty/ngetty-1.1/dumputmp.c b/riemann.fmi.uni-sofia.bg/ngetty/ngetty-1.1/dumputmp.c new file mode 100644 index 0000000..88d647c --- /dev/null +++ b/riemann.fmi.uni-sofia.bg/ngetty/ngetty-1.1/dumputmp.c @@ -0,0 +1,63 @@ +#include <unistd.h> +#include <fcntl.h> +#include "lib.h" + +#define S(a,b) str_copy(a,b) +#define SN(a,b) str_copynz(a,b,sizeof(b)) +#define N(a,b,c,d) fmt_nmb_(a,b,c,d) + +int main(int argc, char **argv) { + struct tm *tm; + time_t tmp_time; + char buf[1024]; + char *p; +#ifdef USE_LIBC_UTMP + struct utmp_type *ut; + if (argc>1) f_utmpname(argv[1]); + f_setutent(); +#else + struct utmp_type ut[1]; + int fd=0; + if (argc>1) { + fd = open(argv[1], O_RDONLY); + if (fd == -1) { write(1,buf,S(buf,"error open()\n")); _exit(1); } + } +#endif + + write(1,buf,S(buf,"type pid id user line host ip date " + "[term exit]\n")); + + while (f_getutent()) { + tmp_time = ut->ut_tv.tv_sec; + tmp_time += get_tz(tmp_time); + tm=nv_gmtime(&tmp_time); + + p = buf; + *p++ = '['; + p += N(p, ut->ut_type, 1,0); p +=S(p,"] ["); + p += N(p, ut->ut_pid, 5,0); p +=S(p,"] ["); + p += fmt_str_(p,ut->ut_id,4); p +=S(p,"] ["); + p += SN(p, ut->ut_user); p +=S(p,"] ["); + p += SN(p, ut->ut_line); p +=S(p,"] ["); + p += SN(p, ut->ut_host); p +=S(p,"] ["); + p += fmt_utmp_ip(p, (char *)ut->ut_addr_v6); p +=S(p,"] ["); + + p += fmt_ulong(p, (1900 +tm->tm_year) % 100); *p++ = '-'; + p += N(p, 1+tm->tm_mon,2,1); *p++ = '-'; + p += N(p, tm->tm_mday, 2,1); *p++ = ' '; + p += N(p, tm->tm_hour, 2,1); *p++ = ':'; + p += N(p, tm->tm_min, 2,1); *p++ = ':'; + p += N(p, tm->tm_sec, 2,1); + + if (argc>2) { + p +=S(p,"] ["); + p += fmt_ulong(p,ut->ut_exit.e_termination); *p++ = ' '; + p += fmt_ulong(p,ut->ut_exit.e_exit); + } + + p +=S(p,"]\n"); + write(1,buf, p-buf); + } + f_endutent(); + return 0; +} |
