public inbox for network@lists.ipfire.org
 help / color / mirror / Atom feed
* [PATCH] ipsec: add status feature
@ 2017-08-04 20:20 Jonatan Schlag
  0 siblings, 0 replies; only message in thread
From: Jonatan Schlag @ 2017-08-04 20:20 UTC (permalink / raw)
  To: network

[-- Attachment #1: Type: text/plain, Size: 3917 bytes --]

We can now disable and enable IPsec connections.

Signed-off-by: Jonatan Schlag <jonatan.schlag(a)ipfire.org>
---
 src/functions/functions.ipsec                 | 44 ++++++++++++++++++++++++---
 src/functions/functions.vpn-security-policies |  4 ++-
 2 files changed, 43 insertions(+), 5 deletions(-)

diff --git a/src/functions/functions.ipsec b/src/functions/functions.ipsec
index 015b3b8..32a6a2c 100644
--- a/src/functions/functions.ipsec
+++ b/src/functions/functions.ipsec
@@ -33,13 +33,15 @@ IPSEC_CONNECTION_CONFIG_SETTINGS="\
 	PSK \
 	REMOTE_ID \
 	REMOTE_PREFIX \
-	SECURITY_POLICY"
+	SECURITY_POLICY \
+	ENABLED"
 
 # Default values
 IPSEC_DEFAULT_AUTH_MODE="PSK"
 IPSEC_DEFAULT_DPD_ACTION="restart"
 IPSEC_DEFAULT_DPD_DELAY="30"
 IPSEC_DEFAULT_DPD_TIMEOUT="120"
+IPSEC_DEFAULT_ENABLED="true"
 IPSEC_DEFAULT_INACTIVITY_TIMEOUT="0"
 IPSEC_DEFAULT_MODE="tunnel"
 IPSEC_DEFAULT_SECURITY_POLICY="system"
@@ -71,7 +73,7 @@ cli_ipsec_connection() {
 		shift 2
 
 		case "${key}" in
-			authentication|down|dpd|inactivity_timeout|local|mode|peer|remote|security_policy|start_action|up)
+			authentication|down|disable|dpd|enable|inactivity_timeout|local|mode|peer|remote|security_policy|start_action|up)
 				ipsec_connection_${key} ${connection} $@
 				;;
 			show)
@@ -198,6 +200,28 @@ cli_ipsec_connection_show() {
 	return ${EXIT_OK}
 }
 
+ipsec_connection_disable() {
+	local connection=${1}
+
+	if ! ipsec_connection_write_config_key "${connection}" "ENABLED" "false"; then
+		log ERROR "Could not write configuration settings"
+		return ${EXIT_ERROR}
+	fi
+
+	ipsec_reload ${connection}
+}
+
+ipsec_connection_enable() {
+	local connection=${1}
+
+	if ! ipsec_connection_write_config_key "${connection}" "ENABLED" "true"; then
+		log ERROR "Could not write configuration settings"
+		return ${EXIT_ERROR}
+	fi
+
+	ipsec_reload "${connection}"
+}
+
 # This function writes all values to a via ${connection} specificated VPN IPsec configuration file
 ipsec_connection_write_config() {
 	assert [ $# -ge 1 ]
@@ -304,11 +328,22 @@ ipsec_strongswan_load() {
 ipsec_reload() {
 	local connection=${1}
 
-	if ! ipsec_connection_to_strongswan ${connection}; then
-		log ERROR "Could not generate strongswan config for ${connnection}"
+	local ENABLED
+
+	if ! ipsec_connection_read_config "${connection}" "ENABLED"; then
+		log ERROR "Could not read configuration for IPsec connection ${connection}"
 		return ${EXIT_ERROR}
 	fi
 
+	if enabled ${ENABLED}; then
+		if ! ipsec_connection_to_strongswan ${connection}; then
+			log ERROR "Could not generate strongswan config for ${connnection}"
+			return ${EXIT_ERROR}
+		fi
+	else
+		unlink "${NETWORK_IPSEC_SWANCTL_CONNECTIONS_DIR}/${connection}.conf"
+	fi
+
 	ipsec_strongswan_load
 }
 
@@ -913,6 +948,7 @@ ipsec_connection_new() {
 	DPD_ACTION=${IPSEC_DEFAULT_DPD_ACTION}
 	DPD_DELAY=${IPSEC_DEFAULT_DPD_DELAY}
 	DPD_TIMEOUT=${IPSEC_DEFAULT_DPD_TIMEOUT}
+	ENABLED=${IPSEC_DEFAULT_ENABLED}
 	MODE=${IPSEC_DEFAULT_MODE}
 	START_ACTION=${IPSEC_DEFAULT_START_ACTION}
 
diff --git a/src/functions/functions.vpn-security-policies b/src/functions/functions.vpn-security-policies
index 670c12d..294f0da 100644
--- a/src/functions/functions.vpn-security-policies
+++ b/src/functions/functions.vpn-security-policies
@@ -346,11 +346,13 @@ vpn_security_policies_reload() {
 
 	local connection
 	for connection in $(ipsec_list_connections); do
+		local SECURITY_POLICY ENABLED
+
 		if ! ipsec_connection_read_config "${connection}" "SECURITY_POLICY"; then
 			continue
 		fi
 
-		if [[ "${SECURITY_POLICY}" = "${name}" ]]; then
+		if [[ "${SECURITY_POLICY}" = "${name}" ]] && enabled ENABLED; then
 			if ! ipsec_connection_to_strongswan "${connection}"; then
 				log ERROR "Could not generate strongswan config for ${connnection}"
 			fi
-- 
2.6.3


^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2017-08-04 20:20 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-08-04 20:20 [PATCH] ipsec: add status feature Jonatan Schlag

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox