mirror of
https://github.com/sogou/workflow.git
synced 2026-10-25 09:00:07 +08:00
update sasl for scram
This commit is contained in:
@@ -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)
|
||||
{
|
||||
|
||||
@@ -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<struct iovec> 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;
|
||||
}
|
||||
|
||||
@@ -17,6 +17,8 @@
|
||||
*/
|
||||
|
||||
#include <openssl/sha.h>
|
||||
#include <openssl/hmac.h>
|
||||
#include <openssl/evp.h>
|
||||
#include <arpa/inet.h>
|
||||
#include <string.h>
|
||||
#include <stdlib.h>
|
||||
@@ -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;
|
||||
|
||||
@@ -22,9 +22,6 @@
|
||||
#include <arpa/inet.h>
|
||||
#include <stddef.h>
|
||||
#include <stdint.h>
|
||||
#include <openssl/hmac.h>
|
||||
#include <openssl/evp.h>
|
||||
#include <openssl/sha.h>
|
||||
#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;
|
||||
|
||||
Reference in New Issue
Block a user