Skip Menu |
 

Subject: GSSAPI should reset client principal in context when resetting the cache name
Download (untitled) / with headers
text/plain 1.7KiB
The internal krb5 context is as follows:

typedef struct _krb5_os_context {
krb5_magic magic;
krb5_int32 time_offset;
krb5_int32 usec_offset;
krb5_int32 os_flags;
char * default_ccname;
krb5_principal default_ccprincipal;
} *krb5_os_context;

When resetting default_ccname in gss_init_sec_context() to pick up the new cache name, we
need to also reset default_ccprincipal. Currently GSS is calling krb5_cc_set_default_name()
to reset default_ccname, and in most cases this also resets default_ccprincipal. However, it
doesn't when the following happens:

1) user has tickets in a cache with the default cache name
2) user calls gss_init_sec_context() (caching the cache name and principal)
3) user destroys the tickets
4) user calls gss_init_sec_context() again

In this case, krb5_cc_set_default_name() will not reset default_ccprincipal on the second call
to GSS because the cache name is still be the same. Here is the check from
krb5_cc_set_default_name() which causes it to fail to reset default_ccprincipal:

if (!os_ctx->default_ccname || (strcmp(os_ctx->default_ccname, new_name) != 0)) {
/* the ccache changed... forget the old principal */
if (os_ctx->default_ccprincipal)
krb5_free_principal (context, os_ctx->default_ccprincipal);
os_ctx->default_ccprincipal = 0; /* we don't care until we use it */
}

As you can see, the strcmp check will return 0 because default_ccname and new_name will
both be the default cache name. However this cache does not in fact have the principal
default_ccprincipal stored in it because it is now empty.

I suspect that since krb5_cc_set_default_name() is called rather infrequently that the outer if
statement should just be removed. It seems like an unnecessary optimization.
After discussing with the team we have decided to solve the problem by removing the
default_ccprincipal field from the krb5_context and having KLL and Leash read the ccache to
pull the principal (if any) out. Keeping two pieces of information in sync when one can be
derived from the other is more likely to cause problems than it is to solve anything.
Default principal tracking should also be removed from v4 code.
From: lxs@mit.edu
Subject: CVS Commit
Remove use of client principal from krb5_context (default_ccprincipal) and default principal from v4 CCAPI glue code.


To generate a diff of this commit:



cvs diff -r1.6 -r1.7 krb5/src/lib/krb4/CCache-glue.c
From: lxs@mit.edu
Subject: CVS Commit
Remove use of client principal from krb5_context (default_ccprincipal) and default principal from v4 CCAPI glue code.


To generate a diff of this commit:



cvs diff -r5.25 -r5.26 krb5/src/lib/krb5/ccache/ccdefault.c
From: lxs@mit.edu
Subject: CVS Commit
Remove use of client principal from krb5_context (default_ccprincipal) and default principal from v4 CCAPI glue code.


To generate a diff of this commit:



cvs diff -r5.44 -r5.45 krb5/src/lib/krb5/os/ccdefname.c
From: lxs@mit.edu
Subject: CVS Commit
Remove use of client principal from krb5_context (default_ccprincipal) and default principal from v4 CCAPI glue code.


To generate a diff of this commit:



cvs diff -r5.392 -r5.393 krb5/src/lib/krb5/os/ChangeLog
From: lxs@mit.edu
Subject: CVS Commit
Remove use of client principal from krb5_context (default_ccprincipal) and default principal from v4 CCAPI glue code.


To generate a diff of this commit:



cvs diff -r5.58 -r5.59 krb5/src/lib/krb5/os/init_os_ctx.c
From: lxs@mit.edu
Subject: CVS Commit
Remove use of client principal from krb5_context (default_ccprincipal) and default principal from v4 CCAPI glue code.


To generate a diff of this commit:



cvs diff -r5.131 -r5.132 krb5/src/lib/krb5/ccache/ChangeLog
From: lxs@mit.edu
Subject: CVS Commit
Remove use of client principal from krb5_context (default_ccprincipal) and default principal from v4 CCAPI glue code.


To generate a diff of this commit:



cvs diff -r1.202 -r1.203 krb5/src/lib/krb4/ChangeLog
From: lxs@mit.edu
Subject: CVS Commit
Remove use of client principal from krb5_context (default_ccprincipal) and default principal from v4 CCAPI glue code.


To generate a diff of this commit:



cvs diff -r1.446 -r1.447 krb5/src/include/ChangeLog
From: lxs@mit.edu
Subject: CVS Commit
Remove use of client principal from krb5_context (default_ccprincipal) and default principal from v4 CCAPI glue code.


To generate a diff of this commit:



cvs diff -r1.165 -r1.166 krb5/src/include/k5-int.h
From: tlyu@mit.edu
Subject: CVS Commit
pullup from trunk


To generate a diff of this commit:



cvs diff -r1.348.2.30 -r1.348.2.31 krb5/src/include/ChangeLog
cvs diff -r1.135.2.16 -r1.135.2.17 krb5/src/include/k5-int.h
cvs diff -r1.6 -r1.6.2.1 krb5/src/lib/krb4/CCache-glue.c
cvs diff -r1.174.2.16 -r1.174.2.17 krb5/src/lib/krb4/ChangeLog
cvs diff -r5.82.2.23 -r5.82.2.24 krb5/src/lib/krb5/ccache/ChangeLog
cvs diff -r5.24.2.1 -r5.24.2.2 krb5/src/lib/krb5/ccache/ccdefault.c
cvs diff -r5.343.2.19 -r5.343.2.20 krb5/src/lib/krb5/os/ChangeLog
cvs diff -r5.44 -r5.44.2.1 krb5/src/lib/krb5/os/ccdefname.c
cvs diff -r5.55.2.2 -r5.55.2.3 krb5/src/lib/krb5/os/init_os_ctx.c