diff options
author | Timo Teräs <timo.teras@iki.fi> | 2010-10-27 10:35:19 +0300 |
---|---|---|
committer | Timo Teräs <timo.teras@iki.fi> | 2010-10-27 10:35:19 +0300 |
commit | d8510349a3ee74e12c54f1eccf24f2ce81cf6243 (patch) | |
tree | 4fb74739adbe226b444daf3e9129d9ed2f0c162c /main/ipsec-tools/90-dpd-window-fix.patch | |
parent | 3ac7715693f62b28675f09a89ed5b0825abddd6c (diff) | |
download | aports-d8510349a3ee74e12c54f1eccf24f2ce81cf6243.tar.bz2 aports-d8510349a3ee74e12c54f1eccf24f2ce81cf6243.tar.xz |
main/ipsec-tools: update to 2010-10-22 snapshot
remove patches committed upstream. and add a patch for dpd related
minor fix.
Diffstat (limited to 'main/ipsec-tools/90-dpd-window-fix.patch')
-rw-r--r-- | main/ipsec-tools/90-dpd-window-fix.patch | 85 |
1 files changed, 85 insertions, 0 deletions
diff --git a/main/ipsec-tools/90-dpd-window-fix.patch b/main/ipsec-tools/90-dpd-window-fix.patch new file mode 100644 index 0000000000..d3ac9a9aa2 --- /dev/null +++ b/main/ipsec-tools/90-dpd-window-fix.patch @@ -0,0 +1,85 @@ +Index: src/racoon/isakmp_inf.c +=================================================================== +RCS file: /cvsroot/src/crypto/dist/ipsec-tools/src/racoon/isakmp_inf.c,v +retrieving revision 1.41 +diff -u -r1.41 isakmp_inf.c +--- a/src/racoon/isakmp_inf.c 3 Jul 2009 06:41:46 -0000 1.41 ++++ b/src/racoon/isakmp_inf.c 5 May 2010 15:56:38 -0000 +@@ -1450,17 +1450,16 @@ + struct isakmp_pl_ru *ru; + u_int32_t msgid; + { ++ u_int32_t seq; + + plog(LLV_DEBUG, LOCATION, iph1->remote, + "DPD R-U-There-Ack received\n"); + +- /* XXX Maintain window of acceptable sequence numbers ? +- * => ru->data <= iph2->dpd_seq && +- * ru->data >= iph2->dpd_seq - iph2->dpd_fails ? */ +- if (ntohl(ru->data) != iph1->dpd_seq-1) { ++ seq = ntohl(ru->data); ++ if (seq <= iph1->dpd_last_ack || seq > iph1->dpd_seq) { + plog(LLV_ERROR, LOCATION, iph1->remote, +- "Wrong DPD sequence number (%d, %d expected).\n", +- ntohl(ru->data), iph1->dpd_seq-1); ++ "Wrong DPD sequence number (%d; last_ack=%d, seq=%d).\n", ++ seq, iph1->dpd_last_ack, iph1->dpd_seq); + return 0; + } + +@@ -1472,6 +1471,7 @@ + } + + iph1->dpd_fails = 0; ++ iph1->dpd_last_ack = seq; + sched_cancel(&iph1->dpd_r_u); + isakmp_sched_r_u(iph1, 0); + +@@ -1535,12 +1535,13 @@ + memcpy(ru->i_ck, iph1->index.i_ck, sizeof(cookie_t)); + memcpy(ru->r_ck, iph1->index.r_ck, sizeof(cookie_t)); + +- if (iph1->dpd_seq == 0){ ++ if (iph1->dpd_seq == 0) { + /* generate a random seq which is not too big */ +- srand(time(NULL)); +- iph1->dpd_seq = rand() & 0x0fff; ++ iph1->dpd_seq = iph1->dpd_last_ack = rand() & 0x0fff; + } + ++ iph1->dpd_seq++; ++ iph1->dpd_fails++; + ru->data = htonl(iph1->dpd_seq); + + error = isakmp_info_send_common(iph1, payload, ISAKMP_NPTYPE_N, 0); +@@ -1549,12 +1550,6 @@ + plog(LLV_DEBUG, LOCATION, iph1->remote, + "DPD R-U-There sent (%d)\n", error); + +- /* will be decreased if ACK received... */ +- iph1->dpd_fails++; +- +- /* XXX should be increased only when ACKed ? */ +- iph1->dpd_seq++; +- + /* Reschedule the r_u_there with a short delay, + * will be deleted/rescheduled if ACK received before */ + isakmp_sched_r_u(iph1, 1); +Index: src/racoon/handler.h +=================================================================== +RCS file: /cvsroot/src/crypto/dist/ipsec-tools/src/racoon/handler.h,v +retrieving revision 1.22 +diff -u -r1.22 handler.h +--- a/src/racoon/handler.h 3 Sep 2009 09:29:07 -0000 1.22 ++++ b/src/racoon/handler.h 5 May 2010 15:56:39 -0000 +@@ -202,7 +202,8 @@ + + #ifdef ENABLE_DPD + int dpd_support; /* Does remote supports DPD ? */ +- u_int16_t dpd_seq; /* DPD seq number to receive */ ++ u_int32_t dpd_last_ack; ++ u_int32_t dpd_seq; /* DPD seq number to receive */ + u_int8_t dpd_fails; /* number of failures */ + struct sched dpd_r_u; + #endif |