HBASE-18387: [Thrift] Make principal configurable in DemoClient.java Added optional (fourth) parameter "server-principal" The solution is backward compatible, in case not given, uses "hbase" as default value If the third parameter is skipped the fourth cannot be set.
Signed-off-by: Josh Elser <els...@apache.org> Project: http://git-wip-us.apache.org/repos/asf/hbase/repo Commit: http://git-wip-us.apache.org/repos/asf/hbase/commit/ebc1d2bf Tree: http://git-wip-us.apache.org/repos/asf/hbase/tree/ebc1d2bf Diff: http://git-wip-us.apache.org/repos/asf/hbase/diff/ebc1d2bf Branch: refs/heads/branch-1.1 Commit: ebc1d2bf2c52bbaf5e2bc81afab6298558978239 Parents: b74576e Author: Tamas Penzes <tam...@cloudera.com> Authored: Tue Aug 8 13:45:09 2017 +0200 Committer: Josh Elser <els...@apache.org> Committed: Thu Aug 10 23:44:00 2017 -0400 ---------------------------------------------------------------------- hbase-examples/README.txt | 3 ++- .../org/apache/hadoop/hbase/thrift/DemoClient.java | 15 ++++++++++++--- 2 files changed, 14 insertions(+), 4 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/hbase/blob/ebc1d2bf/hbase-examples/README.txt ---------------------------------------------------------------------- diff --git a/hbase-examples/README.txt b/hbase-examples/README.txt index 700e41f..bc82595 100644 --- a/hbase-examples/README.txt +++ b/hbase-examples/README.txt @@ -28,7 +28,8 @@ Example code. 2. If HBase server is not secure, or authentication is not enabled for the Thrift server, execute: {java -cp hbase-examples-[VERSION].jar:${HBASE_EXAMPLE_CLASSPATH} org.apache.hadoop.hbase.thrift.DemoClient <host> <port>} 3. If HBase server is secure, and authentication is enabled for the Thrift server, run kinit at first, then execute: - {java -cp hbase-examples-[VERSION].jar:${HBASE_EXAMPLE_CLASSPATH} org.apache.hadoop.hbase.thrift.DemoClient <host> <port> true} + {java -cp hbase-examples-[VERSION].jar:${HBASE_EXAMPLE_CLASSPATH} org.apache.hadoop.hbase.thrift.DemoClient <host> <port> true <server-principal>} + <server-principal> should only be specified when the client connects to a secure cluster. It's default value is "hbase". * Ruby: hbase-examples/src/main/ruby/DemoClient.rb 1. Modify the import path in the file to point to {$THRIFT_HOME}/lib/rb/lib. http://git-wip-us.apache.org/repos/asf/hbase/blob/ebc1d2bf/hbase-examples/src/main/java/org/apache/hadoop/hbase/thrift/DemoClient.java ---------------------------------------------------------------------- diff --git a/hbase-examples/src/main/java/org/apache/hadoop/hbase/thrift/DemoClient.java b/hbase-examples/src/main/java/org/apache/hadoop/hbase/thrift/DemoClient.java index 64adc93..e5400f3 100644 --- a/hbase-examples/src/main/java/org/apache/hadoop/hbase/thrift/DemoClient.java +++ b/hbase-examples/src/main/java/org/apache/hadoop/hbase/thrift/DemoClient.java @@ -60,13 +60,14 @@ public class DemoClient { CharsetDecoder decoder = null; private static boolean secure = false; + private static String serverPrincipal = "hbase"; public static void main(String[] args) throws Exception { - if (args.length < 2 || args.length > 3) { + if (args.length < 2 || args.length > 4 || (args.length > 2 && !isBoolean(args[2]))) { System.out.println("Invalid arguments!"); - System.out.println("Usage: DemoClient host port [secure=false]"); + System.out.println("Usage: DemoClient host port [secure=false [server-principal=hbase] ]"); System.exit(-1); } @@ -77,6 +78,10 @@ public class DemoClient { secure = Boolean.parseBoolean(args[2]); } + if (args.length == 4) { + serverPrincipal = args[3]; + } + final DemoClient client = new DemoClient(); Subject.doAs(getSubject(), new PrivilegedExceptionAction<Void>() { @@ -88,6 +93,10 @@ public class DemoClient { }); } + private static boolean isBoolean(String s){ + return Boolean.TRUE.toString().equalsIgnoreCase(s) || Boolean.FALSE.toString().equalsIgnoreCase(s); + } + DemoClient() { decoder = Charset.forName("UTF-8").newDecoder(); } @@ -123,7 +132,7 @@ public class DemoClient { * The HBase cluster must be secure, allow proxy user. */ transport = new TSaslClientTransport("GSSAPI", null, - "hbase", // Thrift server user name, should be an authorized proxy user. + serverPrincipal, // Thrift server user name, should be an authorized proxy user. host, // Thrift server domain saslProperties, null, transport); }