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 "&nbsp;";
     foreach ($this->Types() as $type) {
         echo "{$type} &nbsp; ";
     }
     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";
 }
Exemple #2
0
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 = "&nbsp;";
     }
     if (!$os_version) {
         $os_version = "&nbsp;";
     }
     if (!$os_path) {
         $os_path = "&nbsp;";
     }
     if (!$os_magic) {
         $os_magic = "&nbsp;";
     }
     if (!$os_osfeatures) {
         $os_osfeatures = "&nbsp;";
     }
     if (!$os_op_mode) {
         $os_op_mode = "&nbsp;";
     }
     if (!$created) {
         $created = "N/A";
     }
     if (!$reboot_waittime) {
         $reboot_waittime = "&nbsp;";
     }
     #
     # 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";
 }