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

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


The following commit(s) were added to refs/heads/master by this push:
     new c7328c9  KNOX-1959 - HadoopAuthCookieStore should not read krb5 login 
config each time
c7328c9 is described below

commit c7328c9e44d353f3d6ac949cdb193650186cf7c4
Author: Kevin Risden <[email protected]>
AuthorDate: Wed Jul 31 14:13:47 2019 -0400

    KNOX-1959 - HadoopAuthCookieStore should not read krb5 login config each 
time
    
    Signed-off-by: Kevin Risden <[email protected]>
---
 .../gateway/dispatch/HadoopAuthCookieStore.java    | 74 ++++++++++++----------
 .../dispatch/HadoopAuthCookieStoreTest.java        |  4 +-
 2 files changed, 41 insertions(+), 37 deletions(-)

diff --git 
a/gateway-spi/src/main/java/org/apache/knox/gateway/dispatch/HadoopAuthCookieStore.java
 
b/gateway-spi/src/main/java/org/apache/knox/gateway/dispatch/HadoopAuthCookieStore.java
index 06c9967..bd85617 100644
--- 
a/gateway-spi/src/main/java/org/apache/knox/gateway/dispatch/HadoopAuthCookieStore.java
+++ 
b/gateway-spi/src/main/java/org/apache/knox/gateway/dispatch/HadoopAuthCookieStore.java
@@ -34,28 +34,49 @@ import org.apache.knox.gateway.config.GatewayConfig;
 import org.apache.knox.gateway.i18n.messages.MessagesFactory;
 
 public class HadoopAuthCookieStore extends BasicCookieStore {
+  private static final SpiGatewayMessages LOG = 
MessagesFactory.get(SpiGatewayMessages.class);
 
-  private static SpiGatewayMessages LOG = MessagesFactory.get( 
SpiGatewayMessages.class );
+  private static final String HADOOP_AUTH_COOKIE_NAME = "hadoop.auth";
+  private static final String HIVE_SERVER2_AUTH_COOKIE_NAME = 
"hive.server2.auth";
 
-  private GatewayConfig gatewayConfig;
+  private static String knoxPrincipal;
 
   HadoopAuthCookieStore(GatewayConfig config) {
-    this.gatewayConfig = config;
+    // Read knoxPrincipal from krb5 login jaas config file
+    String krb5Config = config.getKerberosLoginConfig();
+    if (krb5Config != null && !krb5Config.isEmpty()) {
+      Properties p = new Properties();
+      try (InputStream in = Files.newInputStream(Paths.get(krb5Config))){
+        p.load(in);
+        String configuredKnoxPrincipal = p.getProperty("principal");
+        // Strip off enclosing quotes, if present
+        if (configuredKnoxPrincipal.startsWith("\"")) {
+          configuredKnoxPrincipal = configuredKnoxPrincipal.substring(1,
+              configuredKnoxPrincipal.length() - 1);
+        }
+        knoxPrincipal = configuredKnoxPrincipal;
+      } catch (IOException e) {
+        LOG.errorReadingKerberosLoginConfig(krb5Config, e);
+      }
+    }
   }
 
   @Override
   public void addCookie(Cookie cookie) {
-    if (cookie.getName().equals("hadoop.auth") || 
cookie.getName().equals("hive.server2.auth")) {
-      // Only add the cookie if it's Knox's cookie
-      if (isKnoxCookie(gatewayConfig, cookie)) {
-        Wrapper wrapper = new Wrapper(cookie);
-        LOG.acceptingServiceCookie(wrapper);
-        super.addCookie(wrapper);
-      }
+    // Only add the cookie if it is an auth cookie and belongs to Knox
+    if (isAuthCookie(cookie) && isKnoxCookie(cookie)) {
+      Wrapper wrapper = new Wrapper(cookie);
+      LOG.acceptingServiceCookie(wrapper);
+      super.addCookie(wrapper);
     }
   }
 
-  private static boolean isKnoxCookie(GatewayConfig config, Cookie cookie) {
+  private boolean isAuthCookie(Cookie cookie) {
+    return HADOOP_AUTH_COOKIE_NAME.equals(cookie.getName()) ||
+               HIVE_SERVER2_AUTH_COOKIE_NAME.equals(cookie.getName());
+  }
+
+  private boolean isKnoxCookie(Cookie cookie) {
     boolean result = false;
 
     if (cookie != null) {
@@ -71,22 +92,7 @@ public class HadoopAuthCookieStore extends BasicCookieStore {
           }
 
           if (principal != null) {
-            String krb5Config = config.getKerberosLoginConfig();
-            if (krb5Config != null && !krb5Config.isEmpty()) {
-              Properties p = new Properties();
-              try (InputStream in = 
Files.newInputStream(Paths.get(krb5Config))){
-                p.load(in);
-                String configuredPrincipal = p.getProperty("principal");
-                // Strip off enclosing quotes, if present
-                if (configuredPrincipal.startsWith("\"")) {
-                  configuredPrincipal = configuredPrincipal.substring(1, 
configuredPrincipal.length() - 1);
-                }
-                // Check if they're the same principal
-                result = principal.equals(configuredPrincipal);
-              } catch (IOException e) {
-                LOG.errorReadingKerberosLoginConfig(krb5Config, e);
-              }
-            }
+            result = principal.equals(knoxPrincipal);
           }
         }
       }
@@ -96,11 +102,11 @@ public class HadoopAuthCookieStore extends 
BasicCookieStore {
   }
 
   private static class Wrapper extends BasicClientCookie {
+    private static final String DELEGATE_STR = "delegate";
+    private final Cookie delegate;
 
-    private Cookie delegate;
-
-    Wrapper( Cookie delegate ) {
-      super( delegate.getName(), delegate.getValue() );
+    Wrapper(Cookie delegate ) {
+      super(delegate.getName(), delegate.getValue());
       this.delegate = delegate;
     }
 
@@ -189,11 +195,9 @@ public class HadoopAuthCookieStore extends 
BasicCookieStore {
       return (new ReflectionToStringBuilder(this) {
         @Override
         protected boolean accept(Field f) {
-          return super.accept(f) && !f.getName().equals("delegate");
+          return super.accept(f) && !DELEGATE_STR.equals(f.getName());
         }
       }).toString();
     }
-
   }
-
-}
\ No newline at end of file
+}
diff --git 
a/gateway-spi/src/test/java/org/apache/knox/gateway/dispatch/HadoopAuthCookieStoreTest.java
 
b/gateway-spi/src/test/java/org/apache/knox/gateway/dispatch/HadoopAuthCookieStoreTest.java
index a711be5..cc58347 100644
--- 
a/gateway-spi/src/test/java/org/apache/knox/gateway/dispatch/HadoopAuthCookieStoreTest.java
+++ 
b/gateway-spi/src/test/java/org/apache/knox/gateway/dispatch/HadoopAuthCookieStoreTest.java
@@ -167,6 +167,7 @@ public class HadoopAuthCookieStoreTest {
     File result = null;
     try {
       File f = File.createTempFile(filename, ".conf");
+      f.deleteOnExit();
       try(OutputStream out = Files.newOutputStream(f.toPath())) {
         out.write(contents.getBytes(StandardCharsets.UTF_8));
         out.flush();
@@ -194,5 +195,4 @@ public class HadoopAuthCookieStoreTest {
            "storeKey=true\n" +
            "useTicketCache=false;";
   }
-
-}
\ No newline at end of file
+}

Reply via email to