diff options
41 files changed, 1854 insertions, 0 deletions
diff --git a/contrib/rom-o-matic/bottom.php b/contrib/rom-o-matic/bottom.php new file mode 100644 index 00000000..bd64d840 --- /dev/null +++ b/contrib/rom-o-matic/bottom.php @@ -0,0 +1,62 @@ +<? + +/** + * Copyright (C) 2009 Marty Connor <mdc@etherboot.org>. + * Copyright (C) 2009 Entity Cyber, Inc. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation; either version 2 of the + * License, or any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + */ + +?> +<hr> +<h4> +Resources: +</h4> +<ul> + <li> + Source code for gPXE images is available at + <a href="http://etherboot.org/wiki/download" target="_blank"> + http://etherboot.org/wiki/download</a> + <br><br> + </li> + <li> + For general information about using gPXE, please visit the + <a href="http://www.etherboot.org/" target="_blank"> + Etherboot Project Home Page</a> + <br><br> + </li> + <li> + For Email-based support for gPXE please join + <a href="http://etherboot.org/wiki/mailinglists" target="_blank"> + Etherboot Project mailing lists.</a> + <br><br> + </li> + <li> + For real-time online gPXE support via IRC please visit the + <a href="irc://irc.freenode.net/%23etherboot"> #etherboot channel + of irc.freenode.net</a>. + <br><br> + </li> +</ul> +<hr> + <font size="-1"> + <br> + Please email <a href="mailto:<? echo "${webmaster_email}" ?>"><? echo "${webmaster_email}"?></a> + with questions or comments about this website. + </font> + <br><br> +<hr> +</body> +</html> diff --git a/contrib/rom-o-matic/build.php b/contrib/rom-o-matic/build.php new file mode 100644 index 00000000..1d9ee303 --- /dev/null +++ b/contrib/rom-o-matic/build.php @@ -0,0 +1,306 @@ +<?php // -*- Mode: PHP; -*- + +/** + * Copyright (C) 2009 Marty Connor <mdc@etherboot.org>. + * Copyright (C) 2009 Entity Cyber, Inc. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation; either version 2 of the + * License, or any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + */ + +// Get utility functions and set globals +require_once "utils.php"; + +// Make sure at least $A (action) was supplied +if ( ! isset ( $_POST['A'] ) ) { + + // Present user with form to customize build options + require_once "customize-flags.php"; + + exit (); + +// If user chose "Customize" option on form +} else if ( $_POST['A'] == "Customize" ) { + + // Present user with form to customize build options + require_once "customize-flags.php"; + + exit (); + +// The following conditional includes all other cases except "Get Image" +// particularly the explicit ($A == "Start Over") case +} else if ( $_POST['A'] != "Get Image" ) { + + // Note that this method of redirections discards all the + // configuration flags, which is intentional in this case. + + $dest = curDirURL (); + header ( "Location: $dest" ); + + // This next "echo" should normally not be seen, because + // the "header" statement above should cause immediate + // redirection but just in case... + + echo "Try this link: <a href=\"$dest\">$dest</a>"; + + exit (); +} + +// OK, we're going to try to use whatever options have been set +// to build an image. + +// Make sure at least $nic was supplied +if ( ! isset ( $_POST['nic'] ) ) { + die ( "No NIC supplied!" ); +} +if ( isset ( $nics[$_POST['nic']] ) ) { + $nic = $nics[$_POST['nic']]; +} else { + die ( "Invalid NIC \"${_POST['nic']}\" supplied!" ); +} + +// Fetch flags +$flags = get_flags (); + +// Get requested format +$ofmt = isset ( $_POST['ofmt'] ) ? $_POST['ofmt'] : ""; +$fmt_extension = isset ( $ofmts[$ofmt] ) ? $ofmts[$ofmt] : 'dsk'; + +// Handle some special cases + +$pci_vendor_code = ""; +$pci_device_code = ""; + +if ( $nic == 'undionly' && $fmt_extension == "pxe" ) { + + // undionly.pxe can't work because it unloads the PXE stack + // that it needs to communicate with, so we set the extension + // to .kpxe, which has a chance of working. The extension + // .kkpxe is another option. + + $fmt_extension = "kpxe"; + +} else if ( $fmt_extension == "rom" ) { + + if ( ! isset ( $_POST['pci_vendor_code'] ) + || ! isset ( $_POST['pci_device_code'] ) ) { + die ( "rom output format selected but PCI code(s) missing!" ); + } + + $pci_vendor_code = $_POST['pci_vendor_code']; + $pci_device_code = $_POST['pci_device_code']; + + if ( $pci_vendor_code == "" + || $pci_device_code == "" ) { + die ( "rom output format selected but PCI code(s) missing!" ); + } + + // Try to be forgiving of 0xAAAA format + if ( strtolower ( substr ( $pci_vendor_code, 0, 2 ) ) == "0x" + && strlen ( $pci_vendor_code ) == 6 ) { + $pci_vendor_code = substr ( $pci_vendor_code, 2, 4 ); + } + if ( strtolower ( substr ( $pci_device_code, 0, 2 ) ) == "0x" + && strlen ( $pci_device_code ) == 6 ) { + $pci_device_code = substr ( $pci_device_code, 2, 4 ); + } + + // concatenate the pci codes to get the $nic part of the + // Make target + $pci_codes = strtolower ( $pci_vendor_code . $pci_device_code ); + + $nic = $pci_codes; + if ( ! isset ( $roms[$pci_codes] ) ) { + die ( "Sorry, no network driver supports PCI codes<br>" + . "${_POST['pci_vendor_code']}:" + . "${_POST['pci_device_code']}" ); + } +} else if ( $fmt_extension != "rom" + && ( $pci_vendor_code != "" || $pci_device_code != "" ) ) { + die ( "'$fmt_extension' format was selected but PCI IDs were" + . " also entered.<br>Did you mean to select 'rom' output format" + . " instead?" ); +} + +/** + * remove temporary build directory + * + * @return bool true if removal is successful, false otherwise + */ +function rm_build_dir () +{ + global $build_dir; + global $keep_build_dir; + + if ( $keep_build_dir !== true ) { + rm_file_or_dir ( $build_dir ); + } +} + +// Arrange for the build directory to always be removed on exit. +$build_dir = ""; +$keep_build_dir = false; +register_shutdown_function ( 'rm_build_dir' ); + +// Make temporary copy of src directory +$build_dir = mktempcopy ( "$src_dir", "/tmp", "MDCROM" ); +$config_dir = $build_dir . "/config"; + +// Write config files with supplied flags +write_gpxe_config_files ( $config_dir, $flags ); + +// Handle a possible embedded script +$emb_script_cmd = ""; +$embedded_script = isset ( $_POST['embedded_script'] ) ? $_POST['embedded_script'] : ""; +if ( $embedded_script != "" ) { + $emb_script_path = "$build_dir" . "/script0.gpxe"; + + if ( substr ( $embedded_script, 0, 5 ) != "#!gpxe" ) { + $embedded_script = "#!gpxe\n" . $embedded_script; + } + + // gPXE 0.9.7 doesn't like '\r\n" in the shebang... + $embedded_script = str_replace ( "\r\n", "\n", $embedded_script ); + + write_file_from_string ( $emb_script_path, $embedded_script ); + $emb_script_cmd = "EMBEDDED_IMAGE=${emb_script_path}"; +} + +// Make the requested image. $status is set to 0 on success +$make_target = "bin/${nic}.${fmt_extension}"; +$make_cmd = "make -C '$build_dir' '$make_target' $emb_script_cmd $2>&1"; + +exec ( $make_cmd, $maketxt, $status ); + +// Uncomment the following section for debugging + +/** + +echo "<h2>build.php:</h2>"; +echo "<h3>Begin debugging output</h3>"; + +//echo "<h3>\$_POST variables</h3>"; +//echo "<pre>"; var_dump ( $_POST ); echo "</pre>"; + +echo "<h3>Build options:</h3>"; +echo "<strong>Build directory is:</strong> $build_dir" . "<br><br>"; +echo "\$_POST['ofmt'] = " . "\"${_POST['ofmt']}\"" . "<br>"; +echo "\$_POST['nic'] = " . "\"${_POST['nic']}\"" . "<br>"; +echo "\$_POST['pci_vendor_code'] = " . "\"${_POST['pci_vendor_code']}\"" . "<br>"; +echo "\$_POST['pci_device_code'] = " . "\"${_POST['pci_device_code']}\"" . "<br>"; + +echo "<h3>Flags:</h3>"; +show_flags ( $flags ); + +if ( $embedded_script != "" ) { + echo "<h3>Embedded script:</h3>"; + echo "<blockquote>"."<pre>"; + echo $embedded_script; + echo "</pre>"."</blockquote>"; +} + +echo "<h3>Make output:</h3>"; +echo "Make command: " . $make_cmd . "<br>"; +echo "Build status = <? echo $status ?>" . "<br>"; +echo "<blockquote>"."<pre>"; +echo htmlentities ( implode ("\n", $maketxt ) ); +echo "</pre>"."</blockquote>"; +// Uncomment the next line if you want to keep the +// build directory around for inspection after building. +$keep_build_dir = true; +die ( "<h3>End debugging output</h3>" ); + +**/ // End debugging section + +// Send ROM to browser (with extreme prejudice) + +if ( $status == 0 ) { + + $fp = fopen("${build_dir}/${make_target}", "rb" ); + if ( $fp > 0 ) { + + $len = filesize ( "${build_dir}/${make_target}" ); + if ( $len > 0 ) { + + $buf = fread ( $fp, $len ); + fclose ( $fp ); + + // Delete build directory as soon as it is not needed + rm_build_dir (); + + $output_filename = "gpxe-${version}-${nic}.${fmt_extension}"; + + // Try to force IE to handle downloading right. + Header ( "Cache-control: private"); + Header ( "Content-Type: application/x-octet-stream; " . + "name=$output_filename"); + Header ( "Content-Disposition: attachment; " . + "Filename=$output_filename"); + Header ( "Content-Location: $output_filename"); + Header ( "Content-Length: $len"); + + echo $buf; + + exit (); + } + } +} + +/* + * If we reach this point, the build has failed, and we provide + * debugging information for a potential bug report + * + */ + +// Remove build directory +rm_build_dir (); + +// Announce failure if $status from make was non-zero +echo "<h2>Build failed. Status = " . $status . "</h2>"; +echo "<h2>build.php:</h2>"; +echo "<h3>Build options:</h3>"; +echo "<strong>Build directory is:</strong> $build_dir" . "<br><br>"; +echo "\$_POST['ofmt'] = " . "\"${_POST['ofmt']}\"" . "<br>"; +echo "\$_POST['nic'] = " . "\"${_POST['nic']}\"" . "<br>"; +echo "\$_POST['pci_vendor_code'] = " . "\"${_POST['pci_vendor_code']}\"" . "<br>"; +echo "\$_POST['pci_device_code'] = " . "\"${_POST['pci_device_code']}\"" . "<br>"; + +echo "<h3>Flags:</h3>"; +show_flags ( $flags ); + +if ( $embedded_script != "" ) { + echo "<h3>Embedded script:</h3>"; + echo "<blockquote>"."<pre>"; + echo $embedded_script; + echo "</pre>"."</blockquote>"; +} + +echo "<h3>Make output:</h3>"; +echo "Make command: " . $make_cmd . "<br>"; +echo "<blockquote>"."<pre>"; +echo htmlentities ( implode ("\n", $maketxt ) ); +echo "</pre>"."</blockquote>"; + +echo "Please let us know that this happened, and paste the above output into your email message.<br>"; + +include_once $bottom_inc; + +// For emacs: +// Local variables: +// c-basic-offset: 4 +// c-indent-level: 4 +// tab-width: 4 +// End: + +?> diff --git a/contrib/rom-o-matic/customize-flags.php b/contrib/rom-o-matic/customize-flags.php new file mode 100644 index 00000000..23090439 --- /dev/null +++ b/contrib/rom-o-matic/customize-flags.php @@ -0,0 +1,69 @@ +<?php // -*- Mode: PHP; -*- + +/** + * Copyright (C) 2009 Marty Connor <mdc@etherboot.org>. + * Copyright (C) 2009 Entity Cyber, Inc. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation; either version 2 of the + * License, or any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + */ + +// Get utility functions and set globals +require_once "utils.php"; + +// Prepare settable compile options for presentation to user +$flags = default_flags (); + +$build = "<input type=\"submit\" name=\"A\" value=\"Get Image\">"; +$restart = "<input type=\"submit\" name=\"A\" value=\"Start Over\">"; + +// Begin html output +include_once $top_inc; + +?> + +<form action="build.php" method=POST> + <input type="hidden" name="version" value = "<? echo $version ?>"> + <input type="hidden" name="use_flags" value="1"> + <h3> + Make changes below and press <? echo $build ?> to create an image, <br> + Or press <? echo $restart ?> to return to the main page. + </h3> + <hr> + <ul> + <? require ( "directions.php" ); ?> + </ul> + <hr> + <? echo_flags( $flags ); ?> + <hr> + <h3>Embedded Script:</h3> + <? echo textarea ( "embedded_script", "", "10", "50" ); ?> + <br><br> + <hr> + <center><table width="35%"><tr> + <td align="left"> <? echo $build; ?> </td> + <td align="right"> <? echo $restart ?></td> + </tr></table></center> +</form> + +<? include_once $bottom_inc; ?> +<? +// For emacs: +// +// Local variables: +// c-basic-offset: 4 +// c-indent-level: 4 +// tab-width: 4 +// End: +?> diff --git a/contrib/rom-o-matic/directions.php b/contrib/rom-o-matic/directions.php new file mode 100644 index 00000000..3c7015ef --- /dev/null +++ b/contrib/rom-o-matic/directions.php @@ -0,0 +1,63 @@ +<? + +/** + * Copyright (C) 2009 Marty Connor <mdc@etherboot.org>. + * Copyright (C) 2009 Entity Cyber, Inc. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation; either version 2 of the + * License, or any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + */ + +?> + <li> + Choose an output format: <? echo keys_menubox ( "ofmt", $ofmts, + isset ( $_POST['ofmt'] ) ? $_POST['ofmt'] : "") ?> + <br><br> + </li> + <li> + Choose a NIC type: <? echo keys_menubox ( "nic", $nics, + isset ( $_POST['nic'] ) ? $_POST['nic'] : "" ) ?> + <br><br> + </li> + <li> + <strong>( optional — for binary ROM image format only )</strong> <br><br> + If you choose <em>Binary ROM image</em> as your output format, you must<br> + enter <strong>4 hex digits</strong> below for + <em>PCI VENDOR CODE</em> and <em>PCI DEVICE CODE</em> <br> + that match the NIC device for which you are making this image.<br><br> + Information on how to determine NIC PCI IDs may be found + <a href="http://etherboot.org/wiki/romburning" + target="_blank">here</a>. + <br><br> + PCI VENDOR CODE: <? echo textbox ( "pci_vendor_code", + isset ( $_POST['pci_vendor_code'] ) ? $_POST['pci_vendor_code'] + : "", 6 ); ?> + + PCI DEVICE CODE: <? echo textbox ( "pci_device_code", + isset ( $_POST['pci_device_code'] ) ? $_POST['pci_device_code'] + : "", 6 ); ?> + <h4>Please note for ROM images:</h4> + <ul> + <li> + If you enter PCI IDs, we will attempt to determine the correct<br> + driver to support them, and will ignore any NIC type entered + above.<br><br> + </li> + <li> + gPXE does not support all possible PCI IDs for supported + NICs. + <br><br> + </li> + </ul> + </li> diff --git a/contrib/rom-o-matic/doc/AUTOBOOT_CMD.html b/contrib/rom-o-matic/doc/AUTOBOOT_CMD.html new file mode 100644 index 00000000..444c5e60 --- /dev/null +++ b/contrib/rom-o-matic/doc/AUTOBOOT_CMD.html @@ -0,0 +1 @@ +Automatic booting diff --git a/contrib/rom-o-matic/doc/BANNER_TIMEOUT.html b/contrib/rom-o-matic/doc/BANNER_TIMEOUT.html new file mode 100644 index 00000000..e135897f --- /dev/null +++ b/contrib/rom-o-matic/doc/BANNER_TIMEOUT.html @@ -0,0 +1 @@ +Tenths of a second for which the shell banner should appear diff --git a/contrib/rom-o-matic/doc/COMCONSOLE.html b/contrib/rom-o-matic/doc/COMCONSOLE.html new file mode 100644 index 00000000..e7036c00 --- /dev/null +++ b/contrib/rom-o-matic/doc/COMCONSOLE.html @@ -0,0 +1,3 @@ +Serial Console I/O port address. Common addresses are:<br> +COM1 => 0x3f8, COM2 => 0x2f8, COM3 => 0x3e8, COM4 => 0x2e8 + diff --git a/contrib/rom-o-matic/doc/COMDATA.html b/contrib/rom-o-matic/doc/COMDATA.html new file mode 100644 index 00000000..a27e2751 --- /dev/null +++ b/contrib/rom-o-matic/doc/COMDATA.html @@ -0,0 +1 @@ +Serial Console Data bits diff --git a/contrib/rom-o-matic/doc/COMPARITY.html b/contrib/rom-o-matic/doc/COMPARITY.html new file mode 100644 index 00000000..14f35951 --- /dev/null +++ b/contrib/rom-o-matic/doc/COMPARITY.html @@ -0,0 +1 @@ +Serial Console Parity: 0=None, 1=Odd, 2=Even diff --git a/contrib/rom-o-matic/doc/COMPRESERVE.html b/contrib/rom-o-matic/doc/COMPRESERVE.html new file mode 100644 index 00000000..6e41a10b --- /dev/null +++ b/contrib/rom-o-matic/doc/COMPRESERVE.html @@ -0,0 +1 @@ +Keep settings from a previous user of the serial port
\ No newline at end of file diff --git a/contrib/rom-o-matic/doc/COMSPEED.html b/contrib/rom-o-matic/doc/COMSPEED.html new file mode 100644 index 00000000..32b68595 --- /dev/null +++ b/contrib/rom-o-matic/doc/COMSPEED.html @@ -0,0 +1 @@ +Serial Console Baud rate diff --git a/contrib/rom-o-matic/doc/COMSTOP.html b/contrib/rom-o-matic/doc/COMSTOP.html new file mode 100644 index 00000000..ae3fd24f --- /dev/null +++ b/contrib/rom-o-matic/doc/COMSTOP.html @@ -0,0 +1 @@ +Serial Console Stop bits diff --git a/contrib/rom-o-matic/doc/CONFIG_CMD.html b/contrib/rom-o-matic/doc/CONFIG_CMD.html new file mode 100644 index 00000000..1256c069 --- /dev/null +++ b/contrib/rom-o-matic/doc/CONFIG_CMD.html @@ -0,0 +1 @@ +Option configuration console diff --git a/contrib/rom-o-matic/doc/CONSOLE_PC_BIOS.html b/contrib/rom-o-matic/doc/CONSOLE_PC_BIOS.html new file mode 100644 index 00000000..144eea3b --- /dev/null +++ b/contrib/rom-o-matic/doc/CONSOLE_PC_BIOS.html @@ -0,0 +1 @@ +Enable Default BIOS console diff --git a/contrib/rom-o-matic/doc/CONSOLE_SERIAL.html b/contrib/rom-o-matic/doc/CONSOLE_SERIAL.html new file mode 100644 index 00000000..f35e2ff5 --- /dev/null +++ b/contrib/rom-o-matic/doc/CONSOLE_SERIAL.html @@ -0,0 +1 @@ +Enable Serial port console diff --git a/contrib/rom-o-matic/doc/CRYPTO_80211_WEP.html b/contrib/rom-o-matic/doc/CRYPTO_80211_WEP.html new file mode 100644 index 00000000..26fdf8a8 --- /dev/null +++ b/contrib/rom-o-matic/doc/CRYPTO_80211_WEP.html @@ -0,0 +1 @@ +Wireless WEP encryption support diff --git a/contrib/rom-o-matic/doc/CRYPTO_80211_WPA.html b/contrib/rom-o-matic/doc/CRYPTO_80211_WPA.html new file mode 100644 index 00000000..b218a1e9 --- /dev/null +++ b/contrib/rom-o-matic/doc/CRYPTO_80211_WPA.html @@ -0,0 +1 @@ +Wireless WPA encryption support diff --git a/contrib/rom-o-matic/doc/CRYPTO_80211_WPA2.html b/contrib/rom-o-matic/doc/CRYPTO_80211_WPA2.html new file mode 100644 index 00000000..947597d1 --- /dev/null +++ b/contrib/rom-o-matic/doc/CRYPTO_80211_WPA2.html @@ -0,0 +1 @@ +Wireless WPA2 encryption support diff --git a/contrib/rom-o-matic/doc/DHCP_CMD.html b/contrib/rom-o-matic/doc/DHCP_CMD.html new file mode 100644 index 00000000..a0c31c7c --- /dev/null +++ b/contrib/rom-o-matic/doc/DHCP_CMD.html @@ -0,0 +1 @@ +DHCP management commands diff --git a/contrib/rom-o-matic/doc/DNS_RESOLVER.html b/contrib/rom-o-matic/doc/DNS_RESOLVER.html new file mode 100644 index 00000000..1029b9c5 --- /dev/null +++ b/contrib/rom-o-matic/doc/DNS_RESOLVER.html @@ -0,0 +1 @@ +DNS resolver diff --git a/contrib/rom-o-matic/doc/DOWNLOAD_PROTO_FTP.html b/contrib/rom-o-matic/doc/DOWNLOAD_PROTO_FTP.html new file mode 100644 index 00000000..7686d5d8 --- /dev/null +++ b/contrib/rom-o-matic/doc/DOWNLOAD_PROTO_FTP.html @@ -0,0 +1 @@ +File Transfer Protocol diff --git a/contrib/rom-o-matic/doc/DOWNLOAD_PROTO_HTTP.html b/contrib/rom-o-matic/doc/DOWNLOAD_PROTO_HTTP.html new file mode 100644 index 00000000..c28d8886 --- /dev/null +++ b/contrib/rom-o-matic/doc/DOWNLOAD_PROTO_HTTP.html @@ -0,0 +1 @@ +Hypertext Transfer Protocol diff --git a/contrib/rom-o-matic/doc/DOWNLOAD_PROTO_TFTP.html b/contrib/rom-o-matic/doc/DOWNLOAD_PROTO_TFTP.html new file mode 100644 index 00000000..f2b31b17 --- /dev/null +++ b/contrib/rom-o-matic/doc/DOWNLOAD_PROTO_TFTP.html @@ -0,0 +1 @@ +Trivial File Transfer Protocol diff --git a/contrib/rom-o-matic/doc/IFMGMT_CMD.html b/contrib/rom-o-matic/doc/IFMGMT_CMD.html new file mode 100644 index 00000000..0e2b2a5e --- /dev/null +++ b/contrib/rom-o-matic/doc/IFMGMT_CMD.html @@ -0,0 +1 @@ +Interface management commands diff --git a/contrib/rom-o-matic/doc/IMAGE_BZIMAGE.html b/contrib/rom-o-matic/doc/IMAGE_BZIMAGE.html new file mode 100644 index 00000000..d85e5d07 --- /dev/null +++ b/contrib/rom-o-matic/doc/IMAGE_BZIMAGE.html @@ -0,0 +1 @@ +Linux bzImage image support diff --git a/contrib/rom-o-matic/doc/IMAGE_CMD.html b/contrib/rom-o-matic/doc/IMAGE_CMD.html new file mode 100644 index 00000000..6f5acb53 --- /dev/null +++ b/contrib/rom-o-matic/doc/IMAGE_CMD.html @@ -0,0 +1 @@ +Image management commands diff --git a/contrib/rom-o-matic/doc/IMAGE_ELF.html b/contrib/rom-o-matic/doc/IMAGE_ELF.html new file mode 100644 index 00000000..5e39e8bd --- /dev/null +++ b/contrib/rom-o-matic/doc/IMAGE_ELF.html @@ -0,0 +1 @@ +ELF image support diff --git a/contrib/rom-o-matic/doc/IMAGE_MULTIBOOT.html b/contrib/rom-o-matic/doc/IMAGE_MULTIBOOT.html new file mode 100644 index 00000000..6a092a20 --- /dev/null +++ b/contrib/rom-o-matic/doc/IMAGE_MULTIBOOT.html @@ -0,0 +1 @@ +MultiBoot image support diff --git a/contrib/rom-o-matic/doc/IMAGE_NBI.html b/contrib/rom-o-matic/doc/IMAGE_NBI.html new file mode 100644 index 00000000..eb78e03c --- /dev/null +++ b/contrib/rom-o-matic/doc/IMAGE_NBI.html @@ -0,0 +1 @@ +NBI image support diff --git a/contrib/rom-o-matic/doc/IMAGE_PXE.html b/contrib/rom-o-matic/doc/IMAGE_PXE.html new file mode 100644 index 00000000..bdca3841 --- /dev/null +++ b/contrib/rom-o-matic/doc/IMAGE_PXE.html @@ -0,0 +1 @@ +PXE image support diff --git a/contrib/rom-o-matic/doc/IMAGE_SCRIPT.html b/contrib/rom-o-matic/doc/IMAGE_SCRIPT.html new file mode 100644 index 00000000..1f7bed7d --- /dev/null +++ b/contrib/rom-o-matic/doc/IMAGE_SCRIPT.html @@ -0,0 +1 @@ +gPXE script image support diff --git a/contrib/rom-o-matic/doc/IWMGMT_CMD.html b/contrib/rom-o-matic/doc/IWMGMT_CMD.html new file mode 100644 index 00000000..0d5bd4a6 --- /dev/null +++ b/contrib/rom-o-matic/doc/IWMGMT_CMD.html @@ -0,0 +1 @@ +Wireless interface management commands diff --git a/contrib/rom-o-matic/doc/NMB_RESOLVER.html b/contrib/rom-o-matic/doc/NMB_RESOLVER.html new file mode 100644 index 00000000..a0bdc17d --- /dev/null +++ b/contrib/rom-o-matic/doc/NMB_RESOLVER.html @@ -0,0 +1 @@ +NMB resolver diff --git a/contrib/rom-o-matic/doc/NVO_CMD.html b/contrib/rom-o-matic/doc/NVO_CMD.html new file mode 100644 index 00000000..5346f3f5 --- /dev/null +++ b/contrib/rom-o-matic/doc/NVO_CMD.html @@ -0,0 +1 @@ +Non-volatile option storage commands diff --git a/contrib/rom-o-matic/doc/ROUTE_CMD.html b/contrib/rom-o-matic/doc/ROUTE_CMD.html new file mode 100644 index 00000000..8114c265 --- /dev/null +++ b/contrib/rom-o-matic/doc/ROUTE_CMD.html @@ -0,0 +1 @@ +Routing table management commands diff --git a/contrib/rom-o-matic/doc/SANBOOT_CMD.html b/contrib/rom-o-matic/doc/SANBOOT_CMD.html new file mode 100644 index 00000000..2e9d8407 --- /dev/null +++ b/contrib/rom-o-matic/doc/SANBOOT_CMD.html @@ -0,0 +1 @@ +SAN boot commands diff --git a/contrib/rom-o-matic/flag-table.php b/contrib/rom-o-matic/flag-table.php new file mode 100644 index 00000000..5f09ebc3 --- /dev/null +++ b/contrib/rom-o-matic/flag-table.php @@ -0,0 +1,498 @@ +<?php // -*- Mode: PHP; -*- + +/** + * Copyright (C) 2009 Marty Connor <mdc@etherboot.org>. + * Copyright (C) 2009 Entity Cyber, Inc. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation; either version 2 of the + * License, or any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + */ + +$ofmts = array + ( "Floppy bootable image (.dsk)" => "dsk", + "SYSLINUX-based bootable floppy image (.sdsk)" => "sdsk", + "ISO bootable image (.iso)" => "iso", + "ISO bootable image with legacy floppy emulation (.liso)" => "liso", + "Linux kernel (SYSLINUX/GRUB/LILO) loadable image (.lkrn)" => "lkrn", + "USB Keychain disk image (.usb)" => "usb", + "ROM binary (flashable) image (.rom)" => "rom", + "PXE bootstrap loader image [Unload PXE stack] (.pxe)" => "pxe", + "PXE bootstrap loader keep [Keep PXE stack method 1] (.kpxe)" => "kpxe", + "PXE bootstrap loader keep [Keep PXE stack method 2] (.kkpxe)" => "kkpxe", + ); + +$flag_table = array ( + + // Begin General Options: + + "HDR_MISC_OPTIONS" + => array ( + "flag" => "HDR_MISC_OPTIONS", + "hide_from_user" => "yes", // Hide even the header + "type" => "header", + "label" => "Miscellaneous Options" + ), + + "PRODUCT_NAME" + => array ( + "flag" => "PRODUCT_NAME", + "hide_from_user" => "yes", + "type" => "string", + "value" => "", + "cfgsec" => "general" + ), + + "PRODUCT_SHORT_NAME" + => array ( + "flag" => "PRODUCT_SHORT_NAME", + "hide_from_user" => "yes", + "type" => "string", + "value" => "gPXE", + "cfgsec" => "general" + ), + + // End General Options: + + // Begin Console Options: + + "HDR_CONSOLE_OPTIONS" + => array ( + "flag" => "HDR_CONSOLE_OPTIONS", + "type" => "header", + "label" => "Console Options" + ), + + "CONSOLE_PCBIOS" + => array ( + "flag" => "CONSOLE_PCBIOS", + "type" => "on/off", + "value" => "on", + "cfgsec" => "console" + ), + + "CONSOLE_SERIAL" + => array ( + "flag" => "CONSOLE_SERIAL", + "type" => "on/off", + "value" => "off", + "cfgsec" => "console" + ), + + "BANNER_TIMEOUT" + => array ( + "flag" => "BANNER_TIMEOUT", + "type" => "integer", + "value" => "20", + "cfgsec" => "general" + ), + + // End Console Options + + // Begin Network Protocol Options: + + "HDR_NETWORK_PROTOCOL_OPTIONS" + => array ( + "flag" => "HDR_NETWORK_PROTOCOL_OPTIONS", + "hide_from_user" => "yes", // Hide even the header + "type" => "header", + "label" => "Network Protocol Options" + ), + + "NET_PROTO_IPV4" + => array ( + "flag" => "NET_PROTO_IPV4", + "type" => "on/off", + "value" => "on", + "hide_from_user" => "yes", + "cfgsec" => "general" + ), + + // End Network Protocol Options + + // Begin Serial Port configuration + + "HDR_SERIAL_PORT_OPTIONS" + => array ( + "flag" => "HDR_SERIAL_PORT_OPTIONS", + "type" => "header", + "label" => "Serial Port Options" + ), + + "COMCONSOLE" + => array ( + "flag" => "COMCONSOLE", + "type" => "integer-hex", // e.g. 0x378 + "value" => "0x3F8", + "cfgsec" => "serial" + ), + + "COMPRESERVE" + => array ( + "flag" => "COMPRESERVE", + "type" => "on/off", + "value" => "off", + "cfgsec" => "serial" + ), + + "COMSPEED" + => array ( + "flag" => "COMSPEED", + "type" => "integer", + "value" => "115200", + "cfgsec" => "serial" + ), + + "COMDATA" + => array ( + "flag" => "COMDATA", + "type" => "integer", + "value" => "8", + "cfgsec" => "serial" + ), + + "COMPARITY" + => array ( + "flag" => "COMPARITY", + "type" => "integer", + "value" => "0", + "cfgsec" => "serial" + ), + + "COMSTOP" + => array ( + "flag" => "COMSTOP", + "type" => "integer", + "value" => "1", + "cfgsec" => "serial" + ), + + // End Serial Options + + // Begin Download Protocols + + "HDR_DOWNLOAD_PROTOCOLS" + => array ( + "flag" => "HDR_DOWNLOAD_PROTOCOLS", + "type" => "header", + "label" => "Download Protocols" + ), + + "DOWNLOAD_PROTO_TFTP" + => array ( + "flag" => "DOWNLOAD_PROTO_TFTP", + "type" => "on/off", + "value" => "on", + "cfgsec" => "general" + ), + + "DOWNLOAD_PROTO_HTTP" + => array ( + "flag" => "DOWNLOAD_PROTO_HTTP", + "type" => "on/off", + "value" => "on", + "cfgsec" => "general" + ), + + "DOWNLOAD_PROTO_HTTPS" + => array ( + "flag" => "DOWNLOAD_PROTO_HTTPS", + "type" => "on/off", + "value" => "off", + "cfgsec" => "general" + ), + + "DOWNLOAD_PROTO_FTP" + => array ( + "flag" => "DOWNLOAD_PROTO_FTP", + "type" => "on/off", + "value" => "off", + "cfgsec" => "general" + ), + + // End Download Protocols + + // Begin SAN boot protocols + + "HDR_SANBOOT_PROTOCOLS" + => array ( + "flag" => "HDR_SANBOOT_PROTOCOLS", + "type" => "header", + "label" => "SAN Boot Protocols" + ), + + "SANBOOT_PROTO_ISCSI" + => array ( + "flag" => "SANBOOT_PROTO_ISCSI", + "type" => "on/off", + "value" => "on", + "cfgsec" => "general" + ), + + "SANBOOT_PROTO_AOE" + => array ( + "flag" => "SANBOOT_PROTO_AOE", + "type" => "on/off", + "value" => "on", + "cfgsec" => "general" + ), + + // End SAN boot protocols + + // Begin Name resolution modules + + "HDR_NAME_RESOLUTION_MODULES" + => array ( + "flag" => "HDR_NAME_RESOLUTION_MODULES", + "type" => "header", + "label" => "Name Resolution Modules" + ), + + "DNS_RESOLVER" + => array ( + "flag" => "DNS_RESOLVER", + "type" => "on/off", + "value" => "on", + "cfgsec" => "general" + ), + + "NMB_RESOLVER" + => array ( + "flag" => "NMB_RESOLVER", + "type" => "on/off", + "value" => "off", + "hide_from_user" => "yes", + "cfgsec" => "general" + ), + + // End Name resolution modules + + // Begin Image types + + "HDR_IMAGE_TYPES" + => array ( + "flag" => "HDR_IMAGE_TYPES", + "type" => "header", + "label" => "Image Types", + ), + + "IMAGE_ELF" + => array ( + "flag" => "IMAGE_ELF", + "type" => "on/off", + "value" => "on", + "cfgsec" => "general" + ), + + "IMAGE_NBI" + => array ( + "flag" => "IMAGE_NBI", + "type" => "on/off", + "value" => "on", + "cfgsec" => "general" + ), + + "IMAGE_MULTIBOOT" + => array ( + "flag" => "IMAGE_MULTIBOOT", + "type" => "on/off", + "value" => "on", + "cfgsec" => "general" + ), + + "IMAGE_PXE" + => array ( + "flag" => "IMAGE_PXE", + "type" => "on/off", + "value" => "on", + "cfgsec" => "general" + ), + + "IMAGE_SCRIPT" + => array ( + "flag" => "IMAGE_SCRIPT", + "type" => "on/off", + "value" => "on", + "cfgsec" => "general" + ), + + "IMAGE_BZIMAGE" + => array ( + "flag" => "IMAGE_BZIMAGE", + "type" => "on/off", + "value" => "on", + "cfgsec" => "general" + ), + + "IMAGE_COMBOOT" + => array ( + "flag" => "IMAGE_COMBOOT", + "type" => "on/off", + "value" => "on", + "cfgsec" => "general" + ), + + // End Image types + + // Begin Command-line commands to include + + "HDR_COMMAND_LINE_OPTIONS" + => array ( + "flag" => "HDR_COMMAND_LINE_OPTIONS", + "type" => "header", + "label" => "Command Line Options", + ), + + "AUTOBOOT_CMD" + => array ( + "flag" => "AUTOBOOT_CMD", + "type" => "on/off", + "value" => "on", + "cfgsec" => "general" + ), + + "NVO_CMD" + => array ( + "flag" => "NVO_CMD", + "type" => "on/off", + "value" => "on", + "cfgsec" => "general" + ), + + "CONFIG_CMD" + => array ( + "flag" => "CONFIG_CMD", + "type" => "on/off", + "value" => "on", + "cfgsec" => "general" + ), + + "IFMGMT_CMD" + => array ( + "flag" => "IFMGMT_CMD", + "type" => "on/off", + "value" => "on", + "cfgsec" => "general" + ), + + "IWMGMT_CMD" + => array ( + "flag" => "IWMGMT_CMD", + "type" => "on/off", + "value" => "on", + "cfgsec" => "general" + ), + + "ROUTE_CMD" + => array ( + "flag" => "ROUTE_CMD", + "type" => "on/off", + "value" => "on", + "cfgsec" => "general" + ), + + "IMAGE_CMD" + => array ( + "flag" => "IMAGE_CMD", + "type" => "on/off", + "value" => "on", + "cfgsec" => "general" + ), + + "DHCP_CMD" + => array ( + "flag" => "DHCP_CMD", + "type" => "on/off", + "value" => "on", + "cfgsec" => "general" + ), + + "SANBOOT_CMD" + => array ( + "flag" => "SANBOOT_CMD", + "type" => "on/off", + "value" => "on", + "cfgsec" => "general" + ), + + "LOGIN_CMD" + => array ( + "flag" => "LOGIN_CMD", + "type" => "on/off", + "value" => "on", + "cfgsec" => "general" + ), + + "TIME_CMD" + => array ( + "flag" => "TIME_CMD", + "type" => "on/off", + "value" => "off", + "cfgsec" => "general" + ), + + "DIGEST_CMD" + => array ( + "flag" => "DIGEST_CMD", + "type" => "on/off", + "value" => "off", + "cfgsec" => "general" + ), + + // End Command-line commands to include + + // Begin Wireless options + + "HDR_WIRELESS_OPTIONS" + => array ( + "flag" => "HDR_WIRELESS_OPTIONS", + "type" => "header", + "label" => "Wireless Interface Options", + ), + + "CRYPTO_80211_WEP" + => array ( + "flag" => "CRYPTO_80211_WEP", + "type" => "on/off", + "value" => "on", + "cfgsec" => "general" + ), + + "CRYPTO_80211_WPA" + => array ( + "flag" => "CRYPTO_80211_WPA", + "type" => "on/off", + "value" => "on", + "cfgsec" => "general" + ), + + "CRYPTO_80211_WPA2" + => array ( + "flag" => "CRYPTO_80211_WPA2", + "type" => "on/off", + "value" => "on", + "cfgsec" => "general" + ), + + // End Wireless options + +); + +// For emacs: +// Local variables: +// c-basic-offset: 4 +// c-indent-level: 4 +// tab-width: 4 +// End: + +?> diff --git a/contrib/rom-o-matic/globals.php b/contrib/rom-o-matic/globals.php new file mode 100644 index 00000000..d4316d03 --- /dev/null +++ b/contrib/rom-o-matic/globals.php @@ -0,0 +1,51 @@ +<?php // -*- Mode: PHP; -*- + +/** + * Copyright (C) 2009 Marty Connor <mdc@etherboot.org>. + * Copyright (C) 2009 Entity Cyber, Inc. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation; either version 2 of the + * License, or any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + */ + +// Directory containing gPXE source code tree +$src_dir = "../../src"; + +// Compute gPXE version based on source tree +exec ( "make -C '$src_dir' version 2>&1", $make_output, $status ); +$version = ( $status == 0 && count ( $make_output ) > 1 ) + ? trim ( $make_output[count ( $make_output ) - 2] ) + : ""; + +// Email address of person responsible for this website +$webmaster_email = "webmaster@example.com"; + +// Files that header and footer text +$top_inc = "top.php"; +$bottom_inc = "bottom.php"; + +// Descriptive strings +$header_title = "ROM-o-matic for gPXE $version"; +$html_tagline = "ROM-o-matic dynamically generates gPXE images"; +$html_title = "ROM-o-matic for gPXE $version"; +$description = "a dynamic gPXE image generator"; + +// For emacs: +// Local variables: +// c-basic-offset: 4 +// c-indent-level: 4 +// tab-width: 4 +// End: + +?> diff --git a/contrib/rom-o-matic/index.php b/contrib/rom-o-matic/index.php new file mode 100644 index 00000000..12b7e1a8 --- /dev/null +++ b/contrib/rom-o-matic/index.php @@ -0,0 +1,47 @@ +<?php // -*- Mode: PHP; -*- + +/** + * Copyright (C) 2009 Marty Connor <mdc@etherboot.org>. + * Copyright (C) 2009 Entity Cyber, Inc. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation; either version 2 of the + * License, or any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + */ + +// Get utility functions and set globals +require_once "utils.php"; + +// Begin html output +include_once $top_inc; + +?> +<form action="build.php" method=POST> + <input type="hidden" name="version" value = "<? echo $version ?>"> + <h3>To create an image:</h3> + <ol> + <? require ( "directions.php" ); ?> + <li> + Generate and download an image: + <input type="submit" name="A" value="Get Image"> + <br><br> + </li> + <li> + (optional) Customize image configuration options: + <input type="submit" name="A" value="Customize"> + <br><br> + </li> + </ol> +</form> + +<? include_once $bottom_inc ?> diff --git a/contrib/rom-o-matic/top.php b/contrib/rom-o-matic/top.php new file mode 100644 index 00000000..f94c2b3b --- /dev/null +++ b/contrib/rom-o-matic/top.php @@ -0,0 +1,41 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> + +<? + +/** + * Copyright (C) 2009 Marty Connor <mdc@etherboot.org>. + * Copyright (C) 2009 Entity Cyber, Inc. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation; either version 2 of the + * License, or any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + */ + +?> + +<html> +<head> + <link rev="made" href="mailto:<? echo "${webmaster_email}" ?>"> + <meta name="keywords" content="rom, etherboot, gpxe, open source, rom-o-matic.net"> + <title><? echo $header_title ?></title> + <meta name="description" content="<? echo $description ?>"> +</head> +<h1> +<? echo "$html_title" ?> +</h1> +<hr> +<h2> +<? echo "$html_tagline" ?> +</h2> +</form> +<hr> diff --git a/contrib/rom-o-matic/utils.php b/contrib/rom-o-matic/utils.php new file mode 100644 index 00000000..c5fdc206 --- /dev/null +++ b/contrib/rom-o-matic/utils.php @@ -0,0 +1,683 @@ +<? // -*- Mode: PHP; -*- + +/** + * Copyright (C) 2009 Marty Connor <mdc@etherboot.org>. + * Copyright (C) 2009 Entity Cyber, Inc. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation; either version 2 of the + * License, or any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + */ + +// Include table of user-configurable gPXE options +require_once "flag-table.php"; + +// Include user-shadowable globals +require_once "globals.php"; + +// Allow user to shadow globals +if ( is_file ( 'local-config.php' ) ) { + include_once "local-config.php"; +} + +//// +// General utility functions +//// + +/** + * Remove undesirable characters from a given string + * + * Certain characters have the potential to be used for + * malicious purposes by web-based attackers. This routine + * filters out such characters. + * + * @param string $s supplied string + * + * @return string returned string with unwanted characters + * removed + */ +function cleanstring ( $s ) +{ + $len = strlen ( $s ); + if ( $len > 80 ) { + $s = substr ( $s, 0, 80 ); + } + + $s = trim ( $s ); + $pos = 0; + $result = ""; + + while ( $pos < $len ) { + $ltr = ord ( ucfirst ( $s[$pos] ) ); + if ( ( $ltr >= ord ( "A" ) ) && ( $ltr <= ord ( "Z" ) ) || + ( $ltr >= ord ( "0" ) ) && ( $ltr <= ord ( "9" ) ) || + ( $ltr == ord ( "." ) ) && ( strlen ( $result ) > 0 ) || + ( $ltr == ord ( "_" ) ) || + ( $ltr == ord ( "+" ) ) || + ( $ltr == ord ( ":" ) ) || + ( $ltr == ord ( "/" ) ) || + ( $ltr == ord ( "-" ) ) ) { + $result .= $s[$pos]; + } + $pos++; + } + return $result; +} + +/** + * Return URL of the currently running script, minus the filename + * + * @return string the URL of the currently running script, minus the filename + */ +function curDirURL () +{ + $dir = dirname ( $_SERVER['PHP_SELF'] ); + + if ( $dir == "." || $dir == "/" ) { + $dir = ""; + } + + $isHTTPS = ( isset ( $_SERVER["HTTPS"] ) && $_SERVER["HTTPS"] == "on" ); + $port = ( isset($_SERVER["SERVER_PORT"] ) && + ( ( !$isHTTPS && $_SERVER["SERVER_PORT"] != "80" ) || + ( $isHTTPS && $_SERVER["SERVER_PORT"] != "443" ) ) ); + + $port = ( $port ) ? ':' . $_SERVER["SERVER_PORT"] : ''; + + $dest = ( $isHTTPS ? 'https://' : 'http://' ) . + $_SERVER["SERVER_NAME"] . $dir . "/"; + + return $dest; +} + +/** + * Extract NIC families and associated ROM PCI IDs from the src/bin/NIC file. + * + * $src_dir must contain the path of the gPXE src directory for this build + * + * @return array[0] array $new_nics + * @return array[1] array $roms + */ +function parse_nic_file () +{ + global $src_dir; + + $fd = fopen ( "$src_dir/bin/NIC", "r" ); + if ( ! $fd ) { + die ( "Missing src/bin/NIC file. 'make bin/NIC'" ); + } + + $nics = array (); + $roms = array (); + $nic = ""; + + while ( !feof ( $fd ) ) { + + $line = trim ( fgets ( $fd, 200 ) ); + + $first_eight_chars = substr ( $line, 0, 8 ); + settype ( $first_eight_chars, "string" ); + + if ( strpos ( $first_eight_chars, "family" ) === 0 ) { + + // get pathname of NIC driver + list ( $dummy, $nic ) = split( "[ \t]+", $line ); + settype ( $nic, "string" ); + + // extract filename name of driver from pathname + $nic = substr ( $nic, strrpos ( $nic, "/" ) + 1, + strlen ( $nic ) - strrpos ( $nic, "/" ) + 1 ); + + $nics[$nic] = $nic; + + // For each ISA NIC, there can only be one ROM variant + $roms[$nic] = $nic; + } + + // If the first 8 digits of the line are hex digits + // add this rom to the current nic family. + + if ( ( strlen ( $first_eight_chars ) == 8 ) + && ( ctype_xdigit ( $first_eight_chars ) ) + && ( $nic != "" ) ) { + + $roms[$first_eight_chars] = $nic; + } + } + fclose ( $fd ); + + // put most NICs in nice alpha order for menu + ksort ( $nics ); + + // add special cases to the top + + $new_nics = array ( "all-drivers" => "gpxe", + "undionly" => "undionly", + "undi" => "undi", + ); + + foreach ( $nics as $key => $value ) { + // skip the undi driver + if ( $key != "undi" ) { + $new_nics[$key] = $value; + } + } + + return array ( $new_nics, $roms ); +} + +//// +// HTML form utility functions +//// + +/** + * Return html code to create hidden form input fields + * + * @param string $flag name of form variable to set + * @param string $value value to give form variable + * + * @return string html code for given hidden form input field + */ +function hidden ( $flag, $value ) +{ + $value = htmlentities ( $value ); + return "<input type=\"hidden\" value=\"$value\" name=\"$flag\"></input>"; +} + +/** + * Return html code to create checkbox form input fields + * + * @param string $flag name of form variable to set + * @param string $value "on" means box should be checked + * + * @return string html code for given hidden form input field + */ +function checkbox ( $flag, $value ) +{ + return "<input type=\"checkbox\" value=\"on\" name=\"$flag\"" . + ($value == "on" ? " checked>" : ">" ); +} + +/** + * Return html code to create text form input fields + * + * @param string $flag name of form variable to set + * @param string $value initial contents of field + * @param string $size size in characters of text box + * + * @return string html code for given text input field + */ +function textbox ( $flag, $value, $size ) +{ + $value = htmlentities ( $value ); + return "<input type=\"text\" size=\"$size\" value=\"$value\" name=\"$flag\">"; +} + +/** + * Return html code to create textarea form fields + * + * @param string $flag name of form variable to set + * @param string $value initial contents of textarea + * @param string $rows height of text area in rows + * @param string $cols width of text area in columns + * + * @return string html code for given textarea input field + */ +function textarea ( $flag, $value, $rows, $cols ) +{ + $value = htmlentities ( $value ); + return "<textarea name=\"$flag\" rows=\"$rows\" cols=\"$cols\">" + . $value . "</textarea>"; +} + +/** + * Return html code to create select (menu) form fields + * + * Use array of strings as menu choices + * + * @param string $flag name of form variable to set + * @param array $options array of strings representing choices + * @param string $value value of choice to select in menu + * + * @return string html code for given select (menu) input field + */ +function menubox ( $name, $options, $value ) +{ + $s="<select name=\"$name\">"; + + foreach ( $options as $ignore => $option ) { + if ( !$value ) $value = $option; + $s .= "<option" . ( $option == $value ? " selected>" : ">" ) . + htmlentities ( $option ) . "</option>"; + } + return $s . "</select>"; +} + +/** + * Return html code to create select (menu) form fields + * + * Use indices of array of strings as menu choices rather than + * the values pointed to by the indicies. + * + * @param string $flag name of form variable to set + * @param array $options array of strings representing choices + * @param string $value value of choice to select in menu + * + * @return string html code for given select (menu) input field + */ +function keys_menubox ( $name, $options, $value ) +{ + $s="<select name=\"$name\">"; + + foreach ( $options as $option => $ignore ) { + if ( !$value ) $value = $option; + $s .= "<option" . ( $option == $value ? " selected>" : ">" ) . + htmlentities ( $option ) . "</option>"; + } + return $s . "</select>"; +} + +//// +// Flag (compile option) handling functions +//// + +/** + * Return default compile options (flags) + * + * Initial compile options are in a global called $flag_table. + * Create and return an array containing the ones we want. + * + * @return array default compile options (flags) + */ +function default_flags () +{ + global $flag_table; + + $flags = array (); + + foreach ( $flag_table as $key => $props ) { + + $flag = $props["flag"]; + $type = $props["type"]; + + // Fields like headers have no "value" property + if ( isset ( $props["value"] ) ) { + $flags[$flag] = $props["value"]; + } + } + return $flags; +} + +/** + * Return combination of default and user compile options (flags) + * + * Initial compile options are in a global called $flag_table. + * Compile options may have been changed via form input. We return + * an array with either the default value of each option or a user + * supplied value from form input. + * + * @return array combined default and user supplied compile options (flags) + */ +function get_flags () +{ + global $flag_table; + + $flags = default_flags (); + + if ( ! isset ( $_POST["use_flags"] ) ) + return $flags; + + foreach ( $flag_table as $key => $props ) { + + $flag = $props["flag"]; + $type = $props["type"]; + + if ( isset ( $_POST["$flag"] ) ) { + $flags[$flag] = $_POST["$flag"]; + if ( $type == "integer-hex" ) { + if ( strtolower ( substr ( $flags[$flag], 0, 2 ) ) != "0x" ) { + $flags[$flag] = "0x" . $flags[$flag]; + } + } + } else if ( $type == "on/off" ) { + // Unchecked checkboxes don't pass any POST value + // so we must check for them specially. At this + // point we know that there is no $_POST value set + // for this option. If it is a checkbox, this means + // it is unchecked, so record that in $flags so we + // can later generate an #undef for this option. + $flags[$flag] = "off"; + } + } + return $flags; +} + +/** + * Output given value in appropriate format for gPXE config file + * + * gPXE config/*.h files use C pre-processor syntax. Output the given + * compile option in a format appropriate to its type + * + * @param string $key index into $flag_table for given compile option + * @param string $value value we wish to set compile option to + * + * @return string code to set compile option to given value + */ +function pprint_flag ( $key, $value ) +{ + global $flag_table; + + // Determine type of given compile option (flag) + $type = $flag_table[$key]["type"]; + $s = ""; + + if ( $type == "on/off" && $value == "on" ) { + $s = "#define $key"; + } else if ( $type == "on/off" && $value != "on" ) { + $s = "#undef $key"; + } else if ( $type == "string" ) { + $s = ( "#define $key \"" . cleanstring ( $value ) . "\"" ); + } else if ($type == "qstring" ) { + $s = ( "#define $key \\\"" . cleanstring ( $value ) . "\\\"" ); + } else { + $s = "#define $key " . cleanstring ( $value ); + } + + return $s; +} + +/** + * Output html code to display all compile options as a table + * + * @param array $flags array of compile options + * + * @return void + */ +function echo_flags ( $flags ) +{ + global $flag_table; + + echo "<table>\n"; + + foreach ( $flag_table as $key => $props ) { + + // Hide parameters from users that should not be changed. + $hide_from_user = isset ( $props["hide_from_user"] ) ? $props["hide_from_user"] : "no"; + + $flag = $props["flag"]; + $type = $props["type"]; + + $value = isset ( $flags[$flag] ) ? $flags[$flag] : ''; + + if ( $hide_from_user == "yes" ) { + + // Hidden flags cannot not be set by the user. We use hidden form + // fields to keep them at their default values. + if ( $type != "header" ) { + echo hidden ( $flag, $value ); + } + + } else { + + // Flag (gPXE compile option) should be displayed to user + + if ( $type == "header" ) { + + $label = $props["label"]; + echo "<td colspan=2><hr><h3>$label</h3><hr></td>"; + + } else if ($type == "on/off" ) { + + echo "<td>", checkbox ( $flag, $value ), "</td><td><strong>$flag</strong></td>"; + + } else { // don't display checkbox for non-on/off flags + + echo "<td> </td><td><strong>$flag: </strong>"; + + if ($type == "choice" ) { + $options = $props["options"]; + echo menubox($flag, $options, $value); + + } else { + + echo textbox($flag, $value, ($type == "integer" || + $type == "integer-hex" + ? 7 : 25)); + } + echo "</td>"; + } + echo "</tr>\n"; + + if ( $type != "header" ) { + echo "<tr><td> </td>"; + echo "<td>\n"; + if ( is_file ( "doc/$flag.html" ) ) { + include_once "doc/$flag.html"; + } + echo "\n</td></tr>\n"; + } + } + } + echo "</table>"; +} + +/** + * Return an array of configuration sections used in all compile options + * + * $flag_table, the global list of compile options contains a 'cfgsec' + * property for each flag we are interested in. We return a list of + * all the unique cfgsec options we find in $flag_table. + * + * @return array an array of strings representing all unique cfgsec values + * found in $flag_table + */ +function get_flag_cfgsecs () +{ + global $flag_table; + $cfgsecs = array (); + + foreach ( $flag_table as $key => $props ) { + if ( isset ( $props['cfgsec'] ) ) { + $cfgsec = $props["cfgsec"]; + $cfgsecs[$cfgsec] = $cfgsec; + } + } + return $cfgsecs; +} + +//// +// File and directory handling functions +//// + +/** + * Create a copy of a given source directory to a given destination + * + * Since we are going to modify the source directory, we create a copy + * of the directory with a unique name in the given destination directory. + * We supply a prefix for the tempnam call to prepend to the random filename + * it generates. + * + * @param string $src source directory + * @param string $dst destination directory + * @param string $prefix string to append to directory created + * + * @return string absolute path to destination directory + */ +function mktempcopy ( $src, $dst, $prefix ) +{ + if ( $src[0] != "/" ) { + $src = dirname ( $_SERVER['SCRIPT_FILENAME'] ) . "/" . $src; + } + + // Create a file in the given destination directory with a unique name + $dir = tempnam ( $dst, $prefix ); + + // Delete the file just created, since it would interfere with the copy we + // are about to do. We only care that the dir name we copy to is unique. + unlink ( $dir ); + + exec ( "/bin/cp -a '$src' '$dir' 2>&1", $cpytxt, $status ); + + if ( $status != 0 ) { + die ( "src directory copy failed!" ); + } + return $dir; +} + +/** + * Write gPXE config files based on value of given flags + * + * gPXE compile options are stored in src/config/*.h . + * We write out a config file for each set of options. + * + * @param string $config_dir directory to write .h files to + * @param array $flags array of compile options for this build + * + * @return void + */ +function write_gpxe_config_files ( $config_dir, $flags ) +{ + global $flag_table; + + $cfgsecs = get_flag_cfgsecs (); + + foreach ( $cfgsecs as $cfgsec ) { + + $fname = $config_dir . "/" . $cfgsec . ".h"; + + $fp = fopen ( $fname, "wb" ); + if ( $fp <= 0 ) { + die ( "Unable to open $fname file for output!" ); + } + + $ifdef_secname = "CONFIG_" . strtoupper ( $cfgsec ) . "_H"; + + fwrite ( $fp, "#ifndef ${ifdef_secname}\n" ); + fwrite ( $fp, "#define ${ifdef_secname}\n" ); + fwrite ( $fp, "#include <config/defaults.h>\n" ); + + foreach ( $flags as $key => $value ) { + // When the flag matches this section name, write it out + if ( $flag_table[$key]["cfgsec"] == $cfgsec ) { + fwrite ( $fp, pprint_flag ( $key, $value ) . "\n" ); + } + } + fwrite ( $fp, "#endif /* ${ifdef_secname} */\n" ); + fclose ( $fp ); + } +} + +/** + * Output a string to a file + * + * Output a given string to a given pathname. The file will be created if + * necessary, and the string will replace the file's contents in all cases. + * + * @param string $fname pathname of file to output string to + * @param string $ftext text to output to file + * + * @return void + */ +function write_file_from_string ( $fname, $ftext ) +{ + $fp = fopen ( $fname, "wb" ); + if ( ! $fp ) { + die ( "Unable to open $fname file for output!" ); + } + fwrite ( $fp, $ftext ); + fclose ( $fp ); +} + +/** + * Delete a file or recursively delete a directory tree + * + * @param string $file_or_dir_name name of file or directory to delete + * @return bool Returns TRUE on success, FALSE on failure + */ +function rm_file_or_dir ( $file_or_dir_name ) +{ + if ( ! file_exists ( $file_or_dir_name ) ) { + return false; + } + + if ( is_file ( $file_or_dir_name ) || is_link ( $file_or_dir_name ) ) { + return unlink ( $file_or_dir_name ); + } + + $dir = dir ( $file_or_dir_name ); + while ( ( $dir_entry = $dir->read () ) !== false ) { + + if ( $dir_entry == '.' || $dir_entry == '..') { + continue; + } + rm_file_or_dir ( $file_or_dir_name . '/' . $dir_entry ); + } + $dir->close(); + + return rmdir ( $file_or_dir_name ); +} + +//// +// Debugging functions +//// + +/** + * Emit html code to display given array of compile options (flags) + * + * @param array $flags array of compile options for this build + * + * @return void + */ +function show_flags ( $flags ) +{ + echo ( "\$flags contains " . count ( $flags ) . " elements:" . "<br>" ); + + foreach ( $flags as $key => $flag ) { + echo ( "\$flags[" . $key . "]=" . "\"$flag\"" . "<br>" ); + } +} + +/** + * Emit HTML code to display default array of compile options (flags) + * + * $flag_table contains default compile options and properties. This + * routine outputs HTML code to display all properties of $flag_table. + * + * @return void + */ +function dump_flag_table () +{ + global $flag_table; + + echo ( "\$flag_table contains " . count ( $flag_table ) . " elements:" . "<br>" ); + + foreach ( $flag_table as $key => $props ) { + print ( "flag_table[" . $key . "] = " . "<br>" ); + + foreach ( $props as $key2 => $props2 ) { + print ( " " . $key2 . " = " . $props2 . "<br>" ); + } + } +} + +// Parse src/bin/NIC file +list ( $nics, $roms ) = parse_nic_file (); + +// For emacs: +// Local variables: +// c-basic-offset: 4 +// c-indent-level: 4 +// tab-width: 4 +// End: + +?> |