gss_display_status() bug dealing with minor/mech specific error codes?

Will Fiveash will.fiveash at oracle.com
Wed Apr 24 20:41:56 EDT 2013


On Wed, Apr 24, 2013 at 06:38:02PM -0500, Nico Williams wrote:
> On Wed, Apr 24, 2013 at 6:11 PM, Will Fiveash <will.fiveash at oracle.com> wrote:
> > On Tue, Apr 23, 2013 at 10:29:35PM -0400, Greg Hudson wrote:
> >> On 04/23/2013 06:51 PM, Will Fiveash wrote:
> >> > I think there is a bug in MIT's gss_display_status() when dealing with
> >> > mech specific minor codes.  Here is my test program:
> >>
> >> Our mechglue's gss_display_status can only translate minor codes which
> >> were returned from another GSSAPI function within the same process.
> >
> > Looking at the description of gss_display_status in RFC 2744 I do not
> > see where the usage restriction you describe above is mentioned.
> 
> RFCs 2743 and 2744 don't say that the implementation MUST (nor SHOULD)
> allow the app to display arbitrary minor status codes either, only
> ones returned to the application by the API.

Actually 2744 states:

   Allows an application to obtain a textual representation of a GSS-API
   status code, for display to the user or for logging purposes.

It does not say "returned by a preceding GSS-API function call".

> MIT dynamically assigns minor status codes in order to provide better
> functionality when using, e.g., SPNEGO, and better error strings for
> the other mechanisms too.

So you think it is reasonable that gss_display_status() when called like
so with the GSS_C_MECH_CODE and the krb mech specified:

gss_OID_desc krb_mech_OID = {9, "\052\206\110\206\367\022\001\002\002"};

gss_display_status(&minor_return_status, KRB5_FCC_PERM, GSS_C_MECH_CODE,
            &krb_mech_OID, &more, &status_string);

return an error from gssint_mecherrmap_get() instead of going ahead and
calling mech->gss_display_status() which does the right thing in this
particular instance?  Note that before the introduction of
gssint_mecherrmap_get() in gss_display_status() the above worked as
expected without a preceding libgss function call to initialize
anything.

> >> It's not a translation facility for error codes returned from libkrb5
> >> functions or plucked from libkrb5's com_err tables, even if you supply
> >> the krb5 mech OID as the req_mech_type parameter (which we ignore).
> >
> > We have found it useful when trussing apps that use gss as truss reveals
> > major and minor codes as hex numbers to have a simple utility to call
> > gss_display_status() on those codes.
> 
> Yeah, that's true.  You'll probably want a USDT provider to make the
> display strings available to DTrace.  (Really, truss(1)?  pfft, when
> you have DTrace?!)   :) :)

I still find truss useful.  8^) 

-- 
Will Fiveash
Oracle Solaris Software Engineer


More information about the krbdev mailing list