In message <CAM5tNy4XupPGXHMS0p0TK0Wf_zAg5bsOzx4C1K1e-_2b=3eyUw@mail.gmail.c
om>
, Rick Macklem writes:
> On Thu, Jul 31, 2025 at 6:51=E2=80=AFAM Rick Macklem <rick.mack...@gmail.co=
> m> wrote:
> >
> > On Thu, Jul 31, 2025 at 6:07=E2=80=AFAM Rick Macklem <rick.macklem@gmail.=
> com> wrote:
> > >
> > > On Wed, Jul 30, 2025 at 9:24=E2=80=AFPM Benjamin Kaduk <bjkfbsd@gmail.c=
> om> wrote:
> > > >
> > > > On Wed, Jul 30, 2025 at 10:36=E2=80=AFAM Rick Macklem <rick.macklem@g=
> mail.com> wrote:
> > > >>
> > > >> On Mon, Jul 28, 2025 at 3:32=E2=80=AFPM Benjamin Kaduk <bjkfbsd@gmai=
> l.com> wrote:
> > > >> >
> > > >> > On Mon, Jul 28, 2025 at 3:04=E2=80=AFPM Benjamin Kaduk <bjkfbsd@gm=
> ail.com> wrote:
> > > >> >>
> > > >> >>
> > > >> >> Note that MIT krb5 provides the gss_krb5_export_lucid_sec_context=
> () API that does a lot of the work of getting useful bits out of an establi=
> shed GSS security context.
> > > >> >>
> > > >> >
> > > >> >
> > > >> >
> > > >> >
> > > >> > And a bit more context on what is going on here and why kgssapi ha=
> s to care:
> > > >> > The GSS-API (RFC 2743) is all about a way to "establish a security=
>  context" (i.e., do crypto negotiation, authentication, sometimes authoriza=
> tion, etc.) between two entities, the initiator and the acceprot, and then =
> exchanging protected messages between the two (which can be either encrypte=
> d or just integrity protection tags for otherweise cleartext data); later e=
> xtensions included the ability to produce identical PRF output on both part=
> ies, etc..  The details are "mechanism-specific", and for this purpose we'r=
> e exclusively talking about the krb5 mechanism.  The steps to establish the=
>  security context are complicated and sometimes fiddly, and in the general =
> case can require a large number of round-trips between the initiator and ac=
> ceptor before the security context is established.  The individual message-=
> protection parts are comparatively simple and amendable to implementation i=
> n the kernel for processing efficiency.
> > > >> > RFC 2743 also defines functions for GSS_Export_sec_context() and G=
> SS_Import_sec_context(), that are designed essentially to pass information =
> about an established security context from one process to another on the sa=
> me machine (which are presumably using the same implementation and version =
> of the implementation), so the contents of the exported blob are opaque and=
>  implementation-specific.  We are abusing that mechanism to export informat=
> ion about the security context that gssd has established and feed that info=
> rmation into the kernel implementation of the per-message processing routin=
> es.  At present, this necessarily entails knowing the details of the implem=
> entation-specific opaque blob that is the "export sec context token", which=
>  is what the sys/kgssapi/krb5/krb5_mech.c code is doing.  But if we can get=
>  the information we want without breaking the abstraction barrier, such as =
> via the gss_krb5_export_lucid_sec_context() API, we are in a more robust po=
> sture overall and somewhat future-proofed against future evolution by MIT k=
> rb5.
> > > >> > (I note that recent Heimdal versions seem to also expose a gss_krb=
> 5_export_lucid_sec_context() API, so part of the problem is just that the H=
> eimdal in base is so old.)
> > > >>
> > > >> Well, here's some "not so good" news...
> > > >> I've been trying to use gss_inquire_sec_context_by_oid(..) with the =
> oid
> > > >> for the GSS_KRB5_EXPORT_LUCID_SEC_CONTEXT_OID with version 1.
> > > >> It kept failing.
> > > >> The problem seems to be that "gctx->proto =3D=3D 4" in make_external=
> _lucid_ctx_v1()
> > > >> function. This function only knows about the 0 and 1 setting for gct=
> x->proto.
> > > >>
> > > >> Any ideas, rick
> > > >>
> > > >
> > > >
> > > > I'm not seeing anything to suggest that a "gctx->proto" value of 4 is=
>  ever expected; it looks like it's supposed to just be 0 (for the legacy RF=
> C 1964 format) or 1 (for the "CFX" format of RFC 4121, with wider sequence =
> numbers for message-protection formats, etc.).  So maybe it's worth posting=
>  your current WIP somewhere to take a closer look at what's going on.
> > >
> > > Yea, the debugging I did was flawed (I probably got the wrong offset
> > > in the structure).
> > > It is weird, though. If I do gss_inquire_sec_context_by_oid(&minor, ctx=
> ,
> > > OID_FOR_GSS_INQUIRE_SSPI_SESSION_KEY, &key), it
> > > works and gives me the key and encryption type.
> > >
> > > If I do the same, but with the 12 byte OID for LUCID v1 (the 11 bytes f=
> rom the
> > > string + a 1 byte), it returns major =3D=3D GSS_S_COMPLETE, but no data=
>  and
> > > a weird 39756046(decimal) or 0x25ea10e(hex) minor.
> > > (Oh, and I tried gss_krb5_export_lucid_sec_context() and got the same
> > > weird error.)
> > --> Now (after doing a "make buildworld"), gss_krb5_export_lucid_sec_cont=
> ext()
> >      returns GSS_S_BAD_MECH. Looking at the src, that error has to be fro=
> m
> >      gss_inquire_sec_context_by_oid(). So, same function fails, but a dif=
> ferent
> >      error return?
> >
> > It looks like "gssint_get_mechanism (ctx->mech_type)" is failing.
> > I'm currently just passing GSS_C_NULL_OID into gss_init_sec_context(),
> > but I've also tried the Kerberos 9 byte OID (both work, in the sense that
> > gss_init_sec_context() seems to work, except that the actual_mech_type
> > returned by it has a bogus pointer in the reply).
> > --> It looks like the "mech_type" field of "ctx" is busted, for some reas=
> on?
> >
> > I'm going to try building krb5 from ports and linking to that, to see if =
> it
> > does the same thing.
> Finally some good news...
> All I did was "pkg install krb5" and then linked the gssd to the libraries =
> in
> /usr/local/lib and it worked!!

I will double check the generated gssapi.h from its .et files in 
krb5/lib/gssapi/generic.

>
> Now I can test/debug the changes.
>
> Btw, the stuff in /usr/local/include/gssapi are correct and not messed up
> like the stuff in /usr/include/gssapi. (The ones in /usr/local/include defi=
> ne
> GSS_DLLIMP for example.)

This is generated from one of the .et files.

>
> I'm going to leave figuring out why the libraries in /usr/lib are messed up
> to someone else.
>
> rick
>


-- 
Cheers,
Cy Schubert <cy.schub...@cschubert.com>
FreeBSD UNIX:  <c...@freebsd.org>   Web:  https://FreeBSD.org
NTP:           <c...@nwtime.org>    Web:  https://nwtime.org

                        e**(i*pi)+1=0



Reply via email to