aboutsummaryrefslogtreecommitdiff
path: root/libjava
diff options
context:
space:
mode:
authorBryce McKinlay <mckinlay@redhat.com>2004-07-23 22:20:14 +0000
committerBryce McKinlay <bryce@gcc.gnu.org>2004-07-23 23:20:14 +0100
commitec5c28ece1abe76452e1c70918fb44c543b71a81 (patch)
tree96dc496d784f2249834ceb7610963655c445967c /libjava
parentae066484dfc4edafddbcf5089720d8ceef28c232 (diff)
downloadgcc-ec5c28ece1abe76452e1c70918fb44c543b71a81.zip
gcc-ec5c28ece1abe76452e1c70918fb44c543b71a81.tar.gz
gcc-ec5c28ece1abe76452e1c70918fb44c543b71a81.tar.bz2
Connection.java: Use GetPropertyAction for privileged getProperty calls.
2004-07-23 Bryce McKinlay <mckinlay@redhat.com> * gnu/java/net/protocol/http/Connection.java: Use GetPropertyAction for privileged getProperty calls. * java/io/ObjectOutputStream.java (getField): No longer static. Use SetAccessibleAction instead of anonymous class for doPrivileged call. (getMethod): Likewise. (setAccessible): New field. PrivilegedAction object to use when calling setAccessible. * java/io/ObjectStreamClass.java (calculateOffsets): Use SetAccessibleAction instead of anonymous class for diPrivileged call. (setFields): Likewise. (getClassUID): Likewise. (findMethod): Likewise. * gnu/java/security/action/GetPropertyAction.java: New class. * gnu/java/security/action/SetAccessibleAction.java: New class. From-SVN: r85097
Diffstat (limited to 'libjava')
-rw-r--r--libjava/ChangeLog21
-rw-r--r--libjava/gnu/java/net/protocol/http/Connection.java54
-rw-r--r--libjava/gnu/java/security/action/GetPropertyAction.java75
-rw-r--r--libjava/gnu/java/security/action/SetAccessibleAction.java77
-rw-r--r--libjava/java/io/ObjectOutputStream.java26
-rw-r--r--libjava/java/io/ObjectStreamClass.java47
6 files changed, 217 insertions, 83 deletions
diff --git a/libjava/ChangeLog b/libjava/ChangeLog
index 8cb5ecb..9b467ae 100644
--- a/libjava/ChangeLog
+++ b/libjava/ChangeLog
@@ -1,7 +1,24 @@
2004-07-23 Bryce McKinlay <mckinlay@redhat.com>
- * java/io/ObjectStreamField (ObjectStreamField): Don't unset 'toset' for final
- fields.
+ * gnu/java/net/protocol/http/Connection.java: Use GetPropertyAction
+ for privileged getProperty calls.
+ * java/io/ObjectOutputStream.java (getField): No longer static. Use
+ SetAccessibleAction instead of anonymous class for doPrivileged call.
+ (getMethod): Likewise.
+ (setAccessible): New field. PrivilegedAction object to use when
+ calling setAccessible.
+ * java/io/ObjectStreamClass.java (calculateOffsets): Use
+ SetAccessibleAction instead of anonymous class for diPrivileged call.
+ (setFields): Likewise.
+ (getClassUID): Likewise.
+ (findMethod): Likewise.
+ * gnu/java/security/action/GetPropertyAction.java: New class.
+ * gnu/java/security/action/SetAccessibleAction.java: New class.
+
+2004-07-23 Bryce McKinlay <mckinlay@redhat.com>
+
+ * java/io/ObjectStreamField (ObjectStreamField): Don't unset 'toset'
+ for final fields.
* testsuite/libjava.lang/Serialization.java: New test.
* testsuite/libjava.lang/Serialization.out: New.
diff --git a/libjava/gnu/java/net/protocol/http/Connection.java b/libjava/gnu/java/net/protocol/http/Connection.java
index 728d14a..ccae499 100644
--- a/libjava/gnu/java/net/protocol/http/Connection.java
+++ b/libjava/gnu/java/net/protocol/http/Connection.java
@@ -59,6 +59,7 @@ import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import gnu.java.net.HeaderFieldHelper;
+import gnu.java.security.action.GetPropertyAction;
/**
* This subclass of java.net.URLConnection models a URLConnection via
@@ -88,36 +89,31 @@ public final class Connection extends HttpURLConnection
static
{
- // 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");
+ // Recognize some networking properties listed at
+ // http://java.sun.com/j2se/1.4/docs/guide/net/properties.html.
+ String port = null;
+ GetPropertyAction getProperty = new GetPropertyAction("http.proxyHost");
+ proxyHost = (String) AccessController.doPrivileged(getProperty);
+ if (proxyHost != null)
+ {
+ proxyInUse = true;
+ getProperty.setName("http.proxyPort");
+ port = (String) AccessController.doPrivileged(getProperty);
+ if (port != null)
+ {
+ try
+ {
+ proxyPort = Integer.parseInt(port);
+ }
+ catch (NumberFormatException ex)
+ {
+ // Nothing.
+ }
+ }
+ }
- return null;
- }
- });
+ getProperty.setName("http.agent");
+ userAgent = (String) AccessController.doPrivileged(getProperty);
}
/**
diff --git a/libjava/gnu/java/security/action/GetPropertyAction.java b/libjava/gnu/java/security/action/GetPropertyAction.java
new file mode 100644
index 0000000..f40f479
--- /dev/null
+++ b/libjava/gnu/java/security/action/GetPropertyAction.java
@@ -0,0 +1,75 @@
+/* GetPropertyAction.java
+ Copyright (C) 2004 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2, or (at your option)
+any later version.
+
+GNU Classpath is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GNU Classpath; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+02111-1307 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. */
+
+package gnu.java.security.action;
+
+import java.security.PrivilegedAction;
+
+/**
+ * PrivilegedAction implementation that calls System.getProperty() with
+ * the property name passed to its constructor.
+ *
+ * Example of use:
+ * <code>
+ * GetPropertyAction action = new GetPropertyAction("http.proxyPort");
+ * String port = AccessController.doPrivileged(action);
+ * </code>
+ */
+public class GetPropertyAction implements PrivilegedAction
+{
+ String propName;
+
+ public GetPropertyAction()
+ {
+ }
+
+ public GetPropertyAction(String propName)
+ {
+ this.propName = propName;
+ }
+
+ public Object run()
+ {
+ return System.getProperty(propName);
+ }
+
+ public GetPropertyAction setName(String propName)
+ {
+ this.propName = propName;
+ return this;
+ }
+}
diff --git a/libjava/gnu/java/security/action/SetAccessibleAction.java b/libjava/gnu/java/security/action/SetAccessibleAction.java
new file mode 100644
index 0000000..810681f
--- /dev/null
+++ b/libjava/gnu/java/security/action/SetAccessibleAction.java
@@ -0,0 +1,77 @@
+/* SetAccessibleAction.java
+ Copyright (C) 2004 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2, or (at your option)
+any later version.
+
+GNU Classpath is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GNU Classpath; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+02111-1307 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. */
+
+package gnu.java.security.action;
+
+import java.lang.reflect.AccessibleObject;
+import java.security.PrivilegedAction;
+
+/**
+ * PrivilagedAction implementation that calls setAccessible(true) on the
+ * AccessibleObject passed to its constructor.
+ *
+ * Example of use:
+ * <code>
+ * Field dataField = cl.getDeclaredField("data");
+ * AccessController.doPrivilaged(new SetAccessibleAction(dataField));
+ * </code>
+ */
+public class SetAccessibleAction implements PrivilegedAction
+{
+ AccessibleObject member;
+
+ public SetAccessibleAction()
+ {
+ }
+
+ public SetAccessibleAction(AccessibleObject member)
+ {
+ this.member = member;
+ }
+
+ public Object run()
+ {
+ member.setAccessible(true);
+ return null;
+ }
+
+ public SetAccessibleAction setMember(AccessibleObject member)
+ {
+ this.member = member;
+ return this;
+ }
+}
diff --git a/libjava/java/io/ObjectOutputStream.java b/libjava/java/io/ObjectOutputStream.java
index cc77976..2435b07 100644
--- a/libjava/java/io/ObjectOutputStream.java
+++ b/libjava/java/io/ObjectOutputStream.java
@@ -48,6 +48,7 @@ import java.util.Hashtable;
import gnu.java.io.ObjectIdentityWrapper;
import gnu.java.lang.reflect.TypeSignature;
+import gnu.java.security.action.SetAccessibleAction;
import gnu.classpath.Configuration;
/**
@@ -1516,20 +1517,14 @@ public class ObjectOutputStream extends OutputStream
}
}
- private static Field getField (Class klass, String name)
+ private Field getField (Class klass, String name)
throws java.io.InvalidClassException
{
try
{
final Field f = klass.getDeclaredField(name);
- AccessController.doPrivileged(new PrivilegedAction()
- {
- public Object run()
- {
- f.setAccessible(true);
- return null;
- }
- });
+ setAccessible.setMember(f);
+ AccessController.doPrivileged(setAccessible);
return f;
}
catch (java.lang.NoSuchFieldException e)
@@ -1539,18 +1534,12 @@ public class ObjectOutputStream extends OutputStream
}
}
- private static Method getMethod (Class klass, String name, Class[] args)
+ private Method getMethod (Class klass, String name, Class[] args)
throws java.lang.NoSuchMethodException
{
final Method m = klass.getDeclaredMethod(name, args);
- AccessController.doPrivileged(new PrivilegedAction()
- {
- public Object run()
- {
- m.setAccessible(true);
- return null;
- }
- });
+ setAccessible.setMember(m);
+ AccessController.doPrivileged(setAccessible);
return m;
}
@@ -1583,6 +1572,7 @@ public class ObjectOutputStream extends OutputStream
private Hashtable OIDLookupTable;
private int protocolVersion;
private boolean useSubclassMethod;
+ private SetAccessibleAction setAccessible = new SetAccessibleAction();
// The nesting depth for debugging output
private int depth = 0;
diff --git a/libjava/java/io/ObjectStreamClass.java b/libjava/java/io/ObjectStreamClass.java
index ee23f59..08576cd 100644
--- a/libjava/java/io/ObjectStreamClass.java
+++ b/libjava/java/io/ObjectStreamClass.java
@@ -57,6 +57,7 @@ import java.util.Hashtable;
import java.util.Vector;
import gnu.java.io.NullOutputStream;
import gnu.java.lang.reflect.TypeSignature;
+import gnu.java.security.action.SetAccessibleAction;
import gnu.java.security.provider.Gnu;
@@ -470,14 +471,8 @@ outer:
}
}
final Method m = methods[i];
- AccessController.doPrivileged(new PrivilegedAction()
- {
- public Object run()
- {
- m.setAccessible(true);
- return null;
- }
- });
+ SetAccessibleAction setAccessible = new SetAccessibleAction(m);
+ AccessController.doPrivileged(setAccessible);
return m;
}
}
@@ -543,6 +538,8 @@ outer:
// clazz.
private void setFields(Class cl)
{
+ SetAccessibleAction setAccessible = new SetAccessibleAction();
+
if (!isSerializable() || isExternalizable())
{
fields = NO_FIELDS;
@@ -551,17 +548,11 @@ outer:
try
{
- final Field serialPersistentFields =
+ final Field f =
cl.getDeclaredField("serialPersistentFields");
- AccessController.doPrivileged(new PrivilegedAction()
- {
- public Object run()
- {
- serialPersistentFields.setAccessible(true);
- return null;
- }
- });
- int modifiers = serialPersistentFields.getModifiers();
+ setAccessible.setMember(f);
+ AccessController.doPrivileged(setAccessible);
+ int modifiers = f.getModifiers();
if (Modifier.isStatic(modifiers)
&& Modifier.isFinal(modifiers)
@@ -617,14 +608,8 @@ outer:
if (all_fields[from] != null)
{
final Field f = all_fields[from];
- AccessController.doPrivileged(new PrivilegedAction()
- {
- public Object run()
- {
- f.setAccessible(true);
- return null;
- }
- });
+ setAccessible.setMember(f);
+ AccessController.doPrivileged(setAccessible);
fields[to] = new ObjectStreamField(all_fields[from]);
to++;
}
@@ -651,14 +636,8 @@ outer:
// may not be public AND we only want the serialVersionUID of this
// class, not a superclass or interface.
final Field suid = cl.getDeclaredField("serialVersionUID");
- AccessController.doPrivileged(new PrivilegedAction()
- {
- public Object run()
- {
- suid.setAccessible(true);
- return null;
- }
- });
+ SetAccessibleAction setAccessible = new SetAccessibleAction(suid);
+ AccessController.doPrivileged(setAccessible);
int modifiers = suid.getModifiers();
if (Modifier.isStatic(modifiers)