FreeBSD/crypto/openssh/gss-serv-krb5.c
/* This writes out any forwarded credentials from the structure populated
 * during userauth. Called after we have setuid to the user */
This writes out any forwarded credentials from the structure populated
during userauth. Called after we have setuid to the user
This writes out any forwarded credentials from the structure populated during userauth . Called after we have setuid to the user
static void
ssh_gssapi_krb5_storecreds(ssh_gssapi_client *client)
{
	krb5_ccache ccache;
	krb5_error_code problem;
	krb5_principal princ;
	OM_uint32 maj_status, min_status;
	int len;
	const char *errmsg;
	if (client->creds == NULL) {
		debug("No credentials stored");
		return;
	}
	if (ssh_gssapi_krb5_init() == 0)
		return;
#ifdef HEIMDAL
# ifdef HAVE_KRB5_CC_NEW_UNIQUE
	if ((problem = krb5_cc_new_unique(krb_context, krb5_fcc_ops.prefix,
	    NULL, &ccache)) != 0) {
		errmsg = krb5_get_error_message(krb_context, problem);
		logit("krb5_cc_new_unique(): %.100s", errmsg);
# else
	if ((problem = krb5_cc_gen_new(krb_context, &krb5_fcc_ops, &ccache))) {
	    logit("krb5_cc_gen_new(): %.100s",
		krb5_get_err_text(krb_context, problem));
# endif
		krb5_free_error_message(krb_context, errmsg);
		return;
	}
#else
	if ((problem = ssh_krb5_cc_gen(krb_context, &ccache))) {
		errmsg = krb5_get_error_message(krb_context, problem);
		logit("ssh_krb5_cc_gen(): %.100s", errmsg);
		krb5_free_error_message(krb_context, errmsg);
		return;
	}
#endif	
	if ((problem = krb5_parse_name(krb_context,
	    client->exportedname.value, &princ))) {
		errmsg = krb5_get_error_message(krb_context, problem);
		logit("krb5_parse_name(): %.100s", errmsg);
		krb5_free_error_message(krb_context, errmsg);
		return;
	}
	if ((problem = krb5_cc_initialize(krb_context, ccache, princ))) {
		errmsg = krb5_get_error_message(krb_context, problem);
		logit("krb5_cc_initialize(): %.100s", errmsg);
		krb5_free_error_message(krb_context, errmsg);
		krb5_free_principal(krb_context, princ);
		krb5_cc_destroy(krb_context, ccache);
		return;
	}
	krb5_free_principal(krb_context, princ);
	if ((maj_status = gss_krb5_copy_ccache(&min_status,
	    client->creds, ccache))) {
		logit("gss_krb5_copy_ccache() failed");
		krb5_cc_destroy(krb_context, ccache);
		return;
	}
	client->store.filename = xstrdup(krb5_cc_get_name(krb_context, ccache));
	client->store.envvar = "KRB5CCNAME";
	len = strlen(client->store.filename) + 6;
	client->store.envval = xmalloc(len);
	snprintf(client->store.envval, len, "FILE:%s", client->store.filename);
#ifdef USE_PAM
	if (options.use_pam)
		do_pam_putenv(client->store.envvar, client->store.envval);
#endif
	krb5_cc_close(krb_context, ccache);
	return;
}
static void ssh_gssapi_krb5_storecreds ( ssh_gssapi_client * client ) { krb5_ccache ccache ; krb5_error_code problem ; krb5_principal princ ; OM_uint32 maj_status , min_status ; int len ; const char * errmsg ; if ( client -> creds == NULL ) { debug ( " " ) ; return ; } if ( ssh_gssapi_krb5_init ( ) == 0 ) return ; #ifdef HEIMDAL # ifdef HAVE_KRB5_CC_NEW_UNIQUE if ( ( problem = krb5_cc_new_unique ( krb_context , krb5_fcc_ops . prefix , NULL , & ccache ) ) != 0 ) { errmsg = krb5_get_error_message ( krb_context , problem ) ; logit ( " " , errmsg ) ; # else 
	if ((problem = krb5_cc_gen_new(krb_context, &krb5_fcc_ops, &ccache))) { logit ( " " , krb5_get_err_text ( krb_context , problem ) ) ; # endif 
		krb5_free_error_message(krb_context, errmsg); return ; } #else if ( ( problem = ssh_krb5_cc_gen ( krb_context , & ccache ) ) ) { errmsg = krb5_get_error_message ( krb_context , problem ) ; logit ( " " , errmsg ) ; krb5_free_error_message ( krb_context , errmsg ) ; return ; } #endif if ( ( problem = krb5_parse_name ( krb_context , client -> exportedname . value , & princ ) ) ) { errmsg = krb5_get_error_message ( krb_context , problem ) ; logit ( " " , errmsg ) ; krb5_free_error_message ( krb_context , errmsg ) ; return ; } if ( ( problem = krb5_cc_initialize ( krb_context , ccache , princ ) ) ) { errmsg = krb5_get_error_message ( krb_context , problem ) ; logit ( " " , errmsg ) ; krb5_free_error_message ( krb_context , errmsg ) ; krb5_free_principal ( krb_context , princ ) ; krb5_cc_destroy ( krb_context , ccache ) ; return ; } krb5_free_principal ( krb_context , princ ) ; if ( ( maj_status = gss_krb5_copy_ccache ( & min_status , client -> creds , ccache ) ) ) { logit ( " " ) ; krb5_cc_destroy ( krb_context , ccache ) ; return ; } client -> store . filename = xstrdup ( krb5_cc_get_name ( krb_context , ccache ) ) ; client -> store . envvar = " " ; len = strlen ( client -> store . filename ) + 6 ; client -> store . envval = xmalloc ( len ) ; snprintf ( client -> store . envval , len , " " , client -> store . filename ) ; #ifdef USE_PAM if ( options . use_pam ) do_pam_putenv ( client -> store . envvar , client -> store . envval ) ; #endif krb5_cc_close ( krb_context , ccache ) ; return ; }
This writes out any forwarded credentials from the structure populated
 during userauth.
This writes out any forwarded credentials from the structure populated during userauth .
/* #ifdef HEIMDAL */