diff --git a/src/factory/KafkaTaskImpl.cc b/src/factory/KafkaTaskImpl.cc index 626619cb..84926706 100644 --- a/src/factory/KafkaTaskImpl.cc +++ b/src/factory/KafkaTaskImpl.cc @@ -158,11 +158,7 @@ CommMessageOut *__ComplexKafkaTask::message_out() { KafkaConnectionInfo *conn_info = new KafkaConnectionInfo; if (!conn_info->init(sasl_mechanisms)) - { - this->state = WFT_STATE_TASK_ERROR; - this->error = WFT_ERR_KAFKA_SASL_DISALLOWED; return NULL; - } auto&& deleter = [] (void *ctx) { diff --git a/src/protocol/KafkaMessage.cc b/src/protocol/KafkaMessage.cc index da6c98f3..2dbbe9b1 100644 --- a/src/protocol/KafkaMessage.cc +++ b/src/protocol/KafkaMessage.cc @@ -3785,23 +3785,26 @@ int KafkaResponse::parse_saslauthenticate(void **buf, size_t *size) int KafkaResponse::handle_sasl_continue() { + struct iovec iovecs[64]; int ret; - std::vector iovecs(2); - if (this->encode(iovecs.data(), 2) >= 0) + int cnt = this->encode(iovecs, 64); + if ((unsigned int)cnt > 64) { - for (auto vec : iovecs) + if (cnt > 64) + errno = EOVERFLOW; + return -1; + } + + for (int i = 0; i < cnt; i++) + { + ret = this->feedback(iovecs[i].iov_base, iovecs[i].iov_len); + if (ret != (int)iovecs[i].iov_len) { - ret = this->feedback(vec.iov_base, vec.iov_len); - if (ret != (int)vec.iov_len) - { - if (ret > 0) - errno = EAGAIN; - return -1; - } + if (ret > 0) + errno = EAGAIN; + return -1; } } - else - return -1; return 0; } diff --git a/src/protocol/kafka_parser.c b/src/protocol/kafka_parser.c index d13e261e..70cf1621 100644 --- a/src/protocol/kafka_parser.c +++ b/src/protocol/kafka_parser.c @@ -17,6 +17,8 @@ */ #include +#include +#include #include #include #include @@ -947,11 +949,12 @@ static int scram_build_client_final_message(kafka_scram_t *scram, int itcnt, char *server_sign_b64, *client_proof_b64 = NULL; int i; - if (scram_hi(scram->evp, itcnt, &password_iov, salt, &salted_pwd_iov) == -1) + if (scram_hi((const EVP_MD *)scram->evp, itcnt, &password_iov, salt, + &salted_pwd_iov) == -1) return -1; - if (scram_hmac(scram->evp, &salted_pwd_iov, &client_key_verbatim_iov, - &client_key_iov) == -1) + if (scram_hmac((const EVP_MD *)scram->evp, &salted_pwd_iov, + &client_key_verbatim_iov, &client_key_iov) == -1) return -1; scram_h(scram, &client_key_iov, &stored_key_iov); @@ -973,15 +976,15 @@ static int scram_build_client_final_message(kafka_scram_t *scram, int itcnt, (int)client_final_msg_wo_proof_iov.iov_len, (char *)client_final_msg_wo_proof_iov.iov_base); - if (scram_hmac(scram->evp, &salted_pwd_iov, &server_key_verbatim_iov, - &server_key_iov) == 0 && - scram_hmac(scram->evp, &server_key_iov, &auth_message_iov, - &server_sign_iov) == 0) + if (scram_hmac((const EVP_MD *)scram->evp, &salted_pwd_iov, + &server_key_verbatim_iov, &server_key_iov) == 0 && + scram_hmac((const EVP_MD *)scram->evp, &server_key_iov, + &auth_message_iov, &server_sign_iov) == 0) { server_sign_b64 = scram_base64_encode(&server_sign_iov); if (server_sign_b64 && - scram_hmac(scram->evp, &stored_key_iov, &auth_message_iov, - &client_sign_iov) ==0 && + scram_hmac((const EVP_MD *)scram->evp, &stored_key_iov, + &auth_message_iov, &client_sign_iov) ==0 && client_key_iov.iov_len == client_sign_iov.iov_len) { scram->server_signature_b64.iov_base = server_sign_b64; diff --git a/src/protocol/kafka_parser.h b/src/protocol/kafka_parser.h index 52d7ec74..52f9cab4 100644 --- a/src/protocol/kafka_parser.h +++ b/src/protocol/kafka_parser.h @@ -22,9 +22,6 @@ #include #include #include -#include -#include -#include #include "list.h" enum @@ -224,7 +221,7 @@ typedef struct __kafka_parser typedef struct __kafka_scram { - const EVP_MD *evp; + const void *evp; unsigned char *(*scram_h)(const unsigned char *d, size_t n, unsigned char *md); size_t scram_h_size;