#define PTHREAD_MUTEX_UNLOCK(_x)
#endif
+static pthread_mutex_t tls_mutex = PTHREAD_MUTEX_INITIALIZER;
+
+#define TLS_MUTEX tls_mutex
+//#define TLS_MUTEX sock->mutex
+
static void dump_hex(char const *msg, uint8_t const *data, size_t data_len)
{
size_t i;
}
RDEBUG3("(TLS) Reading from socket %d", request->packet->sockfd);
- PTHREAD_MUTEX_LOCK(&sock->mutex);
+ PTHREAD_MUTEX_LOCK(&TLS_MUTEX);
/*
* If there is pending application data, as set up by
do_close:
DEBUG("(TLS) Closing socket from client port %u", sock->other_port);
tls_socket_close(listener);
- PTHREAD_MUTEX_UNLOCK(&sock->mutex);
+ PTHREAD_MUTEX_UNLOCK(&TLS_MUTEX);
return 0;
}
if (sock->ssn->dirty_out.used > 0) {
RDEBUG3("(TLS) Writing to socket %d", listener->fd);
tls_socket_write(listener);
- PTHREAD_MUTEX_UNLOCK(&sock->mutex);
+ PTHREAD_MUTEX_UNLOCK(&TLS_MUTEX);
return 0;
}
* return so this function will be called again
*/
if (!SSL_is_init_finished(sock->ssn->ssl)) {
- PTHREAD_MUTEX_UNLOCK(&sock->mutex);
+ PTHREAD_MUTEX_UNLOCK(&TLS_MUTEX);
return 0;
}
}
request->packet->data[0] = PW_CODE_STATUS_SERVER;
request->packet->data[3] = 20;
sock->state = LISTEN_TLS_CHECKING;
- PTHREAD_MUTEX_UNLOCK(&sock->mutex);
+ PTHREAD_MUTEX_UNLOCK(&TLS_MUTEX);
/*
* Don't read from the socket until the request
RDEBUG3("(TLS) Writing to socket %d", listener->fd);
rcode = tls_socket_write(listener);
if (rcode < 0) {
- PTHREAD_MUTEX_UNLOCK(&sock->mutex);
+ PTHREAD_MUTEX_UNLOCK(&TLS_MUTEX);
return rcode;
}
}
if (status == FR_TLS_FAIL) {
DEBUG("(TLS) Unable to recover from TLS error, closing socket from client port %u", sock->other_port);
tls_socket_close(listener);
- PTHREAD_MUTEX_UNLOCK(&sock->mutex);
+ PTHREAD_MUTEX_UNLOCK(&TLS_MUTEX);
return 0;
}
if (status == FR_TLS_MORE_FRAGMENTS) {
- PTHREAD_MUTEX_UNLOCK(&sock->mutex);
+ PTHREAD_MUTEX_UNLOCK(&TLS_MUTEX);
return 0;
}
if (sock->ssn->clean_out.used == 0) {
- PTHREAD_MUTEX_UNLOCK(&sock->mutex);
+ PTHREAD_MUTEX_UNLOCK(&TLS_MUTEX);
return 0;
}
packet->data_len = sock->ssn->clean_out.used;
sock->ssn->record_minus(&sock->ssn->clean_out, packet->data, packet->data_len);
packet->vps = NULL;
- PTHREAD_MUTEX_UNLOCK(&sock->mutex);
+ PTHREAD_MUTEX_UNLOCK(&TLS_MUTEX);
if (!rad_packet_ok(packet, 0, NULL)) {
if (DEBUG_ENABLED) ERROR("Receive - %s", fr_strerror());
DEBUG("(TLS) Closing TLS socket from client");
- PTHREAD_MUTEX_LOCK(&sock->mutex);
+ PTHREAD_MUTEX_LOCK(&TLS_MUTEX);
tls_socket_close(listener);
- PTHREAD_MUTEX_UNLOCK(&sock->mutex);
+ PTHREAD_MUTEX_UNLOCK(&TLS_MUTEX);
return 0; /* do_close unlocks the mutex */
}
return 0;
}
- PTHREAD_MUTEX_LOCK(&sock->mutex);
+ PTHREAD_MUTEX_LOCK(&TLS_MUTEX);
/*
* Write the packet to the SSL buffers.
RDEBUG3("(TLS) Writing to socket %d", listener->fd);
tls_socket_write(listener);
}
- PTHREAD_MUTEX_UNLOCK(&sock->mutex);
+ PTHREAD_MUTEX_UNLOCK(&TLS_MUTEX);
return 0;
}
request->proxy->data_len, MAX_PACKET_LEN);
}
- PTHREAD_MUTEX_LOCK(&sock->mutex);
+ PTHREAD_MUTEX_LOCK(&TLS_MUTEX);
/*
* Write the packet to the SSL buffers.
RDEBUG3("(TLS) Writing to socket %d", listener->fd);
tls_socket_write(listener);
}
- PTHREAD_MUTEX_UNLOCK(&sock->mutex);
+ PTHREAD_MUTEX_UNLOCK(&TLS_MUTEX);
return 0;
}
rad_assert(sock->ssn != NULL);
DEBUG3("Proxy SSL socket has data to read");
- PTHREAD_MUTEX_LOCK(&sock->mutex);
+ PTHREAD_MUTEX_LOCK(&TLS_MUTEX);
data_len = proxy_tls_read(listener);
- PTHREAD_MUTEX_UNLOCK(&sock->mutex);
+ PTHREAD_MUTEX_UNLOCK(&TLS_MUTEX);
if (data_len < 0) {
DEBUG("Closing TLS socket to home server");
- PTHREAD_MUTEX_LOCK(&sock->mutex);
+ PTHREAD_MUTEX_LOCK(&TLS_MUTEX);
tls_socket_close(listener);
- PTHREAD_MUTEX_UNLOCK(&sock->mutex);
+ PTHREAD_MUTEX_UNLOCK(&TLS_MUTEX);
return 0;
}
rad_assert(sock->ssn != NULL);
if (!sock->ssn->connected) {
- PTHREAD_MUTEX_LOCK(&sock->mutex);
+ PTHREAD_MUTEX_LOCK(&TLS_MUTEX);
rcode = try_connect(sock);
- PTHREAD_MUTEX_UNLOCK(&sock->mutex);
+ PTHREAD_MUTEX_UNLOCK(&TLS_MUTEX);
if (rcode <= 0) {
listener->status = RAD_LISTEN_STATUS_EOL;
radius_update_listener(listener);
DEBUG3("Proxy is writing %u bytes to SSL",
(unsigned int) request->proxy->data_len);
- PTHREAD_MUTEX_LOCK(&sock->mutex);
+ PTHREAD_MUTEX_LOCK(&TLS_MUTEX);
rcode = SSL_write(sock->ssn->ssl, request->proxy->data,
request->proxy->data_len);
if (rcode < 0) {
tls_error_log(NULL, "Failed in proxy send with OpenSSL error %d", err);
DEBUG("Closing TLS socket to home server");
tls_socket_close(listener);
- PTHREAD_MUTEX_UNLOCK(&sock->mutex);
+ PTHREAD_MUTEX_UNLOCK(&TLS_MUTEX);
return 0;
}
}
- PTHREAD_MUTEX_UNLOCK(&sock->mutex);
+ PTHREAD_MUTEX_UNLOCK(&TLS_MUTEX);
return 1;
}
DEBUG3("Proxy is writing %u bytes to SSL",
(unsigned int) request->reply->data_len);
- PTHREAD_MUTEX_LOCK(&sock->mutex);
+ PTHREAD_MUTEX_LOCK(&TLS_MUTEX);
rcode = SSL_write(sock->ssn->ssl, request->reply->data,
request->reply->data_len);
if (rcode < 0) {
tls_error_log(NULL, "Failed in proxy send with OpenSSL error %d", err);
DEBUG("Closing TLS socket to home server");
tls_socket_close(listener);
- PTHREAD_MUTEX_UNLOCK(&sock->mutex);
+ PTHREAD_MUTEX_UNLOCK(&TLS_MUTEX);
return 0;
}
}
- PTHREAD_MUTEX_UNLOCK(&sock->mutex);
+ PTHREAD_MUTEX_UNLOCK(&TLS_MUTEX);
return 1;
}