This is the mail archive of the java-patches@gcc.gnu.org mailing list for the Java project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

http.agent patch


Hi,

Both Tom and Michael had some comments on my last patch to set the http
agent for HTTP connections. I believe the following patch addresses both
concerns and makes sure that even when the Connection class is
loaded/initialized from a class with not enough permissions it can still
get at the necessary system properties.

2004-07-11  Mark Wielaard  <mark@klomp.org>

        * java/lang/System.java (static): Set http.agent system property when
        not yet set.
        * gnu/java/net/protocol/http/Connection.java (static): Get httpAgent
        from system property inside AccessController.doPrivileged() call.

Sorry for not handling this before 0.10 got released.
OK to commit?

Cheers,

Mark
Index: gnu/java/net/protocol/http/Connection.java
===================================================================
RCS file: /cvsroot/classpath/classpath/gnu/java/net/protocol/http/Connection.java,v
retrieving revision 1.17
diff -u -r1.17 Connection.java
--- gnu/java/net/protocol/http/Connection.java	27 Jun 2004 19:37:10 -0000	1.17
+++ gnu/java/net/protocol/http/Connection.java	11 Jul 2004 20:46:24 -0000
@@ -1,5 +1,6 @@
 /* HttpURLConnection.java -- URLConnection class for HTTP protocol
-   Copyright (C) 1998, 1999, 2000, 2002, 2003 Free Software Foundation, Inc.
+   Copyright (C) 1998, 1999, 2000, 2002, 2003, 2004
+   Free Software Foundation, Inc.
 
 This file is part of GNU Classpath.
 
@@ -52,6 +53,8 @@
 import java.net.Socket;
 import java.net.URL;
 import java.net.URLConnection;
+import java.security.AccessController;
+import java.security.PrivilegedAction;
 import java.util.HashMap;
 import java.util.Iterator;
 import java.util.Map;
@@ -76,41 +79,45 @@
    * The socket we are connected to
    */
   private Socket socket;
-  private static int proxyPort = 80;
-  private static boolean proxyInUse = false;
-  private static String proxyHost = null;
-
-  private static final String userAgent;
+  
+  // Properties depeending on system properties settings
+  static int proxyPort = 80;
+  static boolean proxyInUse = false;
+  static String proxyHost = null;
+  static String userAgent;
 
   static 
   {
-    // Recognize some networking properties listed at
-    // http://java.sun.com/j2se/1.4/docs/guide/net/properties.html.
-    String port = null;
-    proxyHost = System.getProperty("http.proxyHost");
-    if (proxyHost != null)
-      {
-	proxyInUse = true;
-	if ((port = System.getProperty("http.proxyPort")) != null)
-	  {
-	    try
-	      {
-		proxyPort = Integer.parseInt(port);
-	      }
-	    catch (Throwable t)
-	      {
-		// Nothing.  
-	      }
-	  }
-      }
+    // Make sure access control for system properties depends only on
+    // our class ProtectionDomain, not on any (indirect) callers.
+    AccessController.doPrivileged(new PrivilegedAction() {
+	public Object run()
+	{
+	  // Recognize some networking properties listed at
+	  // http://java.sun.com/j2se/1.4/docs/guide/net/properties.html.
+	  String port = null;
+	  proxyHost = System.getProperty("http.proxyHost");
+	  if (proxyHost != null)
+	    {
+	      proxyInUse = true;
+	      if ((port = System.getProperty("http.proxyPort")) != null)
+		{
+		  try
+		    {
+		      proxyPort = Integer.parseInt(port);
+		    }
+		  catch (Throwable t)
+		    {
+		      // Nothing.  
+		    }
+		}
+	    }
+	  
+	  userAgent = System.getProperty("http.agent");
 
-    userAgent = "gnu-classpath/"
-      + System.getProperty("gnu.classpath.version")
-      + " ("
-      + System.getProperty("gnu.classpath.vm.shortname")
-      + "/"
-      + System.getProperty("java.vm.version")
-      + ")";
+	  return null;
+	}
+      });
   }
 
   /**
Index: java/lang/System.java
===================================================================
RCS file: /cvsroot/classpath/classpath/java/lang/System.java,v
retrieving revision 1.37
diff -u -r1.37 System.java
--- java/lang/System.java	8 Jul 2004 14:40:32 -0000	1.37
+++ java/lang/System.java	11 Jul 2004 20:46:24 -0000
@@ -1,5 +1,6 @@
 /* System.java -- useful methods to interface with the system
-   Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
+   Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004
+   Free Software Foundation, Inc.
 
 This file is part of GNU Classpath.
 
@@ -95,6 +96,20 @@
 	defaultProperties.put("gnu.classpath.vm.shortname", value);
       }
 
+    // Network properties
+    if (defaultProperties.get("http.agent") == null)
+      {
+	String userAgent
+	  = ("gnu-classpath/"
+	     + defaultProperties.getProperty("gnu.classpath.version")
+	     + " ("
+	     + defaultProperties.getProperty("gnu.classpath.vm.shortname")
+	     + "/"
+	     + defaultProperties.getProperty("java.vm.version")
+	     + ")");
+	defaultProperties.put("http.agent", userAgent);
+      }
+
     defaultProperties.put("gnu.cpu.endian",
                           VMSystem.isWordsBigEndian() ? "big" : "little");
 

Attachment: signature.asc
Description: This is a digitally signed message part


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]