function Show($showperms = 0) { global $TBBASE; $imageid = $this->imageid(); $imagename = $this->imagename(); $pid = $this->pid(); $gid = $this->gid(); $description = $this->description(); $loadpart = $this->loadpart(); $loadlength = $this->loadlength(); $part1_osid = $this->part1_osid(); $part2_osid = $this->part2_osid(); $part3_osid = $this->part3_osid(); $part4_osid = $this->part4_osid(); $default_osid = $this->default_osid(); $path = $this->path(); $shared = $this->shared(); $globalid = $this->isglobal(); $creator = $this->creator(); $creator_urn = $this->creator_urn(); $created = $this->created(); $updated = $this->updated(); $updater = $this->updater(); $updater_urn = $this->updater_urn(); $uuid = $this->uuid(); $mbr_version = $this->mbr_version(); $hash = $this->hash(); # # An imported image has a metadata_url, and at the moment I # do want to worry about exporting an imported image. # $imagefile_url = $this->imagefile_url(); $metadata_url = $this->metadata_url(); if (!$metadata_url) { $metadata_url = "{$TBBASE}/image_metadata.php?uuid={$uuid}"; } if (!$description) { $description = " "; } if (!$path) { $path = " "; } if (!$created) { $created = "N/A"; } # # Generate the table. # echo "<table align=center border=2 cellpadding=2 cellspacing=2>\n"; echo "<tr>\n <td>Image Name: </td>\n <td class=\"left\">{$imagename}</td>\n </tr>\n"; echo "<tr>\n <td>Description: </td>\n <td class=left>\n"; echo "{$description}"; echo " </td>\n \t </tr>\n"; echo "<tr>\n <td>Project: </td>\n <td class=\"left\">\n <a href='showproject.php3?pid={$pid}'>{$pid}</a></td>\n </tr>\n"; echo "<tr>\n <td>Group: </td>\n <td class=\"left\">\n <a href='showgroup.php3?pid={$pid}&gid={$gid}'>{$gid}</a></td>\n </tr>\n"; echo "<tr>\n <td>Created: </td>\n <td class=left>{$created}</td>\n \t </tr>\n"; echo "<tr>\n <td>Creator: </td>\n <td class=left>{$creator}</td>\n \t </tr>\n"; if ($creator_urn) { echo "<tr>\n <td>Creator URN: </td>\n <td class=left>{$creator_urn}</td>\n \t </tr>\n"; } if ($updated) { echo "<tr>\n <td>Updated: </td>\n <td class=left>{$updated}</td>\n \t </tr>\n"; echo "<tr>\n <td>Updated By: </td>\n <td class=left>{$updater}</td>\n \t </tr>\n"; if ($updater_urn) { echo "<tr>\n <td>Updater URN: </td>\n <td class=left>{$updater_urn}</td>\n \t </tr>\n"; } } # # Find the last time this image was used. # $usage_result = DBQueryFatal("select FROM_UNIXTIME(stamp) as lastused " . " from image_history " . "where action='os_setup' and imageid='{$imageid}' " . "order by stamp desc limit 1"); if (mysql_num_rows($usage_result)) { $urow = mysql_fetch_array($usage_result); $lastused = $urow['lastused']; echo "<tr>\n <td>Last Used: </td>\n <td class=\"left\">{$lastused}</td>\n </tr>\n"; } echo "<tr>\n <td>Load Partition: </td>\n <td class=\"left\">{$loadpart}</td>\n </tr>\n"; echo "<tr>\n <td>Load Length: </td>\n <td class=\"left\">{$loadlength}</td>\n </tr>\n"; if ($part1_osid) { echo "<tr>\n <td>Partition 1 OS: </td>\n <td class=\"left\">"; SpitOSIDLink($part1_osid); echo " </td>\n </tr>\n"; } if ($part2_osid) { echo "<tr>\n <td>Partition 2 OS: </td>\n <td class=\"left\">"; SpitOSIDLink($part2_osid); echo " </td>\n </tr>\n"; } if ($part3_osid) { echo "<tr>\n <td>Partition 3 OS: </td>\n <td class=\"left\">"; SpitOSIDLink($part3_osid); echo " </td>\n </tr>\n"; } if ($part4_osid) { echo "<tr>\n <td>Partition 4 OS: </td>\n <td class=\"left\">"; SpitOSIDLink($part4_osid); echo " </td>\n </tr>\n"; } if ($default_osid) { echo "<tr>\n <td>Boot OS: </td>\n <td class=\"left\">"; SpitOSIDLink($default_osid); echo " </td>\n </tr>\n"; } echo "<tr>\n <td>Filename: </td>\n <td class=left>\n"; echo "{$path}"; echo " </td>\n </tr>\n"; echo "<tr>\n <td>Types: </td>\n <td class=left>\n"; echo " "; foreach ($this->Types() as $type) { echo "{$type} "; } echo " </td>\n </tr>\n"; echo "<tr>\n <td>Shared?: </td>\n <td class=left>\n"; if ($shared) { echo "Yes"; } else { echo "No"; } echo " </td>\n </tr>\n"; echo "<tr>\n <td>Global?: </td>\n <td class=left>\n"; $globalflip = $globalid ? 0 : 1; $globalval = $globalid ? "Yes" : "No"; echo "{$globalval} (<a href=toggle.php?imageid={$imageid}" . "&type=imageglobal&value={$globalflip}>Toggle</a>)"; echo " </td>\n </tr>\n"; echo "<tr>\n <td>Internal ID: </td>\n <td class=left>{$imageid}</td>\n </tr>\n"; echo "<tr>\n <td>MBR Version: </td>\n <td class=left>{$mbr_version}</td>\n </tr>\n"; # Until I change the schema. if ($mbr_version == 99) { echo "<tr>\n <td>XEN Package: </td>\n <td class=left>Yes</td>\n </tr>\n"; } if ($this->ezid()) { $doesxen = 0; $osinfo = OSinfo::Lookup($imageid); if ($osinfo && $osinfo->def_parentosid()) { $parentosinfo = OSinfo::Lookup($osinfo->def_parentosid()); if ($parentosinfo && $parentosinfo->FeatureSupported("xen-host")) { $doesxen = 1; } } $xenval = $doesxen ? "Yes" : "No"; $xenflip = $doesxen ? 0 : 1; echo "<tr>\n <td>XEN Capable?:</td>\n \t <td class=left>\n {$xenval} (<a href=toggle.php?imageid={$imageid}" . "&type=imagedoesxen&value={$xenflip}>Toggle</a>\n if you know this image can run\n as a XEN guest. More info\n <a target=_blank\n href='https://wiki.emulab.net/wiki/Emulab/wiki/xen'>here</a>)\n </td>\n </tr>\n"; } if ($hash) { echo "<tr>\n <td>SHA1 Hash: </td>\n <td class=left>{$hash}</td>\n </tr>\n"; } echo "<tr>\n <td>UUID: </td>\n <td class=left>{$uuid}</td>\n </tr>\n"; echo "<tr>\n <td>Metadata URL: </td>\n <td class=left><a href='{$metadata_url}'>https:// ...</a></td>\n </tr>\n"; if ($imagefile_url) { echo "<tr>\n <td>Image File URL: </td>\n <td class=left><a href='{$imagefile_url}'>https:// ...</a></td>\n </tr>\n"; } # # Show who all can access this image outside the project. # if ($showperms) { $query_result = DBQueryFatal("select * from image_permissions " . "where imageid='{$imageid}' " . "order by permission_type,permission_id"); if (mysql_num_rows($query_result)) { echo "<tr>\n <td align=center colspan=2>\n External permissions\n </td>\n </tr>\n"; while ($row = mysql_fetch_array($query_result)) { $perm_type = $row['permission_type']; $perm_idx = $row['permission_idx']; $writable = $row['allow_write']; if ($writable) { $writable = "(read/write)"; } else { $writable = "(read only)"; } if ($perm_type == "user") { $user = User::Lookup($perm_idx); if (isset($user)) { $uid = $user->uid(); echo "<tr>\n <td>User: </td>\n <td class=left>{$uid} {$writable}</td>\n </tr>\n"; } } elseif ($perm_type == "group") { $group = Group::Lookup($perm_idx); if (isset($group)) { $pid = $group->pid(); $gid = $group->gid(); echo "<tr>\n <td>Group: </td>\n <td class=left>{$pid}/{$gid} {$writable}</td>\n </tr>\n"; } } } } } echo "</table>\n"; }
function VerifyPageArguments($argspec, $required) { global $drewheader; if ($drewheader) { trigger_error("PAGEHEADER called before VerifyPageArguments " . "(called by RequiredPageArguments or OptionalPageArguments). " . "Won't be able to return proper HTTP status code on Error " . "in " . $_SERVER['SCRIPT_FILENAME'] . ",", E_USER_WARNING); } $result = array(); while ($argspec and count($argspec) > 1) { $name = array_shift($argspec); $type = array_shift($argspec); $yep = 0; unset($object); switch ($type) { case PAGEARG_EXPERIMENT: if (isset($_REQUEST[URL_EXPERIMENT])) { $idx = $_REQUEST[URL_EXPERIMENT]; $yep = 1; if (ValidateArgument(PAGEARG_EXPERIMENT, $idx)) { $object = Experiment::Lookup($idx); } } elseif (isset($_REQUEST[URL_EXPTIDX])) { $idx = $_REQUEST[URL_EXPTIDX]; $yep = 1; if (ValidateArgument(PAGEARG_EXPERIMENT, $idx)) { $object = Experiment::Lookup($idx); } } elseif (isset($_REQUEST[URL_PID]) && isset($_REQUEST[URL_EID])) { $pid = $_REQUEST[URL_PID]; $eid = $_REQUEST[URL_EID]; $yep = 1; if (ValidateArgument(PAGEARG_PID, $pid) && ValidateArgument(PAGEARG_EID, $eid)) { $object = Experiment::LookupByPidEid($pid, $eid); } } break; case PAGEARG_TEMPLATE: if (isset($_REQUEST[URL_GUID]) && isset($_REQUEST[URL_VERS])) { $guid = $_REQUEST[URL_GUID]; $vers = $_REQUEST[URL_VERS]; $yep = 1; if (ValidateArgument(PAGEARG_GUID, $guid) && ValidateArgument(PAGEARG_VERS, $vers)) { $object = Template::Lookup($guid, $vers); } } elseif (isset($_REQUEST[URL_TEMPLATE])) { $guidvers = $_REQUEST[URL_TEMPLATE]; $yep = 1; if (preg_match("/^([\\d]+)\\/([\\d]+)\$/", $guidvers, $matches)) { $guid = $matches[1]; $vers = $matches[2]; $object = Template::Lookup($guid, $vers); } else { PAGEARGERROR("Invalid argument for '{$type}': {$guidvers}"); } } break; case PAGEARG_INSTANCE: if (isset($_REQUEST[URL_INSTANCE])) { $idx = $_REQUEST[URL_INSTANCE]; $yep = 1; if (ValidateArgument(PAGEARG_INSTANCE, $idx)) { $object = TemplateInstance::LookupByExptidx($idx); } } break; case PAGEARG_METADATA: if (isset($_REQUEST[URL_METADATA])) { $guidvers = $_REQUEST[URL_METADATA]; $yep = 1; if (preg_match("/^([\\d]+)\\/([\\d]+)\$/", $guidvers, $matches)) { $guid = $matches[1]; $vers = $matches[2]; $object = TemplateMetadata::Lookup($guid, $vers); } else { PAGEARGERROR("Invalid argument for '{$type}': {$guidvers}"); } } break; case PAGEARG_PROJECT: if (isset($_REQUEST[URL_PROJECT])) { $idx = $_REQUEST[URL_PROJECT]; $yep = 1; if (ValidateArgument(PAGEARG_PROJECT, $idx)) { $object = Project::Lookup($idx); } } elseif (isset($_REQUEST[URL_PID])) { $pid = $_REQUEST[URL_PID]; $yep = 1; if (ValidateArgument(PAGEARG_PID, $pid)) { $object = Project::Lookup($pid); } } break; case PAGEARG_GROUP: if (isset($_REQUEST[URL_GROUP])) { $idx = $_REQUEST[URL_GROUP]; $yep = 1; if (ValidateArgument(PAGEARG_GROUP, $idx)) { $object = Group::Lookup($idx); } } elseif (isset($_REQUEST[URL_PID]) && isset($_REQUEST[URL_GID])) { $pid = $_REQUEST[URL_PID]; $gid = $_REQUEST[URL_GID]; $yep = 1; if (ValidateArgument(PAGEARG_PID, $pid) && ValidateArgument(PAGEARG_GID, $gid)) { $object = Group::LookupByPidGid($pid, $gid); } } break; case PAGEARG_NODE: if (isset($_REQUEST[URL_NODE])) { $idx = $_REQUEST[URL_NODE]; $yep = 1; if (ValidateArgument(PAGEARG_NODE, $idx)) { $object = Node::Lookup($idx); } } elseif (isset($_REQUEST[URL_NODEID])) { $nodeid = $_REQUEST[URL_NODEID]; $yep = 1; if (ValidateArgument(PAGEARG_NODEID, $nodeid)) { $object = Node::Lookup($nodeid); } } elseif (isset($_REQUEST[URL_NODEID_ALT])) { $nodeid = $_REQUEST[URL_NODEID_ALT]; $yep = 1; if (ValidateArgument(PAGEARG_NODEID, $nodeid)) { $object = Node::Lookup($nodeid); } } break; case PAGEARG_USER: if (isset($_REQUEST[URL_USER])) { $idx = $_REQUEST[URL_USER]; $yep = 1; if (ValidateArgument(PAGEARG_USER, $idx)) { $object = User::Lookup($idx); } } elseif (isset($_REQUEST[URL_UID])) { $uid = $_REQUEST[URL_UID]; $yep = 1; if (ValidateArgument(PAGEARG_UID, $uid)) { $object = User::Lookup($uid); } } break; case PAGEARG_IMAGE: if (isset($_REQUEST[URL_IMAGEID])) { $imageid = $_REQUEST[URL_IMAGEID]; $yep = 1; if (ValidateArgument(PAGEARG_IMAGE, $imageid)) { $object = Image::Lookup($imageid); } } elseif (isset($_REQUEST[$name]) && $_REQUEST[$name] != "") { $imageid = $_REQUEST[$name]; $yep = 1; if (ValidateArgument(PAGEARG_IMAGE, $imageid)) { $object = Image::Lookup($imageid); } } break; case PAGEARG_OSINFO: if (isset($_REQUEST[URL_OSID])) { $osid = $_REQUEST[URL_OSID]; $yep = 1; if (ValidateArgument(PAGEARG_OSINFO, $osid)) { $object = OSinfo::Lookup($osid); } } break; case PAGEARG_BOOLEAN: if (isset($_REQUEST[$name]) && $_REQUEST[$name] != "") { $object = $_REQUEST[$name]; $yep = 1; if (strcasecmp("{$object}", "yes") == 0 || strcasecmp("{$object}", "1") == 0 || strcasecmp("{$object}", "true") == 0 || strcasecmp("{$object}", "on") == 0) { $object = True; } elseif (strcasecmp("{$object}", "no") == 0 || strcasecmp("{$object}", "0") == 0 || strcasecmp("{$object}", "false") == 0 || strcasecmp("{$object}", "off") == 0) { $object = False; } } break; case PAGEARG_INTEGER: case PAGEARG_NUMERIC: case PAGEARG_ARRAY: if (isset($_REQUEST[$name]) && $_REQUEST[$name] != "") { $object = $_REQUEST[$name]; $yep = 1; if (!ValidateArgument($type, $object)) { unset($object); } } break; case PAGEARG_ANYTHING: if (isset($_REQUEST[$name])) { $object = $_REQUEST[$name]; $yep = 1; # Anything allowed, caller BETTER check it. } break; case PAGEARG_ALPHALIST: if (isset($_REQUEST[$name])) { $object = $_REQUEST[$name]; if (!preg_match("/^[\\d\\w\\-\\ \\,]+\$/", $object)) { unset($object); } else { $object = preg_split("/[\\,\\;]+\\s*/", $_REQUEST[$name]); } } break; case PAGEARG_STRING: default: if (isset($_REQUEST[$name])) { $object = $_REQUEST[$name]; $yep = 1; # Pages never get arguments with special chars. Check. if (preg_match("/[\\'\"]/", $object)) { $object = htmlspecialchars($object); PAGEARGERROR("Invalid characters in '{$name}': {$object}"); } } break; case PAGEARG_PASSWORD: default: if (isset($_REQUEST[$name])) { $object = $_REQUEST[$name]; $yep = 1; # Only printable chars. if (!preg_match("/^[ -~]+\$/", $object)) { PAGEARGERROR("Invalid characters in '{$name}'"); } } break; case PAGEARG_LOGFILE: if (isset($_REQUEST[URL_LOGFILE])) { $logid = $_REQUEST[URL_LOGFILE]; $yep = 1; if (ValidateArgument(PAGEARG_LOGFILE, $logid)) { $object = Logfile::Lookup($logid); } } break; } if (isset($object)) { $result[$name] = $object; $GLOBALS[$name] = $object; } elseif ($yep) { # # Value supplied but could not be mapped to object. # Lets make that clear in the error message. # USERERROR("Could not map page arguments to '{$name}'", 1); } elseif ($required) { PAGEARGERROR("Must provide '{$name}' page argument"); } else { unset($GLOBALS[$name]); } } return $result; }
function Show() { $osid = $this->osid(); $os_description = $this->description(); $os_OS = $this->OS(); $os_version = $this->version(); $os_path = $this->path(); $os_magic = $this->magic(); $os_osfeatures = $this->osfeatures(); $os_op_mode = $this->op_mode(); $os_pid = $this->pid(); $os_shared = $this->shared(); $os_osname = $this->osname(); $creator = $this->creator(); $created = $this->created(); $mustclean = $this->mustclean(); $nextosid = $this->nextosid(); $def_parentosid = $this->def_parentosid(); $max_concurrent = $this->max_concurrent(); $reboot_waittime = $this->reboot_waittime(); $uuid = $this->uuid(); $ezid = $this->ezid(); $mfs = $this->mfs(); if (!($creator_user = User::Lookup($creator))) { TBERROR("Error getting object for user {$creator}", 1); } $showuser_url = CreateURL("showuser", $creator_user); if (!$os_description) { $os_description = " "; } if (!$os_version) { $os_version = " "; } if (!$os_path) { $os_path = " "; } if (!$os_magic) { $os_magic = " "; } if (!$os_osfeatures) { $os_osfeatures = " "; } if (!$os_op_mode) { $os_op_mode = " "; } if (!$created) { $created = "N/A"; } if (!$reboot_waittime) { $reboot_waittime = " "; } # # Generate the table. # echo "<table align=center border=1>\n"; echo "<tr>\n <td>Name: </td>\n <td class=\"left\">{$os_osname}</td>\n </tr>\n"; echo "<tr>\n <td>Project: </td>\n <td class=\"left\">\n <a href='showproject.php3?pid={$os_pid}'>{$os_pid}</a></td>\n </tr>\n"; echo "<tr>\n <td>Creator: </td>\n <td class=left>\n <a href='{$showuser_url}'>{$creator}</a></td>\n \t </tr>\n"; echo "<tr>\n <td>Created: </td>\n <td class=left>{$created}</td>\n \t </tr>\n"; echo "<tr>\n <td>Description: </td>\n <td class=\"left\">{$os_description}</td>\n </tr>\n"; echo "<tr>\n <td>Operating System: </td>\n <td class=\"left\">{$os_OS}</td>\n </tr>\n"; echo "<tr>\n <td>Version: </td>\n <td class=\"left\">{$os_version}</td>\n </tr>\n"; echo "<tr>\n <td>Path: </td>\n <td class=\"left\">{$os_path}</td>\n </tr>\n"; echo "<tr>\n <td>Magic (uname -r -s): </td>\n <td class=\"left\">{$os_magic}</td>\n </tr>\n"; echo "<tr>\n <td>Features: </td>\n <td class=\"left\">{$os_osfeatures}</td>\n </tr>\n"; echo "<tr>\n <td>Operational Mode: </td>\n <td class=\"left\">{$os_op_mode}</td>\n </tr>\n"; if (isset($max_concurrent) and $max_concurrent > 0) { echo "<tr>\n <td>Max Concurrent Usage: </td>\n <td class=\"left\">{$max_concurrent}</td>\n </tr>\n"; } echo "<tr>\n <td>Reboot Waittime: </td>\n <td class=\"left\">{$reboot_waittime}</td>\n </tr>\n"; echo "<tr>\n <td>Shared?: </td>\n <td class=left>" . YesNo($os_shared) . "</td>\n </tr>\n"; echo "<tr>\n <td>Must Clean?: </td>\n <td class=left>" . YesNo($mustclean) . "</td>\n </tr>\n"; if ($nextosid) { if ($nextosid == 0) { echo "<tr>\n\t\t <td>Next Osid: </td>\n\t\t <td class=left>\n\t\t\t Mapped via DB table: osid_map</td></tr>\n"; } else { $nextosinfo = OSinfo::Lookup($nextosid); $nextosname = $nextosinfo->osname(); echo "<tr>\n <td>Next Osid: </td>\n <td class=left>\n <a href='showosinfo.php3?osid={$nextosid}'>\n {$nextosname}</a></td>\n </tr>\n"; } } if ($def_parentosid) { $nextosinfo = OSinfo::Lookup($def_parentosid); $nextosname = $nextosinfo->osname(); echo "<tr>\n <td>Parent Osid: </td>\n <td class=left>\n <a href='showosinfo.php3?osid={$def_parentosid}'>\n {$nextosname}</a></td>\n </tr>\n"; } if ($ezid) { echo "<tr>\n <td>Image Link: </td>\n <td class=left>\n <a href='showimageid.php3?imageid={$osid}'>\n {$os_osname}</a></td>\n </tr>\n"; } if ($mfs) { echo "<tr>\n <td>MFS: </td>\n <td class=left>Yes</td>\n </tr>\n"; } echo "<tr>\n <td>Internal ID: </td>\n <td class=\"left\">{$osid}</td>\n </tr>\n"; echo "<tr>\n <td>UUID: </td>\n <td class=left>{$uuid}</td>\n </tr>\n"; if ($def_parentosid) { $parent_result = DBQueryFatal("select m.parent_osid,o.osname,o.pid " . " from os_submap as m " . "left join os_info as o on o.osid=m.parent_osid " . "where m.osid='{$osid}'"); if (mysql_num_rows($parent_result)) { while ($prow = mysql_fetch_array($parent_result)) { $posid = $prow["parent_osid"]; $posname = $prow["osname"]; echo "<tr>"; echo " <td>Parent {$posid}:</td>"; echo " <td class=left>"; echo " <a href='showosinfo.php3?osid={$posid}'>"; echo "{$posname}</a></td>\n"; echo "</tr>\n"; } } } echo "</table>\n"; }