#include #include #include #include #include int main(int argc, char *argv[]) { struct utmp ut; long pid; int len; /* check arguments */ if(argc != 6 || (strcmp(argv[2], "i") && strcmp(argv[2], "o"))) { fprintf(stderr, "Usage: %s wtmpfile {i|o} pid line user\n", argv[0]); return 1; } /* cleanup */ memset(&ut, 0, sizeof(ut)); /* set type */ ut.ut_type = strcmp(argv[2], "i") ? DEAD_PROCESS:USER_PROCESS; /* set pid */ pid = strtol(argv[3], NULL, 10); if(pid < 0) { /* chotto tenuki */ fprintf(stderr, "%d: bad pid.\n", pid); return 2; } ut.ut_pid = pid; /* set line */ len = strlen(argv[4]); len = (len >= UT_LINESIZE) ? UT_LINESIZE-1:len; strncpy(ut.ut_line, argv[4], len); /* set user */ len = strlen(argv[5]); len = (len >= UT_NAMESIZE) ? UT_NAMESIZE-1:len; strncpy(ut.ut_user, argv[5], len); /* set time */ gettimeofday(&ut.ut_tv, NULL); /* append to wtmp */ updwtmp(argv[1], &ut); return 0; }