issl support, thanks xcko shrdlu! - irc - Unnamed repository; edit this file 'description' to name the repository. Err vernunftzentrum.de 70 hgit clone git://vernunftzentrum.de/irc.git URL:git://vernunftzentrum.de/irc.git vernunftzentrum.de 70 1Log /ckeen/repos/irc/log.gph vernunftzentrum.de 70 1Files /ckeen/repos/irc/files.gph vernunftzentrum.de 70 1Refs /ckeen/repos/irc/refs.gph vernunftzentrum.de 70 1README /ckeen/repos/irc/file/README.gph vernunftzentrum.de 70 i--- Err vernunftzentrum.de 70 1commit 21c47bf2c7498d9fdabbcfe886d6f549b858ae9b /ckeen/repos/irc/commit/21c47bf2c7498d9fdabbcfe886d6f549b858ae9b.gph vernunftzentrum.de 70 1parent 0cfe3fad8f593bcf11d495d90f158afd567b1984 /ckeen/repos/irc/commit/0cfe3fad8f593bcf11d495d90f158afd567b1984.gph vernunftzentrum.de 70 hAuthor: Quentin Carbonneaux URL:mailto:quentin.carbonneaux@yale.edu vernunftzentrum.de 70 iDate: Wed, 18 Jan 2017 17:39:31 -0500 Err vernunftzentrum.de 70 i Err vernunftzentrum.de 70 issl support, thanks xcko shrdlu! Err vernunftzentrum.de 70 i Err vernunftzentrum.de 70 iDiffstat: Err vernunftzentrum.de 70 i Makefile | 2 +- Err vernunftzentrum.de 70 i irc.c | 57 +++++++++++++++++++++++-------- Err vernunftzentrum.de 70 i Err vernunftzentrum.de 70 i2 files changed, 44 insertions(+), 15 deletions(-) Err vernunftzentrum.de 70 i--- Err vernunftzentrum.de 70 1diff --git a/Makefile b/Makefile /ckeen/repos/irc/file/Makefile.gph vernunftzentrum.de 70 i@@ -1,7 +1,7 @@ Err vernunftzentrum.de 70 i BIN = irc Err vernunftzentrum.de 70 i Err vernunftzentrum.de 70 i CFLAGS = -std=c99 -Os -D_POSIX_C_SOURCE=201112 -D_GNU_SOURCE -D_XOPEN_CURSES -D_XOPEN_SOURCE_EXTENDED=1 -D_DEFAULT_SOURCE Err vernunftzentrum.de 70 i-LDFLAGS = -lncursesw Err vernunftzentrum.de 70 i+LDFLAGS = -lncursesw -lssl -lcrypto Err vernunftzentrum.de 70 i Err vernunftzentrum.de 70 i all: ${BIN} Err vernunftzentrum.de 70 i Err vernunftzentrum.de 70 1diff --git a/irc.c b/irc.c /ckeen/repos/irc/file/irc.c.gph vernunftzentrum.de 70 i@@ -20,6 +20,7 @@ Err vernunftzentrum.de 70 i #include Err vernunftzentrum.de 70 i #include Err vernunftzentrum.de 70 i #include Err vernunftzentrum.de 70 i+#include Err vernunftzentrum.de 70 i Err vernunftzentrum.de 70 i #undef CTRL Err vernunftzentrum.de 70 i #define CTRL(x) (x & 037) Err vernunftzentrum.de 70 i@@ -59,9 +60,14 @@ static struct Chan { Err vernunftzentrum.de 70 i char new; /* New message. */ Err vernunftzentrum.de 70 i } chl[MaxChans]; Err vernunftzentrum.de 70 i Err vernunftzentrum.de 70 i+static int ssl; Err vernunftzentrum.de 70 i+static struct { Err vernunftzentrum.de 70 i+ int fd; Err vernunftzentrum.de 70 i+ SSL *ssl; Err vernunftzentrum.de 70 i+ SSL_CTX *ctx; Err vernunftzentrum.de 70 i+} srv; Err vernunftzentrum.de 70 i static char nick[64]; Err vernunftzentrum.de 70 i static int quit, winchg; Err vernunftzentrum.de 70 i-static int sfd; /* Server file descriptor. */ Err vernunftzentrum.de 70 i static int nch, ch; /* Current number of channels, and current channel. */ Err vernunftzentrum.de 70 i static char outb[BufSz], *outp = outb; /* Output buffer. */ Err vernunftzentrum.de 70 i static FILE *logfp; Err vernunftzentrum.de 70 i@@ -174,7 +180,10 @@ srd(void) Err vernunftzentrum.de 70 i Err vernunftzentrum.de 70 i if (p - l >= BufSz) Err vernunftzentrum.de 70 i p = l; /* Input buffer overflow, there should something better to do. */ Err vernunftzentrum.de 70 i- rd = read(sfd, p, BufSz - (p - l)); Err vernunftzentrum.de 70 i+ if (ssl) Err vernunftzentrum.de 70 i+ rd = SSL_read(srv.ssl, p, BufSz - (p - l)); Err vernunftzentrum.de 70 i+ else Err vernunftzentrum.de 70 i+ rd = read(srv.fd, p, BufSz - (p - l)); Err vernunftzentrum.de 70 i if (rd < 0) { Err vernunftzentrum.de 70 i if (errno == EINTR) Err vernunftzentrum.de 70 i return 1; Err vernunftzentrum.de 70 i@@ -210,7 +219,7 @@ srd(void) Err vernunftzentrum.de 70 i } Err vernunftzentrum.de 70 i } Err vernunftzentrum.de 70 i Err vernunftzentrum.de 70 i-static int Err vernunftzentrum.de 70 i+static void Err vernunftzentrum.de 70 i dial(const char *host, const char *service) Err vernunftzentrum.de 70 i { Err vernunftzentrum.de 70 i struct addrinfo hints, *res = NULL, *rp; Err vernunftzentrum.de 70 i@@ -233,8 +242,19 @@ dial(const char *host, const char *service) Err vernunftzentrum.de 70 i } Err vernunftzentrum.de 70 i if (fd == -1) Err vernunftzentrum.de 70 i panic("Cannot connect to host."); Err vernunftzentrum.de 70 i+ srv.fd = fd; Err vernunftzentrum.de 70 i+ if (ssl) { Err vernunftzentrum.de 70 i+ SSL_load_error_strings(); Err vernunftzentrum.de 70 i+ SSL_library_init(); Err vernunftzentrum.de 70 i+ srv.ctx = SSL_CTX_new(SSLv23_client_method()); Err vernunftzentrum.de 70 i+ if (!srv.ctx) Err vernunftzentrum.de 70 i+ panic("Could not initialize ssl context."); Err vernunftzentrum.de 70 i+ srv.ssl = SSL_new(srv.ctx); Err vernunftzentrum.de 70 i+ if (SSL_set_fd(srv.ssl, srv.fd) == 0 Err vernunftzentrum.de 70 i+ || SSL_connect(srv.ssl) != 1) Err vernunftzentrum.de 70 i+ panic("Could not connect with ssl."); Err vernunftzentrum.de 70 i+ } Err vernunftzentrum.de 70 i freeaddrinfo(res); Err vernunftzentrum.de 70 i- return fd; Err vernunftzentrum.de 70 i } Err vernunftzentrum.de 70 i Err vernunftzentrum.de 70 i static int Err vernunftzentrum.de 70 i@@ -761,12 +781,12 @@ main(int argc, char *argv[]) Err vernunftzentrum.de 70 i const char *port = PORT; Err vernunftzentrum.de 70 i int o; Err vernunftzentrum.de 70 i Err vernunftzentrum.de 70 i- while ((o = getopt(argc, argv, "hk:n:u:s:p:l:")) >= 0) Err vernunftzentrum.de 70 i+ while ((o = getopt(argc, argv, "thk:n:u:s:p:l:")) >= 0) Err vernunftzentrum.de 70 i switch (o) { Err vernunftzentrum.de 70 i case 'h': Err vernunftzentrum.de 70 i case '?': Err vernunftzentrum.de 70 i usage: Err vernunftzentrum.de 70 i- fputs("usage: irc [-n NICK] [-u USER] [-s SERVER] [-p PORT] [-l LOGFILE ] [-h]\n", stderr); Err vernunftzentrum.de 70 i+ fputs("usage: irc [-n NICK] [-u USER] [-s SERVER] [-p PORT] [-l LOGFILE ] [-t] [-h]\n", stderr); Err vernunftzentrum.de 70 i exit(0); Err vernunftzentrum.de 70 i case 'l': Err vernunftzentrum.de 70 i if (!(logfp = fopen(optarg, "a"))) Err vernunftzentrum.de 70 i@@ -777,6 +797,9 @@ main(int argc, char *argv[]) Err vernunftzentrum.de 70 i goto usage; Err vernunftzentrum.de 70 i strcpy(nick, optarg); Err vernunftzentrum.de 70 i break; Err vernunftzentrum.de 70 i+ case 't': Err vernunftzentrum.de 70 i+ ssl = 1; Err vernunftzentrum.de 70 i+ break; Err vernunftzentrum.de 70 i case 'u': Err vernunftzentrum.de 70 i user = optarg; Err vernunftzentrum.de 70 i break; Err vernunftzentrum.de 70 i@@ -794,7 +817,7 @@ main(int argc, char *argv[]) Err vernunftzentrum.de 70 i if (!user) Err vernunftzentrum.de 70 i user = "anonymous"; Err vernunftzentrum.de 70 i tinit(); Err vernunftzentrum.de 70 i- sfd = dial(server, port); Err vernunftzentrum.de 70 i+ dial(server, port); Err vernunftzentrum.de 70 i chadd("*server*", 1); Err vernunftzentrum.de 70 i if (key) Err vernunftzentrum.de 70 i sndf("PASS %s", key); Err vernunftzentrum.de 70 i@@ -811,23 +834,26 @@ main(int argc, char *argv[]) Err vernunftzentrum.de 70 i FD_ZERO(&wfs); Err vernunftzentrum.de 70 i FD_ZERO(&rfs); Err vernunftzentrum.de 70 i FD_SET(0, &rfs); Err vernunftzentrum.de 70 i- FD_SET(sfd, &rfs); Err vernunftzentrum.de 70 i+ FD_SET(srv.fd, &rfs); Err vernunftzentrum.de 70 i if (outp != outb) Err vernunftzentrum.de 70 i- FD_SET(sfd, &wfs); Err vernunftzentrum.de 70 i- ret = select(sfd + 1, &rfs, &wfs, 0, 0); Err vernunftzentrum.de 70 i+ FD_SET(srv.fd, &wfs); Err vernunftzentrum.de 70 i+ ret = select(srv.fd + 1, &rfs, &wfs, 0, 0); Err vernunftzentrum.de 70 i if (ret < 0) { Err vernunftzentrum.de 70 i if (errno == EINTR) Err vernunftzentrum.de 70 i continue; Err vernunftzentrum.de 70 i panic("Select failed."); Err vernunftzentrum.de 70 i } Err vernunftzentrum.de 70 i- if (FD_ISSET(sfd, &rfs)) { Err vernunftzentrum.de 70 i+ if (FD_ISSET(srv.fd, &rfs)) { Err vernunftzentrum.de 70 i if (!srd()) Err vernunftzentrum.de 70 i quit = 1; Err vernunftzentrum.de 70 i } Err vernunftzentrum.de 70 i- if (FD_ISSET(sfd, &wfs)) { Err vernunftzentrum.de 70 i+ if (FD_ISSET(srv.fd, &wfs)) { Err vernunftzentrum.de 70 i int wr; Err vernunftzentrum.de 70 i Err vernunftzentrum.de 70 i- wr = write(sfd, outb, outp - outb); Err vernunftzentrum.de 70 i+ if (ssl) Err vernunftzentrum.de 70 i+ wr = SSL_write(srv.ssl, outb, outp - outb); Err vernunftzentrum.de 70 i+ else Err vernunftzentrum.de 70 i+ wr = write(srv.fd, outb, outp - outb); Err vernunftzentrum.de 70 i if (wr < 0) { Err vernunftzentrum.de 70 i if (errno == EINTR) Err vernunftzentrum.de 70 i continue; Err vernunftzentrum.de 70 i@@ -843,7 +869,10 @@ main(int argc, char *argv[]) Err vernunftzentrum.de 70 i wrefresh(scr.iw); Err vernunftzentrum.de 70 i } Err vernunftzentrum.de 70 i } Err vernunftzentrum.de 70 i- close(sfd); Err vernunftzentrum.de 70 i+ SSL_shutdown(srv.ssl); Err vernunftzentrum.de 70 i+ SSL_free(srv.ssl); Err vernunftzentrum.de 70 i+ close(srv.fd); Err vernunftzentrum.de 70 i+ SSL_CTX_free(srv.ctx); Err vernunftzentrum.de 70 i while (nch--) Err vernunftzentrum.de 70 i free(chl[nch].buf); Err vernunftzentrum.de 70 i treset(); Err vernunftzentrum.de 70 .