aboutsummaryrefslogtreecommitdiffstats
path: root/src/libcharon/config
diff options
context:
space:
mode:
authorMartin Willi <martin@revosec.ch>2014-05-16 16:18:16 +0200
committerMartin Willi <martin@revosec.ch>2014-05-16 16:51:19 +0200
commit2f893f278d5fe2bf43081bf5c341f9feaf3aedcb (patch)
tree075ee9108f9531f8431fa376262a5b29de46f277 /src/libcharon/config
parent8d74ec9e803805f259a2388d8f8e0d636a7d72f3 (diff)
downloadstrongswan-2f893f278d5fe2bf43081bf5c341f9feaf3aedcb.tar.bz2
strongswan-2f893f278d5fe2bf43081bf5c341f9feaf3aedcb.tar.xz
proposal: Don't return a default IKE proposal without encryption/AEAD algs
Diffstat (limited to 'src/libcharon/config')
-rw-r--r--src/libcharon/config/proposal.c26
1 files changed, 23 insertions, 3 deletions
diff --git a/src/libcharon/config/proposal.c b/src/libcharon/config/proposal.c
index 48313b753..4d881cd2f 100644
--- a/src/libcharon/config/proposal.c
+++ b/src/libcharon/config/proposal.c
@@ -627,7 +627,7 @@ proposal_t *proposal_create(protocol_id_t protocol, u_int number)
/**
* Add supported IKE algorithms to proposal
*/
-static void proposal_add_supported_ike(private_proposal_t *this, bool aead)
+static bool proposal_add_supported_ike(private_proposal_t *this, bool aead)
{
enumerator_t *enumerator;
encryption_algorithm_t encryption;
@@ -662,6 +662,11 @@ static void proposal_add_supported_ike(private_proposal_t *this, bool aead)
}
}
enumerator->destroy(enumerator);
+
+ if (!array_count(this->transforms))
+ {
+ return FALSE;
+ }
}
else
{
@@ -691,6 +696,11 @@ static void proposal_add_supported_ike(private_proposal_t *this, bool aead)
}
enumerator->destroy(enumerator);
+ if (!array_count(this->transforms))
+ {
+ return FALSE;
+ }
+
enumerator = lib->crypto->create_signer_enumerator(lib->crypto);
while (enumerator->enumerate(enumerator, &integrity, &plugin_name))
{
@@ -772,6 +782,8 @@ static void proposal_add_supported_ike(private_proposal_t *this, bool aead)
}
}
enumerator->destroy(enumerator);
+
+ return TRUE;
}
/*
@@ -784,7 +796,11 @@ proposal_t *proposal_create_default(protocol_id_t protocol)
switch (protocol)
{
case PROTO_IKE:
- proposal_add_supported_ike(this, FALSE);
+ if (!proposal_add_supported_ike(this, FALSE))
+ {
+ destroy(this);
+ return NULL;
+ }
break;
case PROTO_ESP:
add_algorithm(this, ENCRYPTION_ALGORITHM, ENCR_AES_CBC, 128);
@@ -820,7 +836,11 @@ proposal_t *proposal_create_default_aead(protocol_id_t protocol)
{
case PROTO_IKE:
this = (private_proposal_t*)proposal_create(protocol, 0);
- proposal_add_supported_ike(this, TRUE);
+ if (!proposal_add_supported_ike(this, TRUE))
+ {
+ destroy(this);
+ return NULL;
+ }
return &this->public;
case PROTO_ESP:
/* we currently don't include any AEAD proposal for ESP, as we