le.c
/*
* This is a lastlogin editor for ultrix's and suns
* maybe bsd too, Coded by PeaBoy
*/
#include
#include
#include
#include
#include
char *cbp;
int gpair()
{ /* taken from touch, thanks UCB :) */
register int c, d;
register char *cp;
cp = cbp;
if (*cp == 0) return (-1);
c = (*cp++ - '0') * 10;
if (c<0 || c>100) return (-1);
if (*cp == 0) return (-1);
if ((d = *cp++ - '0') < 0 || d > 9) return (-1);
cbp = cp;
return (c+d);
}
main(argc,argv)
int argc;
char *argv[];
{
static struct tm time;
time_t timbuf;
int f;
struct lastlog newll;
struct passwd *pw;
if (argc==5) {
if ((pw=getpwnam(argv[1])) == NULL) {
fprintf(stderr,"no such account\n\r"); exit(2); }
cbp=(char *)argv[2];
time.tm_mon=gpair()-1; time.tm_mday=gpair(); time.tm_hour=gpair();
if (time.tm_hour == 24) { time.tm_hour = 0; time.tm_mday++; }
time.tm_min=gpair(); time.tm_sec=gpair(); time.tm_year=gpair();
timbuf=timelocal(time);
newll.ll_time=timbuf;
strcpy(newll.ll_line,argv[3]);
strcpy(newll.ll_host,argv[4]);
if ((f = open("/var/adm/lastlog", O_RDWR)) >= 0) {
lseek(f, (long)pw->pw_uid * sizeof (struct lastlog), 0);
write(f, (char *) &newll, sizeof newll);
close(f);
} else printf("error opening lastlog\n\r");
} else printf("usage: %s user mmddhhmmssyy tty site\n\r",argv[0]);
}
Go BACK!