Project

General

Profile

Download (22.4 KB) Statistics
| Branch: | Tag: | Revision:
1
<?php
2
/****h* pfSense/service-utils
3
	NAME
4
		service-utils.inc - Service facility
5
	DESCRIPTION
6
		This file contains various functions used by the pfSense service facility.
7
	HISTORY
8
	$Id$
9

    
10
	Copyright (C) 2005-2006 Colin Smith (ethethlay@gmail.com)
11
	All rights reserved.
12
	Redistribution and use in source and binary forms, with or without
13
	modification, are permitted provided that the following conditions are met:
14

    
15
	1. Redistributions of source code must retain the above copyright notice,
16
	   this list of conditions and the following disclaimer.
17

    
18
	2. Redistributions in binary form must reproduce the above copyright
19
	   notice, this list of conditions and the following disclaimer in the
20
	   documentation and/or other materials provided with the distribution.
21

    
22
	THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
23
	INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
24
	AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
25
	AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
26
	OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
27
	SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
28
	INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
29
	CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
30
	RISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
31
	POSSIBILITY OF SUCH DAMAGE.
32

    
33
 */
34

    
35
require_once("globals.inc");
36
require_once("captiveportal.inc");
37
require_once("openvpn.inc");
38
require_once("ipsec.inc");
39
require_once("vpn.inc");
40
require_once("vslb.inc");
41
require_once("gwlb.inc");
42

    
43
define("RCFILEPREFIX", "/usr/local/etc/rc.d/");
44
function write_rcfile($params) {
45
	global $g;
46

    
47
	safe_mkdir(RCFILEPREFIX);
48
	$rcfile_fullname = RCFILEPREFIX . $params['file'];
49
	if (!file_exists($rcfile_fullname) && !is_link($rcfile_fullname) && !touch($rcfile_fullname)) {
50
		return false;
51
	}
52

    
53
	if (!is_writable($rcfile_fullname) || empty($params['start'])) {
54
		return false;
55
	}
56

    
57
	$towrite = "#!/bin/sh\n";
58
	$towrite .= "# This file was automatically generated\n# by the {$g['product_name']} service handler.\n\n";
59

    
60
	/* write our rc functions */
61
	$towrite .= "rc_start() {\n";
62
	$towrite .= "\t{$params['start']}\n";
63
	$towrite .= "}\n\n";
64
	if (!empty($params['stop'])) {
65
		$tokill =& $params['stop'];
66
	} else if (!empty($params['executable'])) {
67
		/* just nuke the executable */
68
		$tokill = "/usr/bin/killall " . escapeshellarg($params['executable']);
69
	} else {
70
		/* make an educated guess (bad) */
71
		$tokill = array_pop(explode('/', array_shift(explode(' ', $params['start']))));
72
	}
73
	$towrite .= "rc_stop() {\n";
74
	$towrite .= "\t{$tokill}\n";
75
	$towrite .= "}\n\n";
76

    
77
	/* begin rcfile logic */
78
	$towrite .= "case \$1 in\n\tstart)\n\t\trc_start\n\t\t;;\n\tstop)\n\t\trc_stop\n\t\t;;\n\trestart)\n\t\trc_stop\n\t\trc_start\n\t\t;;\nesac\n\n";
79

    
80
	@file_put_contents($rcfile_fullname, $towrite);
81
	unset($towrite);
82
	@chmod("{$rcfile_fullname}", 0755);
83

    
84
	return;
85
}
86

    
87
function start_service($name) {
88
	global $config;
89

    
90
	if (empty($name)) {
91
		return;
92
	}
93

    
94
	if (is_array($config['installedpackages']) && is_array($config['installedpackages']['service'])) {
95
		foreach ($config['installedpackages']['service'] as $service) {
96
			if (strtolower($service['name']) == strtolower($name)) {
97
				if ($service['rcfile']) {
98
					$prefix = RCFILEPREFIX;
99
					if (!empty($service['prefix'])) {
100
						$prefix =& $service['prefix'];
101
					}
102
					if (file_exists("{$prefix}{$service['rcfile']}") || is_link("{$prefix}{$service['rcfile']}")) {
103
						mwexec_bg("{$prefix}{$service['rcfile']} start");
104
					}
105
				}
106
				if (!empty($service['startcmd'])) {
107
					eval($service['startcmd']);
108
				}
109
				break;
110
			}
111
		}
112
	}
113
}
114

    
115
function stop_service($name) {
116
	global $config;
117

    
118
	if (empty($name)) {
119
		return;
120
	}
121

    
122
	if (is_array($config['installedpackages']) && is_array($config['installedpackages']['service'])) {
123
		foreach ($config['installedpackages']['service'] as $service) {
124
			if (strtolower($service['name']) == strtolower($name)) {
125
				if ($service['rcfile']) {
126
					$prefix = RCFILEPREFIX;
127
					if (!empty($service['prefix'])) {
128
						$prefix =& $service['prefix'];
129
					}
130
					if (file_exists("{$prefix}{$service['rcfile']}") || is_link("{$prefix}{$service['rcfile']}")) {
131
						mwexec("{$prefix}{$service['rcfile']} stop");
132
					}
133
					return;
134
				}
135
				if (!empty($service['stopcmd'])) {
136
					eval($service['stopcmd']);
137
				} elseif (!empty($service['executable'])) {
138
					mwexec("/usr/bin/killall " . escapeshellarg($service['executable']));
139
				}
140

    
141
				break;
142
			}
143
		}
144
	}
145
}
146

    
147
function restart_service($name) {
148
	global $config;
149

    
150
	if (empty($name)) {
151
		return;
152
	}
153

    
154
	if (is_service_running($name)) {
155
		stop_service($name);
156
	}
157
	start_service($name);
158

    
159
	if (is_array($config['installedpackages']) && is_array($config['installedpackages']['service'])) {
160
		foreach ($config['installedpackages']['service'] as $service) {
161
			if (strtolower($service['name']) == strtolower($name)) {
162
				if ($service['restartcmd']) {
163
					eval($service['restartcmd']);
164
				}
165
				break;
166
			}
167
		}
168
	}
169
}
170

    
171
function is_pid_running($pidfile) {
172
	if (!file_exists($pidfile)) {
173
		return false;
174
	}
175

    
176
	return (isvalidpid($pidfile));
177
}
178

    
179
function is_dhcp_running($interface) {
180
	$status = find_dhclient_process($interface);
181
	if ($status != 0) {
182
		return true;
183
	}
184
	return false;
185
}
186

    
187
function restart_service_if_running($service) {
188
	global $config;
189
	if (is_service_running($service)) {
190
		restart_service($service);
191
	}
192
	return;
193
}
194

    
195
function is_service_enabled($service_name) {
196
	global $config;
197
	if ($service_name == "") {
198
		return false;
199
	}
200
	if (is_array($config['installedpackages'])) {
201
		if (isset($config['installedpackages'][$service_name]['config'][0]['enable']) &&
202
		    ((empty($config['installedpackages'][$service_name]['config'][0]['enable'])) ||
203
		    ($config['installedpackages'][$service_name]['config'][0]['enable'] === 'off'))) {
204
			return false;
205
		}
206
	}
207
	return true;
208
}
209

    
210
function is_service_running($service, $ps = "") {
211
	global $config;
212

    
213
	if (is_array($config['installedpackages']['service'])) {
214
		foreach ($config['installedpackages']['service'] as $aservice) {
215
			if (strtolower($service) == strtolower($aservice['name'])) {
216
				if ($aservice['custom_php_service_status_command'] <> "") {
217
					eval("\$rc={$aservice['custom_php_service_status_command']};");
218
					return $rc;
219
				}
220
				if (empty($aservice['executable'])) {
221
					return false;
222
				}
223
				if (is_process_running($aservice['executable'])) {
224
					return true;
225
				}
226

    
227
				return false;
228
			}
229
		}
230
	}
231

    
232
	if (is_process_running($service)) {
233
		return true;
234
	}
235

    
236
	return false;
237
}
238

    
239
function get_services() {
240
	global $config;
241
	if (is_array($config['installedpackages']['service'])) {
242
		$services = $config['installedpackages']['service'];
243
	} else {
244
		$services = array();
245
	}
246

    
247
	/*
248
	 * Add services that are in the base.
249
	 */
250
	if (is_radvd_enabled()) {
251
		$pconfig = array();
252
		$pconfig['name'] = "radvd";
253
		$pconfig['description'] = gettext("Router Advertisement Daemon");
254
		$services[] = $pconfig;
255
	}
256

    
257
	if (isset($config['dnsmasq']['enable'])) {
258
		$pconfig = array();
259
		$pconfig['name'] = "dnsmasq";
260
		$pconfig['description'] = gettext("DNS Forwarder");
261
		$services[] = $pconfig;
262
	}
263

    
264
	if (isset($config['unbound']['enable'])) {
265
		$pconfig = array();
266
		$pconfig['name'] = "unbound";
267
		$pconfig['description'] = gettext("DNS Resolver");
268
		$services[] = $pconfig;
269
	}
270

    
271
	$pconfig = array();
272
	$pconfig['name'] = "ntpd";
273
	$pconfig['description'] = gettext("NTP clock sync");
274
	$services[] = $pconfig;
275

    
276
	if (is_array($config['captiveportal'])) {
277
		foreach ($config['captiveportal'] as $zone => $setting) {
278
			if (isset($setting['enable'])) {
279
				$pconfig = array();
280
				$pconfig['name'] = "captiveportal";
281
				$pconfig['zone'] = $zone;
282
				$pconfig['description'] = gettext("Captive Portal") . ": ".htmlspecialchars($setting['zone']);
283
				$services[] = $pconfig;
284
			}
285
		}
286
	}
287

    
288
	$iflist = array();
289
	$ifdescrs = get_configured_interface_list();
290
	foreach ($ifdescrs as $if) {
291
		$oc = $config['interfaces'][$if];
292
		if ($oc['if'] && (!link_interface_to_bridge($if))) {
293
			$iflist[$if] = $if;
294
		}
295
	}
296

    
297
	if (isset($config['dhcrelay']['enable'])) {
298
		$pconfig = array();
299
		$pconfig['name'] = "dhcrelay";
300
		$pconfig['description'] = gettext("DHCP Relay");
301
		$services[] = $pconfig;
302
	}
303

    
304
	if (isset($config['dhcrelay6']['enable'])) {
305
		$pconfig = array();
306
		$pconfig['name'] = "dhcrelay6";
307
		$pconfig['description'] = gettext("DHCPv6 Relay");
308
		$services[] = $pconfig;
309
	}
310

    
311
	if (is_dhcp_server_enabled()) {
312
		$pconfig = array();
313
		$pconfig['name'] = "dhcpd";
314
		$pconfig['description'] = gettext("DHCP Service");
315
		$services[] = $pconfig;
316
	}
317

    
318
	$gateways_arr = return_gateways_array();
319
	if (is_array($gateways_arr)) {
320
		$pconfig = array();
321
		$pconfig['name'] = "dpinger";
322
		$pconfig['description'] = gettext("Gateway Monitoring Daemon");
323
		$services[] = $pconfig;
324
	}
325

    
326
	if (isset($config['snmpd']['enable'])) {
327
		$pconfig = array();
328
		$pconfig['name'] = "bsnmpd";
329
		$pconfig['description'] = gettext("SNMP Service");
330
		$services[] = $pconfig;
331
	}
332

    
333
	if (is_array($config['igmpproxy']['igmpentry']) && (count($config['igmpproxy']['igmpentry']) > 0)) {
334
		$pconfig = array();
335
		$pconfig['name'] = "igmpproxy";
336
		$pconfig['description'] = gettext("IGMP proxy");
337
		$services[] = $pconfig;
338
	}
339

    
340
	if (isset($config['installedpackages']['miniupnpd']) && $config['installedpackages']['miniupnpd']['config'][0]['enable']) {
341
		$pconfig = array();
342
		$pconfig['name'] = "miniupnpd";
343
		$pconfig['description'] = gettext("UPnP Service");
344
		$services[] = $pconfig;
345
	}
346

    
347
	if (ipsec_enabled()) {
348
		$pconfig = array();
349
		$pconfig['name'] = "ipsec";
350
		$pconfig['description'] = gettext("IPsec VPN");
351
		$services[] = $pconfig;
352
	}
353

    
354
	if (isset($config['system']['enablesshd'])) {
355
		$pconfig = array();
356
		$pconfig['name'] = "sshd";
357
		$pconfig['description'] = gettext("Secure Shell Daemon");
358
		$services[] = $pconfig;
359
	}
360

    
361
	foreach (array('server', 'client') as $mode) {
362
		if (is_array($config['openvpn']["openvpn-{$mode}"])) {
363
			foreach ($config['openvpn']["openvpn-{$mode}"] as $id => $setting) {
364
				if (!isset($setting['disable'])) {
365
					$pconfig = array();
366
					$pconfig['name'] = "openvpn";
367
					$pconfig['mode'] = $mode;
368
					$pconfig['id'] = $id;
369
					$pconfig['vpnid'] = $setting['vpnid'];
370
					$pconfig['description'] = gettext("OpenVPN") . " ".$mode.": ".htmlspecialchars($setting['description']);
371
					$services[] = $pconfig;
372
				}
373
			}
374
		}
375
	}
376

    
377
	if (count($config['load_balancer']['virtual_server']) && count($config['load_balancer']['lbpool'])) {
378
		$pconfig = array();
379
		$pconfig['name'] = "relayd";
380
		$pconfig['description'] = gettext("Server load balancing daemon");
381
		$services[] = $pconfig;
382
	}
383
	return $services;
384
}
385

    
386
function find_service_by_name($name) {
387
	$services = get_services();
388
	foreach ($services as $service) {
389
		if ($service["name"] == $name) {
390
			return $service;
391
		}
392
	}
393
	return array();
394
}
395

    
396
function find_service_by_openvpn_vpnid($vpnid) {
397
	$services = get_services();
398
	foreach ($services as $service) {
399
		if (($service["name"] == "openvpn") && isset($service["vpnid"]) && ($service["vpnid"] == $vpnid)) {
400
			return $service;
401
		}
402
	}
403
	return array();
404
}
405

    
406
function find_service_by_cp_zone($zone) {
407
	$services = get_services();
408
	foreach ($services as $service) {
409
		if (($service["name"] == "captiveportal") && isset($service["zone"]) && ($service["zone"] == $zone)) {
410
			return $service;
411
		}
412
	}
413
	return array();
414
}
415

    
416
function service_name_compare($a, $b) {
417
	if (strtolower($a['name']) == strtolower($b['name'])) {
418
		return 0;
419
	}
420
	return (strtolower($a['name']) < strtolower($b['name'])) ? -1 : 1;
421
}
422

    
423
function get_pkg_descr($package_name) {
424
	global $config;
425
	if (is_array($config['installedpackages']['package'])) {
426
		foreach ($config['installedpackages']['package'] as $pkg) {
427
			if ($pkg['name'] == $package_name) {
428
				return $pkg['descr'];
429
			}
430
		}
431
	}
432
	return gettext("Not available.");
433
}
434

    
435
function get_service_status($service) {
436
	global $g;
437
	switch ($service['name']) {
438
		case "openvpn":
439
			$running = is_pid_running("{$g['varrun_path']}/openvpn_{$service['mode']}{$service['vpnid']}.pid");
440
			break;
441
		case "captiveportal":
442
			$running = is_pid_running("{$g['varrun_path']}/nginx-{$service['zone']}-CaptivePortal.pid");
443
			if (isset($config['captiveportal'][$service['zone']]['httpslogin'])) {
444
				$running = $running && is_pid_running("{$g['varrun_path']}/nginx-{$service['zone']}-CaptivePortal-SSL.pid");
445
			}
446
			break;
447
		case "vhosts-http":
448
			$running = is_pid_running("{$g['varrun_path']}/vhosts-http.pid");
449
			break;
450
		case "dhcrelay6":
451
			$running = is_pid_running("{$g['varrun_path']}/dhcrelay6.pid");
452
			break;
453
		case 'ipsec':
454
			$running = is_pid_running("{$g['varrun_path']}/charon.pid");
455
			break;
456
		default:
457
			$running = is_service_running($service['name']);
458
	}
459
	return $running;
460
}
461

    
462
function get_service_status_icon($service, $withtext = true, $smallicon = false) {
463
	global $g;
464
	$output = "";
465
	if (get_service_status($service)) {
466
		$statustext = gettext("Running");
467
		$output .= "<a title=\"" . sprintf(gettext("%s Service is"), $service["name"]) . " {$statustext}\" ><i class=\"";
468
		$output .= ($smallicon) ? "fa fa-play" : "fa fa-lg fa-play";
469
		$output .= "\" ></i></a>";
470
		if ($withtext) {
471
			$output .= "&nbsp;" . $statustext;
472
		}
473
	} else {
474
		$service_enabled = is_service_enabled($service['name']);
475
		$statustext = ($service_enabled) ? gettext("Stopped") : gettext("Disabled");
476
		$output .= "<a title=\"" . sprintf(gettext("%s Service is"), $service["name"]) . " {$statustext}\" ><i class=\"";
477
		$output .= ($smallicon) ? "fa fa-times" : "fa fa-lg fa-times";
478
		$output .= "\" ></i></a>";
479
		if ($withtext) {
480
			$output .= "&nbsp;" . $statustext;
481
		}
482
	}
483
	return $output;
484
}
485

    
486

    
487
// This version proved GET formatted links
488
function get_service_control_GET_links($service, $addname = false) {
489
	global $g;
490
	$output = "";
491
	$stitle = ($addname) ? $service['name'] . " " : "";
492

    
493
	switch ($service['name']) {
494
		case "openvpn":
495
			$link = '<a title="%s" href="status_services.php?mode=%s&amp;service='.$service['name'] . '&amp;vpnmode=' . $service['mode'] . '&amp;id=' . $service['vpnid'] . '">';
496
		break;
497
		case "captiveportal":
498
			$link = '<a title="%s" href="status_services.php?mode=%s&amp;service=' . $service['name'] . '&amp;zone=' . $service['zone'] . '">';
499
		break;
500
		default:
501
			$link = '<a title="%s" href="status_services.php?mode=%s&amp;service=' . $service['name'] . '">';
502
	}
503

    
504
	if (get_service_status($service)) {
505
		switch ($service['name']) {
506
			case "openvpn":
507
				$output .= "<a href=\"status_services.php?mode=restartservice&amp;service={$service['name']}&amp;vpnmode={$service['mode']}&amp;id={$service['vpnid']}\">";
508
				break;
509
			case "captiveportal":
510
				$output .= "<a href=\"status_services.php?mode=restartservice&amp;service={$service['name']}&amp;zone={$service['zone']}\">";
511
				break;
512
			default:
513
				$output .= "<a href=\"status_services.php?mode=restartservice&amp;service={$service['name']}\">";
514
		}
515
		$output .= "<i class=\"fa fa-repeat\" title=\"" . sprintf(gettext("Restart %sService"), $stitle) . "\"></i></a>\n";
516
		switch ($service['name']) {
517
			case "openvpn":
518
				$output .= "<a href=\"status_services.php?mode=stopservice&amp;service={$service['name']}&amp;vpnmode={$service['mode']}&amp;id={$service['vpnid']}\">";
519
				break;
520
			case "captiveportal":
521
				$output .= "<a href=\"status_services.php?mode=stopservice&amp;service={$service['name']}&amp;zone={$service['zone']}\">";
522
				break;
523
			default:
524
				$output .= "<a href=\"status_services.php?mode=stopservice&amp;service={$service['name']}\">";
525
		}
526
		$output .= "<i class=\"fa fa-stop-circle-o\" title=\"" . sprintf(gettext("Stop %sService"), $stitle) . "\"></i></a>";
527
	} else {
528
		$service_enabled = is_service_enabled($service['name']);
529

    
530
		if ($service['name'] == 'openvpn' || $service['name'] == 'captiveportal' || $service_enabled) {
531
			$output .= sprintf($link, sprintf(gettext("Start %sService"), $stitle), 'startservice');
532
			$output .= '<i class="fa fa-play-circle"></i></a> ';
533
		}
534
	}
535

    
536
	return $output;
537
}
538

    
539
function get_service_control_links($service, $addname = false) {
540
	global $g;
541
	$output = "";
542
	$stitle = ($addname) ? $service['name'] . " " : "";
543

    
544
	switch ($service['name']) {
545
		case "openvpn":
546
			$link = '<a title="%s" href="#" id="openvpn-%s-' . $service['mode'] . '-' . $service['vpnid'] . '" >';
547
		break;
548
		case "captiveportal":
549
			$link = '<a title="%s" href="#" id="captiveportal-%s-' . $service['zone'] . '">';
550
		break;
551
		default:
552
			$link = '<a title="%s" href="#" id="%s-' . $service['name'] . '">';
553
	}
554

    
555
	if (get_service_status($service)) {
556
		switch ($service['name']) {
557
			case "openvpn":
558
				$output .= '<a href="#" id="openvpn-restartservice-' . $service['mode'] . '-' . $service['vpnid'] . '" >';
559
				break;
560
			case "captiveportal":
561
				$output .= '<a href="#" id="captiveportal-restartservice-' . $service['zone'] . '">';
562
				break;
563
			default:
564
				$output .= '<a href="#" id="restartservice-' . $service['name'] . '" >';
565
		}
566

    
567
		$output .= "<i class=\"fa fa-repeat\" title=\"" . sprintf(gettext("Restart %sService"), $stitle) . "\"></i></a>\n";
568

    
569
		switch ($service['name']) {
570
			case "openvpn":
571
				$output .= '<a href="#" id="openvpn-stopservice-' . $service['mode'] . '-' . $service['vpnid'] . '" >';
572
				break;
573
			case "captiveportal":
574
				$output .= '<a href="#" id="captiveportal-stopservice-' . $service['zone'] . '">';
575
				break;
576
			default:
577
				$output .= '<a href="#" id="stopservice-' . $service['name'] . '">';
578
		}
579

    
580
		$output .= "<i class=\"fa fa-stop-circle-o\" title=\"" . sprintf(gettext("Stop %sService"), $stitle) . "\"></i></a>";
581

    
582
	} else {
583
		$service_enabled = is_service_enabled($service['name']);
584

    
585
		if ($service['name'] == 'openvpn' || $service['name'] == 'captiveportal' || $service_enabled) {
586
			$output .= sprintf($link, sprintf(gettext("Start %sService"), $stitle), 'startservice');
587
			$output .= '<i class="fa fa-play-circle"></i></a> ';
588
		}
589
	}
590

    
591
	return $output;
592
}
593

    
594
function service_control_start($name, $extras) {
595
	global $g;
596
	switch ($name) {
597
		case 'radvd':
598
			services_radvd_configure();
599
			break;
600
		case 'captiveportal':
601
			$zone = htmlspecialchars($extras['zone']);
602
			captiveportal_init_webgui_zonename($zone);
603
			break;
604
		case 'ntpd':
605
		case 'openntpd':
606
			system_ntp_configure();
607
			break;
608
		case 'dpinger':
609
			setup_gateways_monitor();
610
			break;
611
		case 'bsnmpd':
612
			services_snmpd_configure();
613
			break;
614
		case 'dhcrelay':
615
			services_dhcrelay_configure();
616
			break;
617
		case 'dhcrelay6':
618
			services_dhcrelay6_configure();
619
			break;
620
		case 'dnsmasq':
621
			services_dnsmasq_configure();
622
			break;
623
		case 'unbound':
624
			services_unbound_configure();
625
			break;
626
		case 'dhcpd':
627
			services_dhcpd_configure();
628
			break;
629
		case 'igmpproxy':
630
			services_igmpproxy_configure();
631
			break;
632
		case 'miniupnpd':
633
			upnp_action('start');
634
			break;
635
		case 'ipsec':
636
			vpn_ipsec_force_reload();
637
			break;
638
		case 'sshd':
639
			send_event("service restart sshd");
640
			break;
641
		case 'openvpn':
642
			$vpnmode = isset($extras['vpnmode']) ? htmlspecialchars($extras['vpnmode']) : htmlspecialchars($extras['mode']);
643
			if (($vpnmode == "server") || ($vpnmode == "client")) {
644
				$id = isset($extras['vpnid']) ? htmlspecialchars($extras['vpnid']) : htmlspecialchars($extras['id']);
645
				$configfile = "{$g['varetc_path']}/openvpn/{$vpnmode}{$id}.conf";
646
				if (file_exists($configfile)) {
647
					openvpn_restart_by_vpnid($vpnmode, $id);
648
				}
649
			}
650
			break;
651
		case 'relayd':
652
			relayd_configure();
653
			break;
654
		default:
655
			start_service($name);
656
			break;
657
	}
658
	return sprintf(gettext("%s has been started."), htmlspecialchars($name));
659
}
660
function service_control_stop($name, $extras) {
661
	global $g;
662
	switch ($name) {
663
		case 'radvd':
664
			killbypid("{$g['varrun_path']}/radvd.pid");
665
			break;
666
		case 'captiveportal':
667
			$zone = htmlspecialchars($extras['zone']);
668
			killbypid("{$g['varrun_path']}/nginx-{$zone}-CaptivePortal.pid");
669
			killbypid("{$g['varrun_path']}/nginx-{$zone}-CaptivePortal-SSL.pid");
670
			break;
671
		case 'ntpd':
672
			killbyname("ntpd");
673
			break;
674
		case 'openntpd':
675
			killbyname("openntpd");
676
			break;
677
		case 'dpinger':
678
			stop_dpinger();
679
			break;
680
		case 'bsnmpd':
681
			killbypid("{$g['varrun_path']}/snmpd.pid");
682
			break;
683
		case 'choparp':
684
			killbyname("choparp");
685
			break;
686
		case 'dhcpd':
687
			killbyname("dhcpd");
688
			break;
689
		case 'dhcrelay':
690
			killbypid("{$g['varrun_path']}/dhcrelay.pid");
691
			break;
692
		case 'dhcrelay6':
693
			killbypid("{$g['varrun_path']}/dhcrelay6.pid");
694
			break;
695
		case 'dnsmasq':
696
			killbypid("{$g['varrun_path']}/dnsmasq.pid");
697
			break;
698
		case 'unbound':
699
			killbypid("{$g['varrun_path']}/unbound.pid");
700
			break;
701
		case 'igmpproxy':
702
			killbyname("igmpproxy");
703
			break;
704
		case 'miniupnpd':
705
			upnp_action('stop');
706
			break;
707
		case 'sshd':
708
			killbyname("sshd");
709
			break;
710
		case 'ipsec':
711
			exec("/usr/local/sbin/ipsec stop");
712
			break;
713
		case 'openvpn':
714
			$vpnmode = htmlspecialchars($extras['vpnmode']);
715
			if (($vpnmode == "server") or ($vpnmode == "client")) {
716
				$id = htmlspecialchars($extras['id']);
717
				$pidfile = "{$g['varrun_path']}/openvpn_{$vpnmode}{$id}.pid";
718
				killbypid($pidfile);
719
			}
720
			break;
721
		case 'relayd':
722
			mwexec('pkill relayd');
723
			break;
724
		default:
725
			stop_service($name);
726
			break;
727
	}
728
	return sprintf(gettext("%s has been stopped."), htmlspecialchars($name));
729
}
730

    
731
function service_control_restart($name, $extras) {
732
	global $g;
733
	switch ($name) {
734
		case 'radvd':
735
			services_radvd_configure();
736
			break;
737
		case 'captiveportal':
738
			$zone = htmlspecialchars($extras['zone']);
739
			killbypid("{$g['varrun_path']}/nginx-{$zone}-CaptivePortal.pid");
740
			killbypid("{$g['varrun_path']}/nginx-{$zone}-CaptivePortal-SSL.pid");
741
			captiveportal_init_webgui_zonename($zone);
742
			break;
743
		case 'ntpd':
744
		case 'openntpd':
745
			system_ntp_configure();
746
			break;
747
		case 'dpinger':
748
			setup_gateways_monitor();
749
			break;
750
		case 'bsnmpd':
751
			services_snmpd_configure();
752
			break;
753
		case 'dhcrelay':
754
			services_dhcrelay_configure();
755
			break;
756
		case 'dhcrelay6':
757
			services_dhcrelay6_configure();
758
			break;
759
		case 'dnsmasq':
760
			services_dnsmasq_configure();
761
			break;
762
		case 'unbound':
763
			services_unbound_configure();
764
			break;
765
		case 'dhcpd':
766
			services_dhcpd_configure();
767
			break;
768
		case 'igmpproxy':
769
			services_igmpproxy_configure();
770
			break;
771
		case 'miniupnpd':
772
			upnp_action('restart');
773
			break;
774
		case 'ipsec':
775
			vpn_ipsec_force_reload();
776
			break;
777
		case 'sshd':
778
			send_event("service restart sshd");
779
			break;
780
		case 'openvpn':
781
			$vpnmode = htmlspecialchars($extras['vpnmode']);
782
			if ($vpnmode == "server" || $vpnmode == "client") {
783
				$id = htmlspecialchars($extras['id']);
784
				$configfile = "{$g['varetc_path']}/openvpn/{$vpnmode}{$id}.conf";
785
				if (file_exists($configfile)) {
786
					openvpn_restart_by_vpnid($vpnmode, $id);
787
				}
788
			}
789
			break;
790
		case 'relayd':
791
			relayd_configure(true);
792
			break;
793
		default:
794
			restart_service($name);
795
			break;
796
	}
797
	return sprintf(gettext("%s has been restarted."), htmlspecialchars($name));
798
}
799

    
800
?>
(48-48/65)