diff --git a/libjava/ChangeLog b/libjava/ChangeLog
index 65dcba1afd0cfa00add1b29ec46a26792fd6f3b2..594e2f2e22d63ce3c56db3b6d6e10f6a9edebb38 100644
--- a/libjava/ChangeLog
+++ b/libjava/ChangeLog
@@ -1,3 +1,9 @@
+2006-09-01  Gary Benson  <gbenson@redhat.com>
+
+	* java/net/InetAddress.java (getLocalHost): Refactor to avoid
+	security check if getLocalHostname() fails and to provide more
+	meaningful exceptions it the security check fails.
+
 2006-09-01  Gary Benson  <gbenson@redhat.com>
 
 	* java/net/InetAddress.java (getByAddress): Create Inet4Address
diff --git a/libjava/java/net/InetAddress.java b/libjava/java/net/InetAddress.java
index 5bb9c0f68674d5406c72cef4d8ec3ef02cf39c65..995e8975657366485f081a0b91c75484b34e7fa9 100644
--- a/libjava/java/net/InetAddress.java
+++ b/libjava/java/net/InetAddress.java
@@ -706,7 +706,10 @@ public class InetAddress implements Serializable
     
     String hostname = getLocalHostname();
     
-    if (s != null)
+    if (hostname == null || hostname.length() == 0)
+      throw new UnknownHostException();
+
+    try
       {
 	// "The Java Class Libraries" suggests that if the security
 	// manager disallows getting the local host name, then
@@ -714,37 +717,22 @@ public class InetAddress implements Serializable
 	// However, the JDK 1.2 API claims to throw SecurityException,
 	// which seems to suggest SecurityException is *not* caught.
 	// In this case, experimentation shows that former is correct.
-	try
+	if (s != null)
 	  {
 	    // This is wrong, if the name returned from getLocalHostname()
 	    // is not a fully qualified name.  FIXME.
 	    s.checkConnect (hostname, -1);
 	  }
-	catch (SecurityException ex)
-	  {
-	    hostname = null;
-	  }
+
+	localhost = new InetAddress (null, null);
+	lookup (hostname, localhost, false);
       }
-    
-    if (hostname != null && hostname.length() != 0)
+    catch (Exception ex)
       {
-	try
-	  {
-	    localhost = new InetAddress (null, null);
-	    lookup (hostname, localhost, false);
-	  }
-	catch (Exception ex)
-	  {
-	    UnknownHostException failure = new UnknownHostException(hostname);
-	    failure.initCause(ex);
-	    throw failure;
-	  }
+	UnknownHostException failure = new UnknownHostException(hostname);
+	failure.initCause(ex);
+	throw failure;
       }
-    else
-      throw new UnknownHostException();
-    
-    if (localhost == null)
-      localhost = new InetAddress (loopbackAddress, "localhost");
   }
 
   /**