"") return true; return false; } function restart_service_if_running($service) { global $config; if(is_service_running($service)) restart_service($service); return; } function is_service_enabled($service_name) { global $config; if ($service_name == "") return false; if (isset($config['installedpackages'][$service_name]['config'][0]['enable']) && ((empty($config['installedpackages'][$service_name]['config'][0]['enable'])) || ($config['installedpackages'][$service_name]['config'][0]['enable'] === 'off'))) return false; return true; } function is_service_running($service, $ps = "") { global $config; if(is_array($config['installedpackages']['service'])) { foreach($config['installedpackages']['service'] as $aservice) { if(strtolower($service) == strtolower($aservice['name'])) { if ($aservice['custom_php_service_status_command'] <> "") { eval("\$rc={$aservice['custom_php_service_status_command']};"); return $rc; } if(empty($aservice['executable'])) return false; if (is_process_running($aservice['executable'])) return true; return false; } } } if (is_process_running($service)) return true; return false; } function get_services() { global $config; if (is_array($config['installedpackages']['service'])) $services = $config['installedpackages']['service']; else $services = array(); /* Add services that are in the base. * */ if(is_radvd_enabled()) { $pconfig = array(); $pconfig['name'] = "radvd"; $pconfig['description'] = gettext("Router Advertisement Daemon"); $services[] = $pconfig; } if(isset($config['dnsmasq']['enable'])) { $pconfig = array(); $pconfig['name'] = "dnsmasq"; $pconfig['description'] = gettext("DNS Forwarder"); $services[] = $pconfig; } $pconfig = array(); $pconfig['name'] = "ntpd"; $pconfig['description'] = gettext("NTP clock sync"); $services[] = $pconfig; if (is_array($config['captiveportal'])) { foreach ($config['captiveportal'] as $zone => $setting) { if (isset($setting['enable'])) { $pconfig = array(); $pconfig['name'] = "captiveportal"; $pconfig['zone'] = $zone; $pconfig['description'] = gettext("Captive Portal") . ": ".htmlspecialchars($setting['zone']); $services[] = $pconfig; } } } $iflist = array(); $ifdescrs = get_configured_interface_list(); foreach ($ifdescrs as $if) { $oc = $config['interfaces'][$if]; if ($oc['if'] && (!link_interface_to_bridge($if))) $iflist[$if] = $if; } $show_dhcprelay = false; foreach($iflist as $if) { if(isset($config['dhcrelay'][$if]['enable'])) $show_dhcprelay = true; } if($show_dhcprelay == true) { $pconfig = array(); $pconfig['name'] = "dhcrelay"; $pconfig['description'] = gettext("DHCP Relay"); $services[] = $pconfig; } if(is_dhcp_server_enabled()) { $pconfig = array(); $pconfig['name'] = "dhcpd"; $pconfig['description'] = gettext("DHCP Service"); $services[] = $pconfig; } if(isset($config['snmpd']['enable'])) { $pconfig = array(); $pconfig['name'] = "bsnmpd"; $pconfig['description'] = gettext("SNMP Service"); $services[] = $pconfig; } if (is_array($config['igmpproxy']['igmpentry']) && (count($config['igmpproxy']['igmpentry']) > 0)) { $pconfig = array(); $pconfig['name'] = "igmpproxy"; $pconfig['description'] = gettext("IGMP proxy"); $services[] = $pconfig; } if (isset($config['installedpackages']['miniupnpd']) && $config['installedpackages']['miniupnpd']['config'][0]['enable']) { $pconfig = array(); $pconfig['name'] = "miniupnpd"; $pconfig['description'] = gettext("UPnP Service"); $services[] = $pconfig; } if (isset($config['installedpackages']['routed']) && $config['installedpackages']['routed']['config'][0]['enable']) { $pconfig = array(); $pconfig['name'] = "routed"; $pconfig['description'] = gettext("RIP Daemon"); $services[] = $pconfig; } if (isset($config['ipsec']['enable'])) { $pconfig = array(); $pconfig['name'] = "racoon"; $pconfig['description'] = gettext("IPsec VPN"); $services[] = $pconfig; } foreach (array('server', 'client') as $mode) { if (is_array($config['openvpn']["openvpn-{$mode}"])) { foreach ($config['openvpn']["openvpn-{$mode}"] as $id => $setting) { if (!isset($setting['disable'])) { $pconfig = array(); $pconfig['name'] = "openvpn"; $pconfig['mode'] = $mode; $pconfig['id'] = $id; $pconfig['vpnid'] = $setting['vpnid']; $pconfig['description'] = gettext("OpenVPN") . " ".$mode.": ".htmlspecialchars($setting['description']); $services[] = $pconfig; } } } } if (count($config['load_balancer']['virtual_server']) && count($config['load_balancer']['lbpool'])) { $pconfig = array(); $pconfig['name'] = "relayd"; $pconfig['description'] = gettext("Server load balancing daemon"); $services[] = $pconfig; } return $services; } function find_service_by_name($name) { $services = get_services(); foreach ($services as $service) if ($service["name"] == $name) return $service; return array(); } function find_service_by_openvpn_vpnid($vpnid) { $services = get_services(); foreach ($services as $service) if (($service["name"] == "openvpn") && isset($service["vpnid"]) && ($service["vpnid"] == $vpnid)) return $service; return array(); } function find_service_by_cp_zone($zone) { $services = get_services(); foreach ($services as $service) if (($service["name"] == "captiveportal") && isset($service["zone"]) && ($service["zone"] == $zone)) return $service; return array(); } function service_name_compare($a, $b) { if (strtolower($a['name']) == strtolower($b['name'])) return 0; return (strtolower($a['name']) < strtolower($b['name'])) ? -1 : 1; } function get_pkg_descr($package_name) { global $config; if (is_array($config['installedpackages']['package'])) { foreach($config['installedpackages']['package'] as $pkg) { if($pkg['name'] == $package_name) return $pkg['descr']; } } return gettext("Not available."); } function get_service_status($service) { global $g; switch ($service['name']) { case "openvpn": $running = is_pid_running("{$g['varrun_path']}/openvpn_{$service['mode']}{$service['vpnid']}.pid"); break; case "captiveportal": $running = is_pid_running("{$g['varrun_path']}/lighty-{$service['zone']}-CaptivePortal.pid"); if (isset($config['captiveportal'][$service['zone']]['httpslogin'])) $running = $running && is_pid_running("{$g['varrun_path']}/lighty-{$service['zone']}-CaptivePortal-SSL.pid"); break; default: $running = is_service_running($service['name']); } return $running; } function get_service_status_icon($service, $withtext = true, $smallicon = false) { global $g; $output = ""; if(get_service_status($service)) { $statustext = gettext("Running"); $output .= '' . "\n"; $output .= "\"status\""; if ($withtext) $output .= "  " . $statustext; $output .= "\n"; } else { $service_enabled = is_service_enabled($service['name']); $statustext = ($service_enabled) ? gettext("Stopped") : gettext("Disabled"); $output .= '' . "\n"; $output .= "\"status\""; if ($withtext) $output .= "  " . "{$statustext}"; $output .= "\n"; } return $output; } function get_service_control_links($service, $addname = false) { global $g; $output = ""; $stitle = ($addname) ? $service['name'] . " " : ""; if(get_service_status($service)) { switch ($service['name']) { case "openvpn": $output .= ""; break; case "captiveportal": $output .= ""; break; default: $output .= ""; } $output .= "restart\n"; switch ($service['name']) { case "openvpn": $output .= ""; break; case "captiveportal": $output .= ""; break; default: $output .= ""; } $output .= "stop"; $output .= ""; } else { $service_enabled = is_service_enabled($service['name']); switch ($service['name']) { case "openvpn": $output .= ""; break; case "captiveportal": $output .= ""; break; default: if ($service_enabled) $output .= ""; } if ($service_enabled) $output .= "start\n"; } return $output; } function service_control_start($name, $extras) { global $g; switch($name) { case 'radvd': services_radvd_configure(); break; case 'captiveportal': $zone = $extras['zone']; captiveportal_init_webgui_zonename($zone); break; case 'ntpd': case 'openntpd': system_ntp_configure(); break; case 'bsnmpd': services_snmpd_configure(); break; case 'dnsmasq': services_dnsmasq_configure(); break; case 'dhcpd': services_dhcpd_configure(); break; case 'igmpproxy': services_igmpproxy_configure(); break; case 'miniupnpd': upnp_action('start'); break; case 'racoon': vpn_ipsec_force_reload(); break; case 'openvpn': $vpnmode = $extras['vpnmode']; if (($vpnmode == "server") || ($vpnmode == "client")) { $id = $extras['id']; $configfile = "{$g['varetc_path']}/openvpn/{$vpnmode}{$id}.conf"; if (file_exists($configfile)) openvpn_restart_by_vpnid($vpnmode, $id); } break; case 'relayd': relayd_configure(); break; default: start_service($name); break; } return sprintf(gettext("%s has been started."),htmlspecialchars($name)); } function service_control_stop($name, $extras) { global $g; switch($name) { case 'radvd': killbypid("{$g['varrun_path']}/radvd.pid"); break; case 'captiveportal': $zone = $extras['zone']; killbypid("{$g['varrun_path']}/lighty-{$zone}-CaptivePortal.pid"); killbypid("{$g['varrun_path']}/lighty-{$zone}-CaptivePortal-SSL.pid"); break; case 'ntpd': killbyname("ntpd"); break; case 'openntpd': killbyname("openntpd"); break; case 'bsnmpd': killbypid("{$g['varrun_path']}/snmpd.pid"); break; case 'choparp': killbyname("choparp"); break; case 'dhcpd': killbyname("dhcpd"); break; case 'dhcrelay': killbypid("{$g['varrun_path']}/dhcrelay.pid"); break; case 'dnsmasq': killbypid("{$g['varrun_path']}/dnsmasq.pid"); break; case 'igmpproxy': killbyname("igmpproxy"); break; case 'miniupnpd': upnp_action('stop'); break; case 'sshd': killbyname("sshd"); break; case 'racoon': exec("killall -9 racoon"); break; case 'openvpn': $vpnmode = $extras['vpnmode']; if (($vpnmode == "server") or ($vpnmode == "client")) { $id = $extras['id']; $pidfile = "{$g['varrun_path']}/openvpn_{$vpnmode}{$id}.pid"; killbypid($pidfile); } break; case 'relayd': mwexec('pkill relayd'); break; default: stop_service($name); break; } return sprintf(gettext("%s has been stopped."), htmlspecialchars($name)); } function service_control_restart($name, $extras) { global $g; switch($name) { case 'radvd': services_radvd_configure(); break; case 'captiveportal': $zone = $extras['zone']; killbypid("{$g['varrun_path']}/lighty-{$zone}-CaptivePortal.pid"); killbypid("{$g['varrun_path']}/lighty-{$zone}-CaptivePortal-SSL.pid"); captiveportal_init_webgui_zonename($zone); break; case 'ntpd': case 'openntpd': system_ntp_configure(); break; case 'bsnmpd': services_snmpd_configure(); break; case 'dnsmasq': services_dnsmasq_configure(); break; case 'dhcpd': services_dhcpd_configure(); break; case 'igmpproxy': services_igmpproxy_configure(); break; case 'miniupnpd': upnp_action('restart'); break; case 'racoon': vpn_ipsec_force_reload(); break; case 'openvpn': $vpnmode = $extras['vpnmode']; if ($vpnmode == "server" || $vpnmode == "client") { $id = $extras['id']; $configfile = "{$g['varetc_path']}/openvpn/{$vpnmode}{$id}.conf"; if (file_exists($configfile)) openvpn_restart_by_vpnid($vpnmode, $id); } break; case 'relayd': relayd_configure(true); break; default: restart_service($name); break; } return sprintf(gettext("%s has been restarted."),htmlspecialchars($name)); } ?>