Author: tross
Date: Fri Jul 10 21:26:02 2015
New Revision: 1690310
URL: http://svn.apache.org/r1690310
Log:
DISPATCH-137 - Integrated new Proton SASL capability into Dispatch.
Modified:
qpid/dispatch/trunk/src/container.c
qpid/dispatch/trunk/src/posix/driver.c
qpid/dispatch/trunk/src/server.c
qpid/dispatch/trunk/tests/system_test.py
qpid/dispatch/trunk/tests/system_tests_management.py
Modified: qpid/dispatch/trunk/src/container.c
URL:
http://svn.apache.org/viewvc/qpid/dispatch/trunk/src/container.c?rev=1690310&r1=1690309&r2=1690310&view=diff
==============================================================================
--- qpid/dispatch/trunk/src/container.c (original)
+++ qpid/dispatch/trunk/src/container.c Fri Jul 10 21:26:02 2015
@@ -432,6 +432,7 @@ int pn_event_handler(void *handler_conte
case PN_TRANSPORT_HEAD_CLOSED :
case PN_TRANSPORT_TAIL_CLOSED :
case PN_TRANSPORT_CLOSED :
+ case PN_TRANSPORT_AUTHENTICATED :
case PN_SELECTABLE_INIT :
case PN_SELECTABLE_UPDATED :
case PN_SELECTABLE_READABLE :
@@ -459,8 +460,6 @@ static void open_handler(qd_container_t
qdc_node_type_t *nt_item = DEQ_HEAD(container->node_type_list);
sys_mutex_unlock(container->lock);
- pn_connection_open(qd_connection_pn(conn));
-
while (nt_item) {
nt = nt_item->ntype;
if (dir == QD_INCOMING) {
Modified: qpid/dispatch/trunk/src/posix/driver.c
URL:
http://svn.apache.org/viewvc/qpid/dispatch/trunk/src/posix/driver.c?rev=1690310&r1=1690309&r2=1690310&view=diff
==============================================================================
--- qpid/dispatch/trunk/src/posix/driver.c (original)
+++ qpid/dispatch/trunk/src/posix/driver.c Fri Jul 10 21:26:02 2015
@@ -40,7 +40,6 @@
#include <qpid/dispatch/threading.h>
#include "alloc.h"
#include <proton/error.h>
-#include <proton/sasl.h>
#include <proton/ssl.h>
#include <proton/object.h>
#include <qpid/dispatch/ctools.h>
@@ -101,7 +100,6 @@ struct qdpn_connector_t {
pn_timestamp_t wakeup;
pn_connection_t *connection;
pn_transport_t *transport;
- pn_sasl_t *sasl;
qdpn_listener_t *listener;
void *context;
int idx;
@@ -507,7 +505,6 @@ qdpn_connector_t *qdpn_connector_fd(qdpn
c->wakeup = 0;
c->connection = NULL;
c->transport = pn_transport();
- c->sasl = pn_sasl(c->transport);
c->input_done = false;
c->output_done = false;
c->context = context;
@@ -553,11 +550,6 @@ void qdpn_connector_trace(qdpn_connector
if (ctor->transport) pn_transport_trace(ctor->transport, trace);
}
-pn_sasl_t *qdpn_connector_sasl(qdpn_connector_t *ctor)
-{
- return ctor ? ctor->sasl : NULL;
-}
-
pn_transport_t *qdpn_connector_transport(qdpn_connector_t *ctor)
{
return ctor ? ctor->transport : NULL;
Modified: qpid/dispatch/trunk/src/server.c
URL:
http://svn.apache.org/viewvc/qpid/dispatch/trunk/src/server.c?rev=1690310&r1=1690309&r2=1690310&view=diff
==============================================================================
--- qpid/dispatch/trunk/src/server.c (original)
+++ qpid/dispatch/trunk/src/server.c Fri Jul 10 21:26:02 2015
@@ -174,10 +174,10 @@ static void thread_process_listeners(qd_
if (!cxtr)
continue;
- char logbuf[qd_log_max_len()];
+ char logbuf[qd_log_max_len()];
qd_log(qd_server->log_source, QD_LOG_DEBUG, "Accepting %s",
- log_incoming(logbuf, sizeof(logbuf), cxtr));
+ log_incoming(logbuf, sizeof(logbuf), cxtr));
ctx = new_qd_connection_t();
DEQ_ITEM_INIT(ctx);
ctx->state = CONN_STATE_OPENING;
@@ -224,8 +224,8 @@ static void thread_process_listeners(qd_
// Set up SSL if configured
if (config->ssl_enabled) {
- qd_log(qd_server->log_source, QD_LOG_TRACE, "Configuring SSL on %s",
- log_incoming(logbuf, sizeof(logbuf), cxtr));
+ qd_log(qd_server->log_source, QD_LOG_TRACE, "Configuring SSL on
%s",
+ log_incoming(logbuf, sizeof(logbuf), cxtr));
if (listener_setup_ssl(config, tport) != QD_ERROR_NONE) {
qd_log(qd_server->log_source, QD_LOG_ERROR, "%s on %s",
qd_error_message(), log_incoming(logbuf,
sizeof(logbuf), cxtr));
@@ -238,10 +238,8 @@ static void thread_process_listeners(qd_
// Set up SASL
//
pn_sasl_t *sasl = pn_sasl(tport);
- pn_sasl_mechanisms(sasl, config->sasl_mechanisms);
- pn_sasl_server(sasl);
- pn_sasl_allow_skip(sasl, config->allow_no_sasl);
- pn_sasl_done(sasl, PN_SASL_OK); // TODO - This needs to go away
+ pn_sasl_allowed_mechs(sasl, config->sasl_mechanisms);
+ pn_transport_require_auth(tport, !config->allow_no_sasl);
}
}
@@ -342,6 +340,7 @@ static int process_connector(qd_server_t
pn_data_put_symbol(pn_connection_offered_capabilities(conn),
pn_bytes(clen, (char*) QD_CAPABILITY_ANONYMOUS_RELAY));
qdpn_connector_set_connection(cxtr, conn);
pn_connection_set_context(conn, ctx);
+ pn_connection_open(conn);
ctx->pn_conn = conn;
ctx->state = CONN_STATE_OPENING;
assert(ctx->connector);
@@ -351,33 +350,38 @@ static int process_connector(qd_server_t
}
case CONN_STATE_OPENING: {
- pn_transport_t *tport = qdpn_connector_transport(cxtr);
- pn_sasl_t *sasl = pn_sasl(tport);
-
- if (pn_sasl_outcome(sasl) == PN_SASL_OK ||
- pn_sasl_outcome(sasl) == PN_SASL_SKIPPED) {
- ctx->state = CONN_STATE_OPERATIONAL;
-
- qd_conn_event_t ce = QD_CONN_EVENT_LISTENER_OPEN;
-
- if (ctx->connector) {
- ce = QD_CONN_EVENT_CONNECTOR_OPEN;
- ctx->connector->delay = 0;
- } else
- assert(ctx->listener);
-
- qd_server->conn_handler(qd_server->conn_handler_context,
- ctx->context, ce, (qd_connection_t*)
qdpn_connector_context(cxtr));
- events = 1;
- break;
- }
- else if (pn_sasl_outcome(sasl) != PN_SASL_NONE) {
- ctx->state = CONN_STATE_FAILED;
- if (ctx->connector) {
- const qd_server_config_t *config = ctx->connector->config;
- qd_log(qd_server->log_source, QD_LOG_TRACE, "Connection to
%s:%s failed", config->host, config->port);
+ qd_connection_t *qd_conn = (qd_connection_t*)
qdpn_connector_context(cxtr);
+ pn_collector_t *collector = qd_connection_collector(qd_conn);
+ pn_event_t *event;
+
+ events = 0;
+ event = pn_collector_peek(collector);
+ while (event) {
+ if (pn_event_type(event) == PN_CONNECTION_REMOTE_OPEN) {
+ ctx->state = CONN_STATE_OPERATIONAL;
+ qd_conn_event_t ce = QD_CONN_EVENT_LISTENER_OPEN;
+
+ if (ctx->connector) {
+ ce = QD_CONN_EVENT_CONNECTOR_OPEN;
+ ctx->connector->delay = 0;
+ } else
+ assert(ctx->listener);
+
+ qd_server->conn_handler(qd_server->conn_handler_context,
+ ctx->context, ce,
(qd_connection_t*) qdpn_connector_context(cxtr));
+ events = 1;
+ break; // Break without popping this event. It will be
re-processed in OPERATIONAL state.
+ } else if (pn_event_type(event) == PN_TRANSPORT_ERROR) {
+ ctx->state = CONN_STATE_FAILED;
+ if (ctx->connector) {
+ const qd_server_config_t *config =
ctx->connector->config;
+ qd_log(qd_server->log_source, QD_LOG_TRACE,
"Connection to %s:%s failed", config->host, config->port);
+ }
}
+ pn_collector_pop(collector);
+ event = pn_collector_peek(collector);
}
+ break;
}
case CONN_STATE_OPERATIONAL:
@@ -829,8 +833,9 @@ static void cxtr_try_open(void *context)
// Set up SASL
//
pn_sasl_t *sasl = pn_sasl(tport);
- pn_sasl_mechanisms(sasl, config->sasl_mechanisms);
- pn_sasl_client(sasl);
+ pn_sasl_allowed_mechs(sasl, config->sasl_mechanisms);
+ pn_transport_require_auth(tport, !config->allow_no_sasl);
+
ctx->owner_thread = CONTEXT_NO_OWNER;
}
Modified: qpid/dispatch/trunk/tests/system_test.py
URL:
http://svn.apache.org/viewvc/qpid/dispatch/trunk/tests/system_test.py?rev=1690310&r1=1690309&r2=1690310&view=diff
==============================================================================
--- qpid/dispatch/trunk/tests/system_test.py (original)
+++ qpid/dispatch/trunk/tests/system_test.py Fri Jul 10 21:26:02 2015
@@ -305,7 +305,7 @@ class Qdrouterd(Process):
"""
DEFAULTS = {
- 'listener':{'addr':'0.0.0.0', 'saslMechanisms':'ANONYMOUS'},
+ 'listener':{'addr':'0.0.0.0', 'saslMechanisms':'ANONYMOUS',
'allowNoSasl': True},
'connector':{'addr':'127.0.0.1', 'saslMechanisms':'ANONYMOUS',
'role':'on-demand'},
'container':{'debugDump':"qddebug.txt"}
}
Modified: qpid/dispatch/trunk/tests/system_tests_management.py
URL:
http://svn.apache.org/viewvc/qpid/dispatch/trunk/tests/system_tests_management.py?rev=1690310&r1=1690309&r2=1690310&view=diff
==============================================================================
--- qpid/dispatch/trunk/tests/system_tests_management.py (original)
+++ qpid/dispatch/trunk/tests/system_tests_management.py Fri Jul 10 21:26:02
2015
@@ -167,7 +167,7 @@ class ManagementTest(system_test.TestCas
port = self.get_port()
# Note qdrouter schema defines port as string not int, since it can be
a service name.
- attributes = {'name':'foo', 'port':str(port), 'role':'normal',
'saslMechanisms': 'ANONYMOUS'}
+ attributes = {'name':'foo', 'port':str(port), 'role':'normal',
'saslMechanisms': 'ANONYMOUS', 'allowNoSasl': True}
entity = self.assert_create_ok(LISTENER, 'foo', attributes)
self.assertEqual(entity['name'], 'foo')
self.assertEqual(entity['addr'], '127.0.0.1')
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]