summaryrefslogtreecommitdiff
path: root/src/plugins
diff options
context:
space:
mode:
authorSébastien Helleu <flashcode@flashtux.org>2023-04-06 20:22:34 +0200
committerSébastien Helleu <flashcode@flashtux.org>2023-04-12 17:17:38 +0200
commit95b30f8da5be6065f1d83be0de6bb2dadbd226eb (patch)
tree94d5e2fdad8c8cb152601e7ae951e4811f7fac33 /src/plugins
parent8eb096b3ef1676064c8e6f5c43c8790e8bab6bfa (diff)
downloadweechat-95b30f8da5be6065f1d83be0de6bb2dadbd226eb.zip
irc: connect with TLS and port 6697 by default (issue #1903)
Diffstat (limited to 'src/plugins')
-rw-r--r--src/plugins/irc/irc-command.c30
-rw-r--r--src/plugins/irc/irc-config.c33
-rw-r--r--src/plugins/irc/irc-server.c84
-rw-r--r--src/plugins/irc/irc-server.h10
4 files changed, 126 insertions, 31 deletions
diff --git a/src/plugins/irc/irc-command.c b/src/plugins/irc/irc-command.c
index 04bfba877..1f2827ca5 100644
--- a/src/plugins/irc/irc-command.c
+++ b/src/plugins/irc/irc-command.c
@@ -5549,7 +5549,7 @@ IRC_COMMAND_CALLBACK(server)
{
int i, detailed_list, one_server_found, length, count, refresh;
struct t_irc_server *ptr_server2, *server_found, *new_server;
- char *server_name, *msg_no_quotes, *message;
+ char *server_name, *msg_no_quotes, *message, *description;
IRC_BUFFER_GET_SERVER_CHANNEL(buffer);
@@ -5647,9 +5647,11 @@ IRC_COMMAND_CALLBACK(server)
new_server->options[IRC_SERVER_OPTION_ADDRESSES], argv[3], 1);
irc_server_apply_command_line_options (new_server, argc, argv);
+ description = irc_server_get_addresses_ports_tls (new_server);
+
weechat_printf (
NULL,
- _("%s: server added: %s%s%s%s%s"),
+ _("%s: server added: %s%s%s%s%s -> %s"),
IRC_PLUGIN_NAME,
IRC_COLOR_CHAT_SERVER,
new_server->name,
@@ -5657,7 +5659,11 @@ IRC_COMMAND_CALLBACK(server)
/* TRANSLATORS: "temporary IRC server" */
(new_server->temp_server) ? _(" (temporary)") : "",
/* TRANSLATORS: "fake IRC server" */
- (new_server->fake_server) ? _(" (fake)") : "");
+ (new_server->fake_server) ? _(" (fake)") : "",
+ description);
+
+ if (description)
+ free (description);
/* do not connect to server after adding it */
/*
@@ -6978,7 +6984,8 @@ irc_command_init ()
N_(" server: server name, which can be:\n"
" - internal server name (added by /server add, "
"recommended usage)\n"
- " - hostname/port or IP/port, port is 6667 by default\n"
+ " - hostname/port or IP/port, port is 6697 by default "
+ "for TLS, 6667 otherwise\n"
" - URL with format: irc[6][s]://[nickname[:password]@]"
"irc.example.org[:port][/#channel1][,#channel2[...]]\n"
" Note: for an address/IP/URL, a temporary server is "
@@ -6999,10 +7006,10 @@ irc_command_init ()
"\n"
"Examples:\n"
" /connect libera\n"
- " /connect irc.oftc.net/6667\n"
- " /connect irc6.oftc.net/6667 -ipv6\n"
- " /connect irc6.oftc.net/6697 -ipv6 -tls\n"
- " /connect my.server.org/6697 -tls -password=test\n"
+ " /connect irc.oftc.net\n"
+ " /connect irc.oftc.net/6667 -notls\n"
+ " /connect irc6.oftc.net/9999 -ipv6\n"
+ " /connect my.server.org -password=test\n"
" /connect irc://nick@irc.oftc.net/#channel\n"
" /connect -switch"),
"%(irc_servers)|-all|-auto|-open|-nojoin|-switch|%*",
@@ -7522,7 +7529,8 @@ irc_command_init ()
"is used to connect to the server (/connect name) and to set server "
"options: irc.server.name.xxx\n"
"hostname: name or IP address of server, with optional port "
- "(default: 6667), many addresses can be separated by a comma\n"
+ "(default: 6697 for TLS, 6667 otherwise), many addresses can be "
+ "separated by a comma\n"
" -temp: add a temporary server (not saved)\n"
" option: set option for server (for boolean option, value can be "
"omitted)\n"
@@ -7557,9 +7565,9 @@ irc_command_init ()
"Examples:\n"
" /server listfull\n"
" /server add libera irc.libera.chat\n"
- " /server add libera irc.libera.chat/6697 -tls -autoconnect\n"
+ " /server add libera irc.libera.chat/6667 -notls -autoconnect\n"
" /server add chatspike irc.chatspike.net/6667,"
- "irc.duckspike.net/6667\n"
+ "irc.duckspike.net/6667 -notls\n"
" /server copy libera libera-test\n"
" /server rename libera-test libera2\n"
" /server reorder libera2 libera\n"
diff --git a/src/plugins/irc/irc-config.c b/src/plugins/irc/irc-config.c
index da52dfe04..458833ceb 100644
--- a/src/plugins/irc/irc-config.c
+++ b/src/plugins/irc/irc-config.c
@@ -997,8 +997,18 @@ irc_config_server_default_change_cb (const void *pointer, void *data,
switch (index_option)
{
case IRC_SERVER_OPTION_ADDRESSES:
- irc_server_set_addresses (ptr_server,
- weechat_config_string (option));
+ irc_server_set_addresses (
+ ptr_server,
+ weechat_config_string (option),
+ IRC_SERVER_OPTION_BOOLEAN(
+ ptr_server, IRC_SERVER_OPTION_TLS));
+ break;
+ case IRC_SERVER_OPTION_TLS:
+ irc_server_set_addresses (
+ ptr_server,
+ IRC_SERVER_OPTION_STRING(
+ ptr_server, IRC_SERVER_OPTION_ADDRESSES),
+ weechat_config_boolean (option));
break;
case IRC_SERVER_OPTION_NICKS:
irc_server_set_nicks (ptr_server,
@@ -1006,10 +1016,15 @@ irc_config_server_default_change_cb (const void *pointer, void *data,
break;
case IRC_SERVER_OPTION_AWAY_CHECK:
case IRC_SERVER_OPTION_AWAY_CHECK_MAX_NICKS:
- if (IRC_SERVER_OPTION_INTEGER(ptr_server, IRC_SERVER_OPTION_AWAY_CHECK) > 0)
+ if (IRC_SERVER_OPTION_INTEGER(
+ ptr_server, IRC_SERVER_OPTION_AWAY_CHECK) > 0)
+ {
irc_server_check_away (ptr_server);
+ }
else
+ {
irc_server_remove_away (ptr_server);
+ }
break;
case IRC_SERVER_OPTION_REGISTERED_MODE:
irc_mode_registered_mode_change (ptr_server);
@@ -1280,7 +1295,17 @@ irc_config_server_change_cb (const void *pointer, void *data,
irc_server_set_addresses (
ptr_server,
IRC_SERVER_OPTION_STRING(ptr_server,
- IRC_SERVER_OPTION_ADDRESSES));
+ IRC_SERVER_OPTION_ADDRESSES),
+ IRC_SERVER_OPTION_BOOLEAN(ptr_server,
+ IRC_SERVER_OPTION_TLS));
+ break;
+ case IRC_SERVER_OPTION_TLS:
+ irc_server_set_addresses (
+ ptr_server,
+ IRC_SERVER_OPTION_STRING(ptr_server,
+ IRC_SERVER_OPTION_ADDRESSES),
+ IRC_SERVER_OPTION_BOOLEAN(ptr_server,
+ IRC_SERVER_OPTION_TLS));
break;
case IRC_SERVER_OPTION_NICKS:
irc_server_set_nicks (
diff --git a/src/plugins/irc/irc-server.c b/src/plugins/irc/irc-server.c
index 7ed88ba48..66c927887 100644
--- a/src/plugins/irc/irc-server.c
+++ b/src/plugins/irc/irc-server.c
@@ -80,7 +80,7 @@ char *irc_server_options[IRC_SERVER_NUM_OPTIONS][2] =
{ { "addresses", "" },
{ "proxy", "" },
{ "ipv6", "on" },
- { "tls", "off" },
+ { "tls", "on" },
{ "tls_cert", "" },
{ "tls_password", "" },
{ "tls_priorities", "NORMAL:-VERS-SSL3.0" },
@@ -584,23 +584,79 @@ irc_server_get_name_without_port (const char *name)
}
/*
+ * Gets a string with addresses and ports and TLS option for the server.
+ *
+ * For example if addresses = "irc.example.org,irc2.example.org/7000" and
+ * "tls" option if on, the result is:
+ *
+ * "irc.example.org/6697,irc2.example.org/7000 (TLS: enabled)"
+ *
+ * Note: result must be freed after use.
+ */
+
+char *
+irc_server_get_addresses_ports_tls (struct t_irc_server *server)
+{
+ char **result, str_port[32], str_tls[256];
+ int i;
+
+ if (!server)
+ return NULL;
+
+ result = weechat_string_dyn_alloc (64);
+ if (!result)
+ return NULL;
+
+ for (i = 0; i < server->addresses_count; i++)
+ {
+ if (i > 0)
+ weechat_string_dyn_concat (result, ", ", -1);
+ weechat_string_dyn_concat (result, server->addresses_array[i], -1);
+ weechat_string_dyn_concat (result, "/", -1);
+ snprintf (str_port, sizeof (str_port), "%d", server->ports_array[i]);
+ weechat_string_dyn_concat (result, str_port, -1);
+ }
+
+ snprintf (str_tls, sizeof (str_tls),
+ " (TLS: %s)",
+ IRC_SERVER_OPTION_BOOLEAN(server, IRC_SERVER_OPTION_TLS) ?
+ _("enabled") : _("disabled"));
+ weechat_string_dyn_concat (result, str_tls, -1);
+
+ return weechat_string_dyn_free (result, 0);
+}
+
+/*
* Sets addresses for server.
*
+ * The "tls" is the boolean value of option ".tls" in server, used to find the
+ * default port if not specified in the address:
+ * - 6697 if tls is 1
+ * - 6667 if tls is 0
+ *
* Returns:
* 1: addresses have been set (changed)
* 0: nothing set (addresses unchanged)
*/
int
-irc_server_set_addresses (struct t_irc_server *server, const char *addresses)
+irc_server_set_addresses (struct t_irc_server *server, const char *addresses,
+ int tls)
{
- int i;
+ int rc, i, default_port;
char *pos, *error, *addresses_eval;
const char *ptr_addresses;
long number;
+ if (!server)
+ return 0;
+
+ rc = 1;
addresses_eval = NULL;
+ default_port = (tls) ?
+ IRC_SERVER_DEFAULT_PORT_TLS : IRC_SERVER_DEFAULT_PORT_CLEARTEXT;
+
ptr_addresses = addresses;
if (ptr_addresses && (strncmp (ptr_addresses, "fake:", 5) == 0))
{
@@ -618,8 +674,7 @@ irc_server_set_addresses (struct t_irc_server *server, const char *addresses)
if (server->addresses_eval
&& (strcmp (server->addresses_eval, addresses_eval) == 0))
{
- free (addresses_eval);
- return 0;
+ rc = 0;
}
}
@@ -649,7 +704,7 @@ irc_server_set_addresses (struct t_irc_server *server, const char *addresses)
/* set new addresses/ports */
server->addresses_eval = addresses_eval;
if (!addresses_eval)
- return 1;
+ return rc;
server->addresses_array = weechat_string_split (
addresses_eval,
",",
@@ -673,16 +728,16 @@ irc_server_set_addresses (struct t_irc_server *server, const char *addresses)
error = NULL;
number = strtol (pos, &error, 10);
server->ports_array[i] = (error && !error[0]) ?
- number : IRC_SERVER_DEFAULT_PORT;
+ number : default_port;
}
else
{
- server->ports_array[i] = IRC_SERVER_DEFAULT_PORT;
+ server->ports_array[i] = default_port;
}
server->retry_array[i] = 0;
}
- return 1;
+ return rc;
}
/*
@@ -696,7 +751,8 @@ irc_server_set_index_current_address (struct t_irc_server *server, int index)
addresses_changed = irc_server_set_addresses (
server,
- IRC_SERVER_OPTION_STRING(server, IRC_SERVER_OPTION_ADDRESSES));
+ IRC_SERVER_OPTION_STRING(server, IRC_SERVER_OPTION_ADDRESSES),
+ IRC_SERVER_OPTION_BOOLEAN(server, IRC_SERVER_OPTION_TLS));
if (addresses_changed)
{
@@ -1660,6 +1716,10 @@ irc_server_alloc (const char *name)
/* create options with null value */
for (i = 0; i < IRC_SERVER_NUM_OPTIONS; i++)
{
+ new_server->options[i] = NULL;
+ }
+ for (i = 0; i < IRC_SERVER_NUM_OPTIONS; i++)
+ {
length = strlen (new_server->name) + 1 +
strlen (irc_server_options[i][0]) +
512 + /* inherited option name (irc.server_default.xxx) */
@@ -1707,7 +1767,7 @@ irc_server_alloc (const char *name)
* - "pass": password for the server (can be used as nick password on most
* servers)
* - "server": server address
- * - "port": port (default is 6667 without TLS and 6697 with TLS)
+ * - "port": port (default is 6697 with TLS, 6667 otherwise)
* - "#chan1": channel to auto-join
*
* Returns pointer to new server, NULL if error.
@@ -1743,7 +1803,7 @@ irc_server_alloc_with_url (const char *irc_url)
ipv6 = 0;
tls = 0;
snprintf (default_port, sizeof (default_port),
- "%d", IRC_SERVER_DEFAULT_PORT);
+ "%d", IRC_SERVER_DEFAULT_PORT_CLEARTEXT);
pos_server = strstr (irc_url2, "://");
if (!pos_server || !pos_server[3])
diff --git a/src/plugins/irc/irc-server.h b/src/plugins/irc/irc-server.h
index e40f8b62e..33cbfe3a2 100644
--- a/src/plugins/irc/irc-server.h
+++ b/src/plugins/irc/irc-server.h
@@ -120,9 +120,10 @@ enum t_irc_server_option
weechat_config_string(irc_config_server_default[__index]) \
: weechat_config_string_default(irc_config_server_default[__index])))
-#define IRC_SERVER_DEFAULT_PORT 6667
-#define IRC_SERVER_DEFAULT_PORT_TLS 6697
-#define IRC_SERVER_DEFAULT_NICKS "weechat1,weechat2,weechat3,weechat4,weechat5"
+#define IRC_SERVER_DEFAULT_PORT_CLEARTEXT 6667
+#define IRC_SERVER_DEFAULT_PORT_TLS 6697
+
+#define IRC_SERVER_DEFAULT_NICKS "weechat1,weechat2,weechat3,weechat4,weechat5"
/* number of queues for sending messages */
#define IRC_SERVER_NUM_OUTQUEUES_PRIO 2
@@ -333,8 +334,9 @@ extern void irc_server_sasl_get_creds (struct t_irc_server *server,
char **key);
extern int irc_server_sasl_enabled (struct t_irc_server *server);
extern char *irc_server_get_name_without_port (const char *name);
+extern char *irc_server_get_addresses_ports_tls (struct t_irc_server *server);
extern int irc_server_set_addresses (struct t_irc_server *server,
- const char *addresses);
+ const char *addresses, int tls);
extern void irc_server_set_nicks (struct t_irc_server *server,
const char *nicks);
extern void irc_server_set_nick (struct t_irc_server *server,