* HttpRequest.cs: fixed IsLocal, should check all ip addresses of host
authorVladimir Krasnov <krasnov@mono-cvs.ximian.com>
Mon, 8 Jan 2007 14:05:13 +0000 (14:05 -0000)
committerVladimir Krasnov <krasnov@mono-cvs.ximian.com>
Mon, 8 Jan 2007 14:05:13 +0000 (14:05 -0000)
svn path=/trunk/mcs/; revision=70652

mcs/class/System.Web/System.Web/ChangeLog
mcs/class/System.Web/System.Web/HttpRequest.cs

index b11209caa70975f797bd0a6a8dc8f7703919e063..21f8d9365ec0fa787552442199036c64b3de4f2b 100644 (file)
@@ -1,3 +1,7 @@
+2007-01-04  Vladimir Krasnov  <vladimirk@mainsoft.com>
+
+       * HttpRequest.cs: fixed IsLocal, should check all ip addresses of host
+
 2007-01-05  Marek Habersack  <grendello@gmail.com>
 
        * HttpApplicationFactory.cs: Use the new app resources compiler.
index 96e9f053e0f672178e1c9cc6966087ce98478423..72e761f7e8747124c785dfb8f3cd4507277a2b4a 100644 (file)
@@ -88,10 +88,17 @@ namespace System.Web {
                string [] user_languages;
                Uri cached_url;
                TempFileStream request_file;
+
+               readonly static System.Net.IPAddress [] host_addresses;
                
                // Validations
                bool validate_cookies, validate_query_string, validate_form;
                bool checked_cookies, checked_query_string, checked_form;
+
+               static HttpRequest ()
+               {
+                       host_addresses = GetLocalHostAddresses ();
+               }
                
                public HttpRequest (string filename, string url, string queryString)
                {
@@ -1245,7 +1252,15 @@ namespace System.Web {
                        get {
                                string address = worker_request.GetRemoteAddress ();
 
-                               return (address == "127.0.0.1");
+                               if (address == "127.0.0.1")
+                                       return true;
+
+                               System.Net.IPAddress remoteAddr = System.Net.IPAddress.Parse (address);
+                               for (int i = 0; i < host_addresses.Length; i++)
+                                       if (remoteAddr.Equals (host_addresses [i]))
+                                               return true;
+
+                               return false;
                        }
                }
 
@@ -1378,6 +1393,22 @@ namespace System.Web {
                        return false;
                }
 
+               static System.Net.IPAddress [] GetLocalHostAddresses ()
+               {
+                       try {
+                               string hostName = System.Net.Dns.GetHostName ();
+#if NET_2_0
+                               System.Net.IPAddress [] ipaddr = System.Net.Dns.GetHostAddresses (hostName);
+#else
+                               System.Net.IPAddress [] ipaddr = System.Net.Dns.GetHostByName (hostName).AddressList;
+#endif
+                               return ipaddr;
+                       }
+                       catch
+                       {
+                               return new System.Net.IPAddress[0];
+                       }
+               }
        }
 #endregion