PROTON-1539: Ensure that SASL challenge and response frames generate a binary - And never a null even if the binary is zero length
Project: http://git-wip-us.apache.org/repos/asf/qpid-proton/repo Commit: http://git-wip-us.apache.org/repos/asf/qpid-proton/commit/1b1f3f9c Tree: http://git-wip-us.apache.org/repos/asf/qpid-proton/tree/1b1f3f9c Diff: http://git-wip-us.apache.org/repos/asf/qpid-proton/diff/1b1f3f9c Branch: refs/heads/go1 Commit: 1b1f3f9cae1c68545f93c74e017edae039875440 Parents: 46f3007 Author: Andrew Stitcher <[email protected]> Authored: Mon Aug 14 14:38:26 2017 -0400 Committer: Andrew Stitcher <[email protected]> Committed: Mon Aug 14 15:27:04 2017 -0400 ---------------------------------------------------------------------- proton-c/src/core/codec.c | 8 ++++++++ proton-c/src/sasl/cyrus_sasl.c | 3 +++ proton-c/src/sasl/sasl.c | 4 ++-- 3 files changed, 13 insertions(+), 2 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/1b1f3f9c/proton-c/src/core/codec.c ---------------------------------------------------------------------- diff --git a/proton-c/src/core/codec.c b/proton-c/src/core/codec.c index 7809907..3417c94 100644 --- a/proton-c/src/core/codec.c +++ b/proton-c/src/core/codec.c @@ -529,6 +529,14 @@ int pn_data_vfill(pn_data_t *data, const char *fmt, va_list ap) case 'd': err = pn_data_put_double(data, va_arg(ap, double)); break; + case 'Z': + { + // For maximum portability, caller must pass these as two separate args, not a single struct + size_t size = va_arg(ap, size_t); + char *start = va_arg(ap, char *); + err = pn_data_put_binary(data, pn_bytes(size, start)); + } + break; case 'z': { // For maximum portability, caller must pass these as two separate args, not a single struct http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/1b1f3f9c/proton-c/src/sasl/cyrus_sasl.c ---------------------------------------------------------------------- diff --git a/proton-c/src/sasl/cyrus_sasl.c b/proton-c/src/sasl/cyrus_sasl.c index ae910f4..88bdd7a 100644 --- a/proton-c/src/sasl/cyrus_sasl.c +++ b/proton-c/src/sasl/cyrus_sasl.c @@ -440,6 +440,9 @@ static int pni_wrap_server_start(pn_transport_t *transport, const char *mech_sel if (!in_bytes && strcmp(mech_selected, "ANONYMOUS")==0) { in_bytes = ""; in_size = 0; + } else if (in_bytes && strcmp(mech_selected, "CRAM-MD5")==0) { + in_bytes = 0; + in_size = 0; } result = sasl_server_start(cyrus_conn, mech_selected, http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/1b1f3f9c/proton-c/src/sasl/sasl.c ---------------------------------------------------------------------- diff --git a/proton-c/src/sasl/sasl.c b/proton-c/src/sasl/sasl.c index 1469c51..fe778be 100644 --- a/proton-c/src/sasl/sasl.c +++ b/proton-c/src/sasl/sasl.c @@ -460,7 +460,7 @@ static void pni_post_sasl_frame(pn_transport_t *transport) } case SASL_POSTED_RESPONSE: if (sasl->last_state != SASL_POSTED_RESPONSE) { - pn_post_frame(transport, SASL_FRAME_TYPE, 0, "DL[z]", SASL_RESPONSE, out.size, out.start); + pn_post_frame(transport, SASL_FRAME_TYPE, 0, "DL[Z]", SASL_RESPONSE, out.size, out.start); pni_emit(transport); } break; @@ -469,7 +469,7 @@ static void pni_post_sasl_frame(pn_transport_t *transport) desired_state = SASL_POSTED_MECHANISMS; continue; } else if (sasl->last_state != SASL_POSTED_CHALLENGE) { - pn_post_frame(transport, SASL_FRAME_TYPE, 0, "DL[z]", SASL_CHALLENGE, out.size, out.start); + pn_post_frame(transport, SASL_FRAME_TYPE, 0, "DL[Z]", SASL_CHALLENGE, out.size, out.start); pni_emit(transport); } break; --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
