Index: lucene/common-build.xml
===================================================================
--- lucene/common-build.xml (revision 1378491)
+++ lucene/common-build.xml (working copy)
@@ -796,6 +796,11 @@
+
+
+
+
+
Index: lucene/tools/junit4/tests.policy
===================================================================
--- lucene/tools/junit4/tests.policy (revision 0)
+++ lucene/tools/junit4/tests.policy (working copy)
@@ -0,0 +1,46 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// Policy file to prevent tests from writing outside the test sandbox directory
+// (must be given as a sysprop: tests.sandbox.dir)
+// This policy also disallows stuff like listening on network ports of interfaces
+// different than 127.0.0.1.
+
+// PLEASE NOTE: You may need to enable other permissions when new tests are added,
+// everything not allowed here is forbidden!
+
+grant {
+ permission java.io.FilePermission "<>", "read,execute";
+ permission java.io.FilePermission "${tests.sandbox.dir}${/}-", "read,execute,write,delete";
+ permission java.net.SocketPermission "127.0.0.1:1024-", "accept,listen";
+ permission java.net.SocketPermission "*", "connect,resolve";
+ permission java.util.PropertyPermission "*", "read,write";
+ permission java.lang.reflect.ReflectPermission "*";
+ permission java.lang.RuntimePermission "*";
+
+ // Solr needs those:
+ permission java.net.NetPermission "*";
+ permission java.util.logging.LoggingPermission "control";
+ permission java.lang.management.ManagementPermission "monitor";
+ permission javax.management.MBeanPermission "*", "*";
+ permission javax.management.MBeanServerPermission "*";
+ permission javax.management.MBeanTrustPermission "*";
+
+ // TIKA uses BouncyCastle and that registers new provider for PDF parsing + MSOffice parsing. Maybe report as bug!
+ permission java.security.SecurityPermission "putProviderProperty.BC";
+ permission java.security.SecurityPermission "insertProvider.BC";
+};
Index: lucene/tools/junit4/tests.policy
===================================================================
--- lucene/tools/junit4/tests.policy (revision 0)
+++ lucene/tools/junit4/tests.policy (working copy)
Property changes on: lucene/tools/junit4/tests.policy
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Index: solr/core/src/java/org/apache/solr/core/JmxMonitoredMap.java
===================================================================
--- solr/core/src/java/org/apache/solr/core/JmxMonitoredMap.java (revision 1378491)
+++ solr/core/src/java/org/apache/solr/core/JmxMonitoredMap.java (working copy)
@@ -61,6 +61,13 @@
public JmxMonitoredMap(String coreName, String coreHashCode,
final JmxConfiguration jmxConfig) {
+ this(coreName, coreHashCode, jmxConfig, null);
+ }
+
+ // TODO: Make public? Move Map env to environment?
+ // Currently the map is needed to bind to localhost
+ JmxMonitoredMap(String coreName, String coreHashCode,
+ final JmxConfiguration jmxConfig, Map env) {
this.coreHashCode = coreHashCode;
jmxRootName = (null != jmxConfig.rootName ?
jmxConfig.rootName
@@ -94,7 +101,7 @@
server = MBeanServerFactory.newMBeanServer();
JMXConnectorServer connector = JMXConnectorServerFactory
.newJMXConnectorServer(new JMXServiceURL(jmxConfig.serviceUrl),
- null, server);
+ env, server);
connector.start();
LOG.info("JMX monitoring is enabled at " + jmxConfig.serviceUrl);
} catch (Exception e) {
Index: solr/core/src/test/org/apache/solr/core/TestJmxMonitoredMap.java
===================================================================
--- solr/core/src/test/org/apache/solr/core/TestJmxMonitoredMap.java (revision 1378491)
+++ solr/core/src/test/org/apache/solr/core/TestJmxMonitoredMap.java (working copy)
@@ -30,10 +30,15 @@
import javax.management.remote.JMXConnector;
import javax.management.remote.JMXConnectorFactory;
import javax.management.remote.JMXServiceURL;
+import javax.management.remote.rmi.RMIConnectorServer;
+import java.io.IOException;
+import java.net.InetSocketAddress;
+import java.net.Socket;
import java.net.ServerSocket;
import java.net.URL;
-import java.rmi.RemoteException;
import java.rmi.registry.LocateRegistry;
+import java.rmi.server.RMIServerSocketFactory;
+import java.util.Collections;
import java.util.Set;
import static org.hamcrest.CoreMatchers.allOf;
@@ -61,33 +66,38 @@
public void setUp() throws Exception {
super.setUp();
-
- int retries = 5;
- for (int i = 0; i < retries; i++) {
- try {
- ServerSocket server = new ServerSocket(0);
- try {
- port = server.getLocalPort();
- } finally {
- server.close();
+ String oldHost = System.getProperty("java.rmi.server.hostname");
+ try {
+ // this stupid sysprop thing is needed, because remote stubs use the
+ // hostname to connect, which does not work with server bound to 127.0.0.1
+ // See: http://weblogs.java.net/blog/emcmanus/archive/2006/12/multihomed_comp.html
+ System.setProperty("java.rmi.server.hostname", "127.0.0.1");
+ class LocalhostRMIServerSocketFactory implements RMIServerSocketFactory {
+ ServerSocket socket;
+
+ @Override
+ public ServerSocket createServerSocket(int port) throws IOException {
+ socket = new ServerSocket();
+ socket.bind(new InetSocketAddress("127.0.0.1", port));
+ return socket;
}
- // System.out.println("Using port: " + port);
- try {
- LocateRegistry.createRegistry(port);
- } catch (RemoteException e) {
- throw e;
- }
- String url = "service:jmx:rmi:///jndi/rmi://:" + port + "/solrjmx";
- JmxConfiguration config = new JmxConfiguration(true, null, url, null);
- monitoredMap = new JmxMonitoredMap("", "", config);
- JMXServiceURL u = new JMXServiceURL(url);
- connector = JMXConnectorFactory.connect(u);
- mbeanServer = connector.getMBeanServerConnection();
- break;
- } catch (Exception e) {
- if(retries == (i + 1)) {
- throw e;
- }
+ };
+ LocalhostRMIServerSocketFactory factory = new LocalhostRMIServerSocketFactory();
+ LocateRegistry.createRegistry(0, null, factory);
+ port = factory.socket.getLocalPort();
+ //System.out.println("Using port: " + port);
+ String url = "service:jmx:rmi://127.0.0.1:"+port+"/jndi/rmi://127.0.0.1:"+port+"/solrjmx";
+ JmxConfiguration config = new JmxConfiguration(true, null, url, null);
+ monitoredMap = new JmxMonitoredMap("", "", config,
+ Collections.singletonMap(RMIConnectorServer.RMI_SERVER_SOCKET_FACTORY_ATTRIBUTE, factory));
+ JMXServiceURL u = new JMXServiceURL(url);
+ connector = JMXConnectorFactory.connect(u);
+ mbeanServer = connector.getMBeanServerConnection();
+ } finally {
+ if (oldHost == null) {
+ System.clearProperty("java.rmi.server.hostname");
+ } else {
+ System.setProperty("java.rmi.server.hostname", oldHost);
}
}
}