Skip to content

Commit

Permalink
outbound: OpenSSL 3.x thread-local, init libssl in thread
Browse files Browse the repository at this point in the history
  • Loading branch information
space88man committed Jan 4, 2024
1 parent e49a60e commit 4742c81
Showing 1 changed file with 25 additions and 12 deletions.
37 changes: 25 additions & 12 deletions src/modules/outbound/outbound_mod.c
Original file line number Diff line number Diff line change
Expand Up @@ -75,6 +75,23 @@ struct module_exports exports = {
destroy /* destroy function */
};

static void *mod_init_openssl(void *) {
if(flow_token_secret.s) {
assert(ob_key.len == SHA_DIGEST_LENGTH);
LM_DBG("flow_token_secret mod param set. use persistent ob_key");
SHA1((const unsigned char *)flow_token_secret.s, flow_token_secret.len,
(unsigned char *)ob_key.s);
} else {
if(RAND_bytes((unsigned char *)ob_key.s, ob_key.len) == 0) {
LM_ERR("unable to get %d cryptographically strong pseudo-"
"random bytes\n",
ob_key.len);
}
}

return NULL;
}

static int mod_init(void)
{
if(ob_force_flag != -1 && !flag_in_range(ob_force_flag)) {
Expand All @@ -93,18 +110,14 @@ static int mod_init(void)
}
ob_key.len = OB_KEY_LEN;

if(flow_token_secret.s) {
assert(ob_key.len == SHA_DIGEST_LENGTH);
LM_DBG("flow_token_secret mod param set. use persistent ob_key");
SHA1((const unsigned char *)flow_token_secret.s, flow_token_secret.len,
(unsigned char *)ob_key.s);
} else {
if(RAND_bytes((unsigned char *)ob_key.s, ob_key.len) == 0) {
LM_ERR("unable to get %d cryptographically strong pseudo-"
"random bytes\n",
ob_key.len);
}
}
#if OPENSSL_VERSION_NUMBER < 0x030000000L
mod_init_openssl(NULL);
#else
pthread_t tid;
void *retval;
pthread_create(&tid, NULL, mod_init_openssl, NULL);
pthread_join(tid, &retval);
#endif

if(cfg_declare("outbound", outbound_cfg_def, &default_outbound_cfg,
cfg_sizeof(outbound), &outbound_cfg)) {
Expand Down

0 comments on commit 4742c81

Please sign in to comment.