spewlogfile.php3 2.34 KB
Newer Older
1
<?php
Leigh Stoller's avatar
Leigh Stoller committed
2
#
Leigh Stoller's avatar
Leigh Stoller committed
3
# Copyright (c) 2000-2016 University of Utah and the Flux Group.
4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
# 
# {{{EMULAB-LICENSE
# 
# This file is part of the Emulab network testbed software.
# 
# This file is free software: you can redistribute it and/or modify it
# under the terms of the GNU Affero General Public License as published by
# the Free Software Foundation, either version 3 of the License, or (at
# your option) any later version.
# 
# This file is distributed in the hope that it will be useful, but WITHOUT
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Affero General Public
# License for more details.
# 
# You should have received a copy of the GNU Affero General Public License
# along with this file.  If not, see <http://www.gnu.org/licenses/>.
# 
# }}}
Leigh Stoller's avatar
Leigh Stoller committed
23
#
24
include_once("defs.php3");
25 26

#
27
# Get current user, but allow for anon access.
28
#
29 30 31
$this_user = CheckLogin($check_status);
$uid       = ($this_user ? $this_user->uid() : "nobody");
$anonopt   = ($this_user ? "" : "-a");
32 33 34 35

#
# Verify page arguments.
#
36
$reqargs = RequiredPageArguments("logfile",  PAGEARG_LOGFILE);
37
$optargs = OptionalPageArguments("isajax",   PAGEARG_BOOLEAN);
38

39 40
if (! isset($logfile)) {
    PAGEARGERROR("Must provide either a logfile ID");
41 42
}

43
# Check permission in the backend.
44
$logfileid = $logfile->logid();
45

46
#
47
# Switch to APT version.
48
#
49
if (!isset($isajax) && $logfile->isopen()) {
50 51
    header("Location: apt/spewlogfile.php?logfile=$logfileid");
    return;
52 53
}

54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69
#
# A cleanup function to keep the child from becoming a zombie, since
# the script is terminated, but the children are left to roam.
#
$fp = 0;

function SPEWCLEANUP()
{
    global $fp;

    if (!$fp || !connection_aborted()) {
	exit();
    }
    pclose($fp);
    exit();
}
70
ignore_user_abort(1);
71 72
register_shutdown_function("SPEWCLEANUP");

73 74 75
if ($fp =
    popen("$TBSUEXEC_PATH $uid nobody ".
	  "spewlogfile $anonopt -w -i " . escapeshellarg($logfileid), "r")) {
76 77 78 79
    header("Content-Type: text/plain");
    header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
    header("Cache-Control: no-cache, must-revalidate");
    header("Pragma: no-cache");
Leigh Stoller's avatar
Leigh Stoller committed
80
    header("Access-Control-Allow-Origin: *");
81 82 83 84
    flush();

    while (!feof($fp)) {
	$string = fgets($fp, 1024);
85 86 87 88 89 90 91
	echo "$string";
	flush();
    }
    pclose($fp);
    $fp = 0;
}
else {
92
    USERERROR("Logfile $logfileid is no longer valid!", 1);
93 94 95
}

?>