diff options
author | SoniEx2 <endermoneymod@gmail.com> | 2022-12-18 13:43:01 -0300 |
---|---|---|
committer | SoniEx2 <endermoneymod@gmail.com> | 2022-12-18 13:43:01 -0300 |
commit | 014b242df803089c34084de3d806a7c4e4dad75e (patch) | |
tree | 12dd5534a445fedc63b8219e48951bff0b3d2283 /src/common | |
parent | d049be950cfaca6311b575890e81521d62db68d7 (diff) | |
parent | bb7a03e9f68a775ca93dd6ad8ea61e4f1d2ba81b (diff) |
Merge remote-tracking branch 'upstream/master' into default
Diffstat (limited to 'src/common')
-rw-r--r-- | src/common/fe.h | 1 | ||||
-rw-r--r-- | src/common/hexchat.h | 2 | ||||
-rw-r--r-- | src/common/inbound.c | 29 | ||||
-rw-r--r-- | src/common/modes.c | 8 | ||||
-rw-r--r-- | src/common/outbound.c | 29 | ||||
-rw-r--r-- | src/common/proto-irc.c | 2 | ||||
-rw-r--r-- | src/common/servlist.c | 5 | ||||
-rw-r--r-- | src/common/sysinfo/win32/backend.c | 2 | ||||
-rw-r--r-- | src/common/util.c | 5 |
9 files changed, 67 insertions, 16 deletions
diff --git a/src/common/fe.h b/src/common/fe.h index 9da4e230..b8a6279e 100644 --- a/src/common/fe.h +++ b/src/common/fe.h @@ -141,6 +141,7 @@ void fe_get_int (char *prompt, int def, void *callback, void *ud); #define FRF_NOASKOVERWRITE 32 /* don't ask to overwrite existing files */ #define FRF_EXTENSIONS 64 /* specify file extensions to be displayed */ #define FRF_MIMETYPES 128 /* specify file mimetypes to be displayed */ +#define FRF_MODAL 256 /* dialog should be modal to parent */ void fe_get_file (const char *title, char *initial, void (*callback) (void *userdata, char *file), void *userdata, int flags); diff --git a/src/common/hexchat.h b/src/common/hexchat.h index 43a5f43a..470dd4ad 100644 --- a/src/common/hexchat.h +++ b/src/common/hexchat.h @@ -501,7 +501,7 @@ typedef struct server int joindelay_tag; /* waiting before we send JOIN */ char hostname[128]; /* real ip number */ char servername[128]; /* what the server says is its name */ - char password[86]; + char password[1024]; char nick[NICKLEN]; char linebuf[8704]; /* RFC says 512 chars including \r\n, IRCv3 message tags add 8191, plus the NUL byte */ char *last_away_reason; diff --git a/src/common/inbound.c b/src/common/inbound.c index 3c505a57..a591dc48 100644 --- a/src/common/inbound.c +++ b/src/common/inbound.c @@ -1474,10 +1474,17 @@ inbound_user_info (session *sess, char *chan, char *user, char *host, for (list = sess_list; list; list = list->next) { sess = list->data; - if (sess->type == SESS_CHANNEL && sess->server == serv) + if (sess->server != serv) + continue; + + if (sess->type == SESS_CHANNEL) { userlist_add_hostname (sess, nick, uhost, realname, servname, account, away); } + else if (sess->type == SESS_DIALOG && uhost && !serv->p_cmp (sess->channel, nick)) + { + set_topic (sess, uhost, uhost); + } } } @@ -1728,6 +1735,7 @@ static const char * const supported_caps[] = { "setname", "invite-notify", "account-tag", + "extended-monitor", /* ZNC */ "znc.in/server-time-iso", @@ -1929,7 +1937,24 @@ inbound_sasl_authenticate (server *serv, char *data) return; } - tcp_sendf (serv, "AUTHENTICATE %s\r\n", pass); + /* long SASL passwords must be split into 400-byte chunks + https://ircv3.net/specs/extensions/sasl-3.1#the-authenticate-command */ + size_t pass_len = strlen (pass); + if (pass_len <= 400) + tcp_sendf (serv, "AUTHENTICATE %s\r\n", pass); + else + { + size_t sent = 0; + while (sent < pass_len) + { + char *pass_chunk = g_strndup (pass + sent, 400); + tcp_sendf (serv, "AUTHENTICATE %s\r\n", pass_chunk); + sent += 400; + g_free (pass_chunk); + } + } + if (pass_len % 400 == 0) + tcp_sendf (serv, "AUTHENTICATE +\r\n"); g_free (pass); diff --git a/src/common/modes.c b/src/common/modes.c index 756f0858..d8fd75aa 100644 --- a/src/common/modes.c +++ b/src/common/modes.c @@ -918,8 +918,12 @@ inbound_005 (server * serv, char *word[], const message_tags_data *tags_data) server_set_encoding (serv, "UTF-8"); } else if (g_strcmp0 (tokname, "NAMESX") == 0) { - /* 12345678901234567 */ - tcp_send_len (serv, "PROTOCTL NAMESX\r\n", 17); + if (tokadding && !serv->have_namesx) + { + /* only use protoctl if the server doesn't have the equivalent cap */ + tcp_send_len (serv, "PROTOCTL NAMESX\r\n", 17); + serv->have_namesx = TRUE; + } } else if (g_strcmp0 (tokname, "WHOX") == 0) { serv->have_whox = tokadding; diff --git a/src/common/outbound.c b/src/common/outbound.c index 6f0241be..b9f88196 100644 --- a/src/common/outbound.c +++ b/src/common/outbound.c @@ -3249,7 +3249,7 @@ cmd_reconnect (struct session *sess, char *tbuf, char *word[], char *word_eol[]) int offset = 0; #ifdef USE_OPENSSL - int use_ssl = FALSE; + int use_ssl = TRUE; int use_ssl_noverify = FALSE; if (g_strcmp0 (word[2], "-ssl") == 0) { @@ -3261,6 +3261,11 @@ cmd_reconnect (struct session *sess, char *tbuf, char *word[], char *word_eol[]) use_ssl = TRUE; use_ssl_noverify = TRUE; offset++; /* args move up by 1 word */ + } else if (g_strcmp0 (word[2], "-insecure") == 0) + { + use_ssl = FALSE; + use_ssl_noverify = FALSE; + offset++; /* args move up by 1 word */ } serv->use_ssl = use_ssl; serv->accept_invalid_cert = use_ssl_noverify; @@ -3450,8 +3455,10 @@ cmd_server (struct session *sess, char *tbuf, char *word[], char *word_eol[]) char *pass = NULL; char *channel = NULL; char *key = NULL; - int use_ssl = FALSE; +#ifdef USE_OPENSSL + int use_ssl = TRUE; int use_ssl_noverify = FALSE; +#endif int is_url = TRUE; server *serv = sess->server; ircnet *net = NULL; @@ -3469,6 +3476,11 @@ cmd_server (struct session *sess, char *tbuf, char *word[], char *word_eol[]) use_ssl_noverify = TRUE; offset++; /* args move up by 1 word */ } + else if (g_strcmp0 (word[2], "-insecure") == 0) + { + use_ssl = FALSE; + offset++; /* args move up by 1 word */ + } #endif if (!parse_irc_url (word[2 + offset], &server_name, &port, &channel, &key, &use_ssl)) @@ -3509,6 +3521,13 @@ cmd_server (struct session *sess, char *tbuf, char *word[], char *word_eol[]) use_ssl = TRUE; #endif } + else if (port[0] == '-') + { + port++; +#ifdef USE_OPENSSL + use_ssl = FALSE; +#endif + } if (*pass) { @@ -3564,7 +3583,7 @@ cmd_servchan (struct session *sess, char *tbuf, char *word[], int offset = 0; #ifdef USE_OPENSSL - if (g_strcmp0 (word[2], "-ssl") == 0 || g_strcmp0 (word[2], "-ssl-noverify") == 0) + if (g_strcmp0 (word[2], "-ssl") == 0 || g_strcmp0 (word[2], "-ssl-noverify") == 0 || g_strcmp0 (word[2], "-insecure") == 0) offset++; #endif @@ -4098,14 +4117,14 @@ const struct commands xc_cmds[] = { {"SEND", cmd_send, 0, 0, 1, N_("SEND <nick> [<file>]")}, #ifdef USE_OPENSSL {"SERVCHAN", cmd_servchan, 0, 0, 1, - N_("SERVCHAN [-ssl|-ssl-noverify] <host> <port> <channel>, connects and joins a channel")}, + N_("SERVCHAN [-insecure|-ssl|-ssl-noverify] <host> <port> <channel>, connects and joins a channel using ssl unless otherwise specified")}, #else {"SERVCHAN", cmd_servchan, 0, 0, 1, N_("SERVCHAN <host> <port> <channel>, connects and joins a channel")}, #endif #ifdef USE_OPENSSL {"SERVER", cmd_server, 0, 0, 1, - N_("SERVER [-ssl|-ssl-noverify] <host> [<port>] [<password>], connects to a server, the default port is 6667 for normal connections, and 6697 for ssl connections")}, + N_("SERVER [-insecure|-ssl|-ssl-noverify] <host> [<port>] [<password>], connects to a server using ssl unless otherwise specified, the default port is 6697 for ssl connections and 6667 for insecure connections")}, #else {"SERVER", cmd_server, 0, 0, 1, N_("SERVER <host> [<port>] [<password>], connects to a server, the default port is 6667")}, diff --git a/src/common/proto-irc.c b/src/common/proto-irc.c index 32cc47f2..5b8e02c4 100644 --- a/src/common/proto-irc.c +++ b/src/common/proto-irc.c @@ -461,7 +461,7 @@ channel_date (session *sess, char *chan, char *timestr, } static int -trailing_index(const char *word_eol[]) +trailing_index(char *word_eol[]) { int param_index; for (param_index = 3; param_index < PDIWORDS; ++param_index) diff --git a/src/common/servlist.c b/src/common/servlist.c index 160cc9e0..771d7813 100644 --- a/src/common/servlist.c +++ b/src/common/servlist.c @@ -54,8 +54,6 @@ static const struct defaultserver def[] = /* Invalid hostname in cert */ {0, "irc.2600.net"}, - {"ACN", 0, 0, 0, LOGIN_SASL, 0, TRUE}, - {0, "global.acn.gr"}, {"AfterNET", 0, 0, 0, LOGIN_SASL, 0, TRUE}, {0, "irc.afternet.org"}, @@ -193,9 +191,6 @@ static const struct defaultserver def[] = {"IRC4Fun", 0, 0, 0, LOGIN_SASL, 0, TRUE}, {0, "irc.irc4fun.net"}, - {"IRCHighWay", 0, 0, 0, 0, 0, TRUE}, - {0, "irc.irchighway.net"}, - {"IRCNet", 0}, {0, "open.ircnet.net"}, diff --git a/src/common/sysinfo/win32/backend.c b/src/common/sysinfo/win32/backend.c index 67a0fd2b..e2ae83ed 100644 --- a/src/common/sysinfo/win32/backend.c +++ b/src/common/sysinfo/win32/backend.c @@ -356,6 +356,8 @@ static char *read_cpu_info (IWbemClassObject *object) VariantClear (&max_clock_speed_variant); + g_strchomp (name_utf8); + if (cpu_freq_mhz > 1000) { result = g_strdup_printf ("%s (%.2fGHz)", name_utf8, cpu_freq_mhz / 1000.f); diff --git a/src/common/util.c b/src/common/util.c index fa0783d4..f06074fc 100644 --- a/src/common/util.c +++ b/src/common/util.c @@ -1375,11 +1375,16 @@ str_sha256hash (char *string) int i; unsigned char hash[SHA256_DIGEST_LENGTH]; char buf[SHA256_DIGEST_LENGTH * 2 + 1]; /* 64 digit hash + '\0' */ + +#if OPENSSL_VERSION_NUMBER >= 0x30000000L + SHA256 (string, strlen (string), hash); +#else SHA256_CTX sha256; SHA256_Init (&sha256); SHA256_Update (&sha256, string, strlen (string)); SHA256_Final (hash, &sha256); +#endif for (i = 0; i < SHA256_DIGEST_LENGTH; i++) { |