mirror of
https://github.com/asterisk/asterisk.git
synced 2025-10-12 15:45:18 +00:00
Rename a number of tcptls_session variables. There are no functional changes here.
The name "ser" was used in a lot of places. However, it is a relic from when the struct was a server_instance, not a session_instance. It was renamed since it represents both a server or client connection. git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@163670 65c4cc65-6c06-0410-ace0-fbb531ad65f3
This commit is contained in:
122
main/tcptls.c
122
main/tcptls.c
@@ -82,34 +82,34 @@ static int ssl_close(void *cookie)
|
||||
}
|
||||
#endif /* DO_SSL */
|
||||
|
||||
HOOK_T ast_tcptls_server_read(struct ast_tcptls_session_instance *ser, void *buf, size_t count)
|
||||
HOOK_T ast_tcptls_server_read(struct ast_tcptls_session_instance *tcptls_session, void *buf, size_t count)
|
||||
{
|
||||
if (ser->fd == -1) {
|
||||
if (tcptls_session->fd == -1) {
|
||||
ast_log(LOG_ERROR, "server_read called with an fd of -1\n");
|
||||
errno = EIO;
|
||||
return -1;
|
||||
}
|
||||
|
||||
#ifdef DO_SSL
|
||||
if (ser->ssl)
|
||||
return ssl_read(ser->ssl, buf, count);
|
||||
if (tcptls_session->ssl)
|
||||
return ssl_read(tcptls_session->ssl, buf, count);
|
||||
#endif
|
||||
return read(ser->fd, buf, count);
|
||||
return read(tcptls_session->fd, buf, count);
|
||||
}
|
||||
|
||||
HOOK_T ast_tcptls_server_write(struct ast_tcptls_session_instance *ser, void *buf, size_t count)
|
||||
HOOK_T ast_tcptls_server_write(struct ast_tcptls_session_instance *tcptls_session, void *buf, size_t count)
|
||||
{
|
||||
if (ser->fd == -1) {
|
||||
if (tcptls_session->fd == -1) {
|
||||
ast_log(LOG_ERROR, "server_write called with an fd of -1\n");
|
||||
errno = EIO;
|
||||
return -1;
|
||||
}
|
||||
|
||||
#ifdef DO_SSL
|
||||
if (ser->ssl)
|
||||
return ssl_write(ser->ssl, buf, count);
|
||||
if (tcptls_session->ssl)
|
||||
return ssl_write(tcptls_session->ssl, buf, count);
|
||||
#endif
|
||||
return write(ser->fd, buf, count);
|
||||
return write(tcptls_session->fd, buf, count);
|
||||
}
|
||||
|
||||
static void session_instance_destructor(void *obj)
|
||||
@@ -125,9 +125,9 @@ static void session_instance_destructor(void *obj)
|
||||
*/
|
||||
static void *handle_tls_connection(void *data)
|
||||
{
|
||||
struct ast_tcptls_session_instance *ser = data;
|
||||
struct ast_tcptls_session_instance *tcptls_session = data;
|
||||
#ifdef DO_SSL
|
||||
int (*ssl_setup)(SSL *) = (ser->client) ? SSL_connect : SSL_accept;
|
||||
int (*ssl_setup)(SSL *) = (tcptls_session->client) ? SSL_connect : SSL_accept;
|
||||
int ret;
|
||||
char err[256];
|
||||
#endif
|
||||
@@ -135,37 +135,37 @@ static void *handle_tls_connection(void *data)
|
||||
/*
|
||||
* open a FILE * as appropriate.
|
||||
*/
|
||||
if (!ser->parent->tls_cfg)
|
||||
ser->f = fdopen(ser->fd, "w+");
|
||||
if (!tcptls_session->parent->tls_cfg)
|
||||
tcptls_session->f = fdopen(tcptls_session->fd, "w+");
|
||||
#ifdef DO_SSL
|
||||
else if ( (ser->ssl = SSL_new(ser->parent->tls_cfg->ssl_ctx)) ) {
|
||||
SSL_set_fd(ser->ssl, ser->fd);
|
||||
if ((ret = ssl_setup(ser->ssl)) <= 0) {
|
||||
else if ( (tcptls_session->ssl = SSL_new(tcptls_session->parent->tls_cfg->ssl_ctx)) ) {
|
||||
SSL_set_fd(tcptls_session->ssl, tcptls_session->fd);
|
||||
if ((ret = ssl_setup(tcptls_session->ssl)) <= 0) {
|
||||
ast_verb(2, "Problem setting up ssl connection: %s\n", ERR_error_string(ERR_get_error(), err));
|
||||
} else {
|
||||
#if defined(HAVE_FUNOPEN) /* the BSD interface */
|
||||
ser->f = funopen(ser->ssl, ssl_read, ssl_write, NULL, ssl_close);
|
||||
tcptls_session->f = funopen(tcptls_session->ssl, ssl_read, ssl_write, NULL, ssl_close);
|
||||
|
||||
#elif defined(HAVE_FOPENCOOKIE) /* the glibc/linux interface */
|
||||
static const cookie_io_functions_t cookie_funcs = {
|
||||
ssl_read, ssl_write, NULL, ssl_close
|
||||
};
|
||||
ser->f = fopencookie(ser->ssl, "w+", cookie_funcs);
|
||||
tcptls_session->f = fopencookie(tcptls_session->ssl, "w+", cookie_funcs);
|
||||
#else
|
||||
/* could add other methods here */
|
||||
ast_debug(2, "no ser->f methods attempted!");
|
||||
ast_debug(2, "no tcptls_session->f methods attempted!");
|
||||
#endif
|
||||
if ((ser->client && !ast_test_flag(&ser->parent->tls_cfg->flags, AST_SSL_DONT_VERIFY_SERVER))
|
||||
|| (!ser->client && ast_test_flag(&ser->parent->tls_cfg->flags, AST_SSL_VERIFY_CLIENT))) {
|
||||
if ((tcptls_session->client && !ast_test_flag(&tcptls_session->parent->tls_cfg->flags, AST_SSL_DONT_VERIFY_SERVER))
|
||||
|| (!tcptls_session->client && ast_test_flag(&tcptls_session->parent->tls_cfg->flags, AST_SSL_VERIFY_CLIENT))) {
|
||||
X509 *peer;
|
||||
long res;
|
||||
peer = SSL_get_peer_certificate(ser->ssl);
|
||||
peer = SSL_get_peer_certificate(tcptls_session->ssl);
|
||||
if (!peer)
|
||||
ast_log(LOG_WARNING, "No peer SSL certificate\n");
|
||||
res = SSL_get_verify_result(ser->ssl);
|
||||
res = SSL_get_verify_result(tcptls_session->ssl);
|
||||
if (res != X509_V_OK)
|
||||
ast_log(LOG_ERROR, "Certificate did not verify: %s\n", X509_verify_cert_error_string(res));
|
||||
if (!ast_test_flag(&ser->parent->tls_cfg->flags, AST_SSL_IGNORE_COMMON_NAME)) {
|
||||
if (!ast_test_flag(&tcptls_session->parent->tls_cfg->flags, AST_SSL_IGNORE_COMMON_NAME)) {
|
||||
ASN1_STRING *str;
|
||||
unsigned char *str2;
|
||||
X509_NAME *name = X509_get_subject_name(peer);
|
||||
@@ -181,19 +181,19 @@ static void *handle_tls_connection(void *data)
|
||||
str = X509_NAME_ENTRY_get_data(X509_NAME_get_entry(name, pos));
|
||||
ASN1_STRING_to_UTF8(&str2, str);
|
||||
if (str2) {
|
||||
if (!strcasecmp(ser->parent->hostname, (char *) str2))
|
||||
if (!strcasecmp(tcptls_session->parent->hostname, (char *) str2))
|
||||
found = 1;
|
||||
ast_debug(3, "SSL Common Name compare s1='%s' s2='%s'\n", ser->parent->hostname, str2);
|
||||
ast_debug(3, "SSL Common Name compare s1='%s' s2='%s'\n", tcptls_session->parent->hostname, str2);
|
||||
OPENSSL_free(str2);
|
||||
}
|
||||
if (found)
|
||||
break;
|
||||
}
|
||||
if (!found) {
|
||||
ast_log(LOG_ERROR, "Certificate common name did not match (%s)\n", ser->parent->hostname);
|
||||
ast_log(LOG_ERROR, "Certificate common name did not match (%s)\n", tcptls_session->parent->hostname);
|
||||
if (peer)
|
||||
X509_free(peer);
|
||||
fclose(ser->f);
|
||||
fclose(tcptls_session->f);
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
@@ -201,22 +201,22 @@ static void *handle_tls_connection(void *data)
|
||||
X509_free(peer);
|
||||
}
|
||||
}
|
||||
if (!ser->f) /* no success opening descriptor stacking */
|
||||
SSL_free(ser->ssl);
|
||||
if (!tcptls_session->f) /* no success opening descriptor stacking */
|
||||
SSL_free(tcptls_session->ssl);
|
||||
}
|
||||
#endif /* DO_SSL */
|
||||
|
||||
if (!ser->f) {
|
||||
close(ser->fd);
|
||||
if (!tcptls_session->f) {
|
||||
close(tcptls_session->fd);
|
||||
ast_log(LOG_WARNING, "FILE * open failed!\n");
|
||||
ao2_ref(ser, -1);
|
||||
ao2_ref(tcptls_session, -1);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
if (ser && ser->parent->worker_fn)
|
||||
return ser->parent->worker_fn(ser);
|
||||
if (tcptls_session && tcptls_session->parent->worker_fn)
|
||||
return tcptls_session->parent->worker_fn(tcptls_session);
|
||||
else
|
||||
return ser;
|
||||
return tcptls_session;
|
||||
}
|
||||
|
||||
void *ast_tcptls_server_root(void *data)
|
||||
@@ -225,7 +225,7 @@ void *ast_tcptls_server_root(void *data)
|
||||
int fd;
|
||||
struct sockaddr_in sin;
|
||||
socklen_t sinlen;
|
||||
struct ast_tcptls_session_instance *ser;
|
||||
struct ast_tcptls_session_instance *tcptls_session;
|
||||
pthread_t launched;
|
||||
|
||||
for (;;) {
|
||||
@@ -243,27 +243,27 @@ void *ast_tcptls_server_root(void *data)
|
||||
ast_log(LOG_WARNING, "Accept failed: %s\n", strerror(errno));
|
||||
continue;
|
||||
}
|
||||
ser = ao2_alloc(sizeof(*ser), session_instance_destructor);
|
||||
if (!ser) {
|
||||
tcptls_session = ao2_alloc(sizeof(*tcptls_session), session_instance_destructor);
|
||||
if (!tcptls_session) {
|
||||
ast_log(LOG_WARNING, "No memory for new session: %s\n", strerror(errno));
|
||||
close(fd);
|
||||
continue;
|
||||
}
|
||||
|
||||
ast_mutex_init(&ser->lock);
|
||||
ast_mutex_init(&tcptls_session->lock);
|
||||
|
||||
flags = fcntl(fd, F_GETFL);
|
||||
fcntl(fd, F_SETFL, flags & ~O_NONBLOCK);
|
||||
ser->fd = fd;
|
||||
ser->parent = desc;
|
||||
memcpy(&ser->remote_address, &sin, sizeof(ser->remote_address));
|
||||
tcptls_session->fd = fd;
|
||||
tcptls_session->parent = desc;
|
||||
memcpy(&tcptls_session->remote_address, &sin, sizeof(tcptls_session->remote_address));
|
||||
|
||||
ser->client = 0;
|
||||
tcptls_session->client = 0;
|
||||
|
||||
if (ast_pthread_create_detached_background(&launched, NULL, handle_tls_connection, ser)) {
|
||||
if (ast_pthread_create_detached_background(&launched, NULL, handle_tls_connection, tcptls_session)) {
|
||||
ast_log(LOG_WARNING, "Unable to launch helper thread: %s\n", strerror(errno));
|
||||
close(ser->fd);
|
||||
ao2_ref(ser, -1);
|
||||
close(tcptls_session->fd);
|
||||
ao2_ref(tcptls_session, -1);
|
||||
}
|
||||
}
|
||||
return NULL;
|
||||
@@ -331,7 +331,7 @@ struct ast_tcptls_session_instance *ast_tcptls_client_start(struct ast_tcptls_se
|
||||
{
|
||||
int flags;
|
||||
int x = 1;
|
||||
struct ast_tcptls_session_instance *ser = NULL;
|
||||
struct ast_tcptls_session_instance *tcptls_session = NULL;
|
||||
|
||||
/* Do nothing if nothing has changed */
|
||||
if(!memcmp(&desc->old_local_address, &desc->local_address, sizeof(desc->old_local_address))) {
|
||||
@@ -372,37 +372,37 @@ struct ast_tcptls_session_instance *ast_tcptls_client_start(struct ast_tcptls_se
|
||||
goto error;
|
||||
}
|
||||
|
||||
if (!(ser = ao2_alloc(sizeof(*ser), session_instance_destructor)))
|
||||
if (!(tcptls_session = ao2_alloc(sizeof(*tcptls_session), session_instance_destructor)))
|
||||
goto error;
|
||||
|
||||
ast_mutex_init(&ser->lock);
|
||||
ast_mutex_init(&tcptls_session->lock);
|
||||
|
||||
flags = fcntl(desc->accept_fd, F_GETFL);
|
||||
fcntl(desc->accept_fd, F_SETFL, flags & ~O_NONBLOCK);
|
||||
|
||||
ser->fd = desc->accept_fd;
|
||||
ser->parent = desc;
|
||||
ser->parent->worker_fn = NULL;
|
||||
memcpy(&ser->remote_address, &desc->local_address, sizeof(ser->remote_address));
|
||||
tcptls_session->fd = desc->accept_fd;
|
||||
tcptls_session->parent = desc;
|
||||
tcptls_session->parent->worker_fn = NULL;
|
||||
memcpy(&tcptls_session->remote_address, &desc->local_address, sizeof(tcptls_session->remote_address));
|
||||
|
||||
ser->client = 1;
|
||||
tcptls_session->client = 1;
|
||||
|
||||
if (desc->tls_cfg) {
|
||||
desc->tls_cfg->enabled = 1;
|
||||
__ssl_setup(desc->tls_cfg, 1);
|
||||
}
|
||||
|
||||
ao2_ref(ser, +1);
|
||||
if (!handle_tls_connection(ser))
|
||||
ao2_ref(tcptls_session, +1);
|
||||
if (!handle_tls_connection(tcptls_session))
|
||||
goto error;
|
||||
|
||||
return ser;
|
||||
return tcptls_session;
|
||||
|
||||
error:
|
||||
close(desc->accept_fd);
|
||||
desc->accept_fd = -1;
|
||||
if (ser)
|
||||
ao2_ref(ser, -1);
|
||||
if (tcptls_session)
|
||||
ao2_ref(tcptls_session, -1);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user