diff options
4 files changed, 21 insertions, 6 deletions
diff --git a/qpid/java/client/src/main/java/org/apache/qpid/jms/BrokerDetails.java b/qpid/java/client/src/main/java/org/apache/qpid/jms/BrokerDetails.java index c00d983902..7227ab247c 100644 --- a/qpid/java/client/src/main/java/org/apache/qpid/jms/BrokerDetails.java +++ b/qpid/java/client/src/main/java/org/apache/qpid/jms/BrokerDetails.java @@ -35,6 +35,7 @@ public interface BrokerDetails public static final String OPTIONS_CONNECT_TIMEOUT = "connecttimeout"; public static final String OPTIONS_CONNECT_DELAY = "connectdelay"; public static final String OPTIONS_IDLE_TIMEOUT = "idle_timeout"; + public static final String OPTIONS_SASL_MECHS = "sasl_mechs"; public static final int DEFAULT_PORT = 5672; public static final String SOCKET = "socket"; diff --git a/qpid/java/common/src/main/java/org/apache/qpid/transport/ClientDelegate.java b/qpid/java/common/src/main/java/org/apache/qpid/transport/ClientDelegate.java index 993da168a9..359dfc8c11 100644 --- a/qpid/java/common/src/main/java/org/apache/qpid/transport/ClientDelegate.java +++ b/qpid/java/common/src/main/java/org/apache/qpid/transport/ClientDelegate.java @@ -46,12 +46,21 @@ public class ClientDelegate extends ConnectionDelegate private String vhost; private String username; private String password; - - public ClientDelegate(String vhost, String username, String password) + private String[] saslMechs; + private String protocol; + private String serverName; + + public ClientDelegate(String vhost, String username, String password,String saslMechs) { this.vhost = vhost; this.username = username; this.password = password; + this.saslMechs = saslMechs.split(" "); + + // Looks kinda of silly but the Sun SASL Kerberos client uses the + // protocol + servername as the service key. + this.protocol = System.getProperty("qpid.sasl_protocol","AMQP"); + this.serverName = System.getProperty("qpid.sasl_server_name","localhost"); } public void init(Connection conn, ProtocolHeader hdr) @@ -84,7 +93,7 @@ public class ClientDelegate extends ConnectionDelegate new UsernamePasswordCallbackHandler(); handler.initialise(username, password); SaslClient sc = Sasl.createSaslClient - (new String[] {"PLAIN"}, null, "AMQP", "localhost", null, handler); + (saslMechs, null, protocol, serverName, null, handler); conn.setSaslClient(sc); byte[] response = sc.hasInitialResponse() ? diff --git a/qpid/java/common/src/main/java/org/apache/qpid/transport/Connection.java b/qpid/java/common/src/main/java/org/apache/qpid/transport/Connection.java index 2f7e1490ab..adaf2ccd37 100644 --- a/qpid/java/common/src/main/java/org/apache/qpid/transport/Connection.java +++ b/qpid/java/common/src/main/java/org/apache/qpid/transport/Connection.java @@ -161,14 +161,19 @@ public class Connection extends ConnectionInvoker { connect(host, port, vhost, username, password, false); } - + public void connect(String host, int port, String vhost, String username, String password, boolean ssl) { + connect(host, port, vhost, username, password, false,"PLAIN"); + } + + public void connect(String host, int port, String vhost, String username, String password, boolean ssl,String saslMechs) + { synchronized (lock) { state = OPENING; - delegate = new ClientDelegate(vhost, username, password); + delegate = new ClientDelegate(vhost, username, password,saslMechs); IoTransport.connect(host, port, ConnectionBinding.get(this), ssl); send(new ProtocolHeader(1, 0, 10)); diff --git a/qpid/java/tools/src/main/java/org/apache/qpid/tools/JNDICheck.java b/qpid/java/tools/src/main/java/org/apache/qpid/tools/JNDICheck.java index 9ead0c19f2..2390516ef0 100644 --- a/qpid/java/tools/src/main/java/org/apache/qpid/tools/JNDICheck.java +++ b/qpid/java/tools/src/main/java/org/apache/qpid/tools/JNDICheck.java @@ -187,7 +187,7 @@ public class JNDICheck print("ConnectionURL:"); print(factory.getConnectionURL().toString()); print("FailoverPolicy"); - print(new FailoverPolicy(factory.getConnectionURL()).toString()); + print(new FailoverPolicy(factory.getConnectionURL(),null).toString()); print(""); } } |