Esempio n. 1
0
 function getMapSubName($maptype, $subid)
 {
     switch ($maptype) {
         case "Image":
             $data = getImages(0, $subid);
             return $data[$subid]['prettyname'];
         case "OS Type":
             $ostypes = getOStypes();
             return $ostypes[$subid];
         case "OS":
             $oses = getOSList();
             return $oses[$subid]['prettyname'];
         case "Config":
         case "Cluster":
             $data = $this->_getData($subid);
             return $data[$subid]['name'];
         case "Management Node":
             $managementnodes = getManagementNodes('neither', 0, $subid);
             return $managementnodes[$subid]['hostname'];
             break;
     }
 }
Esempio n. 2
0
function newBlockRequest()
{
    global $submitErr, $user, $days;
    $data = processBlockRequestInput(0);
    if (!$submitErr) {
        if ($data['state']) {
            print "<H2>Edit Block Reservation</H2>\n";
        } else {
            print "<H2>New Block Reservation</H2>\n";
            $data['machinecnt'] = '';
        }
    } else {
        foreach ($days as $day) {
            if (in_array($day, $data['wdays'])) {
                $data['wdayschecked'][$day] = 'checked';
            }
        }
    }
    print "<FORM action=\"" . BASEURL . SCRIPT . "\" method=post>\n";
    print "Enter a name for the Block Reservation:<br>\n";
    print "<INPUT type=text name=blockname size=30 value=\"{$data['blockname']}\">";
    printSubmitErr(BLOCKNAMEERR);
    print "<br><br>\n";
    print "Select an environment from the list:<br>\n";
    printSubmitErr(IMAGEIDERR);
    $resources = getUserResources(array("imageAdmin", "imageCheckOut"));
    $resources["image"] = removeNoCheckout($resources["image"]);
    $OSs = getOSList();
    // list of images
    uasort($resources["image"], "sortKeepIndex");
    printSelectInput("imageid", $resources["image"], $data['imageid'], 1);
    print "<br><br>\n";
    print "How many machines do you need for the block request?<br>\n";
    print "<INPUT type=text name=machinecnt size=3 value={$data['machinecnt']}>";
    printSubmitErr(BLOCKCNTERR);
    print "<br><br>\n";
    print "What user group should be allowed to check out machines in this ";
    print "block request?<br>\n";
    // FIXME should we limit the course groups that show up?
    $groups = getUserGroups(0, $user['affiliationid']);
    if (array_key_exists(82, $groups)) {
        unset($groups[82]);
    }
    # remove None group
    if (!empty($data['usergroupid']) && !array_key_exists($data['usergroupid'], $groups)) {
        $groups[$data['usergroupid']] = array('name' => getUserGroupName($data['usergroupid'], 1));
        uasort($groups, "sortKeepIndex");
    }
    printSelectInput('usergroupid', $groups, $data['usergroupid']);
    printSubmitErr(USERGROUPIDERR);
    print "<br><br>\n";
    print "What user group should be allowed to manage (administer) this ";
    print "block request?<br>\n";
    if (!empty($data['admingroupid']) && !array_key_exists($data['admingroupid'], $groups)) {
        $groups[$data['admingroupid']] = array('name' => getUserGroupName($data['admingroupid'], 1));
        uasort($groups, "sortKeepIndex");
    }
    $nonegroups = array_reverse($groups, TRUE);
    $nonegroups[0] = array('name' => 'None (owner only)');
    $nonegroups = array_reverse($nonegroups, TRUE);
    printSelectInput('admingroupid', $nonegroups, $data['admingroupid']);
    printSubmitErr(ADMINGROUPIDERR);
    print "<br><br>\n";
    $checked = array('weekly' => '', 'monthly' => '', 'list' => '');
    if ($data['available'] == "weekly") {
        $checked['weekly'] = 'checked';
    } elseif ($data['available'] == 'monthly') {
        $checked['monthly'] = 'checked';
    } elseif ($data['available'] == 'list') {
        $checked['list'] = 'checked';
    }
    print "When do you need the block of machines to be available?<br>\n";
    print "<INPUT type=radio name=available id=rweekly value=\"weekly\"";
    print "{$checked['weekly']} onclick=javascript:show('weekly');>";
    print "<label for=rweekly>Repeating Weekly</label>\n";
    print "<INPUT type=radio name=available id=rmonthly value=\"monthly\"";
    print "{$checked['monthly']} onclick=javascript:show('monthly');>";
    print "<label for=rmonthly>Repeating Monthly</label>\n";
    print "<INPUT type=radio name=available id=rlist value=\"list\"";
    print "{$checked['list']} onclick=javascript:show('list');>";
    print "<label for=rlist>List of dates/times</label><br>\n";
    print "<fieldset id=weekly class=shown>\n";
    print "<legend>Repeating Weekly</legend>\n";
    print "<table summary=\"\">\n";
    print "  <TR>\n";
    print "    <TH>Day</TH>\n";
    print "    <TH>Time</TH>\n";
    print "  </TR>\n";
    print "  <TR>\n";
    print "    <TD>\n";
    foreach ($days as $day) {
        print "      <INPUT type=checkbox name=wdays[] value={$day} {$data['wdayschecked'][$day]}>{$day}<br>\n";
    }
    printSubmitErr(STARTDAYERR);
    print "    </TD>\n";
    print "    <TD valign=top>\n";
    print "    <table summary=\"\">\n";
    print "      <TR>\n";
    print "        <TH>Start</TH>\n";
    print "        <TD></TD>\n";
    print "        <TH>End</TH>\n";
    print "      </TR>\n";
    for ($i = 0; $i < 4; $i++) {
        if (count($data['swhour']) < 4) {
            $data['swhour'][$i] = 1;
            $data['swminute'][$i] = "zero";
            $data['swmeridian'][$i] = "am";
            $data['ewhour'][$i] = 1;
            $data['ewminute'][$i] = "zero";
            $data['ewmeridian'][$i] = "am";
        }
        print "      <TR>\n";
        print "        <TD nowrap>\n";
        print "          Slot" . ($i + 1) . ":\n";
        printBlockStartEnd($i, 'w', $data['swhour'], $data['swminute'], $data['swmeridian'], $data['ewhour'], $data['ewminute'], $data['ewmeridian']);
        print "        </TD>\n";
        print "        <TD>\n";
        if ($data['available'] == 'weekly') {
            printSubmitErr(STARTHOURERR, $i);
            printSubmitErr(ENDHOURERR, $i);
        }
        print "        </TD>\n";
        print "      </TR>\n";
    }
    print "    </table>\n";
    print "    </TD>\n";
    print "  </TR>\n";
    print "</table>\n";
    print "<table summary=\"\">\n";
    print "  <TR>\n";
    print "    <TH>Starting date:</TH>\n";
    print "    <TD><INPUT type=text name=swdate size=10 maxlength=8 value=\"{$data['swdate']}\"></TD>\n";
    print "    <TD><small>(mm/dd/yy) </small>";
    if ($data['available'] == 'weekly') {
        printSubmitErr(STARTDATEERR);
    }
    print "</TD>\n";
    print "  </TR>\n";
    print "  <TR>\n";
    print "    <TH>Ending date:</TH>\n";
    print "    <TD><INPUT type=text name=ewdate size=10 maxlength=8 value=\"{$data['ewdate']}\"></TD>\n";
    print "    <TD><small>(mm/dd/yy) </small>";
    if ($data['available'] == 'weekly') {
        printSubmitErr(ENDDATEERR);
    }
    print "</TD>\n";
    print "  </TR>\n";
    print "</table>\n";
    print "</fieldset>\n";
    print "<fieldset id=monthly class=shown>\n";
    print "<legend>Repeating Monthly</legend>\n";
    $weeknumArr = array(1 => "1st", 2 => "2nd", 3 => "3rd", 4 => "4th", 5 => "5th");
    $dayArr = array(1 => "Sunday", 2 => "Monday", 3 => "Tuesday", 4 => "Wednesday", 5 => "Thursday", 6 => "Friday", 7 => "Saturday");
    printSelectInput('weeknum', $weeknumArr, $data['weeknum']);
    printSelectInput('day', $dayArr, $data['day']);
    print " of every month<br>\n";
    print "<table summary=\"\">\n";
    print "  <TR>\n";
    print "    <TH>Start</TH>\n";
    print "    <TD></TD>\n";
    print "    <TH>End</TH>\n";
    print "  </TR>\n";
    for ($i = 0; $i < 4; $i++) {
        if (count($data['smhour']) < 4) {
            $data['smhour'][$i] = 1;
            $data['smminute'][$i] = "zero";
            $data['smmeridian'][$i] = "am";
            $data['emhour'][$i] = 1;
            $data['emminute'][$i] = "zero";
            $data['emmeridian'][$i] = "am";
        }
        print "  <TR>\n";
        print "    <TD nowrap>\n";
        print "      Slot" . ($i + 1) . ":\n";
        printBlockStartEnd($i, 'm', $data['smhour'], $data['smminute'], $data['smmeridian'], $data['emhour'], $data['emmeridian'], $data['emmeridian']);
        print "    </TD>\n";
        print "    <TD>\n";
        if ($data['available'] == 'monthly') {
            printSubmitErr(STARTHOURERR, $i);
            printSubmitErr(ENDHOURERR, $i);
        }
        print "    </TD>\n";
        print "  </TR>\n";
    }
    print "</table>\n";
    print "<table summary=\"\">\n";
    print "  <TR>\n";
    print "    <TH>Starting date:</TH>\n";
    print "    <TD><INPUT type=text name=smdate size=10 value=\"{$data['smdate']}\"></TD>\n";
    print "    <TD><small>(mm/dd/yy) </small>";
    if ($data['available'] == 'monthly') {
        printSubmitErr(STARTDATEERR);
    }
    print "</TD>\n";
    print "  </TR>\n";
    print "  <TR>\n";
    print "    <TH>Ending date:</TH>\n";
    print "    <TD><INPUT type=text name=emdate size=10 value=\"{$data['emdate']}\"></TD>\n";
    print "    <TD><small>(mm/dd/yy) </small>\n";
    if ($data['available'] == 'monthly') {
        printSubmitErr(ENDDATEERR);
    }
    print "</TD>\n";
    print "  </TR>\n";
    print "</table>\n";
    print "</fieldset>\n";
    print "<fieldset id=list class=shown>\n";
    print "<legend>List of dates/times</legend>\n";
    print "<table summary=\"\">\n";
    print "  <TR>\n";
    print "    <TH nowrap>Date <small>(mm/dd/yy)</small></TH>\n";
    print "    <TH>Start</TH>\n";
    print "    <TD></TD>\n";
    print "    <TH>End</TH>\n";
    print "  </TR>\n";
    for ($i = 0; $i < 4; $i++) {
        if (count($data['slhour']) < 4) {
            $data['slhour'][$i] = 1;
            $data['slminute'][$i] = "zero";
            $data['slmeridian'][$i] = "am";
            $data['elhour'][$i] = 1;
            $data['elminute'][$i] = "zero";
            $data['elmeridian'][$i] = "am";
            $data['date'][$i] = "";
        }
        print "  <TR>\n";
        $slot = $i + 1;
        print "    <TD nowrap>Slot {$slot}:<INPUT type=text name=date[] size=10 value={$data['date'][$i]}></TD>\n";
        print "    <TD nowrap>\n";
        printBlockStartEnd($i, 'l', $data['slhour'], $data['slminute'], $data['slmeridian'], $data['elhour'], $data['elminute'], $data['elmeridian']);
        print "    </TD>\n";
        print "    <TD>\n";
        if ($data['available'] == 'list') {
            printSubmitErr(STARTDATEERR, $i);
            printSubmitErr(STARTHOURERR, $i);
            printSubmitErr(ENDHOURERR, $i);
        }
        print "    </TD>\n";
        print "  </TR>\n";
    }
    print "</table>\n";
    print "</fieldset>\n";
    $cdata = array('state' => $data['state'], 'blockRequestid' => $data['blockRequestid']);
    $cont = addContinuationsEntry('confirmBlockRequest', $cdata, SECINDAY, 0, 1, 1);
    print "<INPUT type=hidden name=continuation value=\"{$cont}\">\n";
    print "<INPUT type=submit value=Confirm>\n";
    print "</FORM>\n";
    printBlockRequestJavascript($data['available']);
}
Esempio n. 3
0
 function addResource($data)
 {
     global $user;
     $data['desc'] = mysql_real_escape_string($data['desc']);
     $data['usage'] = mysql_real_escape_string($data['usage']);
     $data['comments'] = mysql_real_escape_string($data['comments']);
     # get architecture of base image
     $query = "SELECT i.architecture " . "FROM image i, " . "imagerevision ir " . "WHERE ir.imageid = i.id AND " . "ir.id = {$data['basedoffrevisionid']}";
     $qh = doQuery($query);
     $row = mysql_fetch_assoc($qh);
     $arch = $row['architecture'];
     $ownerdata = getUserInfo($data['owner'], 1);
     $ownerid = $ownerdata['id'];
     if (empty($data['concurrent']) || !is_numeric($data['concurrent'])) {
         $data['concurrent'] = 'NULL';
     }
     $query = "INSERT INTO image " . "(prettyname, " . "ownerid, " . "platformid, " . "OSid, " . "minram, " . "minprocnumber, " . "minprocspeed, " . "minnetwork, " . "maxconcurrent, " . "reloadtime, " . "deleted, " . "forcheckout, " . "architecture, " . "description, " . "`usage`, " . "basedoffrevisionid) " . "VALUES ('{$data['name']}', " . "{$ownerid}, " . "{$data['platformid']}, " . "{$data['osid']}, " . "{$data['ram']}, " . "{$data['cores']}, " . "{$data['cpuspeed']}, " . "{$data['networkspeed']}, " . "{$data['concurrent']}, " . "{$data['reload']}, " . "1, " . "{$data['checkout']}, " . "'{$arch}', " . "'{$data['desc']}', " . "'{$data['usage']}', " . "{$data['basedoffrevisionid']})";
     doQuery($query, 205);
     $imageid = dbLastInsertID();
     // possibly add entry to imagemeta table
     $imagemetaid = 0;
     if ($data['checkuser'] == 0 || $data['rootaccess'] == 0 || $data['sysprep'] == 0 || $data['ostype'] == 'windows' && $data['sethostname'] == 1 || $data['ostype'] == 'linux' && $data['sethostname'] == 0) {
         if ($data['ostype'] != 'windows' && $data['ostype'] != 'linux' || $data['ostype'] == 'windows' && $data['sethostname'] == 0 || $data['ostype'] == 'linux' && $data['sethostname'] == 1) {
             $data['sethostname'] = 'NULL';
         }
         $query = "INSERT INTO imagemeta " . "(checkuser, " . "rootaccess, " . "sysprep, " . "sethostname) " . "VALUES " . "({$data['checkuser']}, " . "{$data['rootaccess']}, " . "{$data['sysprep']}, " . "{$data['sethostname']})";
         doQuery($query, 101);
         $imagemetaid = dbLastInsertID();
     }
     // create name from pretty name, os, and last insert id
     $OSs = getOSList();
     $name = $OSs[$data['osid']]['name'] . "-" . preg_replace('/\\W/', '', $data['name']) . $imageid . "-v0";
     if ($imagemetaid) {
         $query = "UPDATE image " . "SET name = '{$name}', " . "imagemetaid = {$imagemetaid} " . "WHERE id = {$imageid}";
     } else {
         $query = "UPDATE image SET name = '{$name}' WHERE id = {$imageid}";
     }
     doQuery($query, 208);
     $query = "INSERT INTO imagerevision " . "(imageid, " . "userid, " . "datecreated, " . "production, " . "imagename, " . "comments, " . "autocaptured) " . "VALUES ({$imageid}, " . "{$user['id']}, " . "NOW(), " . "1, " . "'{$name}', " . "'{$data['comments']}', " . "{$data['autocaptured']})";
     doQuery($query, 101);
     $this->imagerevisionid = dbLastInsertID();
     // possibly add entries to connectmethodmap
     $baseconmethods = getImageConnectMethods($imageid, 0, 1);
     $baseids = array_keys($baseconmethods);
     $conmethodids = explode(',', $data['connectmethodids']);
     $adds = array_diff($conmethodids, $baseids);
     $rems = array_diff($baseids, $conmethodids);
     $vals = array();
     if (count($adds)) {
         foreach ($adds as $id) {
             $vals[] = "({$id}, {$this->imagerevisionid}, 0)";
         }
     }
     if (count($rems)) {
         foreach ($rems as $id) {
             $vals[] = "({$id}, {$this->imagerevisionid}, 1)";
         }
     }
     if (count($vals)) {
         $allvals = implode(',', $vals);
         $query = "INSERT INTO connectmethodmap " . "(connectmethodid, " . "imagerevisionid, " . "disabled) " . "VALUES {$allvals}";
         doQuery($query, 101);
     }
     // add entry in resource table
     $query = "INSERT INTO resource " . "(resourcetypeid, " . "subid) " . "VALUES (13, " . "{$imageid})";
     doQuery($query, 209);
     $resourceid = dbLastInsertID();
     $installtype = $OSs[$data['osid']]['installtype'];
     if ($installtype == 'none' || $installtype == 'partimage' || $installtype == 'kickstart') {
         $virtual = 0;
     } else {
         $virtual = 1;
     }
     $this->addImagePermissions($ownerdata, $resourceid, $virtual);
     return $imageid;
 }
Esempio n. 4
0
function addImage($data)
{
    global $user;
    if (get_magic_quotes_gpc()) {
        $data['description'] = stripslashes($data['description']);
        $data['usage'] = stripslashes($data['usage']);
    }
    $data['description'] = mysql_escape_string($data['description']);
    $data['usage'] = mysql_escape_string($data['usage']);
    $ownerdata = getUserInfo($data['owner']);
    $ownerid = $ownerdata['id'];
    if (empty($data['maxconcurrent']) || !is_numeric($data['maxconcurrent'])) {
        $data['maxconcurrent'] = 'NULL';
    }
    $query = "INSERT INTO image " . "(prettyname, " . "ownerid, " . "platformid, " . "OSid, " . "minram, " . "minprocnumber, " . "minprocspeed, " . "minnetwork, " . "maxconcurrent, " . "reloadtime, " . "deleted, " . "description, " . "`usage`, " . "basedoffrevisionid) " . "VALUES ('{$data["prettyname"]}', " . "{$ownerid}, " . "{$data["platformid"]}, " . "{$data["osid"]}, " . "{$data["minram"]}, " . "{$data["minprocnumber"]}, " . "{$data["minprocspeed"]}, " . "{$data["minnetwork"]}, " . "{$data["maxconcurrent"]}, " . "{$data["reloadtime"]}, " . "1, " . "'{$data['description']}', " . "'{$data['usage']}', " . "{$data['basedoffrevisionid']})";
    doQuery($query, 205);
    // get last insert id
    $qh = doQuery("SELECT LAST_INSERT_ID() FROM image", 206);
    if (!($row = mysql_fetch_row($qh))) {
        abort(207);
    }
    $imageid = $row[0];
    // possibly add entry to imagemeta table
    $imagemetaid = 0;
    if ($data['checkuser'] != 0 && $data['checkuser'] != 1) {
        $data['checkuser'] = 1;
    }
    if (!is_numeric($data['usergroupid']) || $data['usergroupid'] <= 0) {
        $data['usergroupid'] = "NULL";
    }
    if ($data['sysprep'] != 0 && $data['sysprep'] != 1) {
        $data['sysprep'] = 1;
    }
    if ($data['checkuser'] == 0 || is_numeric($data['usergroupid']) && $data['usergroupid'] > 0 || $data['sysprep'] == 0) {
        $query = "INSERT INTO imagemeta " . "(checkuser, " . "usergroupid, " . "sysprep) " . "VALUES " . "({$data['checkuser']}, " . "{$data['usergroupid']}, " . "{$data['sysprep']})";
        doQuery($query, 101);
        // get last insert id
        $qh = doQuery("SELECT LAST_INSERT_ID() FROM imagemeta", 101);
        if (!($row = mysql_fetch_row($qh))) {
            abort(207);
        }
        $imagemetaid = $row[0];
    }
    // create name from pretty name, os, and last insert id
    $OSs = getOSList();
    $name = $OSs[$data["osid"]]["name"] . "-" . preg_replace('/\\W/', '', $data["prettyname"]) . $imageid . "-v0";
    if ($imagemetaid) {
        $query = "UPDATE image " . "SET name = '{$name}', " . "imagemetaid = {$imagemetaid} " . "WHERE id = {$imageid}";
    } else {
        $query = "UPDATE image SET name = '{$name}' WHERE id = {$imageid}";
    }
    doQuery($query, 208);
    $query = "INSERT INTO imagerevision " . "(imageid, " . "userid, " . "datecreated, " . "production, " . "imagename, " . "comments) " . "VALUES ({$imageid}, " . "{$user['id']}, " . "NOW(), " . "1, " . "'{$name}', " . "'{$data['comments']}')";
    doQuery($query, 101);
    // add entry in resource table
    $query = "INSERT INTO resource " . "(resourcetypeid, " . "subid) " . "VALUES (13, " . "{$imageid})";
    doQuery($query, 209);
    $qh = doQuery("SELECT LAST_INSERT_ID() FROM resource", 101);
    $row = mysql_fetch_row($qh);
    $resourceid = $row[0];
    if (strncmp($OSs[$data['osid']]['name'], 'vmware', 6) == 0) {
        $vmware = 1;
    } else {
        $vmware = 0;
    }
    // create new node if it does not exist
    if ($vmware) {
        $nodename = 'newvmimages';
    } else {
        $nodename = 'newimages';
    }
    $query = "SELECT id " . "FROM privnode " . "WHERE name = '{$nodename}' AND " . "parent = 3";
    $qh = doQuery($query, 101);
    if (!($row = mysql_fetch_assoc($qh))) {
        $query2 = "INSERT INTO privnode " . "(parent, " . "name) " . "VALUES " . "(3, " . "'{$nodename}')";
        doQuery($query2, 101);
        $qh = doQuery($query, 101);
        $row = mysql_fetch_assoc($qh);
    }
    $parent = $row['id'];
    $query = "SELECT id " . "FROM privnode " . "WHERE name = '{$ownerdata['login']}-{$ownerid}' AND " . "parent = {$parent}";
    $qh = doQuery($query, 101);
    if ($row = mysql_fetch_assoc($qh)) {
        $newnode = $row['id'];
    } else {
        $query = "INSERT INTO privnode " . "(parent, name) " . "VALUES ({$parent}, '{$ownerdata['login']}-{$ownerid}')";
        doQuery($query, 101);
        $qh = doQuery("SELECT LAST_INSERT_ID() FROM privnode", 101);
        $row = mysql_fetch_row($qh);
        $newnode = $row[0];
    }
    // give user imageCheckOut and imageAdmin at new node
    $newprivs = array('imageCheckOut', 'imageAdmin');
    updateUserOrGroupPrivs($ownerid, $newnode, $newprivs, array(), 'user');
    // create new image group if it does not exist
    $query = "SELECT id " . "FROM usergroup " . "WHERE name = 'manageNewImages'";
    $qh = doQuery($query, 101);
    $row = mysql_fetch_assoc($qh);
    $ownergroupid = $row['id'];
    if ($vmware) {
        $prefix = 'newvmimages';
    } else {
        $prefix = 'newimages';
    }
    $query = "SELECT id " . "FROM resourcegroup " . "WHERE name = '{$prefix}-{$ownerdata['login']}-{$ownerid}' AND " . "ownerusergroupid = {$ownergroupid} AND " . "resourcetypeid = 13";
    $qh = doQuery($query, 101);
    if ($row = mysql_fetch_assoc($qh)) {
        $resourcegroupid = $row['id'];
    } else {
        $query = "INSERT INTO resourcegroup " . "(name, " . "ownerusergroupid, " . "resourcetypeid) " . "VALUES ('{$prefix}-{$ownerdata['login']}-{$ownerid}', " . "{$ownergroupid}, " . "13)";
        doQuery($query, 305);
        $qh = doQuery("SELECT LAST_INSERT_ID() FROM resourcegroup", 101);
        $row = mysql_fetch_row($qh);
        $resourcegroupid = $row[0];
        // map group to newimages/newvmimages comp group
        if ($vmware) {
            $rgroupname = 'newvmimages';
        } else {
            $rgroupname = 'newimages';
        }
        $query = "SELECT id " . "FROM resourcegroup " . "WHERE name = '{$rgroupname}' AND " . "resourcetypeid = 12";
        $qh = doQuery($query, 101);
        $row = mysql_fetch_assoc($qh);
        $compResGrpid = $row['id'];
        $query = "INSERT INTO resourcemap " . "(resourcegroupid1, " . "resourcetypeid1, " . "resourcegroupid2, " . "resourcetypeid2) " . "VALUES ({$resourcegroupid}, " . "13, " . "{$compResGrpid}, " . "12)";
        doQuery($query, 101);
    }
    // make image group available at new node
    $adds = array('available', 'administer');
    if ($vmware) {
        updateResourcePrivs("image/newvmimages-{$ownerdata['login']}-{$ownerid}", $newnode, $adds, array());
    } else {
        updateResourcePrivs("image/newimages-{$ownerdata['login']}-{$ownerid}", $newnode, $adds, array());
    }
    // add image to image group
    $query = "INSERT INTO resourcegroupmembers " . "(resourceid, resourcegroupid) " . "VALUES ({$resourceid}, {$resourcegroupid})";
    doQuery($query, 101);
    return $imageid;
}