aboutsummaryrefslogtreecommitdiffstats
path: root/src/libcharon/encoding/payloads/proposal_substructure.c
diff options
context:
space:
mode:
authorTobias Brunner <tobias@strongswan.org>2014-11-04 18:24:16 +0100
committerTobias Brunner <tobias@strongswan.org>2014-12-05 15:48:52 +0100
commit4141f0167191eacfbeee26a7dfad749529ee866b (patch)
treeb565fea68c2564f5303780d47db4ac1721b2c576 /src/libcharon/encoding/payloads/proposal_substructure.c
parent42e0a317c64b1dfc2612f0891bef45f648079ba7 (diff)
downloadstrongswan-4141f0167191eacfbeee26a7dfad749529ee866b.tar.bz2
strongswan-4141f0167191eacfbeee26a7dfad749529ee866b.tar.xz
ikev1: Accept IPComp proposals with 4 octet long CPI values
While they SHOULD be sent as 16-bit values according to RFC 3173 a responder MUST be able to accept CPI values encoded in four bytes.
Diffstat (limited to 'src/libcharon/encoding/payloads/proposal_substructure.c')
-rw-r--r--src/libcharon/encoding/payloads/proposal_substructure.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/src/libcharon/encoding/payloads/proposal_substructure.c b/src/libcharon/encoding/payloads/proposal_substructure.c
index 53e8cf3ad..fb9e7856e 100644
--- a/src/libcharon/encoding/payloads/proposal_substructure.c
+++ b/src/libcharon/encoding/payloads/proposal_substructure.c
@@ -345,7 +345,7 @@ METHOD(payload_t, verify, status_t,
switch (this->protocol_id)
{
case PROTO_IPCOMP:
- if (this->spi.len != 2)
+ if (this->spi.len != 2 && this->spi.len != 4)
{
DBG1(DBG_ENC, "invalid CPI length in IPCOMP proposal");
return FAILED;
@@ -536,7 +536,7 @@ METHOD(proposal_substructure_t, get_cpi, bool,
{
if (cpi)
{
- *cpi = *((u_int16_t*)this->spi.ptr);
+ *cpi = htons(untoh16(this->spi.ptr + this->spi.len - 2));
}
enumerator->destroy(enumerator);
return TRUE;