Optionally use Net_DNS for host name lookups (adrieder@sbox.tugraz.at, Request #7374).
authorJan Schneider <jan@horde.org>
Sat, 4 Apr 2009 11:58:07 +0000 (13:58 +0200)
committerJan Schneider <jan@horde.org>
Sat, 4 Apr 2009 11:58:23 +0000 (13:58 +0200)
framework/Mime/lib/Horde/Mime/Headers.php

index 47f2a01..3d21d15 100644 (file)
@@ -145,17 +145,36 @@ class Horde_Mime_Headers
      */
     public function addReceivedHeader()
     {
+        $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];
-            $remote = gethostbyaddr($remote_addr);
+            if ($have_netdns) {
+                $response = $resolver->query($remote_addr, 'PTR');
+                $remote = $response ? $response->answer[0]->ptrdname : $host;
+            } else {
+                $remote = gethostbyaddr($remote_addr);
+            }
         } else {
             $remote_addr = $_SERVER['REMOTE_ADDR'];
-            $remote = empty($_SERVER['REMOTE_HOST'])
-                ? gethostbyaddr($remote_addr)
-                : $_SERVER['REMOTE_HOST'];
+            if (empty($_SERVER['REMOTE_HOST'])) {
+                if ($have_netdns) {
+                    $response = $resolver->query($remote_addr, 'PTR');
+                    $remote = $response ? $response->answer[0]->ptrdname : $host;
+                } else {
+                    $remote = gethostbyaddr($remote_addr);
+                }
+            } else {
+                $remote = $_SERVER['REMOTE_HOST'];
+            }
         }
         error_reporting($old_error);