summary refs log tree commit diff
diff options
context:
space:
mode:
authorNoah Pederson2019-12-28 14:25:43 -0500
committerC. McEnroe2019-12-28 14:42:28 -0500
commit34ef6ee5a76cac3408fd03a14c3d97ffdc0b7305 (patch)
tree2fee7a2f41754e5b926be935b699003fb7111d48
parent2e61779082e70848fb34c04f7f5df77e500bd7e0 (diff)
Adds insecure flag to skip certificate validation
Usage:

    catgirl -! -h ...
-rw-r--r--chat.c3
-rw-r--r--chat.h1
-rw-r--r--irc.c5
3 files changed, 7 insertions, 2 deletions
diff --git a/chat.c b/chat.c
index b3e4b58..3a1cfe9 100644
--- a/chat.c
+++ b/chat.c
@@ -53,8 +53,9 @@ int main(int argc, char *argv[]) {
 	setlocale(LC_CTYPE, "");
 
 	int opt;
-	while (0 < (opt = getopt(argc, argv, "NPRa:h:j:k:l:n:p:r:u:vw:"))) {
+	while (0 < (opt = getopt(argc, argv, "!NPRa:h:j:k:l:n:p:r:u:vw:"))) {
 		switch (opt) {
+			break; case '!': self.insecure = true;
 			break; case 'N': self.notify = true;
 			break; case 'P': self.nick = prompt("Name: ");
 			break; case 'R': self.limit = true;
diff --git a/chat.h b/chat.h
index ee7a087..01bab21 100644
--- a/chat.h
+++ b/chat.h
@@ -34,6 +34,7 @@ typedef unsigned uint;
 typedef unsigned char byte;
 
 struct {
+	bool insecure;
 	char *host;
 	char *port;
 	char *auth;
diff --git a/irc.c b/irc.c
index 66ffddb..56a5dc0 100644
--- a/irc.c
+++ b/irc.c
@@ -42,6 +42,10 @@ int ircConnect(void) {
 	if (!client) errx(EX_SOFTWARE, "tls_client");
 
 	error = tls_configure(client, config);
+	if (self.insecure) {
+		tls_config_insecure_noverifycert(config);
+		tls_config_insecure_noverifyname(config);
+	}
 	if (error) errx(EX_SOFTWARE, "tls_configure: %s", tls_error(client));
 	tls_config_free(config);
 
@@ -58,7 +62,6 @@ int ircConnect(void) {
 	for (struct addrinfo *ai = head; ai; ai = ai->ai_next) {
 		sock = socket(ai->ai_family, ai->ai_socktype, ai->ai_protocol);
 		if (sock < 0) err(EX_OSERR, "socket");
-
 		error = connect(sock, ai->ai_addr, ai->ai_addrlen);
 		if (!error) break;