From f7d836da9ec6cd001c78b304bb5812703f4c086a Mon Sep 17 00:00:00 2001 From: Virtually Nick Date: Tue, 13 Aug 2019 13:44:45 -0400 Subject: [PATCH] GUACAMOLE-774: Deal with deprecated Provider constructor. --- .../RadiusAuthenticationProviderModule.java | 31 +++++++++++++++---- 1 file changed, 25 insertions(+), 6 deletions(-) diff --git a/extensions/guacamole-auth-radius/src/main/java/org/apache/guacamole/auth/radius/RadiusAuthenticationProviderModule.java b/extensions/guacamole-auth-radius/src/main/java/org/apache/guacamole/auth/radius/RadiusAuthenticationProviderModule.java index a1928ccd3..0003a4248 100644 --- a/extensions/guacamole-auth-radius/src/main/java/org/apache/guacamole/auth/radius/RadiusAuthenticationProviderModule.java +++ b/extensions/guacamole-auth-radius/src/main/java/org/apache/guacamole/auth/radius/RadiusAuthenticationProviderModule.java @@ -20,9 +20,12 @@ package org.apache.guacamole.auth.radius; import com.google.inject.AbstractModule; +import java.lang.reflect.Constructor; +import java.lang.reflect.InvocationTargetException; import java.security.Provider; import java.security.Security; import org.apache.guacamole.GuacamoleException; +import org.apache.guacamole.GuacamoleServerException; import org.apache.guacamole.auth.radius.conf.ConfigurationService; import org.apache.guacamole.auth.radius.conf.RadiusAuthenticationProtocol; import org.apache.guacamole.auth.radius.conf.RadiusGuacamoleProperties; @@ -57,7 +60,6 @@ public class RadiusAuthenticationProviderModule extends AbstractModule { * If an error occurs while retrieving the Guacamole server * environment. */ - @SuppressWarnings("deprecation") public RadiusAuthenticationProviderModule(AuthenticationProvider authProvider) throws GuacamoleException { @@ -72,11 +74,28 @@ public class RadiusAuthenticationProviderModule extends AbstractModule { || innerProtocol == RadiusAuthenticationProtocol.MSCHAPv1 || innerProtocol == RadiusAuthenticationProtocol.MSCHAPv2) { - Security.addProvider(new Provider("MD4", 0.00, "MD4 for MSCHAPv1/2 Support") { - { - this.put("MessageDigest.MD4", org.bouncycastle.jce.provider.JDKMessageDigest.MD4.class.getName()); - } - }); + try { + Provider md4Provider; + Constructor providerConstructor = Provider.class + .getConstructor(String.class, String.class, String.class); + if (providerConstructor != null) + md4Provider = (Provider) providerConstructor + .newInstance("MD4", "0.00", "MD4 for MSCHAPv1/2 Support"); + else + md4Provider = (Provider) Provider.class + .getConstructor(String.class, Double.class, String.class) + .newInstance("MD4", 0.00, "MD4 for MSCHAPv1/2 Support"); + + assert(md4Provider != null); + md4Provider.put("MessageDigest.MD4", org.bouncycastle.jce.provider.JDKMessageDigest.MD4.class.getName()); + Security.addProvider(md4Provider); + } + catch (IllegalAccessException + | InstantiationException + | InvocationTargetException + | NoSuchMethodException e) { + throw new GuacamoleServerException("Unable to load MD4 support.", e); + } }