diff options
author | Andreas Steffen <andreas.steffen@strongswan.org> | 2008-04-01 10:26:27 +0000 |
---|---|---|
committer | Andreas Steffen <andreas.steffen@strongswan.org> | 2008-04-01 10:26:27 +0000 |
commit | 946d1ecd59f27871fb82c54d5b5f79ca60bf8eee (patch) | |
tree | fd3e2f87f6c733bdbf860e35a58d8b1aa8ef3c3f /src | |
parent | dd2efc2c03cc09f15c1d46d26cac44171737095d (diff) | |
download | strongswan-946d1ecd59f27871fb82c54d5b5f79ca60bf8eee.tar.bz2 strongswan-946d1ecd59f27871fb82c54d5b5f79ca60bf8eee.tar.xz |
stroke_list groups certificates by issuer
Diffstat (limited to 'src')
-rw-r--r-- | src/charon/plugins/stroke/stroke_list.c | 25 |
1 files changed, 18 insertions, 7 deletions
diff --git a/src/charon/plugins/stroke/stroke_list.c b/src/charon/plugins/stroke/stroke_list.c index 1ec855899..da0a5e9a6 100644 --- a/src/charon/plugins/stroke/stroke_list.c +++ b/src/charon/plugins/stroke/stroke_list.c @@ -284,27 +284,38 @@ static linked_list_t* create_unique_cert_list(certificate_type_t type) charon->credentials, type, KEY_ANY, NULL, FALSE); certificate_t *cert; - + while (enumerator->enumerate(enumerator, (void**)&cert)) { - enumerator_t *list_enum = list->create_enumerator(list); + iterator_t *iterator = list->create_iterator(list, TRUE); + identification_t *issuer = cert->get_issuer(cert); + bool previous_same, same = FALSE, last = TRUE; certificate_t *list_cert; - bool unique = TRUE; - while (list_enum->enumerate(list_enum, (void**)&list_cert)) + while (iterator->iterate(iterator, (void**)&list_cert)) { /* exit if we have a duplicate? */ if (list_cert == cert) { - unique = FALSE; + last = FALSE; + break; + } + /* group certificates with same issuer */ + previous_same = same; + same = list_cert->has_issuer(list_cert, issuer); + if (previous_same && !same) + { + iterator->insert_before(iterator, (void *)cert->get_ref(cert)); + last = FALSE; break; } } - if (unique) + iterator->destroy(iterator); + + if (last) { list->insert_last(list, (void *)cert->get_ref(cert)); } - list_enum->destroy(list_enum); } enumerator->destroy(enumerator); return list; |