Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 7 Apr 2005 10:43:12 +0200
From:      Stefan Farfeleder <stefanf@FreeBSD.org>
To:        Jacques Vidrine <nectar@FreeBSD.org>
Cc:        cvs-all@FreeBSD.org
Subject:   Re: cvs commit: src/libexec/rexecd rexecd.c
Message-ID:  <20050407084309.GF644@wombat.fafoe.narf.at>
In-Reply-To: <200504051455.j35EtXfw046906@repoman.freebsd.org>
References:  <200504051455.j35EtXfw046906@repoman.freebsd.org>

next in thread | previous in thread | raw e-mail | index | archive | help
On Tue, Apr 05, 2005 at 02:55:33PM +0000, Jacques Vidrine wrote:
> nectar      2005-04-05 14:55:33 UTC
> 
>   FreeBSD src repository
> 
>   Modified files:
>     libexec/rexecd       rexecd.c 
>   Log:
>   DES pointed out that the PAM layer may change the target user name
>   during authentication.  Thus we need to call getpwnam *after* the user
>   has been authenticated.  Colin mentioned that we should also move the
>   check for root in that case.

static void
doit(struct sockaddr *fromp)
{
        char *cmdbuf, *cp;
        int maxcmdlen;
        char user[16], pass[16];

...

        if (!pam_ok(pam_start("rexecd", user, &pamc, &pamh)) ||
            !pam_ok(pam_set_item(pamh, PAM_RHOST, remote)) ||
            !pam_ok(pam_set_item(pamh, PAM_AUTHTOK, pass)) ||
            !pam_ok(pam_authenticate(pamh, pam_flags)) ||
            !pam_ok(pam_acct_mgmt(pamh, pam_flags)) ||
            !pam_ok(pam_get_item(pamh, PAM_USER, (const void **)&user)) ||

I don't know anything about PAM, but apparently pam_get_item() stores a pointer
into *item.  Here the pointer value is written into the first few bytes of the
array `user' (assuming it is correctly aligned).

Stefan



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