summaryrefslogtreecommitdiffstats
path: root/main
diff options
context:
space:
mode:
authorTimo Teräs <timo.teras@iki.fi>2010-11-15 09:33:00 +0200
committerNatanael Copa <ncopa@alpinelinux.org>2010-11-22 10:29:34 +0000
commitdef1174c6d4b3419e2837290d01af522cd45e2c8 (patch)
treeb3edf95fa4607f48304afef2d5648064f77a33c7 /main
parent32570beceea3579afbb472c1fce4c9332beeb525 (diff)
downloadaports-def1174c6d4b3419e2837290d01af522cd45e2c8.tar.bz2
aports-def1174c6d4b3419e2837290d01af522cd45e2c8.tar.xz
main/ipsec-tools: fix for improving delete notify handling
the old one could crash under some rare circumstances (deleting responder mode ph1 in very early state). (cherry picked from commit 2ac5487348024387beb27a336ca96a7b8128e7d5)
Diffstat (limited to 'main')
-rw-r--r--main/ipsec-tools/99-purge-on-delete-fix.patch110
-rw-r--r--main/ipsec-tools/APKBUILD6
2 files changed, 114 insertions, 2 deletions
diff --git a/main/ipsec-tools/99-purge-on-delete-fix.patch b/main/ipsec-tools/99-purge-on-delete-fix.patch
new file mode 100644
index 00000000..edcc28ac
--- /dev/null
+++ b/main/ipsec-tools/99-purge-on-delete-fix.patch
@@ -0,0 +1,110 @@
+Index: src/racoon/handler.c
+===================================================================
+RCS file: /cvsroot/src/crypto/dist/ipsec-tools/src/racoon/handler.c,v
+retrieving revision 1.33
+diff -u -r1.33 handler.c
+--- a/src/racoon/handler.c 21 Oct 2010 06:04:33 -0000 1.33
++++ b/src/racoon/handler.c 15 Nov 2010 07:26:44 -0000
+@@ -514,6 +514,22 @@
+ LIST_INIT(&ph1tree);
+ }
+
++int
++ph1_rekey_enabled(iph1)
++ struct ph1handle *iph1;
++{
++ if (iph1->rmconf == NULL)
++ return 0;
++ if (iph1->rmconf->rekey == REKEY_FORCE)
++ return 1;
++#ifdef ENABLE_DPD
++ if (iph1->rmconf->rekey == REKEY_ON && iph1->dpd_support &&
++ iph1->rmconf->dpd_interval)
++ return 1;
++#endif
++ return 0;
++}
++
+ /* %%% management phase 2 handler */
+
+ int
+Index: src/racoon/handler.h
+===================================================================
+RCS file: /cvsroot/src/crypto/dist/ipsec-tools/src/racoon/handler.h,v
+retrieving revision 1.24
+diff -u -r1.24 handler.h
+--- a/src/racoon/handler.h 12 Nov 2010 09:09:47 -0000 1.24
++++ b/src/racoon/handler.h 15 Nov 2010 07:26:44 -0000
+@@ -493,6 +493,7 @@
+ extern int resolveph1rmconf __P((struct ph1handle *));
+ extern void flushph1 __P((void));
+ extern void initph1tree __P((void));
++extern int ph1_rekey_enabled __P((struct ph1handle *));
+
+ extern int enumph2 __P((struct ph2selector *ph2sel,
+ int (* enum_func)(struct ph2handle *iph2, void *arg),
+Index: src/racoon/isakmp.c
+===================================================================
+RCS file: /cvsroot/src/crypto/dist/ipsec-tools/src/racoon/isakmp.c,v
+retrieving revision 1.65
+diff -u -r1.65 isakmp.c
+--- a/src/racoon/isakmp.c 12 Nov 2010 10:36:37 -0000 1.65
++++ b/src/racoon/isakmp.c 15 Nov 2010 07:26:45 -0000
+@@ -766,20 +766,6 @@
+ return 0;
+ }
+
+-static int
+-ph1_rekey_enabled(iph1)
+- struct ph1handle *iph1;
+-{
+- if (iph1->rmconf->rekey == REKEY_FORCE)
+- return 1;
+-#ifdef ENABLE_DPD
+- if (iph1->rmconf->rekey == REKEY_ON && iph1->dpd_support &&
+- iph1->rmconf->dpd_interval)
+- return 1;
+-#endif
+- return 0;
+-}
+-
+ /*
+ * main function of phase 1.
+ */
+@@ -2081,11 +2067,9 @@
+ src, dst, isakmp_pindex(&iph1->index, 0));
+
+ evt_phase1(iph1, EVT_PHASE1_DOWN, NULL);
+-
+- if (new_iph1 == NULL && ph1_rekey_enabled(iph1)) {
+- purge_remote(iph1);
++ if (new_iph1 == NULL && ph1_rekey_enabled(iph1))
+ script_hook(iph1, SCRIPT_PHASE1_DEAD);
+- }
++
+ racoon_free(src);
+ racoon_free(dst);
+
+Index: src/racoon/isakmp_inf.c
+===================================================================
+RCS file: /cvsroot/src/crypto/dist/ipsec-tools/src/racoon/isakmp_inf.c,v
+retrieving revision 1.43
+diff -u -r1.43 isakmp_inf.c
+--- a/src/racoon/isakmp_inf.c 12 Nov 2010 09:09:47 -0000 1.43
++++ b/src/racoon/isakmp_inf.c 15 Nov 2010 07:26:45 -0000
+@@ -516,10 +516,12 @@
+ sched_cancel(&del_ph1->scr);
+
+ /*
+- * Do not delete IPsec SAs when receiving an IKE delete notification.
+- * Just delete the IKE SA.
++ * Delete also IPsec-SAs if rekeying is enabled.
+ */
+- isakmp_ph1expire(del_ph1);
++ if (ph1_rekey_enabled(del_ph1))
++ purge_remote(del_ph1);
++ else
++ isakmp_ph1expire(del_ph1);
+ }
+ break;
+
diff --git a/main/ipsec-tools/APKBUILD b/main/ipsec-tools/APKBUILD
index 286144b6..26182b6b 100644
--- a/main/ipsec-tools/APKBUILD
+++ b/main/ipsec-tools/APKBUILD
@@ -2,7 +2,7 @@
pkgname=ipsec-tools
pkgver=0.8_alpha20101022
_myver=0.8-alpha20101022
-pkgrel=2
+pkgrel=3
pkgdesc="User-space IPsec tools for various IPsec implementations"
url="http://ipsec-tools.sourceforge.net/"
license="BSD"
@@ -18,6 +18,7 @@ source="http://downloads.sourceforge.net/$pkgname/$pkgname-$_myver.tar.gz
80-admin-big-reply-fix.patch
90-dpd-window-fix.patch
95-purge-on-delete-notify.patch
+ 99-purge-on-delete-fix.patch
"
_builddir="$srcdir"/$pkgname-$_myver
@@ -65,4 +66,5 @@ md5sums="1492b83edc944b5d32d2eff51e33399e ipsec-tools-0.8-alpha20101022.tar.gz
2d5d24c4a3684a38584f88720f71c7d6 75-racoonctl-rcvbuf.patch
c3898b162d284bc163f99cc52925b52a 80-admin-big-reply-fix.patch
0391a6967ad19673588302bc8b17e0e2 90-dpd-window-fix.patch
-8bc73a15407564321c8f571b5656b28d 95-purge-on-delete-notify.patch"
+8bc73a15407564321c8f571b5656b28d 95-purge-on-delete-notify.patch
+e8bee665227335d75880cf3753d2279e 99-purge-on-delete-fix.patch"