commit-classpath
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

http.agent patch


From: Mark Wielaard
Subject: http.agent patch
Date: Sun, 11 Jul 2004 22:47:17 +0200

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  <address@hidden>

        * 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


reply via email to

[Prev in Thread] Current Thread [Next in Thread]