XAUTH additions for certificates.

This commit is contained in:
Clavister OpenSource
2012-03-20 17:31:12 +01:00
parent a874a1f50b
commit d82a68642d
+17 -6
View File
@@ -127,7 +127,7 @@ static auth_cfg_t *get_auth_cfg(private_xauth_request_t *this, bool local)
/** /**
* build INTERNAL_IPV4/6_ADDRESS attribute from virtual ip * build INTERNAL_IPV4/6_ADDRESS attribute from virtual ip
*/ */
static configuration_attribute_t *build_vip(host_t *vip) static configuration_attribute_t *build_vip(payload_type_t ca_type, host_t *vip)
{ {
configuration_attribute_type_t type; configuration_attribute_type_t type;
chunk_t chunk, prefix; chunk_t chunk, prefix;
@@ -159,7 +159,7 @@ static configuration_attribute_t *build_vip(host_t *vip)
chunk = chunk_cata("cc", chunk, prefix); chunk = chunk_cata("cc", chunk, prefix);
} }
} }
return configuration_attribute_create_chunk(CONFIGURATION_ATTRIBUTE, return configuration_attribute_create_chunk(ca_type,
type, chunk); type, chunk);
} }
@@ -431,7 +431,7 @@ METHOD(task_t, build_i, status_t,
if (vip) if (vip)
{ {
cp = cp_payload_create_type(cp_type, CFG_REQUEST); cp = cp_payload_create_type(cp_type, CFG_REQUEST);
cp->add_attribute(cp, build_vip(vip)); cp->add_attribute(cp, build_vip(ca_type, vip));
} }
enumerator = hydra->attributes->create_initiator_enumerator(hydra->attributes, enumerator = hydra->attributes->create_initiator_enumerator(hydra->attributes,
@@ -489,16 +489,25 @@ METHOD(task_t, process_r, status_t,
{ {
this->auth_cfg = get_auth_cfg(this, TRUE); this->auth_cfg = get_auth_cfg(this, TRUE);
} }
switch((uintptr_t)this->auth_cfg->get(this->auth_cfg, AUTH_RULE_AUTH_CLASS)) switch((uintptr_t)this->auth_cfg->get(this->auth_cfg, AUTH_RULE_AUTH_CLASS))
{ {
case AUTH_CLASS_XAUTH_PSK: case AUTH_CLASS_XAUTH_PSK:
case AUTH_CLASS_XAUTH_PUBKEY: case AUTH_CLASS_XAUTH_PUBKEY:
this->state = TASK_XAUTH_INIT; if (this->ike_sa->get_state(this->ike_sa) == IKE_ESTABLISHED)
{
this->state = TASK_XAUTH_COMPLETE;
}
else
{
this->state = TASK_XAUTH_INIT;
}
break; break;
default: default:
/* We aren't XAuth, so do we should expect ConfigMode stuff */ /* We aren't XAuth, so do we should expect ConfigMode stuff */
this->state = TASK_XAUTH_COMPLETE; this->state = TASK_XAUTH_COMPLETE;
} }
if((this->xauth_authenticator == NULL) && (this->state == TASK_XAUTH_INIT)) if((this->xauth_authenticator == NULL) && (this->state == TASK_XAUTH_INIT))
{ {
this->xauth_authenticator = (authenticator_t *)xauth_authenticator_create_builder(this->ike_sa); this->xauth_authenticator = (authenticator_t *)xauth_authenticator_create_builder(this->ike_sa);
@@ -556,6 +565,7 @@ METHOD(task_t, build_r, status_t,
case AUTH_CLASS_XAUTH_PUBKEY: case AUTH_CLASS_XAUTH_PUBKEY:
break; break;
default: default:
this->state = TASK_XAUTH_COMPLETE; this->state = TASK_XAUTH_COMPLETE;
return SUCCESS; return SUCCESS;
} }
@@ -600,7 +610,7 @@ METHOD(task_t, build_r, status_t,
this->ike_sa->set_virtual_ip(this->ike_sa, FALSE, vip); this->ike_sa->set_virtual_ip(this->ike_sa, FALSE, vip);
cp = cp_payload_create_type(cp_type, CFG_REPLY); cp = cp_payload_create_type(cp_type, CFG_REPLY);
cp->add_attribute(cp, build_vip(vip)); cp->add_attribute(cp, build_vip(ca_type, vip));
} }
/* query registered providers for additional attributes to include */ /* query registered providers for additional attributes to include */
@@ -640,6 +650,7 @@ METHOD(task_t, process_i, status_t,
private_xauth_request_t *this, message_t *message) private_xauth_request_t *this, message_t *message)
{ {
status_t status; status_t status;
if (((this->ike_sa->get_version(this->ike_sa) == IKEV2) && if (((this->ike_sa->get_version(this->ike_sa) == IKEV2) &&
(this->ike_sa->get_state(this->ike_sa) == IKE_ESTABLISHED)) || (this->ike_sa->get_state(this->ike_sa) == IKE_ESTABLISHED)) ||
(this->ike_sa->get_version(this->ike_sa) == IKEV1)) (this->ike_sa->get_version(this->ike_sa) == IKEV1))
@@ -694,7 +705,7 @@ METHOD(task_t, destroy, void,
{ {
DESTROY_IF(this->virtual_ip); DESTROY_IF(this->virtual_ip);
this->requested->destroy_function(this->requested, free); this->requested->destroy_function(this->requested, free);
this->xauth_authenticator->destroy(this->xauth_authenticator); DESTROY_IF(this->xauth_authenticator);
free(this); free(this);
} }