aboutsummaryrefslogtreecommitdiffstats
path: root/main/strongswan/0010-shunt-manager-Remove-stored-entries-if-installation-.patch
blob: f8af98c62fa7d4bd103a7ad0c64eaefebc9f07fc (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
From 616ff9a2369fd250a2b9e8d2a00f37e2e8d3a2f3 Mon Sep 17 00:00:00 2001
From: Tobias Brunner <tobias@strongswan.org>
Date: Tue, 14 Jul 2015 16:50:32 +0200
Subject: [PATCH] shunt-manager: Remove stored entries if installation fails

---
 src/libcharon/sa/shunt_manager.c | 13 +++++++++++--
 1 file changed, 11 insertions(+), 2 deletions(-)

diff --git a/src/libcharon/sa/shunt_manager.c b/src/libcharon/sa/shunt_manager.c
index 434bace..2e42e7e 100644
--- a/src/libcharon/sa/shunt_manager.c
+++ b/src/libcharon/sa/shunt_manager.c
@@ -122,7 +122,7 @@ METHOD(shunt_manager_t, install, bool,
 {
 	enumerator_t *enumerator;
 	child_cfg_t *child_cfg;
-	bool found = FALSE;
+	bool found = FALSE, success;
 
 	/* check if not already installed */
 	this->lock->write_lock(this->lock);
@@ -146,7 +146,16 @@ METHOD(shunt_manager_t, install, bool,
 	this->shunts->insert_last(this->shunts, child->get_ref(child));
 	this->lock->unlock(this->lock);
 
-	return install_shunt_policy(child);
+	success = install_shunt_policy(child);
+
+	if (!success)
+	{
+		this->lock->write_lock(this->lock);
+		this->shunts->remove(this->shunts, child, NULL);
+		this->lock->unlock(this->lock);
+		child->destroy(child);
+	}
+	return success;
 }
 
 /**
-- 
2.4.6