[net.unix-wizards] True login names

fred.umcp-cs@Udel-Relay@sri-unix (09/13/82)

From:     Fred Blonder <fred.umcp-cs@Udel-Relay>
Date:     9 Sep 82 18:54:58-EDT (Thu)
Here's what we did to fix the logging-in-as-someone-else-from-a-subshell
loophole in 4.1BSD:

    In login.c
	84a85,90
	> 
	> /* Check to see if we are the immediate child process of init */
	> if (getppid() > 1) {
	> 	printf("This doesn't work anymore bandy.\n");
	> 	exit(1);
	> 	}

This modification to login allows it to run only if it has been exec-ed by
getty, or by a login shell.

The getppid (get parent process-id) system call (actually just a variant of
getpid) is totally undocumented. I discovered it on 4.1BSD while I was tring
to write the same thing as a subroutine. I have no idea as to which (if any)
other Unices have it.

mogul.Shasta@Su-Score@sri-unix (09/17/82)

From: Jeff Mogul <mogul.Shasta@Su-Score>
Date: Monday, 13 Sep 1982 21:25-PDT
Alas, getppid() can be easily fooled, because when the parent
dies, the child process is inherited by init.  Thus, any one
of a number of dodges can be dreamt up, wherein the parent
of your modified login program is dead before getppid() is called.
-Jeff

jab@Okc-Unix@sri-unix (09/18/82)

From: Jeff Bowles <jab@Okc-Unix>
Date: 14 Sep 1982 12:17:33 EST (Tuesday)

getppid() returns the parent process, UNLESS the parent has exited.
Then the parent of the process is process #1, which is /etc/init.
For example,
	main()
	{
		if(fork() != 0)
			exit(0);
		printf("getppid() returns %d\n", getppid());
		exit(0);
		}
could produce a nasty suprise.

	Jeff