From b43ce38c2c19d0c3245bcbefd797c7ee9c050d26 Mon Sep 17 00:00:00 2001 From: Michael Czigler <37268479+mcpcpc@users.noreply.github.com> Date: Mon, 28 Sep 2020 08:34:00 -0400 Subject: add SASL EXTERNAL support --- kirc.c | 21 +++++++++------------ 1 file changed, 9 insertions(+), 12 deletions(-) (limited to 'kirc.c') diff --git a/kirc.c b/kirc.c index abcd530..b51c971 100644 --- a/kirc.c +++ b/kirc.c @@ -19,6 +19,7 @@ static int conn; /* connection socket */ static char chan_default[MSG_MAX]; /* default channel for PRIVMSG */ static int verb = 0; /* verbose output (e.g. raw stream) */ +static int sasl = 0; /* SASL method (PLAIN=0, EXTERNAL=1) */ static size_t cmax = 80; /* max number of chars per line */ static size_t gutl = 20; /* max char width of left column */ static char * host = "irc.freenode.org"; /* irc host address */ @@ -144,11 +145,6 @@ raw_parser(char *string) { return; } - if (!strncmp(string, "AUTHENTICATE +", 14)) { - raw("AUTHENTICATE %s\r\n", auth); - return; - } - if (string[0] != ':') return; if (olog) log_append(string, olog); @@ -164,8 +160,6 @@ raw_parser(char *string) { strcpy(chan_default, tok); raw("JOIN #%s\r\n", tok); } return; - } else if (!strncmp(command, "90", 2)) { - raw("CAP END\r\n"); } else if (!strncmp(command, "QUIT", 4) || !strncmp(command, "PART", 4)) { printf("%*s<-- \x1b[34;1m%s\x1b[0m\n", g - 3, "", nickname); return; @@ -275,7 +269,7 @@ static void usage(void) { fputs("kirc [-s hostname] [-p port] [-c channel] [-n nick] \ [-r real_name] [-u username] [-k password] [-a token] [-x init_command] \ -[-w columns] [-W columns] [-o path] [-h|v|V]\n", stderr); +[-w columns] [-W columns] [-o path] [-e|v|V]\n", stderr); exit(EXIT_FAILURE); } @@ -284,9 +278,10 @@ main(int argc, char **argv) { int cval; - while ((cval = getopt(argc, argv, "s:p:o:n:k:c:u:r:x:w:W:a:hvV")) != -1) { + while ((cval = getopt(argc, argv, "s:p:o:n:k:c:u:r:x:w:W:a:hevV")) != -1) { switch (cval) { - case 'V' : verb = 1; break; + case 'V' : ++verb; break; + case 'e' : ++sasl; break; case 's' : host = optarg; break; case 'p' : port = optarg; break; case 'r' : real = optarg; break; @@ -313,10 +308,12 @@ main(int argc, char **argv) { return EXIT_FAILURE; } - if (auth) raw("CAP REQ :sasl\r\n"); + if (auth || sasl) raw("CAP REQ :sasl\r\n"); raw("NICK %s\r\n", nick); raw("USER %s - - :%s\r\n", (user ? user : nick), (real ? real : nick)); - if (auth) raw("AUTHENTICATE PLAIN\r\n"); + if (auth || sasl) raw("AUTHENTICATE %s\r\n", (sasl ? "EXTERNAL" : "PLAIN")); + if (auth || sasl) raw("AUTHENTICATE %s\r\n", (sasl ? "+" : auth)); + if (auth || sasl) raw("CAP END\r\n"); if (pass) raw("PASS %s\r\n", pass); if (inic) raw("%s\r\n", inic); -- cgit v1.2.3