ftpd doesn't believe passwd(5)

Mark Bartelt mark at sickkids.UUCP
Tue Nov 13 07:03:41 AEST 1990


This is one of those "I find it hard to believe nobody has reported this
before" bugs, but nonetheless ...  In vanilla 4.3bsd on a VAX:

ftpd(8) sez ...

   _F_t_p_d authenticates users according to three rules.
    [ ... ]
   3)   The user must have a standard shell returned by getusershell(3).

passwd(5) sez ...

   [ ... ] if the Shell field is null, then /_b_i_n/_s_h is used.

But ftpd nonetheless refuses to authorize a user whose shell field in
/etc/passwd is null; it won't let a Bourne shell user in unless /bin/sh
is explicitly specified in /etc/passwd.  One of several ways to fix the
problem in ftpd.c/checkuser():

Replace
	while ((cp = getusershell()) != NULL)
		if (strcmp(cp, pw->pw_shell) == 0)
			break;
	endpwent();
	endusershell();
	if (cp == NULL)
		return (0);

with
	if ( !*(pw->pw_shell) )
		endpwent();
	else {
		while ((cp = getusershell()) != NULL)
			if (strcmp(cp, pw->pw_shell) == 0)
				break;
		endpwent();
		endusershell();
		if (cp == NULL)
			return (0);
	}

Mark Bartelt                          INTERNET: mark at sickkids.toronto.edu
Hospital for Sick Children, Toronto             mark at sickkids.utoronto.ca
416/598-6442                          UUCP: {utzoo,decvax}!sickkids!mark



More information about the Comp.bugs.4bsd.ucb-fixes mailing list