19
19
static int conn ; /* connection socket */
20
20
static char chan_default [MSG_MAX ]; /* default channel for PRIVMSG */
21
21
static int verb = 0 ; /* verbose output (e.g. raw stream) */
22
+ static int sasl = 0 ; /* SASL method (PLAIN=0, EXTERNAL=1) */
22
23
static size_t cmax = 80 ; /* max number of chars per line */
23
24
static size_t gutl = 20 ; /* max char width of left column */
24
25
static char * host = "irc.freenode.org" ; /* irc host address */
@@ -144,11 +145,6 @@ raw_parser(char *string) {
144
145
return ;
145
146
}
146
147
147
- if (!strncmp (string , "AUTHENTICATE +" , 14 )) {
148
- raw ("AUTHENTICATE %s\r\n" , auth );
149
- return ;
150
- }
151
-
152
148
if (string [0 ] != ':' ) return ;
153
149
154
150
if (olog ) log_append (string , olog );
@@ -164,8 +160,6 @@ raw_parser(char *string) {
164
160
strcpy (chan_default , tok );
165
161
raw ("JOIN #%s\r\n" , tok );
166
162
} return ;
167
- } else if (!strncmp (command , "90" , 2 )) {
168
- raw ("CAP END\r\n" );
169
163
} else if (!strncmp (command , "QUIT" , 4 ) || !strncmp (command , "PART" , 4 )) {
170
164
printf ("%*s<-- \x1b[34;1m%s\x1b[0m\n" , g - 3 , "" , nickname );
171
165
return ;
@@ -275,7 +269,7 @@ static void
275
269
usage (void ) {
276
270
fputs ("kirc [-s hostname] [-p port] [-c channel] [-n nick] \
277
271
[-r real_name] [-u username] [-k password] [-a token] [-x init_command] \
278
- [-w columns] [-W columns] [-o path] [-h |v|V]\n" , stderr );
272
+ [-w columns] [-W columns] [-o path] [-e |v|V]\n" , stderr );
279
273
exit (EXIT_FAILURE );
280
274
}
281
275
@@ -284,9 +278,10 @@ main(int argc, char **argv) {
284
278
285
279
int cval ;
286
280
287
- while ((cval = getopt (argc , argv , "s:p:o:n:k:c:u:r:x:w:W:a:hvV " )) != -1 ) {
281
+ while ((cval = getopt (argc , argv , "s:p:o:n:k:c:u:r:x:w:W:a:hevV " )) != -1 ) {
288
282
switch (cval ) {
289
- case 'V' : verb = 1 ; break ;
283
+ case 'V' : ++ verb ; break ;
284
+ case 'e' : ++ sasl ; break ;
290
285
case 's' : host = optarg ; break ;
291
286
case 'p' : port = optarg ; break ;
292
287
case 'r' : real = optarg ; break ;
@@ -313,10 +308,12 @@ main(int argc, char **argv) {
313
308
return EXIT_FAILURE ;
314
309
}
315
310
316
- if (auth ) raw ("CAP REQ :sasl\r\n" );
311
+ if (auth || sasl ) raw ("CAP REQ :sasl\r\n" );
317
312
raw ("NICK %s\r\n" , nick );
318
313
raw ("USER %s - - :%s\r\n" , (user ? user : nick ), (real ? real : nick ));
319
- if (auth ) raw ("AUTHENTICATE PLAIN\r\n" );
314
+ if (auth || sasl ) raw ("AUTHENTICATE %s\r\n" , (sasl ? "EXTERNAL" : "PLAIN" ));
315
+ if (auth || sasl ) raw ("AUTHENTICATE %s\r\n" , (sasl ? "+" : auth ));
316
+ if (auth || sasl ) raw ("CAP END\r\n" );
320
317
if (pass ) raw ("PASS %s\r\n" , pass );
321
318
if (inic ) raw ("%s\r\n" , inic );
322
319
0 commit comments