Use the group constraint in a more generic fashion, not only for attribute certificates
This commit is contained in:
@@ -32,7 +32,7 @@ ENUM(auth_rule_names, AUTH_RULE_IDENTITY, AUTH_HELPER_SUBJECT_HASH_URL,
|
|||||||
"RULE_SUBJECT_CERT",
|
"RULE_SUBJECT_CERT",
|
||||||
"RULE_CRL_VALIDATION",
|
"RULE_CRL_VALIDATION",
|
||||||
"RULE_OCSP_VALIDATION",
|
"RULE_OCSP_VALIDATION",
|
||||||
"RULE_AC_GROUP",
|
"RULE_GROUP",
|
||||||
"HELPER_IM_CERT",
|
"HELPER_IM_CERT",
|
||||||
"HELPER_SUBJECT_CERT",
|
"HELPER_SUBJECT_CERT",
|
||||||
"HELPER_IM_HASH_URL",
|
"HELPER_IM_HASH_URL",
|
||||||
@@ -128,7 +128,7 @@ static void destroy_entry_value(entry_t *entry)
|
|||||||
{
|
{
|
||||||
case AUTH_RULE_IDENTITY:
|
case AUTH_RULE_IDENTITY:
|
||||||
case AUTH_RULE_EAP_IDENTITY:
|
case AUTH_RULE_EAP_IDENTITY:
|
||||||
case AUTH_RULE_AC_GROUP:
|
case AUTH_RULE_GROUP:
|
||||||
{
|
{
|
||||||
identification_t *id = (identification_t*)entry->value;
|
identification_t *id = (identification_t*)entry->value;
|
||||||
id->destroy(id);
|
id->destroy(id);
|
||||||
@@ -185,7 +185,7 @@ static void replace(auth_cfg_t *this, entry_enumerator_t *enumerator,
|
|||||||
break;
|
break;
|
||||||
case AUTH_RULE_IDENTITY:
|
case AUTH_RULE_IDENTITY:
|
||||||
case AUTH_RULE_EAP_IDENTITY:
|
case AUTH_RULE_EAP_IDENTITY:
|
||||||
case AUTH_RULE_AC_GROUP:
|
case AUTH_RULE_GROUP:
|
||||||
case AUTH_RULE_CA_CERT:
|
case AUTH_RULE_CA_CERT:
|
||||||
case AUTH_RULE_IM_CERT:
|
case AUTH_RULE_IM_CERT:
|
||||||
case AUTH_RULE_SUBJECT_CERT:
|
case AUTH_RULE_SUBJECT_CERT:
|
||||||
@@ -250,7 +250,7 @@ static void* get(private_auth_cfg_t *this, auth_rule_t type)
|
|||||||
return (void*)VALIDATION_FAILED;
|
return (void*)VALIDATION_FAILED;
|
||||||
case AUTH_RULE_IDENTITY:
|
case AUTH_RULE_IDENTITY:
|
||||||
case AUTH_RULE_EAP_IDENTITY:
|
case AUTH_RULE_EAP_IDENTITY:
|
||||||
case AUTH_RULE_AC_GROUP:
|
case AUTH_RULE_GROUP:
|
||||||
case AUTH_RULE_CA_CERT:
|
case AUTH_RULE_CA_CERT:
|
||||||
case AUTH_RULE_IM_CERT:
|
case AUTH_RULE_IM_CERT:
|
||||||
case AUTH_RULE_SUBJECT_CERT:
|
case AUTH_RULE_SUBJECT_CERT:
|
||||||
@@ -285,7 +285,7 @@ static void add(private_auth_cfg_t *this, auth_rule_t type, ...)
|
|||||||
break;
|
break;
|
||||||
case AUTH_RULE_IDENTITY:
|
case AUTH_RULE_IDENTITY:
|
||||||
case AUTH_RULE_EAP_IDENTITY:
|
case AUTH_RULE_EAP_IDENTITY:
|
||||||
case AUTH_RULE_AC_GROUP:
|
case AUTH_RULE_GROUP:
|
||||||
case AUTH_RULE_CA_CERT:
|
case AUTH_RULE_CA_CERT:
|
||||||
case AUTH_RULE_IM_CERT:
|
case AUTH_RULE_IM_CERT:
|
||||||
case AUTH_RULE_SUBJECT_CERT:
|
case AUTH_RULE_SUBJECT_CERT:
|
||||||
@@ -459,13 +459,20 @@ static bool complies(private_auth_cfg_t *this, auth_cfg_t *constraints,
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case AUTH_RULE_AC_GROUP:
|
case AUTH_RULE_GROUP:
|
||||||
{
|
{
|
||||||
success = FALSE;
|
identification_t *id1, *id2;
|
||||||
if (log_error)
|
|
||||||
|
id1 = (identification_t*)value;
|
||||||
|
id2 = get(this, t1);
|
||||||
|
if (!id2 || !id2->matches(id2, id1))
|
||||||
{
|
{
|
||||||
DBG1(DBG_CFG, "constraint check %N not implemented!",
|
success = FALSE;
|
||||||
auth_rule_names, t1);
|
if (log_error)
|
||||||
|
{
|
||||||
|
DBG1(DBG_CFG, "constraint check failed: membership to "
|
||||||
|
"group '%Y' required", id1);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -527,7 +534,7 @@ static void merge(private_auth_cfg_t *this, private_auth_cfg_t *other, bool copy
|
|||||||
}
|
}
|
||||||
case AUTH_RULE_IDENTITY:
|
case AUTH_RULE_IDENTITY:
|
||||||
case AUTH_RULE_EAP_IDENTITY:
|
case AUTH_RULE_EAP_IDENTITY:
|
||||||
case AUTH_RULE_AC_GROUP:
|
case AUTH_RULE_GROUP:
|
||||||
{
|
{
|
||||||
identification_t *id = (identification_t*)value;
|
identification_t *id = (identification_t*)value;
|
||||||
|
|
||||||
@@ -614,7 +621,7 @@ static bool equals(private_auth_cfg_t *this, private_auth_cfg_t *other)
|
|||||||
}
|
}
|
||||||
case AUTH_RULE_IDENTITY:
|
case AUTH_RULE_IDENTITY:
|
||||||
case AUTH_RULE_EAP_IDENTITY:
|
case AUTH_RULE_EAP_IDENTITY:
|
||||||
case AUTH_RULE_AC_GROUP:
|
case AUTH_RULE_GROUP:
|
||||||
{
|
{
|
||||||
identification_t *id1, *id2;
|
identification_t *id1, *id2;
|
||||||
|
|
||||||
@@ -698,7 +705,7 @@ static auth_cfg_t* clone_(private_auth_cfg_t *this)
|
|||||||
{
|
{
|
||||||
case AUTH_RULE_IDENTITY:
|
case AUTH_RULE_IDENTITY:
|
||||||
case AUTH_RULE_EAP_IDENTITY:
|
case AUTH_RULE_EAP_IDENTITY:
|
||||||
case AUTH_RULE_AC_GROUP:
|
case AUTH_RULE_GROUP:
|
||||||
{
|
{
|
||||||
identification_t *id = (identification_t*)entry->value;
|
identification_t *id = (identification_t*)entry->value;
|
||||||
clone->add(clone, entry->type, id->clone(id));
|
clone->add(clone, entry->type, id->clone(id));
|
||||||
|
|||||||
@@ -62,8 +62,8 @@ enum auth_rule_t {
|
|||||||
AUTH_RULE_CRL_VALIDATION,
|
AUTH_RULE_CRL_VALIDATION,
|
||||||
/** result of a OCSP validation, cert_validation_t */
|
/** result of a OCSP validation, cert_validation_t */
|
||||||
AUTH_RULE_OCSP_VALIDATION,
|
AUTH_RULE_OCSP_VALIDATION,
|
||||||
/** subject is in attribute certificate group, identification_t* */
|
/** subject is member of a group, identification_t* */
|
||||||
AUTH_RULE_AC_GROUP,
|
AUTH_RULE_GROUP,
|
||||||
|
|
||||||
/** intermediate certificate, certificate_t* */
|
/** intermediate certificate, certificate_t* */
|
||||||
AUTH_HELPER_IM_CERT,
|
AUTH_HELPER_IM_CERT,
|
||||||
|
|||||||
@@ -413,7 +413,7 @@ static auth_cfg_t *build_auth_cfg(private_stroke_config_t *this,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* AC groups */
|
/* groups */
|
||||||
if (end->groups)
|
if (end->groups)
|
||||||
{
|
{
|
||||||
enumerator_t *enumerator;
|
enumerator_t *enumerator;
|
||||||
@@ -422,9 +422,8 @@ static auth_cfg_t *build_auth_cfg(private_stroke_config_t *this,
|
|||||||
enumerator = enumerator_create_token(end->groups, ",", " ");
|
enumerator = enumerator_create_token(end->groups, ",", " ");
|
||||||
while (enumerator->enumerate(enumerator, &group))
|
while (enumerator->enumerate(enumerator, &group))
|
||||||
{
|
{
|
||||||
identity = identification_create_from_encoding(ID_IETF_ATTR_STRING,
|
cfg->add(cfg, AUTH_RULE_GROUP,
|
||||||
chunk_create(group, strlen(group)));
|
identification_create_from_string(group));
|
||||||
cfg->add(cfg, AUTH_RULE_AC_GROUP, identity);
|
|
||||||
}
|
}
|
||||||
enumerator->destroy(enumerator);
|
enumerator->destroy(enumerator);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -373,7 +373,7 @@ static void log_auth_cfgs(FILE *out, peer_cfg_t *peer_cfg, bool local)
|
|||||||
rules = auth->create_enumerator(auth);
|
rules = auth->create_enumerator(auth);
|
||||||
while (rules->enumerate(rules, &rule, &id))
|
while (rules->enumerate(rules, &rule, &id))
|
||||||
{
|
{
|
||||||
if (rule == AUTH_RULE_AC_GROUP)
|
if (rule == AUTH_RULE_GROUP)
|
||||||
{
|
{
|
||||||
fprintf(out, "%12s: group: %Y\n", name, id);
|
fprintf(out, "%12s: group: %Y\n", name, id);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -50,8 +50,7 @@ ENUM_BEGIN(id_type_names, ID_ANY, ID_KEY_ID,
|
|||||||
"ID_DER_ASN1_GN",
|
"ID_DER_ASN1_GN",
|
||||||
"ID_KEY_ID");
|
"ID_KEY_ID");
|
||||||
ENUM_NEXT(id_type_names, ID_DER_ASN1_GN_URI, ID_MYID, ID_KEY_ID,
|
ENUM_NEXT(id_type_names, ID_DER_ASN1_GN_URI, ID_MYID, ID_KEY_ID,
|
||||||
"ID_DER_ASN1_GN_URI"
|
"ID_DER_ASN1_GN_URI",
|
||||||
"ID_IETF_ATTR_STRING"
|
|
||||||
"ID_MYID");
|
"ID_MYID");
|
||||||
ENUM_END(id_type_names, ID_MYID);
|
ENUM_END(id_type_names, ID_MYID);
|
||||||
|
|
||||||
@@ -761,7 +760,6 @@ int identification_printf_hook(char *dst, size_t len, printf_hook_spec_t *spec,
|
|||||||
case ID_FQDN:
|
case ID_FQDN:
|
||||||
case ID_RFC822_ADDR:
|
case ID_RFC822_ADDR:
|
||||||
case ID_DER_ASN1_GN_URI:
|
case ID_DER_ASN1_GN_URI:
|
||||||
case ID_IETF_ATTR_STRING:
|
|
||||||
chunk_printable(this->encoded, &proper, '?');
|
chunk_printable(this->encoded, &proper, '?');
|
||||||
snprintf(buf, sizeof(buf), "%.*s", proper.len, proper.ptr);
|
snprintf(buf, sizeof(buf), "%.*s", proper.len, proper.ptr);
|
||||||
chunk_free(&proper);
|
chunk_free(&proper);
|
||||||
|
|||||||
@@ -130,11 +130,6 @@ enum id_type_t {
|
|||||||
*/
|
*/
|
||||||
ID_DER_ASN1_GN_URI = 201,
|
ID_DER_ASN1_GN_URI = 201,
|
||||||
|
|
||||||
/**
|
|
||||||
* IETF Attribute Syntax String (RFC 3281)
|
|
||||||
*/
|
|
||||||
ID_IETF_ATTR_STRING = 202,
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Private ID used by the pluto daemon for opportunistic encryption
|
* Private ID used by the pluto daemon for opportunistic encryption
|
||||||
*/
|
*/
|
||||||
|
|||||||
Reference in New Issue
Block a user