pull up r20559 from trunk
authorTom Yu <tlyu@mit.edu>
Fri, 25 Jul 2008 20:32:56 +0000 (20:32 +0000)
committerTom Yu <tlyu@mit.edu>
Fri, 25 Jul 2008 20:32:56 +0000 (20:32 +0000)
commit903b975027a03456ed86f80ae02dee5bf7955d17
tree287c7b3acb807171c0da70346ec26734aa101e41
parent4dd37a042bf8b7dec44bb496ef8b4b968753cceb
pull up r20559 from trunk

 r20559@cathode-dark-space:  jaltman | 2008-07-21 16:47:35 -0400
 ticket: 5442
 tags: pullup

 This patch addresses the issues raised in this ticket and ticket 5936.

 (a) In the case where 'cred_handle' != 'verifier_cred_handle'[1]
 krb5_gss_accept_sec_context() leaks the 'cred_handle' in the success
 case and the failure cases that result in returning from the function
 prior to reaching the end of the function.

 (b) The meaningful 'minor_status' return value is destroyed during the
 cleanup operations.

 The approach taken is to add a new 'exit:' label prior to the end of the
 function through which all function returns after reaching the 'fail:'
 label will goto.  After 'exit:', the 'cred_handle' will be released and
 if there is a krb5_context 'context' to be freed, the error info will be
 saved and krb5_free_context() will be called.

 In the success case, the krb5_context is saved in the gss context and we
 now set 'context' to NULL to prevent it from being freed.

 In order to preserve the minor_status return code, a 'tmp_minor_status'
 variable is added that is used after the 'fail:' label in calls to
 krb5_gss_delete_sec_context() and krb5_gss_release_cred().

 [1] If 'verifier_cred_handle' is non-NULL, then 'cred_handle' is set to
 the value of 'verifier_cred_handle'.

ticket: 5442

git-svn-id: svn://anonsvn.mit.edu/krb5/branches/krb5-1-6@20581 dc483132-0cff-0310-8789-dd5450dbe970
src/lib/gssapi/krb5/accept_sec_context.c