kx509: Improve start_realm logic

This commit is contained in:
Nicolas Williams
2021-03-31 21:14:58 -05:00
parent 6b8487f44b
commit c2bf9b9e71

View File

@@ -721,7 +721,7 @@ mk_kx509_req_body(krb5_context context,
static krb5_error_code static krb5_error_code
get_start_realm(krb5_context context, get_start_realm(krb5_context context,
krb5_ccache cc, krb5_ccache cc,
krb5_principal princ, krb5_const_principal princ,
char **out) char **out)
{ {
krb5_error_code ret; krb5_error_code ret;
@@ -731,8 +731,16 @@ get_start_realm(krb5_context context,
if (ret == 0) { if (ret == 0) {
*out = strndup(d.data, d.length); *out = strndup(d.data, d.length);
krb5_data_free(&d); krb5_data_free(&d);
} else { } else if (princ) {
*out = strdup(krb5_principal_get_realm(context, princ)); *out = strdup(krb5_principal_get_realm(context, princ));
} else {
krb5_principal ccprinc = NULL;
ret = krb5_cc_get_principal(context, cc, &ccprinc);
if (ret)
return ret;
*out = strdup(krb5_principal_get_realm(context, ccprinc));
krb5_free_principal(context, ccprinc);
} }
return (*out) ? 0 : krb5_enomem(context); return (*out) ? 0 : krb5_enomem(context);
} }
@@ -1181,20 +1189,11 @@ krb5_kx509_ext(krb5_context context,
incc = def_cc; incc = def_cc;
} }
if (kx509_ctx->realm == NULL) { if (kx509_ctx->realm == NULL &&
krb5_data data; (ret = get_start_realm(context, incc, NULL, &kx509_ctx->realm))) {
if (def_cc)
ret = krb5_cc_get_config(context, incc, NULL, "start_realm", &data); krb5_cc_close(context, def_cc);
if (ret == 0) { return ret;
if ((kx509_ctx->realm = strndup(data.data, data.length)) == NULL)
ret = krb5_enomem(context);
krb5_data_free(&data);
}
if (ret) {
if (def_cc)
krb5_cc_close(context, def_cc);
return ret;
}
} }
if (kx509_ctx->priv_key || kx509_ctx->given_csr.data) { if (kx509_ctx->priv_key || kx509_ctx->given_csr.data) {