summary refs log tree commit diff stats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/common/inbound.c47
-rw-r--r--src/common/plugin.c5
-rw-r--r--src/common/proto-irc.c2
-rw-r--r--src/common/servlist.c7
-rw-r--r--src/common/servlist.h1
-rw-r--r--src/fe-gtk/servlistgui.c12
6 files changed, 41 insertions, 33 deletions
diff --git a/src/common/inbound.c b/src/common/inbound.c
index 29eaf754..2383955e 100644
--- a/src/common/inbound.c
+++ b/src/common/inbound.c
@@ -1367,6 +1367,20 @@ inbound_exec_eom_cmd (char *str, void *sess)
 	return 1;
 }
 
+static int
+inbound_nickserv_login (server *serv)
+{
+	/* this could grow ugly, but let's hope there won't be new NickServ types */
+	if (serv->loginmethod >= 1 && serv->loginmethod <= 5)
+	{
+		return 1;
+	}
+	else
+	{
+		return 0;
+	}
+}
+
 void
 inbound_login_end (session *sess, char *text)
 {
@@ -1385,34 +1399,43 @@ inbound_login_end (session *sess, char *text)
 		{
 			/* there may be more than 1, separated by \n */
 			if (((ircnet *)serv->network)->command)
-				token_foreach (((ircnet *)serv->network)->command, '\n',
-									inbound_exec_eom_cmd, sess);
+			{
+				token_foreach (((ircnet *)serv->network)->command, '\n', inbound_exec_eom_cmd, sess);
+			}
 
 			/* send nickserv password */
-			if (((ircnet *)serv->network)->nickserv)
-				serv->p_ns_identify (serv, ((ircnet *)serv->network)->nickserv);
+			if (((ircnet *)serv->network)->pass && inbound_nickserv_login (serv))
+			{
+				serv->p_ns_identify (serv, ((ircnet *)serv->network)->pass);
+			}
 		}
 
 		/* send JOIN now or wait? */
-		if (serv->network && ((ircnet *)serv->network)->nickserv &&
-			 prefs.hex_irc_join_delay)
-			serv->joindelay_tag = fe_timeout_add (prefs.hex_irc_join_delay * 1000,
-															  check_autojoin_channels, serv);
+		if (serv->network && ((ircnet *)serv->network)->pass && prefs.hex_irc_join_delay && inbound_nickserv_login (serv))
+		{
+			serv->joindelay_tag = fe_timeout_add (prefs.hex_irc_join_delay * 1000, check_autojoin_channels, serv);
+		}
 		else
+		{
 			check_autojoin_channels (serv);
+		}
+
 		if (serv->supports_watch || serv->supports_monitor)
+		{
 			notify_send_watches (serv);
+		}
+
 		serv->end_of_motd = TRUE;
 	}
+
 	if (prefs.hex_irc_skip_motd && !serv->motd_skipped)
 	{
 		serv->motd_skipped = TRUE;
-		EMIT_SIGNAL (XP_TE_MOTDSKIP, serv->server_session, NULL, NULL,
-						 NULL, NULL, 0);
+		EMIT_SIGNAL (XP_TE_MOTDSKIP, serv->server_session, NULL, NULL, NULL, NULL, 0);
 		return;
 	}
-	EMIT_SIGNAL (XP_TE_MOTD, serv->server_session, text, NULL,
-					 NULL, NULL, 0);
+
+	EMIT_SIGNAL (XP_TE_MOTD, serv->server_session, text, NULL, NULL, NULL, 0);
 }
 
 void
diff --git a/src/common/plugin.c b/src/common/plugin.c
index 686f9749..61d5cb40 100644
--- a/src/common/plugin.c
+++ b/src/common/plugin.c
@@ -1111,11 +1111,6 @@ hexchat_get_info (hexchat_plugin *ph, const char *id)
 	case 0x339763: /* nick */
 		return sess->server->nick;
 
-	case 0x438fdf9: /* nickserv */
-		if (sess->server->network)
-			return ((ircnet *)sess->server->network)->nickserv;
-		return NULL;
-
 	case 0xca022f43: /* server */
 		if (!sess->server->connected)
 			return NULL;
diff --git a/src/common/proto-irc.c b/src/common/proto-irc.c
index 5ea2c75c..7c73b5ab 100644
--- a/src/common/proto-irc.c
+++ b/src/common/proto-irc.c
@@ -102,7 +102,9 @@ static void
 irc_ns_ghost (server *serv, char *usname, char *pass)
 {
 	if (serv->loginmethod != 5)
+	{
 		irc_nickserv (serv, "GHOST", usname, " ", pass);
+	}
 }
 
 static void
diff --git a/src/common/servlist.c b/src/common/servlist.c
index 9386bf16..f30dcf48 100644
--- a/src/common/servlist.c
+++ b/src/common/servlist.c
@@ -925,7 +925,6 @@ servlist_cleanup (void)
 	{
 		net = list->data;
 		free_and_clear (net->pass);
-		free_and_clear (net->nickserv);
 	}
 }
 
@@ -951,7 +950,6 @@ servlist_net_remove (ircnet *net)
 		free (net->autojoin);
 	if (net->command)
 		free (net->command);
-	free_and_clear (net->nickserv);
 	if (net->comment)
 		free (net->comment);
 	if (net->encoding)
@@ -1110,9 +1108,6 @@ servlist_load (void)
 			case 'S':	/* new server/hostname for this network */
 				servlist_server_add (net, buf + 2);
 				break;
-			case 'B':
-				net->nickserv = strdup (buf + 2);
-				break;
 			case 'L':
 				net->logintype = atoi (buf + 2);
 				break;
@@ -1225,8 +1220,6 @@ servlist_save (void)
 			fprintf (fp, "P=%s\n", net->pass);
 		if (net->autojoin)
 			fprintf (fp, "J=%s\n", net->autojoin);
-		if (net->nickserv)
-			fprintf (fp, "B=%s\n", net->nickserv);
 		if (net->logintype)
 			fprintf (fp, "L=%d\n", net->logintype);
 		if (net->encoding && g_ascii_strcasecmp (net->encoding, "System") &&
diff --git a/src/common/servlist.h b/src/common/servlist.h
index c70c3871..c38c5129 100644
--- a/src/common/servlist.h
+++ b/src/common/servlist.h
@@ -35,7 +35,6 @@ typedef struct ircnet
 	char *pass;
 	char *autojoin;
 	char *command;
-	char *nickserv;
 	int logintype;
 	char *comment;
 	char *encoding;
diff --git a/src/fe-gtk/servlistgui.c b/src/fe-gtk/servlistgui.c
index e0e79fdd..faa42772 100644
--- a/src/fe-gtk/servlistgui.c
+++ b/src/fe-gtk/servlistgui.c
@@ -65,7 +65,6 @@ static GtkWidget *edit_entry_real;
 static GtkWidget *edit_entry_join;
 static GtkWidget *edit_entry_pass;
 static GtkWidget *edit_entry_cmd;
-static GtkWidget *edit_entry_nickserv;
 static GtkWidget *edit_label_nick;
 static GtkWidget *edit_label_nick2;
 static GtkWidget *edit_label_real;
@@ -105,6 +104,10 @@ static const char *pages[]=
 /* This is our dictionary for authentication types. Keep these in sync with
  * login_types[]! This allows us to re-order the login type dropdown in the
  * network list without breaking config compatibility.
+ *
+ * Also make sure inbound_nickserv_login() won't break, i.e. if you add a new
+ * type that is NickServ-based, add it there as well so that HexChat knows to
+ * treat it as such.
  */
 static int login_types_conf[] =
 {
@@ -526,7 +529,6 @@ servlist_edit_update (ircnet *net)
 
 	servlist_update_from_entry (&net->autojoin, edit_entry_join);
 	servlist_update_from_entry (&net->command, edit_entry_cmd);
-	servlist_update_from_entry (&net->nickserv, edit_entry_nickserv);
 	servlist_update_from_entry (&net->pass, edit_entry_pass);
 }
 
@@ -1542,12 +1544,6 @@ servlist_open_edit (GtkWidget *parent, ircnet *net)
 									  net->command, 0,
 					_("Extra command to execute after connecting. If you need more than one, set this to LOAD -e <filename>, where <filename> is a text-file full of commands to execute."));
 
-	edit_entry_nickserv =
-		servlist_create_entry (table3, _("NickServ password:"), 14,
-									  net->nickserv, 0,
-					_("If your nickname requires a password, enter it here. Not all IRC networks support this."));
-	gtk_entry_set_visibility (GTK_ENTRY (edit_entry_nickserv), FALSE);
-
 	label_logintype = gtk_label_new (_("Login method:"));
 	gtk_widget_show (label_logintype);
 	gtk_table_attach (GTK_TABLE (table3), label_logintype, 1, 2, 15, 16,