[AFS3-std] New Version Notification for draft-wilkinson-afs3-rxgk-06.txt (fwd)

Jeffrey Hutzelman jhutz@cmu.edu
Fri, 28 Jun 2013 16:53:54 -0400


On Mon, 2013-06-24 at 18:30 -0400, Benjamin Kaduk wrote:
> For those following along, I finally got around to putting in extra markup 
> to split out the control flow of the GSS negotiation loop into enumerated 
> steps.  There are no changes to the body text.

I've taken a look at this, and the structural changes look pretty good.
I've also reviewed the description of the negotiation loop in section
6.2, and have a few comments...

- In step 3, you don't say anything about the case where the major
  status code from GSS_Accept_sec_context indicates an error.

- If the server decides that negotation has failed for a reason other
  than GSS_Accept_sec_context returning an error status, , it should
  indicate this to the client by returning an error from the RPC or
  by some other indicator.  It should not synthesize a GSS-API status
  code that was not actually returned by the GSS-API.

- In step 4, if the GSSNegotiate() fails for any reason, the client
  should consider the negotiation to have failed.

- Don't conflate GSS_S_CONTINUE_NEEDED with an output token.  The
  GSS_S_CONTINUE_NEEDED flag indicates that another call with an input
  token is expected, not that an output token was provided.  So...

  + If GSS_Init_sec_context produced a token when the server wasn't
    expecting one, or failed to produce one when it was, that is an
    error, and negotiation fails.

  + If GSS_Accept_sec_context produced a token when the client was
    not expecting one, or failed to produce one when it was, that is
    an error, and negotiation fails.
    
  + If GSS_Accept_sec_context produces an output token but does not
    set GSS_S_CONTINUE_NEEDED, that is _not_ an error -- it means the
    client needs to call GSS_Init_sec_context() once more, and that
    call is expected to succeed without producing an output token.
    Of course, at this point, the acceptor believes the context has
    been established, but the initiator may need to process that last
    token in order to finish setting up the context.

So in step 4, if the GSSNegotiate RPC failed, or returned a GSS status
indicating an error, then negotiation has failed.  Otherwise, there
are three cases...

  (a) The server returned GSS_S_COMPLETE or GSS_S_CONTINUE_NEEDED, with
  an output token, and the client was expecting a token.  In this case,
  the client begins the next cycle.

  (b) The server returned GSS_S_COMPLETE without an output token, and
  the client was not expecting a token.  In this case, negotiation
  succeeds.

  (c) All other combinations are failures.


GSSNegotiate is intended to be called over an unprotected channel.
So, there is no security reason to favor reporting results via an
output parameter instead of via an Rx abort.


-- Jeff