Author: phunt
Date: Wed Jun 15 20:30:05 2016
New Revision: 1748630

URL: http://svn.apache.org/viewvc?rev=1748630&view=rev
Log:
ZOOKEEPER-2433: ZooKeeperSaslServer: allow user principals in subject (Andy B 
via phunt)

Modified:
    zookeeper/trunk/CHANGES.txt
    
zookeeper/trunk/src/java/main/org/apache/zookeeper/server/ZooKeeperSaslServer.java

Modified: zookeeper/trunk/CHANGES.txt
URL: 
http://svn.apache.org/viewvc/zookeeper/trunk/CHANGES.txt?rev=1748630&r1=1748629&r2=1748630&view=diff
==============================================================================
--- zookeeper/trunk/CHANGES.txt (original)
+++ zookeeper/trunk/CHANGES.txt Wed Jun 15 20:30:05 2016
@@ -434,6 +434,9 @@ IMPROVEMENTS:
   ZOOKEEPER-2410: add time unit to 'ELECTION TOOK' log.info message
   (Christine Poerschke via phunt)
 
+  ZOOKEEPER-2433: ZooKeeperSaslServer: allow user principals in
+  subject (Andy B via phunt)
+
 Release 3.5.0 - 8/4/2014
 
 NEW FEATURES:

Modified: 
zookeeper/trunk/src/java/main/org/apache/zookeeper/server/ZooKeeperSaslServer.java
URL: 
http://svn.apache.org/viewvc/zookeeper/trunk/src/java/main/org/apache/zookeeper/server/ZooKeeperSaslServer.java?rev=1748630&r1=1748629&r2=1748630&view=diff
==============================================================================
--- 
zookeeper/trunk/src/java/main/org/apache/zookeeper/server/ZooKeeperSaslServer.java
 (original)
+++ 
zookeeper/trunk/src/java/main/org/apache/zookeeper/server/ZooKeeperSaslServer.java
 Wed Jun 15 20:30:05 2016
@@ -63,16 +63,23 @@ public class ZooKeeperSaslServer {
 
                         int indexOf = 
servicePrincipalNameAndHostname.indexOf("/");
 
-                        // e.g. servicePrincipalName := "zookeeper"
-                        final String servicePrincipalName = 
servicePrincipalNameAndHostname.substring(0, indexOf);
-
                         // e.g. serviceHostnameAndKerbDomain := 
"[email protected]"
                         final String serviceHostnameAndKerbDomain = 
servicePrincipalNameAndHostname.substring(indexOf+1,servicePrincipalNameAndHostname.length());
 
-                        indexOf = serviceHostnameAndKerbDomain.indexOf("@");
-                        // e.g. serviceHostname := "myhost.foo.com"
-                        final String serviceHostname = 
serviceHostnameAndKerbDomain.substring(0,indexOf);
+                        int indexOfAt = 
serviceHostnameAndKerbDomain.indexOf("@");
 
+                        // Handle Kerberos Service as well as User Principal 
Names
+                        final String servicePrincipalName, serviceHostname;
+                        if (indexOf > 0){
+                            // e.g. servicePrincipalName := "zookeeper"
+                            servicePrincipalName = 
servicePrincipalNameAndHostname.substring(0, indexOf);
+                            // e.g. serviceHostname := "myhost.foo.com"
+                            serviceHostname = 
serviceHostnameAndKerbDomain.substring(0, indexOfAt);
+                        } else {
+                            servicePrincipalName = 
servicePrincipalNameAndHostname.substring(0, indexOfAt);
+                            serviceHostname = null;
+                        }
+                        
                         final String mech = "GSSAPI";   // TODO: should depend 
on zoo.cfg specified mechs, but if subject is non-null, it can be assumed to be 
GSSAPI.
 
                         LOG.debug("serviceHostname is '"+ serviceHostname + 
"'");


Reply via email to