Skip to content

Commit 89ff8f9

Browse files
Parse java.security.properties file at run time.
1 parent 74c031b commit 89ff8f9

File tree

3 files changed

+37
-3
lines changed

3 files changed

+37
-3
lines changed

substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/jdk/SecurityProvidersSupport.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@
3333
import java.util.HashSet;
3434
import java.util.List;
3535
import java.util.Map;
36+
import java.util.Properties;
3637
import java.util.Set;
3738

3839
import org.graalvm.nativeimage.ImageSingletons;
@@ -69,6 +70,8 @@ public final class SecurityProvidersSupport {
6970
*/
7071
private final Map<String, Object> verifiedSecurityProviders = Collections.synchronizedMap(new HashMap<>());
7172

73+
private Properties savedInitialSecurityProperties;
74+
7275
private Constructor<?> sunECConstructor;
7376

7477
@Platforms(Platform.HOSTED_ONLY.class)
@@ -126,4 +129,12 @@ public Provider allocateSunECProvider() {
126129
throw VMError.shouldNotReachHere("The SunEC constructor is not present.");
127130
}
128131
}
132+
133+
public void setSavedInitialSecurityProperties(Properties savedSecurityProperties) {
134+
this.savedInitialSecurityProperties = savedSecurityProperties;
135+
}
136+
137+
public Properties getSavedInitialSecurityProperties() {
138+
return savedInitialSecurityProperties;
139+
}
129140
}

substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/jdk/SecuritySubstitutions.java

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@
4242
import java.util.List;
4343
import java.util.Map;
4444
import java.util.Objects;
45+
import java.util.Properties;
4546
import java.util.WeakHashMap;
4647
import java.util.function.BooleanSupplier;
4748
import java.util.function.Predicate;
@@ -220,6 +221,22 @@ final class Target_java_security_Provider_Service {
220221
private Object constructorCache;
221222
}
222223

224+
@TargetClass(value = java.security.Security.class)
225+
final class Target_java_security_Security {
226+
@Alias //
227+
@RecomputeFieldValue(kind = RecomputeFieldValue.Kind.FromAlias) //
228+
static Properties props;
229+
}
230+
231+
@TargetClass(value = java.security.Security.class, innerClass = "SecPropLoader")
232+
final class Target_java_security_Security_SecPropLoader {
233+
234+
@Substitute
235+
private static void loadMaster() {
236+
Target_java_security_Security.props = SecurityProvidersSupport.singleton().getSavedInitialSecurityProperties();
237+
}
238+
}
239+
223240
class ServiceKeyProvider {
224241
static Object getNewServiceKey() {
225242
Class<?> serviceKey = ReflectionUtil.lookupClass("java.security.Provider$ServiceKey");

substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/SecurityServicesFeature.java

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,7 @@
6464
import java.util.Map;
6565
import java.util.Objects;
6666
import java.util.Optional;
67+
import java.util.Properties;
6768
import java.util.Set;
6869
import java.util.concurrent.ConcurrentHashMap;
6970
import java.util.function.BiConsumer;
@@ -109,6 +110,7 @@
109110

110111
import jdk.graal.compiler.options.Option;
111112
import jdk.graal.compiler.serviceprovider.JavaVersionUtil;
113+
import jdk.internal.access.SharedSecrets;
112114
import sun.security.provider.NativePRNG;
113115
import sun.security.x509.OIDMap;
114116

@@ -229,13 +231,17 @@ public void duringSetup(DuringSetupAccess a) {
229231
SecurityProvidersSupport.singleton().setSunECConstructor(sunECConstructor);
230232
}
231233

234+
Properties securityProperties = SharedSecrets.getJavaSecurityPropertiesAccess().getInitialProperties();
235+
SecurityProvidersSupport.singleton().setSavedInitialSecurityProperties(securityProperties);
236+
232237
RuntimeClassInitializationSupport rci = ImageSingletons.lookup(RuntimeClassInitializationSupport.class);
233238
/*
234239
* Security providers will be initialized at run time because the class initialization
235-
* simulation will determine that automatically. For the two classes below, however, we need
236-
* to handle this explicitly because their packages are already marked for initialization at
237-
* build time by JdkInitializationFeature#afterRegistration.
240+
* simulation will determine that automatically. For the three classes below, however, we
241+
* need to handle this explicitly because their packages are already marked for
242+
* initialization at build time by JdkInitializationFeature#afterRegistration.
238243
*/
244+
rci.initializeAtRunTime("java.security.Security", SECURITY_PROVIDERS_INITIALIZATION);
239245
rci.initializeAtRunTime("sun.security.jca.Providers", SECURITY_PROVIDERS_INITIALIZATION);
240246
rci.initializeAtRunTime("sun.security.provider.certpath.ldap.JdkLDAP", SECURITY_PROVIDERS_INITIALIZATION);
241247

0 commit comments

Comments
 (0)