attribute-handler: Pass full IKE_SA to handler backends
This commit is contained in:
@@ -128,7 +128,7 @@ static bool set_dns_server(private_android_dns_handler_t *this, int index,
|
||||
}
|
||||
|
||||
METHOD(attribute_handler_t, handle, bool,
|
||||
private_android_dns_handler_t *this, identification_t *id,
|
||||
private_android_dns_handler_t *this, ike_sa_t *ike_sa,
|
||||
configuration_attribute_type_t type, chunk_t data)
|
||||
{
|
||||
switch (type)
|
||||
@@ -158,7 +158,7 @@ METHOD(attribute_handler_t, handle, bool,
|
||||
}
|
||||
|
||||
METHOD(attribute_handler_t, release, void,
|
||||
private_android_dns_handler_t *this, identification_t *server,
|
||||
private_android_dns_handler_t *this, ike_sa_t *ike_sa,
|
||||
configuration_attribute_type_t type, chunk_t data)
|
||||
{
|
||||
if (type == INTERNAL_IP4_DNS)
|
||||
@@ -192,7 +192,7 @@ METHOD(enumerator_t, enumerate_dns, bool,
|
||||
}
|
||||
|
||||
METHOD(attribute_handler_t, create_attribute_enumerator, enumerator_t *,
|
||||
private_android_dns_handler_t *this, identification_t *id,
|
||||
private_android_dns_handler_t *this, ike_sa_t *ike_sa,
|
||||
linked_list_t *vips)
|
||||
{
|
||||
enumerator_t *enumerator;
|
||||
@@ -232,4 +232,3 @@ android_dns_handler_t *android_dns_handler_create()
|
||||
|
||||
return &this->public;
|
||||
}
|
||||
|
||||
|
||||
@@ -169,7 +169,7 @@ static bool manage_dns(int family, chunk_t data, bool add)
|
||||
}
|
||||
|
||||
METHOD(attribute_handler_t, handle, bool,
|
||||
private_osx_attr_handler_t *this, identification_t *id,
|
||||
private_osx_attr_handler_t *this, ike_sa_t *ike_sa,
|
||||
configuration_attribute_type_t type, chunk_t data)
|
||||
{
|
||||
switch (type)
|
||||
@@ -182,7 +182,7 @@ METHOD(attribute_handler_t, handle, bool,
|
||||
}
|
||||
|
||||
METHOD(attribute_handler_t, release, void,
|
||||
private_osx_attr_handler_t *this, identification_t *server,
|
||||
private_osx_attr_handler_t *this, ike_sa_t *ike_sa,
|
||||
configuration_attribute_type_t type, chunk_t data)
|
||||
{
|
||||
switch (type)
|
||||
@@ -206,7 +206,7 @@ METHOD(enumerator_t, enumerate_dns, bool,
|
||||
}
|
||||
|
||||
METHOD(attribute_handler_t, create_attribute_enumerator, enumerator_t *,
|
||||
private_osx_attr_handler_t *this, identification_t *id,
|
||||
private_osx_attr_handler_t *this, ike_sa_t *ike_sa,
|
||||
linked_list_t *vips)
|
||||
{
|
||||
enumerator_t *enumerator;
|
||||
|
||||
@@ -185,9 +185,10 @@ static bool invoke_resolvconf(private_resolve_handler_t *this,
|
||||
}
|
||||
|
||||
METHOD(attribute_handler_t, handle, bool,
|
||||
private_resolve_handler_t *this, identification_t *server,
|
||||
private_resolve_handler_t *this, ike_sa_t *ike_sa,
|
||||
configuration_attribute_type_t type, chunk_t data)
|
||||
{
|
||||
identification_t *server;
|
||||
host_t *addr;
|
||||
bool handled;
|
||||
|
||||
@@ -208,6 +209,7 @@ METHOD(attribute_handler_t, handle, bool,
|
||||
DESTROY_IF(addr);
|
||||
return FALSE;
|
||||
}
|
||||
server = ike_sa->get_other_id(ike_sa);
|
||||
|
||||
this->mutex->lock(this->mutex);
|
||||
if (this->use_resolvconf)
|
||||
@@ -229,9 +231,10 @@ METHOD(attribute_handler_t, handle, bool,
|
||||
}
|
||||
|
||||
METHOD(attribute_handler_t, release, void,
|
||||
private_resolve_handler_t *this, identification_t *server,
|
||||
private_resolve_handler_t *this, ike_sa_t *ike_sa,
|
||||
configuration_attribute_type_t type, chunk_t data)
|
||||
{
|
||||
identification_t *server;
|
||||
host_t *addr;
|
||||
int family;
|
||||
|
||||
@@ -247,6 +250,7 @@ METHOD(attribute_handler_t, release, void,
|
||||
return;
|
||||
}
|
||||
addr = host_create_from_chunk(family, data, 0);
|
||||
server = ike_sa->get_other_id(ike_sa);
|
||||
|
||||
this->mutex->lock(this->mutex);
|
||||
if (this->use_resolvconf)
|
||||
@@ -319,7 +323,7 @@ static bool has_host_family(linked_list_t *list, int family)
|
||||
}
|
||||
|
||||
METHOD(attribute_handler_t, create_attribute_enumerator, enumerator_t*,
|
||||
private_resolve_handler_t *this, identification_t *server,
|
||||
private_resolve_handler_t *this, ike_sa_t *ike_sa,
|
||||
linked_list_t *vips)
|
||||
{
|
||||
attribute_enumerator_t *enumerator;
|
||||
|
||||
@@ -94,10 +94,9 @@ static bool attr_filter(void *lock, host_t **in,
|
||||
}
|
||||
|
||||
METHOD(attribute_handler_t, create_attribute_enumerator, enumerator_t*,
|
||||
private_stroke_handler_t *this, identification_t *server,
|
||||
private_stroke_handler_t *this, ike_sa_t *ike_sa,
|
||||
linked_list_t *vips)
|
||||
{
|
||||
ike_sa_t *ike_sa;
|
||||
peer_cfg_t *peer_cfg;
|
||||
enumerator_t *enumerator;
|
||||
attributes_t *attr;
|
||||
|
||||
@@ -317,7 +317,7 @@ static bool remove_exclude(private_unity_handler_t *this, chunk_t data)
|
||||
}
|
||||
|
||||
METHOD(attribute_handler_t, handle, bool,
|
||||
private_unity_handler_t *this, identification_t *id,
|
||||
private_unity_handler_t *this, ike_sa_t *ike_sa,
|
||||
configuration_attribute_type_t type, chunk_t data)
|
||||
{
|
||||
switch (type)
|
||||
@@ -332,7 +332,7 @@ METHOD(attribute_handler_t, handle, bool,
|
||||
}
|
||||
|
||||
METHOD(attribute_handler_t, release, void,
|
||||
private_unity_handler_t *this, identification_t *server,
|
||||
private_unity_handler_t *this, ike_sa_t *ike_sa,
|
||||
configuration_attribute_type_t type, chunk_t data)
|
||||
{
|
||||
switch (type)
|
||||
@@ -380,10 +380,9 @@ METHOD(enumerator_t, enumerate_attributes, bool,
|
||||
}
|
||||
|
||||
METHOD(attribute_handler_t, create_attribute_enumerator, enumerator_t *,
|
||||
unity_handler_t *this, identification_t *id, linked_list_t *vips)
|
||||
unity_handler_t *this, ike_sa_t *ike_sa, linked_list_t *vips)
|
||||
{
|
||||
attribute_enumerator_t *enumerator;
|
||||
ike_sa_t *ike_sa;
|
||||
|
||||
ike_sa = charon->bus->get_sa(charon->bus);
|
||||
if (!ike_sa || ike_sa->get_version(ike_sa) != IKEV1 ||
|
||||
|
||||
@@ -62,19 +62,13 @@ static void attributes_destroy(attributes_t *this)
|
||||
}
|
||||
|
||||
METHOD(attribute_handler_t, handle, bool,
|
||||
private_updown_handler_t *this, identification_t *server,
|
||||
private_updown_handler_t *this, ike_sa_t *ike_sa,
|
||||
configuration_attribute_type_t type, chunk_t data)
|
||||
{
|
||||
attributes_t *current, *attr = NULL;
|
||||
enumerator_t *enumerator;
|
||||
ike_sa_t *ike_sa;
|
||||
host_t *host;
|
||||
|
||||
ike_sa = charon->bus->get_sa(charon->bus);
|
||||
if (!ike_sa)
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
switch (type)
|
||||
{
|
||||
case INTERNAL_IP4_DNS:
|
||||
@@ -117,12 +111,11 @@ METHOD(attribute_handler_t, handle, bool,
|
||||
}
|
||||
|
||||
METHOD(attribute_handler_t, release, void,
|
||||
private_updown_handler_t *this, identification_t *server,
|
||||
private_updown_handler_t *this, ike_sa_t *ike_sa,
|
||||
configuration_attribute_type_t type, chunk_t data)
|
||||
{
|
||||
attributes_t *attr;
|
||||
enumerator_t *enumerator, *servers;
|
||||
ike_sa_t *ike_sa;
|
||||
host_t *host;
|
||||
bool found = FALSE;
|
||||
int family;
|
||||
@@ -139,43 +132,39 @@ METHOD(attribute_handler_t, release, void,
|
||||
return;
|
||||
}
|
||||
|
||||
ike_sa = charon->bus->get_sa(charon->bus);
|
||||
if (ike_sa)
|
||||
this->lock->write_lock(this->lock);
|
||||
enumerator = this->attrs->create_enumerator(this->attrs);
|
||||
while (enumerator->enumerate(enumerator, &attr))
|
||||
{
|
||||
this->lock->write_lock(this->lock);
|
||||
enumerator = this->attrs->create_enumerator(this->attrs);
|
||||
while (enumerator->enumerate(enumerator, &attr))
|
||||
if (attr->id == ike_sa->get_unique_id(ike_sa))
|
||||
{
|
||||
if (attr->id == ike_sa->get_unique_id(ike_sa))
|
||||
servers = attr->dns->create_enumerator(attr->dns);
|
||||
while (servers->enumerate(servers, &host))
|
||||
{
|
||||
servers = attr->dns->create_enumerator(attr->dns);
|
||||
while (servers->enumerate(servers, &host))
|
||||
if (host->get_family(host) == family &&
|
||||
chunk_equals(data, host->get_address(host)))
|
||||
{
|
||||
if (host->get_family(host) == family &&
|
||||
chunk_equals(data, host->get_address(host)))
|
||||
{
|
||||
attr->dns->remove_at(attr->dns, servers);
|
||||
host->destroy(host);
|
||||
found = TRUE;
|
||||
break;
|
||||
}
|
||||
}
|
||||
servers->destroy(servers);
|
||||
if (attr->dns->get_count(attr->dns) == 0)
|
||||
{
|
||||
this->attrs->remove_at(this->attrs, enumerator);
|
||||
attributes_destroy(attr);
|
||||
attr->dns->remove_at(attr->dns, servers);
|
||||
host->destroy(host);
|
||||
found = TRUE;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (found)
|
||||
servers->destroy(servers);
|
||||
if (attr->dns->get_count(attr->dns) == 0)
|
||||
{
|
||||
this->attrs->remove_at(this->attrs, enumerator);
|
||||
attributes_destroy(attr);
|
||||
break;
|
||||
}
|
||||
}
|
||||
enumerator->destroy(enumerator);
|
||||
this->lock->unlock(this->lock);
|
||||
if (found)
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
enumerator->destroy(enumerator);
|
||||
this->lock->unlock(this->lock);
|
||||
}
|
||||
|
||||
METHOD(updown_handler_t, create_dns_enumerator, enumerator_t*,
|
||||
|
||||
Reference in New Issue
Block a user