stroke_list groups certificates by issuer

This commit is contained in:
Andreas Steffen
2008-04-01 10:26:27 +00:00
parent dd2efc2c03
commit 946d1ecd59
+18 -7
View File
@@ -284,27 +284,38 @@ static linked_list_t* create_unique_cert_list(certificate_type_t type)
charon->credentials, type, KEY_ANY, charon->credentials, type, KEY_ANY,
NULL, FALSE); NULL, FALSE);
certificate_t *cert; certificate_t *cert;
while (enumerator->enumerate(enumerator, (void**)&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; 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? */ /* exit if we have a duplicate? */
if (list_cert == cert) 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; break;
} }
} }
if (unique) iterator->destroy(iterator);
if (last)
{ {
list->insert_last(list, (void *)cert->get_ref(cert)); list->insert_last(list, (void *)cert->get_ref(cert));
} }
list_enum->destroy(list_enum);
} }
enumerator->destroy(enumerator); enumerator->destroy(enumerator);
return list; return list;