mit_krb5_error_code KRB5_CALLCONV krb5_get_init_creds_keytab(mit_krb5_context context, mit_krb5_creds *creds, mit_krb5_principal client, mit_krb5_keytab arg_keytab, mit_krb5_deltat start_time, char *in_tkt_service, mit_krb5_get_init_creds_opt *mopt) { struct comb_principal *p = (struct comb_principal *)client; krb5_get_init_creds_opt *opt = NULL; krb5_error_code ret; krb5_creds hcreds; LOG_ENTRY(); opt = mshim_gic_opt(HC(context), mopt); memset(creds, 0, sizeof(*creds)); memset(&hcreds, 0, sizeof(hcreds)); ret = heim_krb5_get_init_creds_keytab(HC(context), &hcreds, p->heim, (krb5_keytab)arg_keytab, start_time, in_tkt_service, opt); if (opt) heim_krb5_get_init_creds_opt_free(HC(context), opt); if (ret) return ret; mshim_hcred2mcred(HC(context), &hcreds, creds); heim_krb5_free_cred_contents(HC(context), &hcreds); return ret; }
mit_krb5_error_code KRB5_CALLCONV krb5_get_init_creds_password(mit_krb5_context context, mit_krb5_creds *creds, mit_krb5_principal client, char *password, mit_krb5_prompter_fct prompter, void *data, mit_krb5_deltat start_time, char *in_tkt_service, mit_krb5_get_init_creds_opt *mopt) { struct comb_principal *p = (struct comb_principal *)client; krb5_get_init_creds_opt *opt = NULL; krb5_error_code ret; krb5_creds hcreds; krb5_prompter_fct pfct = NULL; LOG_ENTRY(); opt = mshim_gic_opt(HC(context), mopt); memset(creds, 0, sizeof(*creds)); memset(&hcreds, 0, sizeof(hcreds)); if (prompter == krb5_prompter_posix) pfct = heim_krb5_prompter_posix; else if (prompter == NULL) pfct = NULL; else { if (opt) heim_krb5_get_init_creds_opt_free(HC(context), opt); return EINVAL; } ret = heim_krb5_get_init_creds_password(HC(context), &hcreds, p->heim, password, pfct, NULL, start_time, in_tkt_service, opt); if (opt) heim_krb5_get_init_creds_opt_free(HC(context), opt); if (ret) return ret; mshim_hcred2mcred(HC(context), &hcreds, creds); heim_krb5_free_cred_contents(HC(context), &hcreds); return ret; }
KLStatus KLDisposeLoginOptions(KLLoginOptions ioOptions) { LOG_ENTRY(); heim_krb5_get_init_creds_opt_free(milcontext, ioOptions->opt); if (ioOptions->service) free(ioOptions->service); free(ioOptions); return klNoErr; }