support of mixed RSA/PSK static connections
This commit is contained in:
+16
-8
@@ -2950,8 +2950,7 @@ main_inI1_outR1(struct msg_digest *md)
|
|||||||
{
|
{
|
||||||
struct payload_digest *const sa_pd = md->chain[ISAKMP_NEXT_SA];
|
struct payload_digest *const sa_pd = md->chain[ISAKMP_NEXT_SA];
|
||||||
struct state *st;
|
struct state *st;
|
||||||
struct connection *c = find_host_connection(&md->iface->addr, pluto_port
|
struct connection *c;
|
||||||
, &md->sender, md->sender_port, LEMPTY);
|
|
||||||
struct isakmp_proposal proposal;
|
struct isakmp_proposal proposal;
|
||||||
pb_stream proposal_pbs;
|
pb_stream proposal_pbs;
|
||||||
pb_stream r_sa_pbs;
|
pb_stream r_sa_pbs;
|
||||||
@@ -2959,13 +2958,27 @@ main_inI1_outR1(struct msg_digest *md)
|
|||||||
lset_t policy = LEMPTY;
|
lset_t policy = LEMPTY;
|
||||||
int vids_to_send = 0;
|
int vids_to_send = 0;
|
||||||
|
|
||||||
|
/* We preparse the peer's proposal in order to determine
|
||||||
|
* the requested authentication policy (RSA or PSK)
|
||||||
|
*/
|
||||||
RETURN_STF_FAILURE(preparse_isakmp_sa_body(&sa_pd->payload.sa
|
RETURN_STF_FAILURE(preparse_isakmp_sa_body(&sa_pd->payload.sa
|
||||||
, &sa_pd->pbs, &ipsecdoisit, &proposal_pbs, &proposal));
|
, &sa_pd->pbs, &ipsecdoisit, &proposal_pbs, &proposal));
|
||||||
|
|
||||||
|
backup_pbs(&proposal_pbs);
|
||||||
|
RETURN_STF_FAILURE(parse_isakmp_policy(&proposal_pbs
|
||||||
|
, proposal.isap_notrans, &policy));
|
||||||
|
restore_pbs(&proposal_pbs);
|
||||||
|
|
||||||
|
/* We are only considering candidate connections that match
|
||||||
|
* the requested authentication policy (RSA or PSK)
|
||||||
|
*/
|
||||||
|
c = find_host_connection(&md->iface->addr, pluto_port
|
||||||
|
, &md->sender, md->sender_port, policy);
|
||||||
|
|
||||||
if (c == NULL && md->iface->ike_float)
|
if (c == NULL && md->iface->ike_float)
|
||||||
{
|
{
|
||||||
c = find_host_connection(&md->iface->addr, NAT_T_IKE_FLOAT_PORT
|
c = find_host_connection(&md->iface->addr, NAT_T_IKE_FLOAT_PORT
|
||||||
, &md->sender, md->sender_port, LEMPTY);
|
, &md->sender, md->sender_port, policy);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (c == NULL)
|
if (c == NULL)
|
||||||
@@ -2983,11 +2996,6 @@ main_inI1_outR1(struct msg_digest *md)
|
|||||||
{
|
{
|
||||||
struct connection *d;
|
struct connection *d;
|
||||||
|
|
||||||
backup_pbs(&proposal_pbs);
|
|
||||||
RETURN_STF_FAILURE(parse_isakmp_policy(&proposal_pbs
|
|
||||||
, proposal.isap_notrans, &policy));
|
|
||||||
restore_pbs(&proposal_pbs);
|
|
||||||
|
|
||||||
d = find_host_connection(&md->iface->addr
|
d = find_host_connection(&md->iface->addr
|
||||||
, pluto_port, (ip_address*)NULL, md->sender_port, policy);
|
, pluto_port, (ip_address*)NULL, md->sender_port, policy);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user