1.3 header ("Pragma: hack"); header ("Cache-Control: public, must-revalidate"); // outputs the whole file contents print (file_get_contents($filename)); // unlink the file if (! unlink ($filename) ) { // cannot unlink, but how can we notify this ? // certainly not by printing } exit(); } function show_download_confirm_button ($api, $node_id, $action, $can_gen_config, $show_details) { if( $can_gen_config ) { if ($show_details) { $preview=$api->GetBootMedium($node_id,"node-preview",""); print ("
\n$preview\n"); print ("
Configuration file cannot be created until missing values above are updated."; } } // check arguments if (empty($_POST['node_id'])) { plc_redirect (l_nodes()); } else { $node_id = intval($_POST['node_id']); } $action=$_POST['action']; switch ($action) { case "download-generic-iso": case "download-generic-usb": if ($action=="download-generic-iso") { $boot_action="generic-iso"; } else { $boot_action="generic-usb"; } // place the result in a random-named sub dir for clear filenames $filename = $api->GetBootMedium ($node_id, $boot_action, "%d/%n-%p-%a-%v%s"); $error=$api->error(); // NOTE. for some reason, GetBootMedium sometimes does not report an error but the // file is not created - this happens e.g. when directory owmer/modes are wrong // in this case we get an empty filename // see /etc/httpd/logs/error_log in this case if (empty($error) && empty($filename)) { $error="Unexpected error from GetBootMedium - probably wrong directory modes"; } if (! empty($error)) { print ("
Back to node \n"); return ; } else { deliver_and_unlink ($filename); exit(); } break; // ACTION: download-node // from former downloadconf.php case "download-node-floppy": case "download-node-iso": case "download-node-usb": $return= $api->GetNodes( array( $node_id ) ); $node_detail= $return[0]; // non-admin people need to be affiliated with the right site if( ! plc_is_admin() ) { $node_site_id = $node_detail['site_id']; $in_site = plc_in_site($node_site_id); if( ! $in_site) { $error= "Insufficient permission. You cannot create configuration files for this node."; } } $hostname= $node_detail['hostname']; $return= $api->GetInterfaces( array( "node_id" => $node_id ), NULL ); $can_gen_config= 1; $has_primary= 0; if( count($return) > 0 ) { foreach( $return as $interface_detail ) { if( $interface_detail['is_primary'] == true ) { $has_primary= 1; break; } } } if( !$has_primary ) { $can_gen_config= 0; } else { if( $node_detail['hostname'] == "" ) { $can_gen_config= 0; $node_detail['hostname']= "Missing"; } $fields= array("method","ip"); foreach( $fields as $field ) { if( $interface_detail[$field] == "" ) { $can_gen_config= 0; $interface_detail[$field]= "Missing"; } } if( $interface_detail['method'] == "static" ) { $fields= array("gateway","netmask","network","broadcast","dns1"); foreach( $fields as $field ) { if( $interface_detail[$field] == "" ) { $can_gen_config= 0; $interface_detail[$field]= "Missing"; } } } if( $interface_detail['method'] != "static" && $interface_detail['method'] != "dhcp" ) { $can_gen_config= 0; $interface_detail['method']= "Unknown method"; } } $download= $_POST['download']; if( $can_gen_config && !empty($download) ) { switch ($action) { case 'download-node-floppy': $boot_action='node-floppy'; $location = "%d/%n-%v-rename-into-plnode%s"; break; case 'download-node-iso': $boot_action='node-iso'; $location = "%d/%n-%a-%v%s"; break; case 'download-node-usb': $boot_action='node-usb'; $location = "%d/%n-%a-%v%s"; break; } $filename=$api->GetBootMedium($node_id,$boot_action,$location); $error=$api->error(); if (empty($error) && empty($filename)) { $error="Unexpected error from GetBootMedium - probably wrong directory modes"; } if (! empty($error)) { print ("
Back to node \n");
return ;
} else {
deliver_and_unlink ($filename);
exit();
}
}
drupal_set_title("Download boot material for $hostname");
$header= << ");
print (" This node has no configured primary interface.Current interface settings
\n");
if( $has_primary ) {
print( "\n" );
print( "
\n" );
} else {
print( " " );
print( "Node Details \n" );
print( "node_id: " );
print( "$node_id \n" );
$nn_id = $interface_detail['interface_id'];
print( "Hostname: " );
print( "" . $node_detail['hostname'] . " " );
print( "Interface Details \n" );
print( "Method: " );
print( "" . $interface_detail['method'] . " \n" );
if( $interface_detail['method'] == "static" ) {
print( "IP: " );
print( "" . $interface_detail['ip'] . " \n" );
print( "Gateway: " );
print( "" . $interface_detail['gateway'] . " \n" );
print( "Network mask: " );
print( "" . $interface_detail['netmask'] . " \n" );
print( "Network address: " );
print( "" . $interface_detail['network'] . " \n" );
print( "Broadcast address: " );
print( "" . $interface_detail['broadcast'] . " \n" );
print( "DNS 1: " );
print( "" . $interface_detail['dns1'] . " \n" );
} else {
print( "DNS 2: " );
if( $interface_detail['dns2'] == "" ) {
print( "Optional, missing " . $interface_detail['dns2'] . " \n" );
}
}
print (" \n");
$nn_id = $interface_detail['interface_id'];
$settings=$api->GetInterfaceTags(array("interface_id" => array($nn_id)));
foreach ($settings as $setting) {
$category=$setting['category'];
$name=$setting['tagname'];
$value=$setting['value'];
print (" Additional Settings \n");
}
print( " $category $name $value