summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRajith Muditha Attapattu <rajith@apache.org>2009-02-09 05:14:09 +0000
committerRajith Muditha Attapattu <rajith@apache.org>2009-02-09 05:14:09 +0000
commitdb5ee3f13d26890077fc5028d59344d496f99388 (patch)
tree3586bc35a0668b966448cae4aaf4228bce20beea
parent217b24c7e05ac60981d3e2e7c45f3ac27674d36f (diff)
downloadqpid-python-db5ee3f13d26890077fc5028d59344d496f99388.tar.gz
This is related to QPID-1645
Added support to specify the sasl_mechs as a space separated list in the connection URL. By default it will use PLAIN. You could provide a list of mechs to support or force to use one GASSAPI or CRAM-MD5 by specifying only that in the connection URL. git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk@742267 13f79535-47bb-0310-9956-ffa450edef68
-rw-r--r--qpid/java/client/src/main/java/org/apache/qpid/jms/BrokerDetails.java1
-rw-r--r--qpid/java/common/src/main/java/org/apache/qpid/transport/ClientDelegate.java15
-rw-r--r--qpid/java/common/src/main/java/org/apache/qpid/transport/Connection.java9
-rw-r--r--qpid/java/tools/src/main/java/org/apache/qpid/tools/JNDICheck.java2
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("");
}
}