From be62be0fa4bbe35da91abc393b3b4732f889884f Mon Sep 17 00:00:00 2001 From: Chris Busbey Date: Fri, 8 Nov 2013 11:15:51 -0600 Subject: [PATCH] gss encode/decode 'more' flag --- src/gssapi_mechanism_base.cpp | 21 +++++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) diff --git a/src/gssapi_mechanism_base.cpp b/src/gssapi_mechanism_base.cpp index 136ef53d..edd34529 100644 --- a/src/gssapi_mechanism_base.cpp +++ b/src/gssapi_mechanism_base.cpp @@ -62,8 +62,17 @@ int zmq::gssapi_mechanism_base_t::encode_message (msg_t *msg_) int state; gss_buffer_desc plaintext; gss_buffer_desc wrapped; - plaintext.value = msg_->data (); - plaintext.length = msg_->size (); + + uint8_t flags = 0; + if (msg_->flags () & msg_t::more) + flags |= 0x01; + + uint8_t *plaintext_buffer = static_cast (malloc(msg_->size ()+1)); + plaintext_buffer[0] = flags; + memcpy (plaintext_buffer+1, msg_->data(), msg_->size()); + + plaintext.value = plaintext_buffer; + plaintext.length = msg_->size ()+1; maj_stat = gss_wrap(&min_stat, context, 1, GSS_C_QOP_DEFAULT, &plaintext, &state, &wrapped); @@ -148,10 +157,14 @@ int zmq::gssapi_mechanism_base_t::decode_message (msg_t *msg_) int rc = msg_->close (); zmq_assert (rc == 0); - rc = msg_->init_size (plaintext.length); + rc = msg_->init_size (plaintext.length-1); zmq_assert (rc == 0); + + const uint8_t flags = static_cast (plaintext.value)[0]; + if (flags & 0x01) + msg_->set_flags (msg_t::more); - memcpy (msg_->data (), plaintext.value, plaintext.length); + memcpy (msg_->data (), static_cast (plaintext.value)+1, plaintext.length-1); gss_release_buffer (&min_stat, &plaintext); gss_release_buffer (&min_stat, &wrapped);