aboutsummaryrefslogtreecommitdiff
path: root/tls.c
diff options
context:
space:
mode:
authorTest_User <hax@andrewyu.org>2024-06-07 22:09:06 -0400
committerTest_User <hax@andrewyu.org>2024-06-07 22:09:06 -0400
commit5c9c4339ac97ffb9c66d9f3dd3a8285badd24d71 (patch)
tree59ff5a5bf712e8fc02717cdb4e1d597497cc38e5 /tls.c
parent92d08e2442d0230ac096b6484d32f6ec75a8a622 (diff)
downloadcoupserv-5c9c4339ac97ffb9c66d9f3dd3a8285badd24d71.tar.gz
coupserv-5c9c4339ac97ffb9c66d9f3dd3a8285badd24d71.zip
(Optional) Client certificate support, fix main to exit if init client or server network fails
Diffstat (limited to '')
-rw-r--r--tls.c17
1 files changed, 10 insertions, 7 deletions
diff --git a/tls.c b/tls.c
index 167f530..d526812 100644
--- a/tls.c
+++ b/tls.c
@@ -52,28 +52,31 @@ int connect_tls(void) {
if (gnutls_certificate_set_x509_system_trust(xcred) < 0)
return 3;
- if (gnutls_init(&session, GNUTLS_CLIENT) < 0)
+ if (tls_cert_path && tls_key_path && gnutls_certificate_set_x509_key_file(xcred, tls_cert_path, tls_key_path, GNUTLS_X509_FMT_PEM) < 0)
return 4;
- if (gnutls_server_name_set(session, GNUTLS_NAME_DNS, address.data, address.len) < 0)
+ if (gnutls_init(&session, GNUTLS_CLIENT) < 0)
return 5;
- if (gnutls_set_default_priority(session) < 0)
+ if (gnutls_server_name_set(session, GNUTLS_NAME_DNS, address.data, address.len) < 0)
return 6;
- if (gnutls_credentials_set(session, GNUTLS_CRD_CERTIFICATE, xcred) < 0)
+ if (gnutls_set_default_priority(session) < 0)
return 7;
+
+ if (gnutls_credentials_set(session, GNUTLS_CRD_CERTIFICATE, xcred) < 0)
+ return 8;
gnutls_session_set_verify_cert(session, address.data, 0);
fd = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if (fd == -1)
- return 8;
+ return 9;
struct sockaddr sockaddr;
resolve(address.data, port.data, &sockaddr);
int ret = connect(fd, &sockaddr, sizeof(sockaddr));
if (ret != 0)
- return 9;
+ return 10;
gnutls_transport_set_int(session, fd);
gnutls_handshake_set_timeout(session, GNUTLS_DEFAULT_HANDSHAKE_TIMEOUT);
@@ -82,7 +85,7 @@ int connect_tls(void) {
ret = gnutls_handshake(session);
} while (ret < 0 && gnutls_error_is_fatal(ret) == 0);
if (ret < 0)
- return 10;
+ return 11;
gnutls_record_set_timeout(session, 60000); // 60s