vici: Fix fallback to remote ID if no mediation peer ID is configured
Also adds error reporting via VICI for issues with mediation settings.
Fixes: 229cdf6bc8 ("vici: Order auth rounds by optional `round` parameter instead of by position in the request")
References strongswan/strongswan#1569
This commit is contained in:
@@ -2604,8 +2604,8 @@ CALLBACK(config_sn, bool,
|
|||||||
#ifdef ME
|
#ifdef ME
|
||||||
if (peer.mediation && peer.mediated_by)
|
if (peer.mediation && peer.mediated_by)
|
||||||
{
|
{
|
||||||
DBG1(DBG_CFG, "a mediation connection cannot be a mediated connection "
|
request->reply = create_reply("a mediation connection cannot be a "
|
||||||
"at the same time, config discarded");
|
"mediated connection at the same time");
|
||||||
free_peer_data(&peer);
|
free_peer_data(&peer);
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
@@ -2616,23 +2616,23 @@ CALLBACK(config_sn, bool,
|
|||||||
else if (peer.mediated_by)
|
else if (peer.mediated_by)
|
||||||
{ /* fallback to remote identity of first auth round if peer_id is not
|
{ /* fallback to remote identity of first auth round if peer_id is not
|
||||||
* given explicitly */
|
* given explicitly */
|
||||||
auth_cfg_t *cfg;
|
auth_data_t *auth;
|
||||||
|
|
||||||
if (!peer.peer_id &&
|
if (!peer.peer_id &&
|
||||||
peer.remote->get_first(peer.remote, (void**)&cfg) == SUCCESS)
|
peer.remote->get_first(peer.remote, (void**)&auth) == SUCCESS)
|
||||||
{
|
{
|
||||||
peer.peer_id = cfg->get(cfg, AUTH_RULE_IDENTITY);
|
peer.peer_id = auth->cfg->get(auth->cfg, AUTH_RULE_IDENTITY);
|
||||||
if (peer.peer_id)
|
if (peer.peer_id)
|
||||||
{
|
{
|
||||||
peer.peer_id = peer.peer_id->clone(peer.peer_id);
|
peer.peer_id = peer.peer_id->clone(peer.peer_id);
|
||||||
}
|
}
|
||||||
else
|
}
|
||||||
{
|
if (!peer.peer_id)
|
||||||
DBG1(DBG_CFG, "mediation peer missing for mediated connection, "
|
{
|
||||||
"config discarded");
|
request->reply = create_reply("mediation peer or remote identity "
|
||||||
free_peer_data(&peer);
|
"missing for mediated connection");
|
||||||
return FALSE;
|
free_peer_data(&peer);
|
||||||
}
|
return FALSE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif /* ME */
|
#endif /* ME */
|
||||||
|
|||||||
Reference in New Issue
Block a user