From 61bd56dad51354efe37bf0aec80745dd1c09bd4b Mon Sep 17 00:00:00 2001 From: Simon Rettberg Date: Wed, 26 Sep 2018 14:49:57 +0200 Subject: [serversetup-bwlp] Detect wether we run our modified iPXE Try not to use special features if stock iPXE is running --- modules-available/serversetup-bwlp/api.inc.php | 54 +++++++++++++++------- .../serversetup-bwlp/inc/ipxemenu.inc.php | 6 +-- .../serversetup-bwlp/inc/menuentry.inc.php | 10 ++-- 3 files changed, 48 insertions(+), 22 deletions(-) diff --git a/modules-available/serversetup-bwlp/api.inc.php b/modules-available/serversetup-bwlp/api.inc.php index bc81d35d..4ed316a7 100644 --- a/modules-available/serversetup-bwlp/api.inc.php +++ b/modules-available/serversetup-bwlp/api.inc.php @@ -2,23 +2,40 @@ // Menu mode +$serverIp = Property::getServerIp(); + // Check if required arguments are given; if not, spit out according script and chain to self $uuid = Request::any('uuid', false, 'string'); // Get platform - EFI or PCBIOS $platform = Request::any('platform', false, 'string'); $manuf = Request::any('manuf', false, 'string'); $product = Request::any('product', false, 'string'); +$slxExtensions = Request::any('slx-extensions', false, 'int'); -if ($platform === false || ($uuid === false && $product === false)) { +if ($platform === false || ($uuid === false && $product === false) || $slxExtensions === false) { + error_log(print_r($_SERVER, true)); + sleep(1); $url = parse_url($_SERVER['REQUEST_URI']); - $urlbase = $url['path']; + if (isset($_SERVER['SCRIPT_URI']) && preg_match('#(\w+://[^/]+)#', $_SERVER['SCRIPT_URI'], $out)) { + $urlbase = $out[1]; + } elseif (isset($_SERVER['REQUEST_SCHEME']) && isset($_SERVER['SERVER_NAME'])) { + $urlbase = $_SERVER['REQUEST_SCHEME'] . '://' . $_SERVER['SERVER_NAME']; + } elseif (isset($_SERVER['REQUEST_SCHEME']) && isset($_SERVER['SERVER_ADDR'])) { + $urlbase = $_SERVER['REQUEST_SCHEME'] . '://' . $_SERVER['SERVER_ADDR']; + } else { + $urlbase = 'http://' . $serverIp; + } + $urlbase .= $url['path']; if (empty($url['query'])) { $arr = []; } else { parse_str($url['query'], $arr); - $arr = array_map('urlencode', $arr); + foreach ($arr as &$v) { + $v = urlencode($v); + } + unset($v); } - $arr['uuid'] = '${uuid:uristring}'; + $arr['uuid'] = '${uuid}'; $arr['mac'] = '${mac}'; $arr['manuf'] = '${manufacturer:uristring}'; $arr['product'] = '${product:uristring}'; @@ -27,11 +44,16 @@ if ($platform === false || ($uuid === false && $product === false)) { foreach ($arr as $k => $v) { $query .= $k . '=' . $v . '&'; } - $query = substr($query, 0, -1); + //$query = substr($query, 0, -1); echo << 'sanboot --no-describe', ]; -$serverIp = Property::getServerIp(); - $ip = $_SERVER['REMOTE_ADDR']; if (substr($ip, 0, 7) === '::ffff:') { $ip = substr($ip, 7); @@ -109,7 +129,11 @@ if (isset($BOOT_METHODS[$localboot])) { $BOOT_METHODS = array_reverse($BOOT_METHODS); } -// TODO: Feature check for our own iPXE extensions, stay compatible to stock iPXE +if ($slxExtensions) { + $slxConsoleUpdate = '--update'; +} else { + $slxConsoleUpdate = ''; +} $output = <<getMenuDefinition('target', $platform); +$output .= $menu->getMenuDefinition('target', $platform, $slxExtensions); $output .= <<getItemsCode($platform); -// TODO: Work out memtest stuff. Needs to be put on server (install/update script) -- PCBIOS only? Chain EFI -> BIOS? - /* :i5 @@ -202,8 +224,8 @@ goto init :i8 set x:int32 0 :again -console --left 60 --top 130 --right 67 --bottom 96 --picture bg-load --keep --quick || -console --left 55 --top 88 --right 63 --bottom 64 --picture bg-menu --keep --quick || +console --left 60 --top 130 --right 67 --bottom 96 --picture bg-load --keep || +console --left 55 --top 88 --right 63 --bottom 64 --picture bg-menu --keep || inc x iseq \${x} 20 || goto again prompt DONE. Press dein Knie. diff --git a/modules-available/serversetup-bwlp/inc/ipxemenu.inc.php b/modules-available/serversetup-bwlp/inc/ipxemenu.inc.php index 56041c20..6429a2a7 100644 --- a/modules-available/serversetup-bwlp/inc/ipxemenu.inc.php +++ b/modules-available/serversetup-bwlp/inc/ipxemenu.inc.php @@ -36,11 +36,11 @@ class IPxeMenu } } - public function getMenuDefinition($targetVar, $mode) + public function getMenuDefinition($targetVar, $mode, $slxExtensions) { - $str = "menu {$this->title}\n"; + $str = "menu -- {$this->title}\n"; foreach ($this->items as $item) { - $str .= $item->getMenuItemScript("m_{$this->menuid}", $this->defaultEntryId, $mode); + $str .= $item->getMenuItemScript("m_{$this->menuid}", $this->defaultEntryId, $mode, $slxExtensions); } if ($this->defaultEntryId === null) { $defaultLabel = "mx_{$this->menuid}_poweroff"; diff --git a/modules-available/serversetup-bwlp/inc/menuentry.inc.php b/modules-available/serversetup-bwlp/inc/menuentry.inc.php index 03b860e8..d243fd23 100644 --- a/modules-available/serversetup-bwlp/inc/menuentry.inc.php +++ b/modules-available/serversetup-bwlp/inc/menuentry.inc.php @@ -58,7 +58,7 @@ class MenuEntry settype($this->menuentryid, 'int'); } - public function getMenuItemScript($lblPrefix, $requestedDefaultId, $mode) + public function getMenuItemScript($lblPrefix, $requestedDefaultId, $mode, $slxExtensions) { if ($this->bootEntry !== null && !$this->bootEntry->supportsMode($mode)) return ''; @@ -66,7 +66,7 @@ class MenuEntry if ($this->gap) { $str .= '--gap '; } else { - if ($this->hidden) { + if ($this->hidden && $slxExtensions) { if ($this->hotkey === false) return ''; // Hidden entries without hotkey are illegal $str .= '--hidden '; @@ -79,7 +79,11 @@ class MenuEntry } $str .= "{$lblPrefix}_{$this->menuentryid} "; } - $str .= $this->title; + if (empty($this->title)) { + $str .= '${}'; + } else { + $str .= $this->title; + } return $str . " || prompt Could not create menu item for {$lblPrefix}_{$this->menuentryid}\n"; } -- cgit v1.2.3-55-g7522