static void krb5_start_session (void) { krb5_error_code ret; char *estr; ret = krb5_cc_resolve (context, tkfile, &ccache2); if (ret) { estr = krb5_get_error_string(context); syslog(LOG_WARNING, "resolve cred cache %s: %s", tkfile, estr ? estr : krb5_get_err_text(context, ret)); free(estr); krb5_cc_destroy(context, ccache); return; } ret = krb5_cc_copy_cache (context, ccache, ccache2); if (ret) { estr = krb5_get_error_string(context); syslog(LOG_WARNING, "storing credentials: %s", estr ? estr : krb5_get_err_text(context, ret)); free(estr); krb5_cc_destroy(context, ccache); return ; } krb5_cc_close(context, ccache2); krb5_cc_destroy(context, ccache); return; }
/* * Given a Kerberos error code, return the corresponding error. Prefer the * Kerberos interface if available since it will provide context-specific * error information, whereas the error_message() call will only provide a * fixed message. */ const char * krb5_get_error_message(krb5_context ctx UNUSED, krb5_error_code code UNUSED) { const char *msg = NULL; # if defined(HAVE_KRB5_GET_ERROR_STRING) msg = krb5_get_error_string(ctx); # elif defined(HAVE_KRB5_GET_ERR_TEXT) msg = krb5_get_err_text(ctx, code); # elif defined(HAVE_KRB5_SVC_GET_MSG) krb5_svc_get_msg(code, (char **) &msg); # else msg = error_message(code); # endif if (msg == NULL) return error_unknown; else return msg; }