mirror of
https://github.com/ZoiteChat/zoitechat.git
synced 2026-03-13 01:00:19 +00:00
Replace various network options with universal login method option
This commit is contained in:
@@ -528,13 +528,12 @@ typedef struct server
|
||||
char servername[128]; /* what the server says is its name */
|
||||
char password[86];
|
||||
char sasluser[32]; /* this is just a buffer for network->user */
|
||||
char saslpassword[86]; /* we could reuse password but then we couldn't guarantee NickServ doesn't register first */
|
||||
char nick[NICKLEN];
|
||||
char linebuf[2048]; /* RFC says 512 chars including \r\n */
|
||||
char *last_away_reason;
|
||||
int pos; /* current position in linebuf */
|
||||
int nickcount;
|
||||
int nickservtype; /* 0=/MSG nickserv 1=/NICKSERV 2=/NS */
|
||||
int loginmethod; /* see login_types[] */
|
||||
|
||||
char *chantypes; /* for 005 numeric - free me */
|
||||
char *chanmodes; /* for 005 numeric - free me */
|
||||
|
||||
@@ -49,7 +49,7 @@ irc_login (server *serv, char *user, char *realname)
|
||||
{
|
||||
tcp_sendf (serv, "CAP LS\r\n"); /* start with CAP LS as Charybdis sasl.txt suggests */
|
||||
|
||||
if (serv->password[0])
|
||||
if (serv->password[0] && serv->loginmethod == 7)
|
||||
{
|
||||
tcp_sendf (serv, "PASS %s\r\n", serv->password);
|
||||
}
|
||||
@@ -64,21 +64,21 @@ static void
|
||||
irc_nickserv (server *serv, char *cmd, char *arg1, char *arg2, char *arg3)
|
||||
{
|
||||
/* are all ircd authors idiots? */
|
||||
switch (serv->nickservtype)
|
||||
switch (serv->loginmethod)
|
||||
{
|
||||
case 0:
|
||||
case 1:
|
||||
tcp_sendf (serv, "PRIVMSG NICKSERV :%s %s%s%s\r\n", cmd, arg1, arg2, arg3);
|
||||
break;
|
||||
case 1:
|
||||
case 2:
|
||||
tcp_sendf (serv, "NICKSERV %s %s%s%s\r\n", cmd, arg1, arg2, arg3);
|
||||
break;
|
||||
case 2:
|
||||
case 3:
|
||||
tcp_sendf (serv, "NS %s %s%s%s\r\n", cmd, arg1, arg2, arg3);
|
||||
break;
|
||||
case 3:
|
||||
case 4:
|
||||
tcp_sendf (serv, "PRIVMSG NS :%s %s%s%s\r\n", cmd, arg1, arg2, arg3);
|
||||
break;
|
||||
case 4:
|
||||
case 5:
|
||||
/* why couldn't QuakeNet implement one of the existing ones? */
|
||||
tcp_sendf (serv, "AUTH %s %s\r\n", arg1, arg2);
|
||||
}
|
||||
@@ -87,7 +87,7 @@ irc_nickserv (server *serv, char *cmd, char *arg1, char *arg2, char *arg3)
|
||||
static void
|
||||
irc_ns_identify (server *serv, char *pass)
|
||||
{
|
||||
if (serv->nickservtype == 4) /* QuakeNet needs to do everything in its own ways... */
|
||||
if (serv->loginmethod == 5) /* QuakeNet needs to do everything in its own ways... */
|
||||
{
|
||||
irc_nickserv (serv, "", serv->nick, pass, "");
|
||||
}
|
||||
@@ -100,7 +100,7 @@ irc_ns_identify (server *serv, char *pass)
|
||||
static void
|
||||
irc_ns_ghost (server *serv, char *usname, char *pass)
|
||||
{
|
||||
if (serv->nickservtype != 4)
|
||||
if (serv->loginmethod != 5)
|
||||
irc_nickserv (serv, "GHOST", usname, " ", pass);
|
||||
}
|
||||
|
||||
@@ -1221,7 +1221,7 @@ process_named_msg (session *sess, char *type, char *word[], char *word_eol[])
|
||||
EMIT_SIGNAL (XP_TE_SASLAUTH, serv->server_session, sess->server->sasluser, NULL, NULL, NULL, 0);
|
||||
tcp_send_len (serv, "AUTHENTICATE PLAIN\r\n", 20);
|
||||
|
||||
pass = encode_sasl_pass (sess->server->sasluser, sess->server->saslpassword);
|
||||
pass = encode_sasl_pass (sess->server->sasluser, sess->server->password);
|
||||
tcp_sendf (sess->server, "AUTHENTICATE %s\r\n", pass);
|
||||
free (pass);
|
||||
}
|
||||
@@ -1259,8 +1259,8 @@ process_named_msg (session *sess, char *type, char *word[], char *word_eol[])
|
||||
strcat (buffer, "extended-join ");
|
||||
want_cap = 1;
|
||||
}
|
||||
/* if the SASL password is set, request SASL auth */
|
||||
if (strstr (word_eol[5], "sasl") != 0 && strlen (sess->server->saslpassword) != 0)
|
||||
/* if the SASL password is set AND auth mode is set to SASL, request SASL auth */
|
||||
if (strstr (word_eol[5], "sasl") != 0 && strlen (sess->server->password) != 0 && serv->loginmethod == 6)
|
||||
{
|
||||
strcat (buffer, "sasl ");
|
||||
want_cap = 1;
|
||||
|
||||
@@ -43,7 +43,7 @@ struct defaultserver
|
||||
char *host;
|
||||
char *channel;
|
||||
char *charset;
|
||||
int nsmode; /* default NickServ type */
|
||||
int loginmode; /* default authentication type */
|
||||
};
|
||||
|
||||
static const struct defaultserver def[] =
|
||||
@@ -245,7 +245,7 @@ static const struct defaultserver def[] =
|
||||
{0, "irc.ggn.net"},
|
||||
{0, "irc.vendetta.com"},
|
||||
|
||||
{"freenode", 0, "#hexchat"},
|
||||
{"freenode", 0, "#hexchat", 0, 6},
|
||||
#ifdef USE_OPENSSL
|
||||
{0, "irc.freenode.net/+6697"},
|
||||
#endif
|
||||
@@ -618,18 +618,17 @@ servlist_connect (session *sess, ircnet *net, gboolean join)
|
||||
}
|
||||
}
|
||||
|
||||
if (net->nstype >= 1) /* once again, make sure gtk_combo_box_get_active() is not bugging us, just in case */
|
||||
if (net->logintype)
|
||||
{
|
||||
serv->nickservtype = net->nstype - 1; /* ircnet->nstype starts at 1, server->nickservtype starts at 0! */
|
||||
serv->loginmethod = net->logintype;
|
||||
}
|
||||
else
|
||||
{
|
||||
serv->nickservtype = 1; /* use /NickServ by default */
|
||||
serv->loginmethod = 2; /* use /NickServ by default */
|
||||
}
|
||||
|
||||
serv->password[0] = 0;
|
||||
serv->sasluser[0] = 0;
|
||||
serv->saslpassword[0] = 0;
|
||||
|
||||
if (net->pass)
|
||||
{
|
||||
@@ -645,11 +644,6 @@ servlist_connect (session *sess, ircnet *net, gboolean join)
|
||||
safe_strcpy (serv->sasluser, net->user, sizeof (serv->sasluser));
|
||||
}
|
||||
|
||||
if (net->saslpass)
|
||||
{
|
||||
safe_strcpy (serv->saslpassword, net->saslpass, sizeof (serv->saslpassword));
|
||||
}
|
||||
|
||||
if (net->flags & FLAG_USE_GLOBAL)
|
||||
{
|
||||
strcpy (serv->nick, prefs.hex_irc_nick1);
|
||||
@@ -941,7 +935,6 @@ servlist_cleanup (void)
|
||||
{
|
||||
net = list->data;
|
||||
free_and_clear (net->pass);
|
||||
free_and_clear (net->saslpass);
|
||||
free_and_clear (net->nickserv);
|
||||
}
|
||||
}
|
||||
@@ -964,7 +957,6 @@ servlist_net_remove (ircnet *net)
|
||||
if (net->real)
|
||||
free (net->real);
|
||||
free_and_clear (net->pass);
|
||||
free_and_clear (net->saslpass);
|
||||
if (net->autojoin)
|
||||
free (net->autojoin);
|
||||
if (net->command)
|
||||
@@ -1029,9 +1021,9 @@ servlist_load_defaults (void)
|
||||
free (net->encoding);
|
||||
net->encoding = strdup (def[i].charset);
|
||||
}
|
||||
if (def[i].nsmode)
|
||||
if (def[i].loginmode)
|
||||
{
|
||||
net->nstype = def[i].nsmode;
|
||||
net->logintype = def[i].loginmode;
|
||||
}
|
||||
if (g_str_hash (def[i].network) == def_hash)
|
||||
{
|
||||
@@ -1100,9 +1092,6 @@ servlist_load (void)
|
||||
case 'P':
|
||||
net->pass = strdup (buf + 2);
|
||||
break;
|
||||
case 'A':
|
||||
net->saslpass = strdup (buf + 2);
|
||||
break;
|
||||
case 'J':
|
||||
net->autojoin = strdup (buf + 2);
|
||||
break;
|
||||
@@ -1134,8 +1123,8 @@ servlist_load (void)
|
||||
case 'B':
|
||||
net->nickserv = strdup (buf + 2);
|
||||
break;
|
||||
case 'T':
|
||||
net->nstype = atoi (buf + 2);
|
||||
case 'L':
|
||||
net->logintype = atoi (buf + 2);
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -1244,26 +1233,12 @@ servlist_save (void)
|
||||
fprintf (fp, "R=%s\n", net->real);
|
||||
if (net->pass)
|
||||
fprintf (fp, "P=%s\n", net->pass);
|
||||
if (net->saslpass)
|
||||
fprintf (fp, "A=%s\n", net->saslpass);
|
||||
if (net->autojoin)
|
||||
fprintf (fp, "J=%s\n", net->autojoin);
|
||||
if (net->nickserv)
|
||||
fprintf (fp, "B=%s\n", net->nickserv);
|
||||
if (net->nstype)
|
||||
{
|
||||
if (net->nstype == -1) /* gtk_combo_box_get_active() returns -1 for invalid indices */
|
||||
{
|
||||
net->nstype = 0; /* avoid further crashes for the current session */
|
||||
buf = g_strdup_printf (_("Warning: invalid NickServ type. Falling back to default type for network %s."), net->name);
|
||||
fe_message (buf, FE_MSG_WARN);
|
||||
g_free (buf);
|
||||
}
|
||||
else /* the selection was fine, save it */
|
||||
{
|
||||
fprintf (fp, "T=%d\n", net->nstype);
|
||||
}
|
||||
}
|
||||
if (net->logintype)
|
||||
fprintf (fp, "L=%d\n", net->logintype);
|
||||
if (net->encoding && g_ascii_strcasecmp (net->encoding, "System") &&
|
||||
g_ascii_strcasecmp (net->encoding, "System default"))
|
||||
{
|
||||
|
||||
@@ -33,11 +33,10 @@ typedef struct ircnet
|
||||
char *user;
|
||||
char *real;
|
||||
char *pass;
|
||||
char *saslpass;
|
||||
char *autojoin;
|
||||
char *command;
|
||||
char *nickserv;
|
||||
int nstype;
|
||||
int logintype;
|
||||
char *comment;
|
||||
char *encoding;
|
||||
GSList *servlist;
|
||||
|
||||
Reference in New Issue
Block a user