defs.php3.in 5.76 KB
Newer Older
1 2
<?php
#
3
# Standard definitions! 
4
#
5 6 7
$TBDIR          = "@prefix@/";
$WWWDEFS        = "@WWWDEFS@";

8 9 10
# Overridden by the defs file!
$TBMAINSITE     = 0;

11 12 13 14 15
#
# Include configure selected definitions.
#
include("$WWWDEFS"."-defs.php3");

Leigh B. Stoller's avatar
Leigh B. Stoller committed
16 17
$TBWWW_DIR	= "$TBDIR"."www/";
$TBBIN_DIR	= "$TBDIR"."bin/";
18
$TBETC_DIR	= "$TBDIR"."etc/";
19 20 21
$TBLIBEXEC_DIR	= "$TBDIR"."libexec/";
$TBSUEXEC_PATH  = "$TBLIBEXEC_DIR/suexec";
$TBCHKPASS_PATH = "$TBLIBEXEC_DIR/checkpass";
22
$TBCSLOGINS     = "$TBETC_DIR/cslogins";
23

24 25 26 27 28 29 30 31
#
# Hardcoded check against $WWWHOST, to prevent anyone from accidentally setting
# $TBMAINSITE when it shouldn't be
#
if ($WWWHOST != "www.emulab.net") {
    $TBMAINSITE = 0;
}

32
$TBPROJ_DIR     = "/proj";
33
$TBUSER_DIR	= "/users";
Leigh B. Stoller's avatar
Leigh B. Stoller committed
34
$TBNSSUBDIR     = "nsdir";
Leigh B. Stoller's avatar
Leigh B. Stoller committed
35

36 37
$TBAUTHCOOKIE   = "HashCookie" . $TBCOOKIESUFFIX;
$TBNAMECOOKIE   = "MyUidCookie" . $TBCOOKIESUFFIX;
38
$TBAUTHTIMEOUT  = 21600;
39

40 41
$HTTPTAG        = "http://";

42
#
43 44 45
# This just spits out an email address in a page, so it does not need
# to be configured per development tree. It could be though ...
# 
46 47
$TBMAILADDR     = "<a href=\"mailto:$TBMAILADDR_OPS\">
                      Testbed Operations ($TBMAILADDR_OPS)</a>";
48

49 50 51 52 53
#
# Database constants and the like.
#
include("dbdefs.php3");

54 55 56 57
#
# Generate the KEY from a name
#
function GENKEY ($name) {
58
    return crypt("TB_"."$name"."_USR", strlen($name) + 13);
59 60
}

61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78
#
# Wrap up the mail function so we can prepend a tag to the subject
# line that indicates what testbed. Useful when multiple testbed
# email to the same list.
#
# 
function TBMAIL($to, $subject, $message, $headers = 0)
{
    global $THISHOMEBASE;

    $subject = strtoupper($THISHOMEBASE) . ": $subject";

    if ($headers)
	    return mail($to, $subject, $message, $headers);
    else
	    return mail($to, $subject, $message);
}

79 80 81 82 83
#
# Internal errors should be reported back to the user simply. The actual 
# error information should be emailed to the list for action. The script
# should then terminate if required to do so.
#
84
function TBERROR ($message, $death, $xmp = 0) {
Leigh B. Stoller's avatar
Leigh B. Stoller committed
85
    global $TBMAIL_WWW, $TBMAIL_OPS, $TBMAILADDR;
86

87 88
    TBMAIL($TBMAIL_OPS,
         "WEB ERROR REPORT",
89 90 91 92
         "\n".
         "$message\n\n".
         "Thanks,\n".
         "Testbed WWW\n",
93
         "From: $TBMAIL_OPS\n".
94
         "Errors-To: $TBMAIL_WWW");
95

Leigh B. Stoller's avatar
Leigh B. Stoller committed
96
    # Allow sendmail to run.
97 98
    sleep(1);
    
99
    if ($death) {
100 101 102
	if ($xmp)
	    $message = "<XMP>$message</XMP>\n";
	
103
            $msg = "<font size=+1><br>
104 105
                    $message
	            <br>	
106
        	    </font>
107 108 109 110
                    <p><p>
		    Could not continue. Please contact $TBMAILADDR\n";

	    PAGEERROR($msg);
111 112 113
    }
    return 0;
}
Leigh B. Stoller's avatar
Leigh B. Stoller committed
114 115 116 117 118

#
# General user errors should print something warm and fuzzy
#
function USERERROR($message, $death) {
119 120
    global $TBMAILADDR;

121
    $msg = "<font size=+1><br>
122 123
            $message
            <br>	
124
      	    </font>
125 126
            <p><p>
            Please contact $TBMAILADDR if you feel this message is an error.";
127

Leigh B. Stoller's avatar
Leigh B. Stoller committed
128
    if ($death) {
129
	PAGEERROR($msg);
Leigh B. Stoller's avatar
Leigh B. Stoller committed
130
    }
131 132
    else
        echo "$msg\n";
Leigh B. Stoller's avatar
Leigh B. Stoller committed
133 134
}

135 136 137 138 139 140 141 142
#
# A form error.
#
function FORMERROR($field) {
    USERERROR("Missing field; ".
              "Please go back and fill out the \"$field\" field!", 1);
}

143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162
#
# Is this user an admin type?
#
function ISADMIN($uid) {
    global $TBDBNAME;

    $query_result = mysql_db_query($TBDBNAME,
	"SELECT admin FROM users WHERE uid='$uid'");

    if (! $query_result) {
        $err = mysql_error();
        TBERROR("Database Error getting admin status for $uid: $err\n", 1);
    }

    $row = mysql_fetch_row($query_result);
    $admin  = $row[0];

    return $admin;
}

163 164 165 166
#
# Run a program as a user.
#
function SUEXEC($uid, $gid, $cmdandargs, $die) {
167
    global $TBSUEXEC_PATH;
168

169 170
    ignore_user_abort(1);

171 172
    $output = array();
    $retval = 0;
173
    $result = exec("$TBSUEXEC_PATH $uid $gid $cmdandargs",
174 175 176
		   $output, $retval);

    if ($retval) {
177
	$foo = "";
178 179 180 181
        for ($i = 0; $i < count($output); $i++) {
	      $foo = "$foo $output[$i]";
	}
	
182 183 184
	TBERROR("SUEXEC failure: '$cmdandargs'\n".
		"Error output:\n\n".
                "$foo", $die, 1);
185 186 187 188
    }
    return $retval;
}

189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204
#
# Verify a URL.
#
function VERIFYURL($url) {
    global $HTTPTAG;

    if (strlen($url)) {
	if (strstr($url, " ")) {
	    USERERROR("URL ($url) is malformed; spaces are not allowed. ".
		      "Please go back and fix it up.", 1);
	}
	
	if (strcmp($HTTPTAG, substr($url, 0, strlen($HTTPTAG)))) {
	    USERERROR("URL ($url) must begin with $HTTPTAG. ".
		      "Please go back and fix it up.", 1);
	}
205
	$fp = fopen($url, "r");
206 207 208 209 210 211 212 213 214
	if (! $fp) {
	    USERERROR("URL ($url) is not valid (cannot be accessed). ".
		      "Please go back and fix it up.", 1);
	}
	fclose($fp);
    }
    return 0;
}

215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264
#
# Verify a URL.
#
function CHECKURL($url, &$error) {
    global $HTTPTAG;

    if (strlen($url)) {
	if (strstr($url, " ")) {
	    $error = "URL is malformed; spaces are not allowed!";
	    return 0;
	}
	
	if (strcmp($HTTPTAG, substr($url, 0, strlen($HTTPTAG)))) {
	    $error = "URL is malformed; must begin with $HTTPTAG!";
	    return 0;
	}
	
	$fp = @fopen($url, "r");
	if (! $fp) {
	    $error = "URL is not valid; Cannot be accessed!";
	    return 0;
	}
	fclose($fp);
    }
    return 1;
}

#
# Check a password.
#
function CHECKPASSWORD($uid, $password, $name, $email, &$error)
{
    global $TBCHKPASS_PATH;
    
    $mypipe =
	popen(escapeshellcmd("$TBCHKPASS_PATH $password $uid '$name:$email'"),
	      "w+");
    
    if ($mypipe) { 
        $retval=fgets($mypipe, 1024);
        if (strcmp($retval,"ok\n") != 0) {
	    $error = "$retval";
	    return 0;
	}
	return 1;
    }
    TBERROR("Checkpass Failure! Returned '$mypipe'.\n\n".
	    "$TBCHKPASS_PATH $password $uid '$name:$email'", 1);
}

265 266 267 268
function LASTNODELOGIN($node)
{
}

269 270 271 272
#
# Beware empty spaces (cookies)!
# 
require("tbauth.php3");
273 274 275 276 277

#
# Okay, this is what checks the login and spits out the menu.
#
require("menu.php3");
278
?>