From d03b53b30b16cd395eec92a6f9667689e7443dba Mon Sep 17 00:00:00 2001 From: Franco Fichtner Date: Sun, 21 Feb 2016 19:24:59 +0100 Subject: [PATCH] services: extent for openvpn's special arguments --- src/etc/inc/openvpn.inc | 56 +++++++++++++++++-------------------- src/etc/inc/services.inc | 3 ++ src/www/status_services.php | 47 +++++++++++-------------------- 3 files changed, 44 insertions(+), 62 deletions(-) diff --git a/src/etc/inc/openvpn.inc b/src/etc/inc/openvpn.inc index 804733a25..beb2e7628 100644 --- a/src/etc/inc/openvpn.inc +++ b/src/etc/inc/openvpn.inc @@ -807,6 +807,31 @@ function openvpn_reconfigure($mode, $settings) @chmod("/var/etc/openvpn/{$mode_id}.conf", 0600); } +function openvpn_restart_by_vpnid($mode, $vpnid) +{ + global $config; + + $found = null; + + if (isset($config['openvpn']["openvpn-$mode"])) { + foreach ($config['openvpn']["openvpn-$mode"] as $settings) { + if (isset($settings['disable'])) { + continue; + } + if ($vpnid != 0 && $vpnid == $settings['vpnid']) { + $found = $settings; + break; + } + } + } + + if ($found == null) { + return; + } + + openvpn_restart($mode, $found); +} + function openvpn_restart($mode, $settings) { global $config; @@ -1362,37 +1387,6 @@ function openvpn_gen_route_ipv6($network, $iroute = false) return "{$i}route-ipv6 ${ipv6}/${prefix}"; } -function openvpn_get_settings($mode, $vpnid) -{ - global $config; - - if (is_array($config['openvpn']['openvpn-server'])) { - foreach ($config['openvpn']['openvpn-server'] as $settings) { - if (isset($settings['disable'])) { - continue; - } - if ($vpnid != 0 && $vpnid == $settings['vpnid']) { - return $settings; - } - } - } - - if (is_array($config['openvpn']['openvpn-client'])) { - foreach ($config['openvpn']['openvpn-client'] as $settings) { - if (isset($settings['disable'])) { - continue; - } - - if ($vpnid != 0 && $vpnid == $settings['vpnid']) { - return $settings; - } - } - } - - return array(); -} - - /** * Retrieve a list of remote access servers, indexed by vpnid */ diff --git a/src/etc/inc/services.inc b/src/etc/inc/services.inc index 48398938b..8c093edfe 100644 --- a/src/etc/inc/services.inc +++ b/src/etc/inc/services.inc @@ -2654,6 +2654,9 @@ function services_get() $pconfig['id'] = $id; $pconfig['vpnid'] = $setting['vpnid']; $pconfig['description'] = gettext("OpenVPN") . " ".$mode.": ".htmlspecialchars($setting['description']); + $pconfig['php']['restart'] = array('openvpn_restart_by_vpnid'); + $pconfig['php']['start'] = array('openvpn_restart_by_vpnid'); + $pconfig['php']['args'] = array('mode', 'vpnid'); $pconfig['pidfile'] = "/var/run/openvpn_{$mode}{$setting['vpnid']}.pid"; $services[] = $pconfig; } diff --git a/src/www/status_services.php b/src/www/status_services.php index 5826e634c..2c146efc6 100644 --- a/src/www/status_services.php +++ b/src/www/status_services.php @@ -40,12 +40,6 @@ require_once("vpn.inc"); require_once("interfaces.inc"); require_once("rrd.inc"); -function openvpn_restart_by_vpnid($mode, $vpnid) -{ - $settings = openvpn_get_settings($mode, $vpnid); - openvpn_restart($mode, $settings); -} - if (!empty($_GET['service'])) { $service_name = $_GET['service']; switch ($_GET['mode']) { @@ -73,20 +67,11 @@ function service_control_start($name, $extras) { $msg = sprintf(gettext('%s has been started.'), htmlspecialchars($name)); - /* XXX openvpn is handled special at the moment */ if ($name == 'openvpn') { - $vpnmode = isset($extras['vpnmode']) ? htmlspecialchars($extras['vpnmode']) : htmlspecialchars($extras['mode']); - if (($vpnmode == "server") || ($vpnmode == "client")) { - $id = isset($extras['vpnid']) ? htmlspecialchars($extras['vpnid']) : htmlspecialchars($extras['id']); - $configfile = "/var/etc/openvpn/{$vpnmode}{$id}.conf"; - if (file_exists($configfile)) { - openvpn_restart_by_vpnid($vpnmode, $id); - } - } - return $msg; + $filter['vpnid'] = $extras['id']; } - $service = find_service_by_name($name); + $service = find_service_by_name($name, $filter); if (!isset($service['name'])) { return sprintf(gettext("Could not start unknown service `%s'"), htmlspecialchars($name)); } @@ -97,7 +82,13 @@ function service_control_start($name, $extras) } } elseif (isset($service['php']['start'])) { foreach ($service['php']['start'] as $cmd) { - $cmd(); + $params = array(); + if (isset($service['php']['args'])) { + foreach ($service['php']['args'] as $param) { + $params[] = $service[$param]; + } + } + call_user_func_array($cmd, $params); } } elseif (isset($service['mwexec']['start'])) { foreach ($service['mwexec']['start'] as $cmd) { @@ -116,7 +107,6 @@ function service_control_stop($name, $extras) $filter = array(); if ($name == 'openvpn') { - $filter['mode'] = $extras['vpnmode']; /* XXX I think mode is spurious */ $filter['vpnid'] = $extras['id']; } @@ -147,7 +137,6 @@ function service_control_stop($name, $extras) return $msg; } - function service_control_restart($name, $extras) { $msg = sprintf(gettext("%s has been restarted."), htmlspecialchars($name)); @@ -158,16 +147,6 @@ function service_control_restart($name, $extras) killbypid("/var/run/apinger.pid"); setup_gateways_monitor(); return $msg; - case 'openvpn': - $vpnmode = htmlspecialchars($extras['vpnmode']); - if ($vpnmode == "server" || $vpnmode == "client") { - $id = htmlspecialchars($extras['id']); - $configfile = "/var/etc/openvpn/{$vpnmode}{$id}.conf"; - if (file_exists($configfile)) { - openvpn_restart_by_vpnid($vpnmode, $id); - } - } - return $msg; case 'relayd': relayd_configure(true); filter_configure(); @@ -187,7 +166,13 @@ function service_control_restart($name, $extras) } } elseif (isset($service['php']['restart'])) { foreach ($service['php']['restart'] as $cmd) { - $cmd(); + $params = array(); + if (isset($service['php']['args'])) { + foreach ($service['php']['args'] as $param) { + $params[] = $service[$param]; + } + } + call_user_func_array($cmd, $params); } } elseif (isset($service['mwexec']['restart'])) { foreach ($service['mwexec']['restart'] as $cmd) {