From: Kevin Wasserman Date: Sun, 6 May 2012 19:23:10 +0000 (-0400) Subject: Implement switch_to for ccapiv3 X-Git-Tag: krb5-1.11-alpha1~432 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=2648a94ea1cf3dec91186dfec59b75de9dac793d;p=thirdparty%2Fkrb5.git Implement switch_to for ccapiv3 krb5_stdccv3_switch_to() calls cc_ccache_set_default(). krb5_stdccv3_resolve() checks for NULL or empty residual and calls cc_context_get_default_ccache_name() in those cases. Signed-off-by: Kevin Wasserman ticket: 7198 (new) tags: pullup --- diff --git a/src/lib/krb5/ccache/ccapi/stdcc.c b/src/lib/krb5/ccache/ccapi/stdcc.c index b646b761b5..d361bdeec3 100644 --- a/src/lib/krb5/ccache/ccapi/stdcc.c +++ b/src/lib/krb5/ccache/ccapi/stdcc.c @@ -95,6 +95,7 @@ krb5_cc_ops krb5_cc_stdcc_ops = { NULL, /* wasdefault */ krb5_stdccv3_lock, krb5_stdccv3_unlock, + krb5_stdccv3_switch_to, #else krb5_stdcc_get_name, krb5_stdcc_resolve, @@ -388,6 +389,7 @@ krb5_stdccv3_resolve (krb5_context context, krb5_ccache *id , const char *residu stdccCacheDataPtr ccapi_data = NULL; krb5_ccache ccache = NULL; char *name = NULL; + cc_string_t defname = NULL; if (id == NULL) { err = KRB5_CC_NOMEM; } @@ -405,6 +407,14 @@ krb5_stdccv3_resolve (krb5_context context, krb5_ccache *id , const char *residu if (!ccache) { err = KRB5_CC_NOMEM; } } + if (!err) { + if ((residual == NULL) || (strlen(residual) == 0)) { + err = cc_context_get_default_ccache_name(gCntrlBlock, &defname); + if (defname) + residual = defname->data; + } + } + if (!err) { name = strdup (residual); if (!name) { err = KRB5_CC_NOMEM; } @@ -434,6 +444,7 @@ krb5_stdccv3_resolve (krb5_context context, krb5_ccache *id , const char *residu if (ccache) { free (ccache); } if (ccapi_data) { free (ccapi_data); } if (name) { free (name); } + if (defname) { cc_string_release(defname); } return cc_err_xlate (err); } @@ -1070,6 +1081,20 @@ krb5_error_code KRB5_CALLCONV krb5_stdccv3_context_unlock return cc_err_xlate(err); } +krb5_error_code KRB5_CALLCONV krb5_stdccv3_switch_to +(krb5_context context, krb5_ccache id) +{ + krb5_error_code retval; + stdccCacheDataPtr ccapi_data = id->data; + int err; + + if ((retval = stdccv3_setup(context, ccapi_data))) + return retval; + + err = cc_ccache_set_default(ccapi_data->NamedCache); + return cc_err_xlate(err); +} + #else /* !USE_CCAPI_V3 */ static krb5_error_code stdcc_setup(krb5_context context, diff --git a/src/lib/krb5/ccache/ccapi/stdcc.h b/src/lib/krb5/ccache/ccapi/stdcc.h index 6550efcb4f..7519891f56 100644 --- a/src/lib/krb5/ccache/ccapi/stdcc.h +++ b/src/lib/krb5/ccache/ccapi/stdcc.h @@ -117,6 +117,8 @@ krb5_error_code KRB5_CALLCONV krb5_stdccv3_context_lock krb5_error_code KRB5_CALLCONV krb5_stdccv3_context_unlock (krb5_context context); +krb5_error_code KRB5_CALLCONV krb5_stdccv3_switch_to +(krb5_context context, krb5_ccache id); #else krb5_error_code KRB5_CALLCONV krb5_stdcc_close