x509: Replace the comma separated string AC group builder with a list based one

This commit is contained in:
Martin Willi
2014-03-31 11:14:58 +02:00
parent a17598bc69
commit 8f9e2dbcd5
4 changed files with 22 additions and 10 deletions
+1 -2
View File
@@ -38,7 +38,7 @@ ENUM(builder_part_names, BUILD_FROM_FILE, BUILD_END,
"BUILD_SERIAL", "BUILD_SERIAL",
"BUILD_DIGEST_ALG", "BUILD_DIGEST_ALG",
"BUILD_ENCRYPTION_ALG", "BUILD_ENCRYPTION_ALG",
"BUILD_IETF_GROUP_ATTR", "BUILD_AC_GROUP_STRINGS",
"BUILD_CA_CERT", "BUILD_CA_CERT",
"BUILD_CERT", "BUILD_CERT",
"BUILD_CRL_DISTRIBUTION_POINTS", "BUILD_CRL_DISTRIBUTION_POINTS",
@@ -72,4 +72,3 @@ ENUM(builder_part_names, BUILD_FROM_FILE, BUILD_END,
"BUILD_THRESHOLD", "BUILD_THRESHOLD",
"BUILD_END", "BUILD_END",
); );
+2 -2
View File
@@ -87,8 +87,8 @@ enum builder_part_t {
BUILD_DIGEST_ALG, BUILD_DIGEST_ALG,
/** encryption algorithm to use, encryption_algorithm_t */ /** encryption algorithm to use, encryption_algorithm_t */
BUILD_ENCRYPTION_ALG, BUILD_ENCRYPTION_ALG,
/** a comma-separated list of ietf group attributes, char* */ /** list of AC group memberships, linked_list_t* with char* */
BUILD_IETF_GROUP_ATTR, BUILD_AC_GROUP_STRINGS,
/** a ca certificate, certificate_t* */ /** a ca certificate, certificate_t* */
BUILD_CA_CERT, BUILD_CA_CERT,
/** a certificate, certificate_t* */ /** a certificate, certificate_t* */
+5 -5
View File
@@ -1065,15 +1065,15 @@ x509_ac_t *x509_ac_load(certificate_type_t type, va_list args)
} }
/** /**
* Parse a comma separated group list into AC group memberships * Add groups from a list into AC group memberships
*/ */
static void add_groups_from_string(private_x509_ac_t *this, char *str) static void add_groups_from_list(private_x509_ac_t *this, linked_list_t *list)
{ {
enumerator_t *enumerator; enumerator_t *enumerator;
group_t *group; group_t *group;
char *name; char *name;
enumerator = enumerator_create_token(str, ",", " "); enumerator = list->create_enumerator(list);
while (enumerator->enumerate(enumerator, &name)) while (enumerator->enumerate(enumerator, &name))
{ {
INIT(group, INIT(group,
@@ -1106,8 +1106,8 @@ x509_ac_t *x509_ac_gen(certificate_type_t type, va_list args)
case BUILD_SERIAL: case BUILD_SERIAL:
ac->serialNumber = chunk_clone(va_arg(args, chunk_t)); ac->serialNumber = chunk_clone(va_arg(args, chunk_t));
continue; continue;
case BUILD_IETF_GROUP_ATTR: case BUILD_AC_GROUP_STRINGS:
add_groups_from_string(ac, va_arg(args, char*)); add_groups_from_list(ac, va_arg(args, linked_list_t*));
continue; continue;
case BUILD_CERT: case BUILD_CERT:
ac->holderCert = va_arg(args, certificate_t*); ac->holderCert = va_arg(args, certificate_t*);
+14 -1
View File
@@ -495,6 +495,18 @@ int main(int argc, char **argv)
if (userCert != NULL && signerCert != NULL && signerKey != NULL && if (userCert != NULL && signerCert != NULL && signerKey != NULL &&
outfile != NULL) outfile != NULL)
{ {
linked_list_t *group_list;
enumerator_t *enumerator;
char *group;
group_list = linked_list_create();
enumerator = enumerator_create_token(groups, ",", " ");
while (enumerator->enumerate(enumerator, &group))
{
group_list->insert_last(group_list, strdup(group));
}
enumerator->destroy(enumerator);
/* read the serial number and increment it by one */ /* read the serial number and increment it by one */
serial = read_serial(); serial = read_serial();
@@ -504,10 +516,11 @@ int main(int argc, char **argv)
BUILD_NOT_BEFORE_TIME, notBefore, BUILD_NOT_BEFORE_TIME, notBefore,
BUILD_NOT_AFTER_TIME, notAfter, BUILD_NOT_AFTER_TIME, notAfter,
BUILD_SERIAL, serial, BUILD_SERIAL, serial,
BUILD_IETF_GROUP_ATTR, groups, BUILD_AC_GROUP_STRINGS, group_list,
BUILD_SIGNING_CERT, signerCert, BUILD_SIGNING_CERT, signerCert,
BUILD_SIGNING_KEY, signerKey, BUILD_SIGNING_KEY, signerKey,
BUILD_END); BUILD_END);
group_list->destroy_function(group_list, free);
if (!attr_cert) if (!attr_cert)
{ {
goto end; goto end;