Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 8 May 2001 17:19:38 -0700
From:      Alfred Perlstein <bright@wintelcom.net>
To:        Brian Feldman <green@FreeBSD.org>
Cc:        cvs-committers@FreeBSD.org, cvs-all@FreeBSD.org
Subject:   Re: cvs commit: src/crypto/openssh auth-pam.c
Message-ID:  <20010508171938.Q18676@fw.wintelcom.net>
In-Reply-To: <20010508171418.P18676@fw.wintelcom.net>; from bright@wintelcom.net on Tue, May 08, 2001 at 05:14:19PM -0700
References:  <200105082230.f48MUJH20777@freefall.freebsd.org> <20010508171418.P18676@fw.wintelcom.net>

next in thread | previous in thread | raw e-mail | index | archive | help
* Alfred Perlstein <bright@wintelcom.net> [010508 17:14] wrote:
> * Brian Feldman <green@FreeBSD.org> [010508 15:30] wrote:
> > green       2001/05/08 15:30:18 PDT
> > 
> >   Modified files:
> >     crypto/openssh       auth-pam.c 
> >   Log:
> >   Since PAM is broken, let pam_setcred() failure be non-fatal.
> 
> Basically the new PAM code has the idea of cached credentials.  Besideds
> being a really fun fun thing to get right, the API does some funky
> things.
> 
> Basically, setcreds expects to be able to use cached credentials
> from some previous call.  My guess is that it expects to use them
> from pam_authenticate().  I'm not sure if sshd calls pam_authenticate()
> when doing RSA/DSA keys which is why the cached credentials are bogus.
> 
> I'm going to work on a quick fix and possibly email around to help
> figure out if my fix is correct.

Actually "cached" is probably wrong even though that's what they call
the value, the real meaning seems to be "frozen" such that one can
rely on the value of the credential not changing while performing
operations on it.

The problem is this snipped of code in pam_dispatch:

        if (use_cached_chain) {
            /* a former stack execution has frozen the chain */
            cached_retval = *(h->cached_retval_p);
        } else {
            /* this stack execution is defining the frozen chain */
            cached_retval = h->cached_retval = retval;
        }

        /* verify that the return value is a valid one */
        if ((cached_retval < PAM_SUCCESS)
            || (cached_retval >= _PAM_RETURN_VALUES)) {
            retval = PAM_MUST_FAIL_CODE;
            action = _PAM_ACTION_BAD;
        } else {

when pam_setcred() is called use_cached_chain is set, however the
cached value has not been iniatialized.

Do you know what the proper way to initialize it would be?  It looks
like pam_authenticate() would be the right one, however I have a 
feeling it wants to pop up a password dialog which would be a bit
odd over the net.


-- 
-Alfred Perlstein - [alfred@freebsd.org]
http://www.egr.unlv.edu/~slumos/on-netbsd.html

To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe cvs-all" in the body of the message




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