[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: bug in _krb5_pk_rd_pa_reply
OK, please disregard this.
clearly I was smoking the bad crack last night. I'm not sure how I got
it to follow the wrong code path last night, but oh well. maybe this was
something I was trying to grock when I was still running -02 code under gdb.
sigh. I hate the taste of shoe leather.
-Matt
Matthew N. Andrews wrote:
> In testing pkinit support in the latest code drops, I noticed that in
> lib/krb5/pkinit.c:_krb5_pk_rd_pa_reply() the code attempts to decode the
> padata first with decode_PA_PK_AS_REP(), and subsequently with
> decode_PA_PK_AS_REP_19(), and decode_PA_PK_AS_REP_Win2k() without any
> sort of test of the padata type.
>
> In the case of a -25 reply from the kdc(20050516 snapshot) both the
> decode_PA_PK_AS_REP(), and the decode_PA_PK_AS_REP_19() calls will
> return 0, and as a result, the -19 handling code will be followed in
> addition to the -25 branch. This winds up with a rep19.element value not
> represented in the case statement(probably totally bogus) and thus the
> default failure case is followed even though there was perfectly valid
> -25 padata. making these section conditional on the value of
> pa->padata_type solved this value, and is implemented in the patch
> below, but I wasn't sure what the padata type was for a pkinit reply
> from a win2k kdc so that is the fall through case. if the reply value is
> the same as for one of -19 or -25, that will not be correct(I have no
> win2k kdc to test against.)
>
> anyways, thanks for all of the work that's gone into this. I now have a
> working kdc and client, and will be working on getting proxy cert
> support at some point in the future(rfc3820 style proxies should be
> relatively straightforward, I believe that the openssl 0.9.8 branch has
> support, but I'm not sure if the legacy globus ProxyCertInfo extension
> will ever be supported in the mainline openssl, and I'm not entirely
> sure what'll be required to get heimdal's configure to use the globus
> openssl.).
>
> -Matt Andrews
>
>
>
>
>
> --- src/heimdal/heimdal-20050519/lib/krb5/pkinit.c 2005-05-10
> 12:40:39.0000
> 00000 -0700
> +++ pkinit.c 2005-05-19 09:11:34.000000000 -0700
> @@ -1739,7 +1739,7 @@
> size_t size;
>
> /* Check for PK-INIT -25 */
> - {
> + if ( pa->padata_type == KRB5_PADATA_PK_AS_REP ){
> PA_PK_AS_REP rep;
>
> memset(&rep, 0, sizeof(rep));
> @@ -1779,7 +1779,7 @@
> }
>
> /* Check for PK-INIT -19 */
> - {
> + else if ( pa->padata_type == KRB5_PADATA_PK_AS_REP_19 ) {
> PA_PK_AS_REP_19 rep19;
>
> memset(&rep19, 0, sizeof(rep19));
> @@ -1813,7 +1813,7 @@
> }
>
> /* Check for Windows encoding of the AS-REP pa data */
> - {
> + else {
> PA_PK_AS_REP_Win2k w2krep;
>
> memset(&w2krep, 0, sizeof(w2krep));
>