From 176bc293fc142b3b9bf07dddd40e525072905efb Mon Sep 17 00:00:00 2001 From: Cheng Pan Date: Wed, 26 Mar 2025 11:19:58 +0800 Subject: [PATCH] [KYUUBI #7003] Cut out JNA dependencies for authZ plugin ### Why are the changes needed? This PR provides an alternative for RANGER-4125 to cut out JNA dependencies for authZ plugin. ### How was this patch tested? Pass GHA, and I checked the content of authz-shaded jar ``` $ jar tf extensions/spark/kyuubi-spark-authz-shaded/target/kyuubi-spark-authz-shaded_2.12-1.11.0-SNAPSHOT.jar | grep Hostname org/apache/kyuubi/shade/com/kstruct/gethostname4j/Hostname.class ``` ### Was this patch authored or co-authored using generative AI tooling? No. Closes #7003 from pan3793/authz-hostname. Closes #7003 42e246856 [Cheng Pan] Cut out JNA dependencies for authz plugin Authored-by: Cheng Pan Signed-off-by: Cheng Pan --- .../spark/kyuubi-spark-authz-shaded/pom.xml | 4 -- extensions/spark/kyuubi-spark-authz/pom.xml | 21 -------- .../com/kstruct/gethostname4j/Hostname.java | 52 +++++++++++++++++++ 3 files changed, 52 insertions(+), 25 deletions(-) create mode 100644 extensions/spark/kyuubi-spark-authz/src/main/java/com/kstruct/gethostname4j/Hostname.java diff --git a/extensions/spark/kyuubi-spark-authz-shaded/pom.xml b/extensions/spark/kyuubi-spark-authz-shaded/pom.xml index 2f4cb8eeb..d26e7c802 100644 --- a/extensions/spark/kyuubi-spark-authz-shaded/pom.xml +++ b/extensions/spark/kyuubi-spark-authz-shaded/pom.xml @@ -51,11 +51,7 @@ org.apache.ranger:* org.codehaus.jackson:* com.sun.jersey:* - com.kstruct:gethostname4j javax.ws.rs:jsr311-api - - net.java.dev.jna:jna - net.java.dev.jna:jna-platform diff --git a/extensions/spark/kyuubi-spark-authz/pom.xml b/extensions/spark/kyuubi-spark-authz/pom.xml index 67c46fb03..b0192b6fb 100644 --- a/extensions/spark/kyuubi-spark-authz/pom.xml +++ b/extensions/spark/kyuubi-spark-authz/pom.xml @@ -33,10 +33,7 @@ 2.5.0 - - 1.0.0 1.19.4 - 5.7.0 @@ -108,24 +105,6 @@ ${jersey.client.version} - - com.kstruct - gethostname4j - ${gethostname4j.version} - - - - net.java.dev.jna - jna - ${jna.version} - - - - net.java.dev.jna - jna-platform - ${jna.version} - - org.apache.ranger ranger-plugin-classloader diff --git a/extensions/spark/kyuubi-spark-authz/src/main/java/com/kstruct/gethostname4j/Hostname.java b/extensions/spark/kyuubi-spark-authz/src/main/java/com/kstruct/gethostname4j/Hostname.java new file mode 100644 index 000000000..ac384326a --- /dev/null +++ b/extensions/spark/kyuubi-spark-authz/src/main/java/com/kstruct/gethostname4j/Hostname.java @@ -0,0 +1,52 @@ +/* + * 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. + */ + +package com.kstruct.gethostname4j; + +import java.net.InetAddress; +import java.net.UnknownHostException; +import org.apache.commons.lang3.StringUtils; +import org.apache.commons.lang3.SystemUtils; + +// Alternative for RANGER-4125 to cut out JNA dependencies +public class Hostname { + + // The highest priority environment variable which allows user to + // set hostname for Ranger client + public static final String RANGER_CLIENT_HOSTNAME = "RANGER_CLIENT_HOSTNAME"; + + /** @return the hostname the of the current machine */ + public static String getHostname() { + String hostname = System.getenv(RANGER_CLIENT_HOSTNAME); + if (isValid(hostname)) return hostname; + + // Gets the host name from an environment variable + // (COMPUTERNAME on Windows, HOSTNAME elsewhere) + hostname = SystemUtils.getHostName(); + if (isValid(hostname)) return hostname; + + try { + return InetAddress.getLocalHost().getHostName(); + } catch (UnknownHostException rethrow) { + throw new RuntimeException(rethrow); + } + } + + private static boolean isValid(String hostname) { + return StringUtils.isNotBlank(hostname) && !"localhost".equals(hostname); + } +}