diff options
author | Michael Czigler <37268479+mcpcpc@users.noreply.github.com> | 2020-09-28 08:34:00 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-09-28 08:34:00 -0400 |
commit | b43ce38c2c19d0c3245bcbefd797c7ee9c050d26 (patch) | |
tree | 40ef3f2d5513bbf09c95d5df75f919d0b37924a8 | |
parent | Add usage() function (diff) | |
download | kirc-b43ce38c2c19d0c3245bcbefd797c7ee9c050d26.tar.gz kirc-b43ce38c2c19d0c3245bcbefd797c7ee9c050d26.tar.bz2 kirc-b43ce38c2c19d0c3245bcbefd797c7ee9c050d26.tar.xz kirc-b43ce38c2c19d0c3245bcbefd797c7ee9c050d26.tar.zst kirc-b43ce38c2c19d0c3245bcbefd797c7ee9c050d26.zip |
add SASL EXTERNAL support
Diffstat (limited to '')
-rw-r--r-- | kirc.c | 21 |
1 files changed, 9 insertions, 12 deletions
@@ -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); |