/usr/share/icingaweb2/application/clicommands/WebCommand.php is in icingacli 2.4.1-1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
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 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 | <?php
/* Icinga Web 2 | (c) 2014 Icinga Development Team | GPLv2+ */
namespace Icinga\Clicommands;
use Icinga\Application\Icinga;
use Icinga\Cli\Command;
use Icinga\Exception\IcingaException;
class WebCommand extends Command
{
public function serveAction()
{
$minVersion = '5.4.0';
if (version_compare(PHP_VERSION, $minVersion) < 0) {
throw new IcingaException(
'You are running PHP %s, internal webserver requires %s.',
PHP_VERSION,
$minVersion
);
}
$fork = $this->params->get('daemonize');
$documentRoot = $this->params->shift();
$socket = $this->params->shift();
// TODO: Sanity check!!
if ($socket === null) {
$socket = $this->Config()->get('standalone','listen','0.0.0.0:80');
}
if ($documentRoot === null) {
$documentRoot = Icinga::app()->getBaseDir('public');
if (! file_exists($documentRoot) || ! is_dir($documentRoot)) {
throw new IcingaException('Document root directory is required');
}
}
$documentRoot = realpath($documentRoot);
if ($fork) {
$this->forkAndExit();
}
echo "Serving Icinga Web 2 from directory $documentRoot and listening on $socket\n";
$cmd = sprintf(
'%s -S %s -t %s %s',
readlink('/proc/self/exe'),
$socket,
$documentRoot,
Icinga::app()->getLibraryDir('/Icinga/Application/webrouter.php')
);
// TODO: Store webserver log, switch uid, log index.php includes, pid file
if ($fork) {
exec($cmd);
} else {
passthru($cmd);
}
}
public function stopAction()
{
// TODO: No, that's NOT what we want
$prog = readlink('/proc/self/exe');
`killall $prog`;
}
protected function forkAndExit()
{
$pid = pcntl_fork();
if ($pid == -1) {
throw new IcingaException('Could not fork');
} else if ($pid) {
echo $this->screen->colorize('[OK]')
. " Icinga Web server forked successfully\n";
fclose(STDIN);
fclose(STDOUT);
fclose(STDERR);
exit;
// pcntl_wait($status);
} else {
// child
}
}
}
|