my_candidate = current->get_my_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);
+ if (!m1)
+ {
+ m1 = me->matches(me, my_candidate);
+ }
m2 = other->matches(other, other_candidate);
sum = m1 + m2;
*/
static bool peer_filter(peer_data_t *data, peer_cfg_t **in, peer_cfg_t **out)
{
-
- if ((!data->me || data->me->matches(data->me, (*in)->get_my_id(*in))) &&
- (!data->other || data->other->matches(data->other, (*in)->get_other_id(*in))))
+ bool match_me = FALSE, match_other = FALSE;
+ identification_t *me, *other;
+
+ 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;
return TRUE;