summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/lib/certmap/sss_certmap_krb5_match.c21
-rw-r--r--src/tests/cmocka/test_certmap.c17
2 files changed, 29 insertions, 9 deletions
diff --git a/src/lib/certmap/sss_certmap_krb5_match.c b/src/lib/certmap/sss_certmap_krb5_match.c
index 0cd339387..125e925d9 100644
--- a/src/lib/certmap/sss_certmap_krb5_match.c
+++ b/src/lib/certmap/sss_certmap_krb5_match.c
@@ -180,19 +180,17 @@ static int parse_krb5_get_eku_value(TALLOC_CTX *mem_ctx,
goto done;
}
+ comp->eku_oid_list = talloc_zero_array(comp, const char *,
+ eku_list_size + 1);
+ if (comp->eku_oid_list == NULL) {
+ ret = ENOMEM;
+ goto done;
+ }
+
for (c = 0; eku_list[c] != NULL; c++) {
for (k = 0; ext_key_usage[k].name != NULL; k++) {
CM_DEBUG(ctx, "[%s][%s].", eku_list[c], ext_key_usage[k].name);
if (strcasecmp(eku_list[c], ext_key_usage[k].name) == 0) {
- if (comp->eku_oid_list == NULL) {
- comp->eku_oid_list = talloc_zero_array(comp, const char *,
- eku_list_size + 1);
- if (comp->eku_oid_list == NULL) {
- ret = ENOMEM;
- goto done;
- }
- }
-
comp->eku_oid_list[e] = talloc_strdup(comp->eku_oid_list,
ext_key_usage[k].oid);
if (comp->eku_oid_list[e] == NULL) {
@@ -226,6 +224,11 @@ CM_DEBUG(ctx, "[%s][%s].", eku_list[c], ext_key_usage[k].name);
}
}
+ if (e == 0) {
+ talloc_free(comp->eku_oid_list);
+ comp->eku_oid_list = NULL;
+ }
+
ret = 0;
done:
diff --git a/src/tests/cmocka/test_certmap.c b/src/tests/cmocka/test_certmap.c
index f1e73875b..6ab310326 100644
--- a/src/tests/cmocka/test_certmap.c
+++ b/src/tests/cmocka/test_certmap.c
@@ -449,6 +449,23 @@ static void test_sss_certmap_add_matching_rule(void **state)
assert_null(
ctx->prio_list->rule_list->parsed_match_rule->eku->eku_oid_list[3]);
+ ret = sss_certmap_add_rule(ctx, 96,
+ "KRB5:<EKU>1.2.3",
+ NULL, NULL);
+ assert_int_equal(ret, 0);
+ assert_non_null(ctx->prio_list);
+ assert_non_null(ctx->prio_list->rule_list);
+ assert_non_null(ctx->prio_list->rule_list->parsed_match_rule);
+ assert_int_equal(ctx->prio_list->rule_list->parsed_match_rule->r,
+ relation_and);
+ assert_non_null(ctx->prio_list->rule_list->parsed_match_rule->eku);
+ assert_true(string_in_list("1.2.3",
+ discard_const(
+ ctx->prio_list->rule_list->parsed_match_rule->eku->eku_oid_list),
+ true));
+ assert_null(
+ ctx->prio_list->rule_list->parsed_match_rule->eku->eku_oid_list[1]);
+
/* SAN tests */
ret = sss_certmap_add_rule(ctx, 89, "KRB5:<SAN>abc", NULL, NULL);
assert_int_equal(ret, 0);