#include <stdio.h>
#include <utmp.h>
#include <pwd.h>
#include <sys/types.h>
#include <sys/stat.h>

struct passwd *getpwuid();
char *ttyname();
char *rindex();

main(argc, argv)
char **argv;
{
	struct utmp utmp;
	register int utfd;
	register char *name;	/* Who to be */
	register char *tty;
	struct stat stbuf;

	if (argv[0][0] == 'u') {
		fstat(1, &stbuf);
		name = getpwuid(stbuf.st_uid)->pw_name;
	} else {
		switch (argc) {
		case 1:
			name = "";
			break;
		case 2:
			name = argv[1];
			break;
		default:
			fputs("cl: Argc botch.\n", stderr);
			exit(1);
		}
	}
	tty = rindex(ttyname(1), '/');
	if (tty == NULL) {
		fputs("cl: Not a tty.\n", stderr);
		exit(1);
	}
	tty++;
#ifdef TEST
	utfd = open("/etc/utmp", 0);
#else
	utfd = open("/etc/utmp", 2);
#endif
	while (read(utfd, (char *) &utmp, sizeof utmp) == sizeof utmp) {
		if (strcmp(utmp.ut_line, tty) == 0) {
			strncpy(utmp.ut_name, name, sizeof(utmp.ut_name));
#ifdef TEST
			write(1, (char *) &utmp, sizeof utmp);
#else
			lseek(utfd, -sizeof(utmp), 1);
			write(utfd, (char *) &utmp, sizeof utmp);
#endif
		}
#ifdef TEST
		else
		{
			write(1, (char *) &utmp, sizeof utmp);
		}
#endif
	}
	exit(0);
}
