This is an automated email from the ASF dual-hosted git repository.

madhan pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/ranger.git


The following commit(s) were added to refs/heads/master by this push:
     new cbf41521a0 RANGER-5116: updated Ranger plugin to support 
configurations to initialize UserGroupInfomation (#518)
cbf41521a0 is described below

commit cbf41521a0d1b763cf44d84b1fbd1b485301830c
Author: Madhan Neethiraj <[email protected]>
AuthorDate: Mon Jan 27 17:08:48 2025 -0800

    RANGER-5116: updated Ranger plugin to support configurations to initialize 
UserGroupInfomation (#518)
---
 .../ranger/plugin/service/RangerBasePlugin.java    | 55 ++++++++++++++++++++++
 1 file changed, 55 insertions(+)

diff --git 
a/agents-common/src/main/java/org/apache/ranger/plugin/service/RangerBasePlugin.java
 
b/agents-common/src/main/java/org/apache/ranger/plugin/service/RangerBasePlugin.java
index 066dba1aaa..495ce3b838 100644
--- 
a/agents-common/src/main/java/org/apache/ranger/plugin/service/RangerBasePlugin.java
+++ 
b/agents-common/src/main/java/org/apache/ranger/plugin/service/RangerBasePlugin.java
@@ -22,10 +22,12 @@
 import org.apache.commons.collections.CollectionUtils;
 import org.apache.commons.collections.MapUtils;
 import org.apache.commons.lang.StringUtils;
+import org.apache.hadoop.security.UserGroupInformation;
 import org.apache.ranger.admin.client.RangerAdminClient;
 import org.apache.ranger.admin.client.RangerAdminRESTClient;
 import org.apache.ranger.audit.provider.AuditHandler;
 import org.apache.ranger.audit.provider.AuditProviderFactory;
+import org.apache.ranger.audit.provider.MiscUtil;
 import org.apache.ranger.audit.provider.StandAloneAuditProviderFactory;
 import org.apache.ranger.authorization.hadoop.config.RangerAuditConfig;
 import org.apache.ranger.authorization.hadoop.config.RangerPluginConfig;
@@ -70,6 +72,7 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import java.io.IOException;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collection;
@@ -135,6 +138,58 @@ public RangerBasePlugin(RangerPluginConfig pluginConfig) {
         
setIsFallbackSupported(pluginConfig.getBoolean(pluginConfig.getPropertyPrefix() 
+ ".is.fallback.supported", false));
         setServiceAdmins(serviceAdmins);
 
+        String  ugiPrefix = pluginConfig.getPropertyPrefix() + ".ugi";
+        boolean initUgi   = pluginConfig.getBoolean(ugiPrefix + ".initialize", 
false);
+
+        if (initUgi) {
+            String ugiLoginType = pluginConfig.get(ugiPrefix + ".login.type");
+
+            if (StringUtils.equalsIgnoreCase(ugiLoginType, "keytab")) {
+                String principal = pluginConfig.get(ugiPrefix + 
".keytab.principal");
+                String keytab    = pluginConfig.get(ugiPrefix + 
".keytab.file");
+
+                if (StringUtils.isNotBlank(principal) && 
StringUtils.isNotBlank(keytab)) {
+                    LOG.info("UGI login: principal={}, keytab={}", principal, 
keytab);
+
+                    try {
+                        UserGroupInformation.loginUserFromKeytab(principal, 
keytab);
+                    } catch (IOException excp) {
+                        LOG.error("UGI login: failed", excp);
+
+                        throw new RuntimeException(excp);
+                    }
+                } else {
+                    String msg = String.format("UGI login: invalid 
configuration: %s=%s, %s=%s", ugiPrefix + ".keytab.principal", principal, 
ugiPrefix + ".keytab.file", keytab);
+
+                    LOG.error(msg);
+
+                    throw new RuntimeException(msg);
+                }
+            } else if (StringUtils.equalsIgnoreCase(ugiLoginType, "jaas")) {
+                String jaasAppConfig = pluginConfig.get(ugiPrefix + 
".jaas.appconfig");
+
+                if (StringUtils.isNotBlank(jaasAppConfig)) {
+                    LOG.info("UGI login: jaasAppConfig={}", jaasAppConfig);
+
+                    try {
+                        MiscUtil.setUGIFromJAASConfig(jaasAppConfig);
+                    } catch (Exception excp) {
+                        LOG.error("UGI login: jaasAppConfig={} failed", 
jaasAppConfig, excp);
+
+                        throw new RuntimeException(excp);
+                    }
+                } else {
+                    String msg = String.format("UGI login: invalid 
configuration: %s=%s", ugiPrefix + ".jaas.appconfig", jaasAppConfig);
+
+                    LOG.error(msg);
+
+                    throw new RuntimeException(msg);
+                }
+            } else {
+                LOG.warn("UGI login: invalid configuration {}={}", ugiPrefix + 
".login.type", ugiLoginType);
+            }
+        }
+
         RangerRequestScriptEvaluator.init(pluginConfig);
 
         this.dedupStrings   = 
pluginConfig.getBoolean(pluginConfig.getPropertyPrefix() + ".dedup.strings", 
true);

Reply via email to