Opps :(
[core.git] / inc / classes / main / console / class_ConsoleTools.php
index 960aaa42a926fcd412721eb60d6b32560f5a0046..d5982605f7858ef42557203355324ec323c54c8f 100644 (file)
@@ -146,6 +146,52 @@ class ConsoleTools extends BaseFrameworkSystem {
                return $respArray;
        }
 
+       /**
+        * Tried to extract hostname from given raw data. On a Genntoo system, this could be multiple lines with # as comments. So try to get rid of it
+        *
+        * @param       $rawData        Raw data from /etc/hostname file
+        * @return      $hostname       Extracted host name
+        */
+       protected function extractHostnameFromRawData ($rawData) {
+               // Default is invalid
+               $hostname = 'invalid';
+
+               // Try to "explode" it
+               $data = explode(PHP_EOL, $rawData);
+
+               // "Walk" through it
+               foreach ($data as $line) {
+                       // Trim it
+                       $line = trim($line);
+
+                       // Begins with a hash (#) = comment?
+                       if (substr($line, 0, 1) == '#') {
+                               // Then skip it
+                               continue;
+                       } // END - if
+
+                       // Has an equals sign?
+                       if (strpos($line, '=') !== FALSE) {
+                               // Then "explode" it again, right part is hostname in quotes
+                               $hostData = explode('=', $line);
+
+                               // Make sure only a key=value pair goes through
+                               assert(count($hostData) == 2);
+
+                               // Try to get it and abort
+                               $hostname = str_replace(array('"', chr(39)), array('', ''), $hostData[1]);
+                               break;
+                       } else {
+                               // Use it directly
+                               $hostname = $line;
+                               break;
+                       }
+               } // END - foreach
+
+               // Return it
+               return $hostname;
+       }
+
        /**
         * Aquires the IP address of this host by reading the /etc/hostname file
         * and solving it. It is now stored in configuration
@@ -161,14 +207,17 @@ class ConsoleTools extends BaseFrameworkSystem {
 
                try {
                        // Get a file pointer
-                       $io = FrameworkFileInputPointer::createFrameworkFileInputPointer('/etc/hostname');
+                       $io = FrameworkFileInputPointer::createFrameworkFileInputPointer($helperInstance->getConfigInstance()->getConfigEntry('hostname_file'));
 
                        // Read the file
-                       $hostname = trim($io->readFromFile());
+                       $rawData = trim($io->readFromFile());
 
                        // Close the file
                        $io->closeFile();
 
+                       // Extract hostname from it
+                       $hostname = $helperInstance->extractHostnameFromRawData($rawData);
+
                        // Resolve the IP number
                        $ip = $helperInstance->resolveIpAddress($hostname);
                } catch (FileIoException $e) {
@@ -181,13 +230,13 @@ class ConsoleTools extends BaseFrameworkSystem {
                                $ip = $helperInstance->resolveIpAddress($_SERVER['COMPUTERNAME']);
                        } else {
                                // Could not find our hostname
-                               $helperInstance->debugOutput(sprintf('[%s:] WARNING: Cannot resolve my own IP address.',
+                               self::createDebugInstance(__CLASS__)->debugOutput(sprintf('[%s:] WARNING: Cannot resolve my own IP address.',
                                        $helperInstance->__toString()
                                ));
                        }
                } catch (FrameworkException $e) {
                        // Output debug message
-                       $helperInstance->debugOutput(sprintf('[%s:] Problem while resolving own IP address: [%s|%s]:%s',
+                       self::createDebugInstance(__CLASS__)->debugOutput(sprintf('[%s:] Problem while resolving own IP address: [%s|%s]:%s',
                                $helperInstance->__toString(),
                                $e->__toString(),
                                $e->getHexCode(),
@@ -294,7 +343,7 @@ class ConsoleTools extends BaseFrameworkSystem {
 
 
                // Debug message
-               /* DEBUG: */ $helperInstance->debugOutput('CONSOLE-TOOLS: Resolved external address: ' . $externalAddress);
+               /* DEBUG: */ self::createDebugInstance(__CLASS__)->debugOutput('CONSOLE-TOOLS: Resolved external address: ' . $externalAddress);
 
                // Return determined external IP
                return $externalAddress;