From 77f8cb8c486331be7520fd7816fcfbad5898b9a1 Mon Sep 17 00:00:00 2001 From: Peter Somogyi Date: Fri, 17 Jan 2020 14:25:41 +0100 Subject: [PATCH 1/3] HBASE-23347 Allow custom authentication methods for RPCs; addendum Fix error prone issues --- .../provider/SaslClientAuthenticationProviders.java | 11 +++++++---- .../hadoop/hbase/master/webapp/MetaBrowser.java | 2 +- .../provider/SaslServerAuthenticationProviders.java | 6 ++++-- 3 files changed, 12 insertions(+), 7 deletions(-) diff --git a/hbase-client/src/main/java/org/apache/hadoop/hbase/security/provider/SaslClientAuthenticationProviders.java b/hbase-client/src/main/java/org/apache/hadoop/hbase/security/provider/SaslClientAuthenticationProviders.java index 56c36e8eae70..aaaee003c595 100644 --- a/hbase-client/src/main/java/org/apache/hadoop/hbase/security/provider/SaslClientAuthenticationProviders.java +++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/security/provider/SaslClientAuthenticationProviders.java @@ -17,6 +17,7 @@ */ package org.apache.hadoop.hbase.security.provider; +import java.lang.reflect.InvocationTargetException; import java.util.Collection; import java.util.Collections; import java.util.HashMap; @@ -111,13 +112,14 @@ static AuthenticationProviderSelector instantiateSelector(Configuration conf, Class clz = conf.getClass( SELECTOR_KEY, BuiltInProviderSelector.class, AuthenticationProviderSelector.class); try { - AuthenticationProviderSelector selector = clz.newInstance(); + AuthenticationProviderSelector selector = clz.getConstructor().newInstance(); selector.configure(conf, providers); if (LOG.isTraceEnabled()) { LOG.trace("Loaded ProviderSelector {}", selector.getClass()); } return selector; - } catch (InstantiationException | IllegalAccessException e) { + } catch (InstantiationException | IllegalAccessException | NoSuchMethodException | + InvocationTargetException e) { throw new RuntimeException("Failed to instantiate " + clz + " as the ProviderSelector defined by " + SELECTOR_KEY, e); } @@ -148,8 +150,9 @@ static void addExplicitProviders(Configuration conf, // Instantiate it SaslClientAuthenticationProvider provider; try { - provider = (SaslClientAuthenticationProvider) clz.newInstance(); - } catch (InstantiationException | IllegalAccessException e) { + provider = (SaslClientAuthenticationProvider) clz.getConstructor().newInstance(); + } catch (InstantiationException | IllegalAccessException | NoSuchMethodException + | InvocationTargetException e) { LOG.warn("Failed to instantiate SaslClientAuthenticationProvider {}", clz, e); continue; } diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/webapp/MetaBrowser.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/webapp/MetaBrowser.java index 5b07427599c9..65d88c6a362f 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/webapp/MetaBrowser.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/webapp/MetaBrowser.java @@ -361,7 +361,7 @@ private static > T tryValueOf(final Class clazz, return null; } try { - return T.valueOf(clazz, value); + return Enum.valueOf(clazz, value); } catch (IllegalArgumentException e) { return null; } diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/security/provider/SaslServerAuthenticationProviders.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/security/provider/SaslServerAuthenticationProviders.java index d1c22b7b4550..829498dfd9fe 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/security/provider/SaslServerAuthenticationProviders.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/security/provider/SaslServerAuthenticationProviders.java @@ -18,6 +18,7 @@ package org.apache.hadoop.hbase.security.provider; import java.io.IOException; +import java.lang.reflect.InvocationTargetException; import java.util.HashMap; import java.util.Optional; import java.util.ServiceLoader; @@ -120,9 +121,10 @@ static void addExtraProviders(Configuration conf, try { SaslServerAuthenticationProvider provider = - (SaslServerAuthenticationProvider) clz.newInstance(); + (SaslServerAuthenticationProvider) clz.getConstructor().newInstance(); addProviderIfNotExists(provider, providers); - } catch (InstantiationException | IllegalAccessException e) { + } catch (InstantiationException | IllegalAccessException | NoSuchMethodException + | InvocationTargetException e) { LOG.warn("Failed to instantiate {}", clz, e); } } From b9d8684a3aaec85021f3c52f2ba7756312905277 Mon Sep 17 00:00:00 2001 From: Peter Somogyi Date: Fri, 17 Jan 2020 15:49:33 +0100 Subject: [PATCH 2/3] Remove MetaBrowser change --- .../java/org/apache/hadoop/hbase/master/webapp/MetaBrowser.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/webapp/MetaBrowser.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/webapp/MetaBrowser.java index 65d88c6a362f..5b07427599c9 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/webapp/MetaBrowser.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/webapp/MetaBrowser.java @@ -361,7 +361,7 @@ private static > T tryValueOf(final Class clazz, return null; } try { - return Enum.valueOf(clazz, value); + return T.valueOf(clazz, value); } catch (IllegalArgumentException e) { return null; } From c02d73da04eed7461f2f6025ff814ded50c547be Mon Sep 17 00:00:00 2001 From: Peter Somogyi Date: Mon, 20 Jan 2020 11:14:39 +0100 Subject: [PATCH 3/3] Add constructors for ConflictingProviderX classes --- .../provider/TestSaslClientAuthenticationProviders.java | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/hbase-client/src/test/java/org/apache/hadoop/hbase/security/provider/TestSaslClientAuthenticationProviders.java b/hbase-client/src/test/java/org/apache/hadoop/hbase/security/provider/TestSaslClientAuthenticationProviders.java index c1317028d35a..2b399593e7c1 100644 --- a/hbase-client/src/test/java/org/apache/hadoop/hbase/security/provider/TestSaslClientAuthenticationProviders.java +++ b/hbase-client/src/test/java/org/apache/hadoop/hbase/security/provider/TestSaslClientAuthenticationProviders.java @@ -96,6 +96,10 @@ public void testDifferentConflictingImplementationsFail() { static class ConflictingProvider1 implements SaslClientAuthenticationProvider { static final SaslAuthMethod METHOD1 = new SaslAuthMethod( "FOO", (byte)12, "DIGEST-MD5", AuthenticationMethod.SIMPLE); + + public ConflictingProvider1() { + } + @Override public SaslAuthMethod getSaslAuthMethod() { return METHOD1; } @@ -118,6 +122,10 @@ static class ConflictingProvider1 implements SaslClientAuthenticationProvider { static class ConflictingProvider2 implements SaslClientAuthenticationProvider { static final SaslAuthMethod METHOD2 = new SaslAuthMethod( "BAR", (byte)12, "DIGEST-MD5", AuthenticationMethod.SIMPLE); + + public ConflictingProvider2() { + } + @Override public SaslAuthMethod getSaslAuthMethod() { return METHOD2; }