Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 3 Feb 1997 02:24:55 +1100
From:      davidn@unique.usn.blaze.net.au (David Nugent)
To:        freebsd-current@freebsd.org, freebsd-bugs@freebsd.org
Subject:   sys/param.h: MAXLOGNAME
Message-ID:  <19970203022455.AC08025@usn.blaze.net.au>

next in thread | raw e-mail | index | archive | help
After some testing with a username with exactly 16 characters
in length, I hit a problem:

Feb  3 01:54:27 labs login: setlogin 'abcdef0123456789': Invalid argument       
Feb  3 01:54:27 labs login: setusercontext() failed - exiting 

The error is generated by this code in sys/kern/kern_prot.c:

int
setlogin(p, uap, retval)
	struct proc *p;
	struct setlogin_args *uap;
	int *retval;
{
	int error;

	if ((error = suser(p->p_ucred, &p->p_acflag)))
		return (error);
	error = copyinstr((caddr_t) uap->namebuf,
	    (caddr_t) p->p_pgrp->pg_session->s_login,
	    sizeof (p->p_pgrp->pg_session->s_login) - 1, (u_int *)0);
	    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
	if (error == ENAMETOOLONG)
		error = EINVAL;
	return (error);
}

and inspecting src/sys/sys/proc.h shows:

struct	session {
	int	s_count;		/* Ref cnt; pgrps in session. */
	struct	proc *s_leader;		/* Session leader. */
	struct	vnode *s_ttyvp;		/* Vnode of controlling terminal. */
	struct	tty *s_ttyp;		/* Controlling terminal. */
	char	s_login[MAXLOGNAME];	/* Setlogin() name. */
		        ^^^^^^^^^^
};

.. which means that in reality, MAXLOGNAME-1 is the maximum
number of characters in a username, which is currently 15,
not 16 as everything else assumes.

The fix for -current is obvious, although it seems that
MAXLOGNAME should be at least as large as a valid user
name. MAXLOGNAME in 2.2 was 12, so it won't be affected.


Regards,

David Nugent - Unique Computing Pty Ltd - Melbourne, Australia
Voice +61-3-9791-9547  Data/BBS +61-3-9792-3507  3:632/348@fidonet
davidn@freebsd.org davidn@blaze.net.au http://www.blaze.net.au/~davidn/



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?19970203022455.AC08025>