aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMichael Czigler <37268479+mcpcpc@users.noreply.github.com>2020-09-28 08:34:00 -0400
committerGitHub <noreply@github.com>2020-09-28 08:34:00 -0400
commitb43ce38c2c19d0c3245bcbefd797c7ee9c050d26 (patch)
tree40ef3f2d5513bbf09c95d5df75f919d0b37924a8
parentAdd usage() function (diff)
downloadkirc-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.c21
1 files changed, 9 insertions, 12 deletions
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);