fixed peer_cfg lookup when omitting IDr
This commit is contained in:
@@ -216,7 +216,12 @@ static peer_cfg_t *get_peer_cfg(private_backend_manager_t *this,
|
|||||||
my_candidate = current->get_my_id(current);
|
my_candidate = current->get_my_id(current);
|
||||||
other_candidate = current->get_other_id(current);
|
other_candidate = current->get_other_id(current);
|
||||||
|
|
||||||
|
/* own ID may have wildcards in both, config and request (missing IDr) */
|
||||||
m1 = my_candidate->matches(my_candidate, me);
|
m1 = my_candidate->matches(my_candidate, me);
|
||||||
|
if (!m1)
|
||||||
|
{
|
||||||
|
m1 = me->matches(me, my_candidate);
|
||||||
|
}
|
||||||
m2 = other->matches(other, other_candidate);
|
m2 = other->matches(other, other_candidate);
|
||||||
sum = m1 + m2;
|
sum = m1 + m2;
|
||||||
|
|
||||||
|
|||||||
@@ -1287,9 +1287,19 @@ static void peer_data_destroy(peer_data_t *data)
|
|||||||
*/
|
*/
|
||||||
static bool peer_filter(peer_data_t *data, peer_cfg_t **in, peer_cfg_t **out)
|
static bool peer_filter(peer_data_t *data, peer_cfg_t **in, peer_cfg_t **out)
|
||||||
{
|
{
|
||||||
|
bool match_me = FALSE, match_other = FALSE;
|
||||||
if ((!data->me || data->me->matches(data->me, (*in)->get_my_id(*in))) &&
|
identification_t *me, *other;
|
||||||
(!data->other || data->other->matches(data->other, (*in)->get_other_id(*in))))
|
|
||||||
|
me = (*in)->get_my_id(*in);
|
||||||
|
other = (*in)->get_other_id(*in);
|
||||||
|
|
||||||
|
/* own ID may have wildcards in data (no IDr payload) or in config */
|
||||||
|
match_me = (!data->me || data->me->matches(data->me, me) ||
|
||||||
|
me->matches(me, data->me));
|
||||||
|
/* others ID has wildcards in config only */
|
||||||
|
match_other = (!data->other || data->other->matches(data->other, other));
|
||||||
|
|
||||||
|
if (match_me && match_other)
|
||||||
{
|
{
|
||||||
*out = *in;
|
*out = *in;
|
||||||
return TRUE;
|
return TRUE;
|
||||||
|
|||||||
Reference in New Issue
Block a user