From: Michael M Slusarz Date: Mon, 1 Feb 2010 23:32:57 +0000 (-0700) Subject: Remove Net_DNS_Resolver dependency from framework libs X-Git-Url: https://git.internetallee.de/?a=commitdiff_plain;h=98b0b90a39ae371b9b1811a5ff0409a0fc908c22;p=horde.git Remove Net_DNS_Resolver dependency from framework libs --- diff --git a/framework/Auth/lib/Horde/Auth.php b/framework/Auth/lib/Horde/Auth.php index f90b0848d..8eafc407c 100644 --- a/framework/Auth/lib/Horde/Auth.php +++ b/framework/Auth/lib/Horde/Auth.php @@ -80,6 +80,13 @@ class Horde_Auth const NUMBERS = '0123456789'; /** + * A Net_DNS_Resolver object to use to determine hostnames. + * + * @var Net_DNS_Resolver + */ + static public $dnsResolver; + + /** * Singleton instances. * * @var array @@ -772,12 +779,9 @@ class Horde_Auth ? $_SERVER['REMOTE_ADDR'] : $_SERVER['HTTP_X_FORWARDED_FOR']; - if (class_exists('Net_DNS')) { - $resolver = new Net_DNS_Resolver(); - $resolver->retry = isset($GLOBALS['conf']['dns']['retry']) ? $GLOBALS['conf']['dns']['retry'] : 1; - $resolver->retrans = isset($GLOBALS['conf']['dns']['retrans']) ? $GLOBALS['conf']['dns']['retrans'] : 1; + if (!empty(self::$dnsResolver)) { $ptrdname = $host; - if ($response = $resolver->query($host, 'PTR')) { + if ($response = self::$dnsResolver->query($host, 'PTR')) { foreach ($response->answer as $val) { if (isset($val->ptrdname)) { $ptrdname = $val->ptrdname; diff --git a/framework/Core/lib/Horde/Core/Autoloader/Callback/Auth.php b/framework/Core/lib/Horde/Core/Autoloader/Callback/Auth.php new file mode 100644 index 000000000..5b0533c92 --- /dev/null +++ b/framework/Core/lib/Horde/Core/Autoloader/Callback/Auth.php @@ -0,0 +1,15 @@ +getInstance('Net_DNS_Resolver'); + } + +} diff --git a/framework/Core/lib/Horde/Core/Binder/Dns.php b/framework/Core/lib/Horde/Core/Binder/Dns.php new file mode 100644 index 000000000..e09516339 --- /dev/null +++ b/framework/Core/lib/Horde/Core/Binder/Dns.php @@ -0,0 +1,25 @@ +retry = isset($GLOBALS['conf']['dns']['retry']) + ? $GLOBALS['conf']['dns']['retry'] + : 1; + $resolver->retrans = isset($GLOBALS['conf']['dns']['retrans']) + ? $GLOBALS['conf']['dns']['retrans'] + : 1; + + return $resolver; + } + + public function equals(Horde_Injector_Binder $binder) + { + return false; + } +} diff --git a/framework/Core/lib/Horde/Registry.php b/framework/Core/lib/Horde/Registry.php index 457d0ebc6..3c3f6eec8 100644 --- a/framework/Core/lib/Horde/Registry.php +++ b/framework/Core/lib/Horde/Registry.php @@ -230,8 +230,18 @@ class Horde_Registry protected function __construct($session_flags = 0) { /* Set autoloader callbacks. */ + Horde_Autoloader::addCallback('Horde_Auth', array('Horde_Core_Autoloader_Callback_Auth', 'callback')); Horde_Autoloader::addCallback('Horde_Mime', array('Horde_Core_Autoloader_Callback_Mime', 'callback')); + /* Setup injector. */ + $GLOBALS['injector'] = $injector = new Horde_Injector(new Horde_Injector_TopLevel()); + $injector->addBinder('Horde_Cache', new Horde_Core_Binder_Cache()); + $injector->addBinder('Horde_Db_Adapter_Base', new Horde_Core_Binder_Db('reader')); + $injector->addBinder('Horde_Log_Logger', new Horde_Core_Binder_Logger()); + $injector->addBinder('Horde_Memcache', new Horde_Core_Binder_Memcache()); + $injector->addBinder('Horde_Template', new Horde_Core_Binder_Template()); + $injector->addBinder('Net_DNS_Resolver', new Horde_Core_Binder_Dns()); + /* Import and global Horde's configuration values. Almost a chicken * and egg issue - since loadConfiguration() uses registry in certain * instances. However, if HORDE_BASE is defined, and app is @@ -257,11 +267,6 @@ class Horde_Registry umask($conf['umask']); } - /* Setup injector. Need to init Horde_Memcache here because it may - * be called in setupSessionHandler(). */ - $GLOBALS['injector'] = new Horde_Injector(new Horde_Injector_TopLevel()); - $GLOBALS['injector']->addBinder('Horde_Memcache', new Horde_Core_Binder_Memcache()); - /* Start a session. */ if ($session_flags & self::SESSION_NONE || (PHP_SAPI == 'cli') || @@ -287,9 +292,6 @@ class Horde_Registry Horde_Nls::setTextdomain('horde', HORDE_BASE . '/locale', Horde_Nls::getCharset()); Horde_String::setDefaultCharset(Horde_Nls::getCharset()); - /* Initialize caching. */ - $GLOBALS['injector']->addBinder('Horde_Cache', new Horde_Core_Binder_Cache()); - $this->_regmtime = max(filemtime(HORDE_BASE . '/config/registry.php'), filemtime(HORDE_BASE . '/config/registry.d')); @@ -311,11 +313,6 @@ class Horde_Registry throw new Horde_Exception(_("This system is currently deactivated.")); } - /* Set the rest of the default bindings. */ - $GLOBALS['injector']->addBinder('Horde_Db_Adapter_Base', new Horde_Core_Binder_Db('reader')); - $GLOBALS['injector']->addBinder('Horde_Log_Logger', new Horde_Core_Binder_Logger()); - $GLOBALS['injector']->addBinder('Horde_Template', new Horde_Core_Binder_Template()); - /* Create the global permissions object. */ // TODO: Remove(?) $GLOBALS['perms'] = Horde_Perms::singleton(); diff --git a/framework/Core/package.xml b/framework/Core/package.xml index 6b2d8f793..7be9a426d 100644 --- a/framework/Core/package.xml +++ b/framework/Core/package.xml @@ -55,12 +55,14 @@ Application Framework. + + @@ -149,9 +151,11 @@ Application Framework. + + diff --git a/framework/Mime/lib/Horde/Mime/Headers.php b/framework/Mime/lib/Horde/Mime/Headers.php index 62cb4aaac..2bcffdef7 100644 --- a/framework/Mime/lib/Horde/Mime/Headers.php +++ b/framework/Mime/lib/Horde/Mime/Headers.php @@ -147,24 +147,26 @@ class Horde_Mime_Headers /** * Generate the 'Received' header for the Web browser->Horde hop * (attempts to conform to guidelines in RFC 5321 [4.4]). + * + * @param array $options Additional options: + *
+     * 'dns' - (Net_DNS_Resolver) Use the DNS resolver object to lookup
+     *         hostnames.
+     *         DEFAULT: Use gethostbyaddr() function.
+     * 'server' - (string) Use this server name.
+     *            DEFAULT: Auto-detect using current PHP values.
+     * 
*/ - public function addReceivedHeader() + public function addReceivedHeader($options = array()) { - $have_netdns = @include_once 'Net/DNS.php'; - if ($have_netdns) { - $resolver = new Net_DNS_Resolver(); - $resolver->retry = isset($GLOBALS['conf']['dns']['retry']) ? $GLOBALS['conf']['dns']['retry'] : 1; - $resolver->retrans = isset($GLOBALS['conf']['dns']['retrans']) ? $GLOBALS['conf']['dns']['retrans'] : 1; - } - $old_error = error_reporting(0); if (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) { /* This indicates the user is connecting through a proxy. */ $remote_path = explode(',', $_SERVER['HTTP_X_FORWARDED_FOR']); $remote_addr = $remote_path[0]; - if ($have_netdns) { + if (!empty($options['dns'])) { $remote = $remote_addr; - if ($response = $resolver->query($remote_addr, 'PTR')) { + if ($response = $options['dns']->query($remote_addr, 'PTR')) { foreach ($response->answer as $val) { if (isset($val->ptrdname)) { $remote = $val->ptrdname; @@ -178,9 +180,9 @@ class Horde_Mime_Headers } else { $remote_addr = $_SERVER['REMOTE_ADDR']; if (empty($_SERVER['REMOTE_HOST'])) { - if ($have_netdns) { + if (!empty($options['dns'])) { $remote = $remote_addr; - if ($response = $resolver->query($remote_addr, 'PTR')) { + if ($response = $options['dns']->query($remote_addr, 'PTR')) { foreach ($response->answer as $val) { if (isset($val->ptrdname)) { $remote = $val->ptrdname; @@ -205,8 +207,8 @@ class Horde_Mime_Headers $remote_ident = ''; } - if (!empty($GLOBALS['conf']['server']['name'])) { - $server_name = $GLOBALS['conf']['server']['name']; + if (!empty($options['server'])) { + $server_name = $options['server']; } elseif (!empty($_SERVER['SERVER_NAME'])) { $server_name = $_SERVER['SERVER_NAME']; } elseif (!empty($_SERVER['HTTP_HOST'])) { diff --git a/framework/Nls/lib/Horde/Nls.php b/framework/Nls/lib/Horde/Nls.php index f11dc0b2d..e0d0325ac 100644 --- a/framework/Nls/lib/Horde/Nls.php +++ b/framework/Nls/lib/Horde/Nls.php @@ -474,14 +474,16 @@ class Horde_Nls /** * Get country information from a hostname or IP address. * - * @param string $host The hostname or IP address. + * @param string $host The hostname or IP address. + * @param Net_DNS_Resolver $dns A DNS resolver object used to look up the + * hostname. * * @return mixed On success, return an array with the following entries: * 'code' => Country Code * 'name' => Country Name * On failure, return false. */ - static public function getCountryByHost($host) + static public function getCountryByHost($host, $dns = null) { /* List of generic domains that we know is not in the country TLD list. See: http://www.iana.org/gtld/gtld.htm */ @@ -492,20 +494,15 @@ class Horde_Nls $checkHost = $host; if (preg_match('/^\d+\.\d+\.\d+\.\d+$/', $host)) { - if (class_exists('Net_DNS')) { - $resolver = new Net_DNS_Resolver(); - $resolver->retry = isset($GLOBALS['conf']['dns']['retry']) ? $GLOBALS['conf']['dns']['retry'] : 1; - $resolver->retrans = isset($GLOBALS['conf']['dns']['retrans']) ? $GLOBALS['conf']['dns']['retrans'] : 1; - if ($response = $resolver->query($host, 'PTR')) { - foreach ($response->answer as $val) { - if (isset($val->ptrdname)) { - $checkHost = $val->ptrdname; - break; - } + if (is_null($dns)) { + $checkHost = @gethostbyaddr($host); + } elseif ($response = $dns->query($host, 'PTR')) { + foreach ($response->answer as $val) { + if (isset($val->ptrdname)) { + $checkHost = $val->ptrdname; + break; } } - } else { - $checkHost = @gethostbyaddr($host); } } @@ -557,13 +554,15 @@ class Horde_Nls /** * Returns a Horde image link to the country flag. * - * @param string $host The hostname or IP address. + * @param string $host The hostname or IP address. + * @param Net_DNS_Resolver $dns A DNS resolver object used to look up the + * hostname. * * @return string The image URL, or the empty string on error. */ - static public function generateFlagImageByHost($host) + static public function generateFlagImageByHost($host, $dns = null) { - $data = self::getCountryByHost($host); + $data = self::getCountryByHost($host, $dns); if ($data === false) { return ''; } diff --git a/horde/admin/sessions.php b/horde/admin/sessions.php index 69ef46cf1..a9df1f3b6 100644 --- a/horde/admin/sessions.php +++ b/horde/admin/sessions.php @@ -55,7 +55,7 @@ try { } else { $host = @gethostbyaddr($data['remoteAddr']); } - $entry[_("Remote Host:")] = $host . ' [' . $data['remoteAddr'] . '] ' . Horde_Nls::generateFlagImageByHost($host); + $entry[_("Remote Host:")] = $host . ' [' . $data['remoteAddr'] . '] ' . Horde_Nls::generateFlagImageByHost($host, $injector->getInstance('Net_DNS_Resolver')); } echo '
  • ' . $plus . $minus . htmlspecialchars($data['userid']) . ' [' . htmlspecialchars($id) . ']' diff --git a/imp/attachment.php b/imp/attachment.php index 4e92a100d..507182f8f 100644 --- a/imp/attachment.php +++ b/imp/attachment.php @@ -83,7 +83,10 @@ if ($conf['compose']['link_attachments_notify']) { /* Set up the mail headers and read the log file. */ $msg_headers = new Horde_Mime_Headers(); - $msg_headers->addReceivedHeader(); + $msg_headers->addReceivedHeader(array( + 'dns' => $GLOBALS['injector']->getInstance('Net_DNS_Resolver'), + 'server' => $GLOBALS['conf']['server']['name'] + )); $msg_headers->addMessageIdHeader(); $msg_headers->addUserAgentHeader(); $msg_headers->addHeader('Date', date('r')); diff --git a/imp/lib/Compose.php b/imp/lib/Compose.php index d3346c244..bfe16a560 100644 --- a/imp/lib/Compose.php +++ b/imp/lib/Compose.php @@ -493,7 +493,10 @@ class IMP_Compose $headers = new Horde_Mime_Headers(); /* Add a Received header for the hop from browser to server. */ - $headers->addReceivedHeader(); + $headers->addReceivedHeader(array( + 'dns' => $GLOBALS['injector']->getInstance('Net_DNS_Resolver'), + 'server' => $GLOBALS['conf']['server']['name'] + )); $headers->addMessageIdHeader(); /* Add priority header, if requested. */ diff --git a/imp/lib/Mime/Viewer/Itip.php b/imp/lib/Mime/Viewer/Itip.php index 11aff0219..af955df67 100644 --- a/imp/lib/Mime/Viewer/Itip.php +++ b/imp/lib/Mime/Viewer/Itip.php @@ -322,7 +322,10 @@ class IMP_Horde_Mime_Viewer_Itip extends Horde_Mime_Viewer_Driver $mime->addPart($ics); // Build the reply headers. - $msg_headers->addReceivedHeader(); + $msg_headers->addReceivedHeader(array( + 'dns' => $GLOBALS['injector']->getInstance('Net_DNS_Resolver'), + 'server' => $GLOBALS['conf']['server']['name'] + )); $msg_headers->addMessageIdHeader(); $msg_headers->addHeader('Date', date('r')); $msg_headers->addHeader('From', $email); @@ -422,7 +425,10 @@ class IMP_Horde_Mime_Viewer_Itip extends Horde_Mime_Viewer_Driver $mime->addPart($ics); // Build the reply headers. - $msg_headers->addReceivedHeader(); + $msg_headers->addReceivedHeader(array( + 'dns' => $GLOBALS['injector']->getInstance('Net_DNS_Resolver'), + 'server' => $GLOBALS['conf']['server']['name'] + )); $msg_headers->addMessageIdHeader(); $msg_headers->addHeader('Date', date('r')); $msg_headers->addHeader('From', $email); diff --git a/imp/message.php b/imp/message.php index 9aea21ddf..af75e9b2b 100644 --- a/imp/message.php +++ b/imp/message.php @@ -245,14 +245,14 @@ if ($origin_host) { $origin_host = array($origin_host); } foreach ($origin_host as $host) { - $from_img .= Horde_Nls::generateFlagImageByHost($host) . ' '; + $from_img .= Horde_Nls::generateFlagImageByHost($host, $injector->getInstance('Net_DNS_Resolver')) . ' '; } trim($from_img); } if (empty($from_img) && !empty($envelope['from'])) { $from_ob = reset($envelope['from']); - $from_img = Horde_Nls::generateFlagImageByHost($from_ob['host']); + $from_img .= Horde_Nls::generateFlagImageByHost($from_ob['host'], $injector->getInstance('Net_DNS_Resolver')) . ' '; } if (!empty($from_img)) {