diff --git a/ChangeLog.adoc b/ChangeLog.adoc index 831de4d5d..50a9e6ffd 100644 --- a/ChangeLog.adoc +++ b/ChangeLog.adoc @@ -36,6 +36,7 @@ New features:: * api: add info "weechat_daemon" * buflist: add option buflist.format.tls_version * fifo: change default value of option fifo.file.path to "${weechat_runtime_dir}/weechat_fifo_${info:pid}" + * irc: add support of SASL mechanisms SCRAM-SHA-1, SCRAM-SHA-256 and SCRAM-SHA-512 (issue #1628) * irc: add variable "${target}" (target nick) in commands /kick and /kickban * irc: add bar item "tls_version", add options irc.color.item_tls_version_ok, irc.color.item_tls_version_deprecated and irc.color.item_tls_version_insecure (issue #1622) * irc: evaluate server options "sasl_key" and "ssl_cert" diff --git a/doc/de/includes/autogen_api_hdata.de.adoc b/doc/de/includes/autogen_api_hdata.de.adoc index 5c98a64a7..873beff98 100644 --- a/doc/de/includes/autogen_api_hdata.de.adoc +++ b/doc/de/includes/autogen_api_hdata.de.adoc @@ -233,6 +233,10 @@ _hook_connect_   (pointer, hdata: "hook") + _hook_fd_   (pointer, hdata: "hook") + _hook_timer_connection_   (pointer, hdata: "hook") + _hook_timer_sasl_   (pointer, hdata: "hook") + +_sasl_scram_client_first_   (string) + +_sasl_scram_salted_pwd_   (other) + +_sasl_scram_salted_pwd_size_   (integer) + +_sasl_scram_auth_message_   (string) + _is_connected_   (integer) + _ssl_connected_   (integer) + _disconnected_   (integer) + diff --git a/doc/de/includes/autogen_user_options.de.adoc b/doc/de/includes/autogen_user_options.de.adoc index 93d22ce99..265aa6316 100644 --- a/doc/de/includes/autogen_user_options.de.adoc +++ b/doc/de/includes/autogen_user_options.de.adoc @@ -2779,9 +2779,9 @@ ** Standardwert: `+""+` * [[option_irc.server_default.sasl_mechanism]] *irc.server_default.sasl_mechanism* -** Beschreibung: pass:none[Verfahren welches bei einer SASL Authentifizierung angewandt werden soll: "plain" Passwort wird im Klartext gesendet, "ecdsa-nist256p-challenge" für öffentlich/private Schlüsselmethode, "external" SSL Zertifikat welches auf Client Seite vorliegt wird verwendet, "dh-blowfish" Passwort wird mittels blowfish verschlüsselt (unsicher, wird nicht empfohlen), "dh-aes" Passwort wird mittels AES verschlüsselt (unsicher, wird nicht empfohlen)] +** Beschreibung: pass:none[mechanism for SASL authentication: "plain" for plain text password, "scram-sha-1" for SCRAM authentication with SHA-1 algorithm, "scram-sha-256" for SCRAM authentication with SHA-256 algorithm, "scram-sha-512" for SCRAM authentication with SHA-512 algorithm, "ecdsa-nist256p-challenge" for key-based challenge authentication, "external" for authentication using client side SSL cert, "dh-blowfish" for blowfish crypted password (insecure, not recommended), "dh-aes" for AES crypted password (insecure, not recommended)] ** Typ: integer -** Werte: plain, ecdsa-nist256p-challenge, external, dh-blowfish, dh-aes +** Werte: plain, scram-sha-1, scram-sha-256, scram-sha-512, ecdsa-nist256p-challenge, external, dh-blowfish, dh-aes ** Standardwert: `+plain+` * [[option_irc.server_default.sasl_password]] *irc.server_default.sasl_password* diff --git a/doc/en/includes/autogen_api_hdata.en.adoc b/doc/en/includes/autogen_api_hdata.en.adoc index dfac74fda..964cc0766 100644 --- a/doc/en/includes/autogen_api_hdata.en.adoc +++ b/doc/en/includes/autogen_api_hdata.en.adoc @@ -233,6 +233,10 @@ _hook_connect_   (pointer, hdata: "hook") + _hook_fd_   (pointer, hdata: "hook") + _hook_timer_connection_   (pointer, hdata: "hook") + _hook_timer_sasl_   (pointer, hdata: "hook") + +_sasl_scram_client_first_   (string) + +_sasl_scram_salted_pwd_   (other) + +_sasl_scram_salted_pwd_size_   (integer) + +_sasl_scram_auth_message_   (string) + _is_connected_   (integer) + _ssl_connected_   (integer) + _disconnected_   (integer) + diff --git a/doc/en/includes/autogen_user_options.en.adoc b/doc/en/includes/autogen_user_options.en.adoc index a61574531..4593d3f1f 100644 --- a/doc/en/includes/autogen_user_options.en.adoc +++ b/doc/en/includes/autogen_user_options.en.adoc @@ -2779,9 +2779,9 @@ ** default value: `+""+` * [[option_irc.server_default.sasl_mechanism]] *irc.server_default.sasl_mechanism* -** description: pass:none[mechanism for SASL authentication: "plain" for plain text password, "ecdsa-nist256p-challenge" for key-based challenge authentication, "external" for authentication using client side SSL cert, "dh-blowfish" for blowfish crypted password (insecure, not recommended), "dh-aes" for AES crypted password (insecure, not recommended)] +** description: pass:none[mechanism for SASL authentication: "plain" for plain text password, "scram-sha-1" for SCRAM authentication with SHA-1 algorithm, "scram-sha-256" for SCRAM authentication with SHA-256 algorithm, "scram-sha-512" for SCRAM authentication with SHA-512 algorithm, "ecdsa-nist256p-challenge" for key-based challenge authentication, "external" for authentication using client side SSL cert, "dh-blowfish" for blowfish crypted password (insecure, not recommended), "dh-aes" for AES crypted password (insecure, not recommended)] ** type: integer -** values: plain, ecdsa-nist256p-challenge, external, dh-blowfish, dh-aes +** values: plain, scram-sha-1, scram-sha-256, scram-sha-512, ecdsa-nist256p-challenge, external, dh-blowfish, dh-aes ** default value: `+plain+` * [[option_irc.server_default.sasl_password]] *irc.server_default.sasl_password* diff --git a/doc/fr/includes/autogen_api_hdata.fr.adoc b/doc/fr/includes/autogen_api_hdata.fr.adoc index 2d9ea401d..af2f464b8 100644 --- a/doc/fr/includes/autogen_api_hdata.fr.adoc +++ b/doc/fr/includes/autogen_api_hdata.fr.adoc @@ -233,6 +233,10 @@ _hook_connect_   (pointer, hdata: "hook") + _hook_fd_   (pointer, hdata: "hook") + _hook_timer_connection_   (pointer, hdata: "hook") + _hook_timer_sasl_   (pointer, hdata: "hook") + +_sasl_scram_client_first_   (string) + +_sasl_scram_salted_pwd_   (other) + +_sasl_scram_salted_pwd_size_   (integer) + +_sasl_scram_auth_message_   (string) + _is_connected_   (integer) + _ssl_connected_   (integer) + _disconnected_   (integer) + diff --git a/doc/fr/includes/autogen_user_options.fr.adoc b/doc/fr/includes/autogen_user_options.fr.adoc index a0b10f986..81025ff12 100644 --- a/doc/fr/includes/autogen_user_options.fr.adoc +++ b/doc/fr/includes/autogen_user_options.fr.adoc @@ -2779,9 +2779,9 @@ ** valeur par défaut: `+""+` * [[option_irc.server_default.sasl_mechanism]] *irc.server_default.sasl_mechanism* -** description: pass:none[mécanisme pour l'authentification SASL : "plain" pour un mot de passe en clair, "ecdsa-nist256p-challenge" pour une authentification par challenge avec clé, "external" pour une authentification en utilisant un certificat SSL côté client, "dh-blowfish" pour un mot de passe chiffré avec blowfish (non sûr, non recommandé), "dh-aes" pour un mot de passe chiffré avec AES (non sûr, non recommandé)] +** description: pass:none[mécanisme pour l'authentification SASL : "plain" pour un mot de passe en clair, "scram-sha-1" pour une authentification SCRAM avec algorithme SHA-1, "scram-sha-256" pour une authentification SCRAM avec algorithme SHA-256, "scram-sha-512" pour une authentification SCRAM avec algorithme SHA-512, "ecdsa-nist256p-challenge" pour une authentification par challenge avec clé, "external" pour une authentification en utilisant un certificat SSL côté client, "dh-blowfish" pour un mot de passe chiffré avec blowfish (non sûr, non recommandé), "dh-aes" pour un mot de passe chiffré avec AES (non sûr, non recommandé)] ** type: entier -** valeurs: plain, ecdsa-nist256p-challenge, external, dh-blowfish, dh-aes +** valeurs: plain, scram-sha-1, scram-sha-256, scram-sha-512, ecdsa-nist256p-challenge, external, dh-blowfish, dh-aes ** valeur par défaut: `+plain+` * [[option_irc.server_default.sasl_password]] *irc.server_default.sasl_password* diff --git a/doc/it/includes/autogen_api_hdata.it.adoc b/doc/it/includes/autogen_api_hdata.it.adoc index c14e135d9..fe2d51aae 100644 --- a/doc/it/includes/autogen_api_hdata.it.adoc +++ b/doc/it/includes/autogen_api_hdata.it.adoc @@ -233,6 +233,10 @@ _hook_connect_   (pointer, hdata: "hook") + _hook_fd_   (pointer, hdata: "hook") + _hook_timer_connection_   (pointer, hdata: "hook") + _hook_timer_sasl_   (pointer, hdata: "hook") + +_sasl_scram_client_first_   (string) + +_sasl_scram_salted_pwd_   (other) + +_sasl_scram_salted_pwd_size_   (integer) + +_sasl_scram_auth_message_   (string) + _is_connected_   (integer) + _ssl_connected_   (integer) + _disconnected_   (integer) + diff --git a/doc/it/includes/autogen_user_options.it.adoc b/doc/it/includes/autogen_user_options.it.adoc index fa67adf9d..949c4082b 100644 --- a/doc/it/includes/autogen_user_options.it.adoc +++ b/doc/it/includes/autogen_user_options.it.adoc @@ -2779,9 +2779,9 @@ ** valore predefinito: `+""+` * [[option_irc.server_default.sasl_mechanism]] *irc.server_default.sasl_mechanism* -** descrizione: pass:none[mechanism for SASL authentication: "plain" for plain text password, "ecdsa-nist256p-challenge" for key-based challenge authentication, "external" for authentication using client side SSL cert, "dh-blowfish" for blowfish crypted password (insecure, not recommended), "dh-aes" for AES crypted password (insecure, not recommended)] +** descrizione: pass:none[mechanism for SASL authentication: "plain" for plain text password, "scram-sha-1" for SCRAM authentication with SHA-1 algorithm, "scram-sha-256" for SCRAM authentication with SHA-256 algorithm, "scram-sha-512" for SCRAM authentication with SHA-512 algorithm, "ecdsa-nist256p-challenge" for key-based challenge authentication, "external" for authentication using client side SSL cert, "dh-blowfish" for blowfish crypted password (insecure, not recommended), "dh-aes" for AES crypted password (insecure, not recommended)] ** tipo: intero -** valori: plain, ecdsa-nist256p-challenge, external, dh-blowfish, dh-aes +** valori: plain, scram-sha-1, scram-sha-256, scram-sha-512, ecdsa-nist256p-challenge, external, dh-blowfish, dh-aes ** valore predefinito: `+plain+` * [[option_irc.server_default.sasl_password]] *irc.server_default.sasl_password* diff --git a/doc/ja/includes/autogen_api_hdata.ja.adoc b/doc/ja/includes/autogen_api_hdata.ja.adoc index 348f49fa6..c053c974e 100644 --- a/doc/ja/includes/autogen_api_hdata.ja.adoc +++ b/doc/ja/includes/autogen_api_hdata.ja.adoc @@ -233,6 +233,10 @@ _hook_connect_   (pointer, hdata: "hook") + _hook_fd_   (pointer, hdata: "hook") + _hook_timer_connection_   (pointer, hdata: "hook") + _hook_timer_sasl_   (pointer, hdata: "hook") + +_sasl_scram_client_first_   (string) + +_sasl_scram_salted_pwd_   (other) + +_sasl_scram_salted_pwd_size_   (integer) + +_sasl_scram_auth_message_   (string) + _is_connected_   (integer) + _ssl_connected_   (integer) + _disconnected_   (integer) + diff --git a/doc/ja/includes/autogen_user_options.ja.adoc b/doc/ja/includes/autogen_user_options.ja.adoc index 7c0c74ed0..6d21162c5 100644 --- a/doc/ja/includes/autogen_user_options.ja.adoc +++ b/doc/ja/includes/autogen_user_options.ja.adoc @@ -2779,9 +2779,9 @@ ** デフォルト値: `+""+` * [[option_irc.server_default.sasl_mechanism]] *irc.server_default.sasl_mechanism* -** 説明: pass:none[SASL 認証メカニズム: "plain" は平文パスワード、"ecdsa-nist256p-challenge" は鍵を使ったチャレンジ認証、"external" はクライアント側の SSL 証明書を利用した認証<、"dh-blowfish" は blowfish 暗号化パスワード (危険、非推奨)、"dh-aes" は AES 暗号化パスワード (危険、非推奨)] +** 説明: pass:none[mechanism for SASL authentication: "plain" for plain text password, "scram-sha-1" for SCRAM authentication with SHA-1 algorithm, "scram-sha-256" for SCRAM authentication with SHA-256 algorithm, "scram-sha-512" for SCRAM authentication with SHA-512 algorithm, "ecdsa-nist256p-challenge" for key-based challenge authentication, "external" for authentication using client side SSL cert, "dh-blowfish" for blowfish crypted password (insecure, not recommended), "dh-aes" for AES crypted password (insecure, not recommended)] ** タイプ: 整数 -** 値: plain, ecdsa-nist256p-challenge, external, dh-blowfish, dh-aes +** 値: plain, scram-sha-1, scram-sha-256, scram-sha-512, ecdsa-nist256p-challenge, external, dh-blowfish, dh-aes ** デフォルト値: `+plain+` * [[option_irc.server_default.sasl_password]] *irc.server_default.sasl_password* diff --git a/doc/pl/includes/autogen_api_hdata.pl.adoc b/doc/pl/includes/autogen_api_hdata.pl.adoc index cd97ce55b..dd535008f 100644 --- a/doc/pl/includes/autogen_api_hdata.pl.adoc +++ b/doc/pl/includes/autogen_api_hdata.pl.adoc @@ -233,6 +233,10 @@ _hook_connect_   (pointer, hdata: "hook") + _hook_fd_   (pointer, hdata: "hook") + _hook_timer_connection_   (pointer, hdata: "hook") + _hook_timer_sasl_   (pointer, hdata: "hook") + +_sasl_scram_client_first_   (string) + +_sasl_scram_salted_pwd_   (other) + +_sasl_scram_salted_pwd_size_   (integer) + +_sasl_scram_auth_message_   (string) + _is_connected_   (integer) + _ssl_connected_   (integer) + _disconnected_   (integer) + diff --git a/doc/pl/includes/autogen_user_options.pl.adoc b/doc/pl/includes/autogen_user_options.pl.adoc index cf9e2a2dc..87f3fac53 100644 --- a/doc/pl/includes/autogen_user_options.pl.adoc +++ b/doc/pl/includes/autogen_user_options.pl.adoc @@ -2779,9 +2779,9 @@ ** domyślna wartość: `+""+` * [[option_irc.server_default.sasl_mechanism]] *irc.server_default.sasl_mechanism* -** opis: pass:none[mechanizm autentykacji SASL: "plain" dla hasła w czystym tekście, "ecdsa-nist256p-challenge" uwierzytelnianie na podstawie pary kluczy, "external" dla uwierzytelnienia za pomocą certyfikatu SSL po stronie klienta", "dh-blowfish" dla hasła szyfrowanego za pomocą blowfish (mało bezpieczne, niepolecane), "dh-aes" dla hasła szyfrowanego za pomocą AES (mało bezpieczne, niepolecane)] +** opis: pass:none[mechanism for SASL authentication: "plain" for plain text password, "scram-sha-1" for SCRAM authentication with SHA-1 algorithm, "scram-sha-256" for SCRAM authentication with SHA-256 algorithm, "scram-sha-512" for SCRAM authentication with SHA-512 algorithm, "ecdsa-nist256p-challenge" for key-based challenge authentication, "external" for authentication using client side SSL cert, "dh-blowfish" for blowfish crypted password (insecure, not recommended), "dh-aes" for AES crypted password (insecure, not recommended)] ** typ: liczba -** wartości: plain, ecdsa-nist256p-challenge, external, dh-blowfish, dh-aes +** wartości: plain, scram-sha-1, scram-sha-256, scram-sha-512, ecdsa-nist256p-challenge, external, dh-blowfish, dh-aes ** domyślna wartość: `+plain+` * [[option_irc.server_default.sasl_password]] *irc.server_default.sasl_password* diff --git a/po/cs.po b/po/cs.po index 03ec7ed7d..8613514a9 100644 --- a/po/cs.po +++ b/po/cs.po @@ -21,7 +21,7 @@ msgid "" msgstr "" "Project-Id-Version: WeeChat\n" "Report-Msgid-Bugs-To: flashcode@flashtux.org\n" -"POT-Creation-Date: 2021-05-30 15:18+0200\n" +"POT-Creation-Date: 2021-06-01 20:39+0200\n" "PO-Revision-Date: 2021-05-25 18:28+0200\n" "Last-Translator: Ondřej Súkup \n" "Language-Team: weechat-dev \n" @@ -8020,10 +8020,13 @@ msgstr "" msgid "" "mechanism for SASL authentication: \"plain\" for plain text password, " -"\"ecdsa-nist256p-challenge\" for key-based challenge authentication, " -"\"external\" for authentication using client side SSL cert, \"dh-blowfish\" " -"for blowfish crypted password (insecure, not recommended), \"dh-aes\" for " -"AES crypted password (insecure, not recommended)" +"\"scram-sha-1\" for SCRAM authentication with SHA-1 algorithm, \"scram-" +"sha-256\" for SCRAM authentication with SHA-256 algorithm, \"scram-sha-512\" " +"for SCRAM authentication with SHA-512 algorithm, \"ecdsa-nist256p-challenge" +"\" for key-based challenge authentication, \"external\" for authentication " +"using client side SSL cert, \"dh-blowfish\" for blowfish crypted password " +"(insecure, not recommended), \"dh-aes\" for AES crypted password (insecure, " +"not recommended)" msgstr "" #, fuzzy @@ -9094,12 +9097,12 @@ msgstr "%s%s%s%s vykopnul %s%s%s" msgid "%s%s%s%s has unidentified" msgstr "Limit pro zdroj \"%s\" byl nastaven na %s" -#, c-format -msgid "" -"%s%s: error building answer for SASL authentication, using mechanism \"%s\"" +#, fuzzy, c-format +msgid "%s%s: SASL error: %s" +msgstr "%s%s: chyba: %s" + +msgid "internal error" msgstr "" -"%s%s: chyba vytváření odpovědi pro SASL autentizaci, použitý mechanismus \"%s" -"\"" #, fuzzy, c-format msgid "%s%s: client capability, requesting: %s" @@ -9511,26 +9514,30 @@ msgstr "" msgid "%s%s: server \"%s\" not found for redirect" msgstr "%s%s: server \"%s\" pro přesměrování nenalezen" -#, fuzzy, c-format -msgid "%s%s: unable to read private key in file \"%s\"" -msgstr "%s%s: nemohu číst lokální soubor" +#, fuzzy +msgid "unable to validate server signature" +msgstr "%s%s: nemohu přidat server" -#, fuzzy, c-format -msgid "%sgnutls: invalid private key file: error %d %s" -msgstr "%sgnutls: nevalidní certifikát \"%s\", chyba: %s" +#, fuzzy +msgid "memory error" +msgstr "chyba" + +msgid "base64 decode error" +msgstr "" + +msgid "base64 encode error" +msgstr "" + +msgid "cryptography error" +msgstr "" + +msgid "protocol error" +msgstr "" #, c-format msgid "%s%s: signing the challenge with ECC public key: %s" msgstr "" -#, fuzzy, c-format -msgid "%sgnutls: unable to import the private key: error %d %s" -msgstr "%s%s: nemohu vytvořit rouru" - -#, fuzzy, c-format -msgid "%sgnutls: unable to sign the hashed data: error %d %s" -msgstr "%s%s: nemohu vytvořit rouru" - #, c-format msgid "" "%sgnutls: version >= 3.0.21 is required for SASL \"ecdsa-nist256p-challenge\"" @@ -13143,5 +13150,29 @@ msgstr "%s%s: vypršel časový limit \"%s\" pro %s" msgid "%s%s: unable to connect: unexpected error (%d)" msgstr "%s%s: nemohu se připojit\" neočekávaná chyba (%d)" +#, c-format +#~ msgid "" +#~ "%s%s: error building answer for SASL authentication, using mechanism \"%s" +#~ "\"" +#~ msgstr "" +#~ "%s%s: chyba vytváření odpovědi pro SASL autentizaci, použitý mechanismus " +#~ "\"%s\"" + +#, fuzzy, c-format +#~ msgid "%s%s: unable to read private key in file \"%s\"" +#~ msgstr "%s%s: nemohu číst lokální soubor" + +#, fuzzy, c-format +#~ msgid "%sgnutls: invalid private key file: error %d %s" +#~ msgstr "%sgnutls: nevalidní certifikát \"%s\", chyba: %s" + +#, fuzzy, c-format +#~ msgid "%sgnutls: unable to import the private key: error %d %s" +#~ msgstr "%s%s: nemohu vytvořit rouru" + +#, fuzzy, c-format +#~ msgid "%sgnutls: unable to sign the hashed data: error %d %s" +#~ msgstr "%s%s: nemohu vytvořit rouru" + #~ msgid "bar size in chars (0 = auto size)" #~ msgstr "velikost pole ve znacích (0 = automatická velikost)" diff --git a/po/de.po b/po/de.po index 58e074d37..1fa469cf5 100644 --- a/po/de.po +++ b/po/de.po @@ -24,7 +24,7 @@ msgid "" msgstr "" "Project-Id-Version: WeeChat\n" "Report-Msgid-Bugs-To: flashcode@flashtux.org\n" -"POT-Creation-Date: 2021-05-30 15:18+0200\n" +"POT-Creation-Date: 2021-06-01 20:39+0200\n" "PO-Revision-Date: 2021-05-30 19:02+0200\n" "Last-Translator: Nils Görs \n" "Language-Team: German \n" @@ -9874,12 +9874,16 @@ msgstr "" "(siehe /help cap um eine Liste von Fähigkeiten zu erhalten die von WeeChat " "unterstützt werden) (Beispiel: \"away-notify,multi-prefix\")" +#, fuzzy msgid "" "mechanism for SASL authentication: \"plain\" for plain text password, " -"\"ecdsa-nist256p-challenge\" for key-based challenge authentication, " -"\"external\" for authentication using client side SSL cert, \"dh-blowfish\" " -"for blowfish crypted password (insecure, not recommended), \"dh-aes\" for " -"AES crypted password (insecure, not recommended)" +"\"scram-sha-1\" for SCRAM authentication with SHA-1 algorithm, \"scram-" +"sha-256\" for SCRAM authentication with SHA-256 algorithm, \"scram-sha-512\" " +"for SCRAM authentication with SHA-512 algorithm, \"ecdsa-nist256p-challenge" +"\" for key-based challenge authentication, \"external\" for authentication " +"using client side SSL cert, \"dh-blowfish\" for blowfish crypted password " +"(insecure, not recommended), \"dh-aes\" for AES crypted password (insecure, " +"not recommended)" msgstr "" "Verfahren welches bei einer SASL Authentifizierung angewandt werden soll: " "\"plain\" Passwort wird im Klartext gesendet, \"ecdsa-nist256p-challenge\" " @@ -11166,12 +11170,12 @@ msgstr "%s%s%s%s wurde identifiziert als %s" msgid "%s%s%s%s has unidentified" msgstr "%s%s%s%s hat sich nicht identifiziert" -#, c-format -msgid "" -"%s%s: error building answer for SASL authentication, using mechanism \"%s\"" +#, fuzzy, c-format +msgid "%s%s: SASL error: %s" +msgstr "%s%s: Fehler: %s" + +msgid "internal error" msgstr "" -"%s%s: Fehler beim Erstellen der Antwort für die SASL-Authentifizierung. \"%s" -"\" Mechanismus wurde verwendet" #, c-format msgid "%s%s: client capability, requesting: %s" @@ -11587,28 +11591,30 @@ msgstr "" msgid "%s%s: server \"%s\" not found for redirect" msgstr "%s%s: Server \"%s\" für eine Weiterleitung wurde nicht gefunden" -#, c-format -msgid "%s%s: unable to read private key in file \"%s\"" -msgstr "%s%s: privater Schlüssel kann nicht aus Datei gelesen werden \"%s\"" +#, fuzzy +msgid "unable to validate server signature" +msgstr "%s%s: Server kann nicht anlegt werden" -#, c-format -msgid "%sgnutls: invalid private key file: error %d %s" -msgstr "%sgnutls: ungültige private Schlüsseldatei: Fehler %d %s" +#, fuzzy +msgid "memory error" +msgstr "Fork-Fehler" + +msgid "base64 decode error" +msgstr "" + +msgid "base64 encode error" +msgstr "" + +msgid "cryptography error" +msgstr "" + +msgid "protocol error" +msgstr "" #, c-format msgid "%s%s: signing the challenge with ECC public key: %s" msgstr "%s%s: signiere mittels ECC öffentlichem Schlüssel: %s" -#, c-format -msgid "%sgnutls: unable to import the private key: error %d %s" -msgstr "" -"%sgnutls: privater Schlüssel kann nicht importiert werden: Fehler %d %s" - -#, c-format -msgid "%sgnutls: unable to sign the hashed data: error %d %s" -msgstr "" -"%sgnutls: die gehashten Daten können nicht signiert werden : Fehler %d %s" - #, c-format msgid "" "%sgnutls: version >= 3.0.21 is required for SASL \"ecdsa-nist256p-challenge\"" @@ -15684,5 +15690,31 @@ msgid "%s%s: unable to connect: unexpected error (%d)" msgstr "" "%s%s: Verbindung konnte nicht hergestellt werden: unerwarteter Fehler (%d)" +#, c-format +#~ msgid "" +#~ "%s%s: error building answer for SASL authentication, using mechanism \"%s" +#~ "\"" +#~ msgstr "" +#~ "%s%s: Fehler beim Erstellen der Antwort für die SASL-Authentifizierung. " +#~ "\"%s\" Mechanismus wurde verwendet" + +#, c-format +#~ msgid "%s%s: unable to read private key in file \"%s\"" +#~ msgstr "%s%s: privater Schlüssel kann nicht aus Datei gelesen werden \"%s\"" + +#, c-format +#~ msgid "%sgnutls: invalid private key file: error %d %s" +#~ msgstr "%sgnutls: ungültige private Schlüsseldatei: Fehler %d %s" + +#, c-format +#~ msgid "%sgnutls: unable to import the private key: error %d %s" +#~ msgstr "" +#~ "%sgnutls: privater Schlüssel kann nicht importiert werden: Fehler %d %s" + +#, c-format +#~ msgid "%sgnutls: unable to sign the hashed data: error %d %s" +#~ msgstr "" +#~ "%sgnutls: die gehashten Daten können nicht signiert werden : Fehler %d %s" + #~ msgid "bar size in chars (0 = auto size)" #~ msgstr "Größe der Infobar, in Zeichen (0 = automatische Anpassung)" diff --git a/po/es.po b/po/es.po index 86a716f76..f206561c4 100644 --- a/po/es.po +++ b/po/es.po @@ -22,7 +22,7 @@ msgid "" msgstr "" "Project-Id-Version: WeeChat\n" "Report-Msgid-Bugs-To: flashcode@flashtux.org\n" -"POT-Creation-Date: 2021-05-30 15:18+0200\n" +"POT-Creation-Date: 2021-06-01 20:39+0200\n" "PO-Revision-Date: 2021-05-25 18:28+0200\n" "Last-Translator: Elián Hanisch \n" "Language-Team: weechat-dev \n" @@ -8259,10 +8259,13 @@ msgstr "" #, fuzzy msgid "" "mechanism for SASL authentication: \"plain\" for plain text password, " -"\"ecdsa-nist256p-challenge\" for key-based challenge authentication, " -"\"external\" for authentication using client side SSL cert, \"dh-blowfish\" " -"for blowfish crypted password (insecure, not recommended), \"dh-aes\" for " -"AES crypted password (insecure, not recommended)" +"\"scram-sha-1\" for SCRAM authentication with SHA-1 algorithm, \"scram-" +"sha-256\" for SCRAM authentication with SHA-256 algorithm, \"scram-sha-512\" " +"for SCRAM authentication with SHA-512 algorithm, \"ecdsa-nist256p-challenge" +"\" for key-based challenge authentication, \"external\" for authentication " +"using client side SSL cert, \"dh-blowfish\" for blowfish crypted password " +"(insecure, not recommended), \"dh-aes\" for AES crypted password (insecure, " +"not recommended)" msgstr "" "mecanismo de autenticación SASL: \"plain\" para contraseñas en texto plano, " "\"dh-blowfish\" para contraseña encriptada, \"external\" para autentificar " @@ -9397,12 +9400,12 @@ msgstr "%s%s%s%s ha expulsado %s%s%s" msgid "%s%s%s%s has unidentified" msgstr "%s: servidor %s%s%s borrado" -#, c-format -msgid "" -"%s%s: error building answer for SASL authentication, using mechanism \"%s\"" +#, fuzzy, c-format +msgid "%s%s: SASL error: %s" +msgstr "%s%s: error: %s" + +msgid "internal error" msgstr "" -"%s%s: error al construir la respuesta para la autenticación SASL, usando el " -"mecanismo \"%s\"" #, c-format msgid "%s%s: client capability, requesting: %s" @@ -9809,26 +9812,30 @@ msgstr "" msgid "%s%s: server \"%s\" not found for redirect" msgstr "%s%s: servidor \"%s\" no encontrado para la redirección" -#, fuzzy, c-format -msgid "%s%s: unable to read private key in file \"%s\"" -msgstr "%s%s: no es posible leer el archivo \"%s\"" +#, fuzzy +msgid "unable to validate server signature" +msgstr "%s%s: no es posible crear el servidor" -#, fuzzy, c-format -msgid "%sgnutls: invalid private key file: error %d %s" -msgstr "%sgnutls: certificado \"%s\" inválido, error: %s" +#, fuzzy +msgid "memory error" +msgstr "error" + +msgid "base64 decode error" +msgstr "" + +msgid "base64 encode error" +msgstr "" + +msgid "cryptography error" +msgstr "" + +msgid "protocol error" +msgstr "" #, c-format msgid "%s%s: signing the challenge with ECC public key: %s" msgstr "" -#, fuzzy, c-format -msgid "%sgnutls: unable to import the private key: error %d %s" -msgstr "%s%s: no es posible crear la tubería" - -#, fuzzy, c-format -msgid "%sgnutls: unable to sign the hashed data: error %d %s" -msgstr "%s%s: no es posible crear la tubería" - #, c-format msgid "" "%sgnutls: version >= 3.0.21 is required for SASL \"ecdsa-nist256p-challenge\"" @@ -13403,5 +13410,29 @@ msgstr "%s%s: tiempo de espera máximo para \"%s\" con %s" msgid "%s%s: unable to connect: unexpected error (%d)" msgstr "%s%s: no es posible conectarse al transmisor" +#, c-format +#~ msgid "" +#~ "%s%s: error building answer for SASL authentication, using mechanism \"%s" +#~ "\"" +#~ msgstr "" +#~ "%s%s: error al construir la respuesta para la autenticación SASL, usando " +#~ "el mecanismo \"%s\"" + +#, fuzzy, c-format +#~ msgid "%s%s: unable to read private key in file \"%s\"" +#~ msgstr "%s%s: no es posible leer el archivo \"%s\"" + +#, fuzzy, c-format +#~ msgid "%sgnutls: invalid private key file: error %d %s" +#~ msgstr "%sgnutls: certificado \"%s\" inválido, error: %s" + +#, fuzzy, c-format +#~ msgid "%sgnutls: unable to import the private key: error %d %s" +#~ msgstr "%s%s: no es posible crear la tubería" + +#, fuzzy, c-format +#~ msgid "%sgnutls: unable to sign the hashed data: error %d %s" +#~ msgstr "%s%s: no es posible crear la tubería" + #~ msgid "bar size in chars (0 = auto size)" #~ msgstr "tamaño de la barra en caracteres (0 = tamaño automático)" diff --git a/po/fr.po b/po/fr.po index 24c7f3a2e..2bba14f76 100644 --- a/po/fr.po +++ b/po/fr.po @@ -21,8 +21,8 @@ msgid "" msgstr "" "Project-Id-Version: WeeChat\n" "Report-Msgid-Bugs-To: flashcode@flashtux.org\n" -"POT-Creation-Date: 2021-05-30 15:18+0200\n" -"PO-Revision-Date: 2021-05-30 15:19+0200\n" +"POT-Creation-Date: 2021-06-01 20:39+0200\n" +"PO-Revision-Date: 2021-06-01 20:42+0200\n" "Last-Translator: Sébastien Helleu \n" "Language-Team: weechat-dev \n" "Language: fr\n" @@ -9697,17 +9697,23 @@ msgstr "" msgid "" "mechanism for SASL authentication: \"plain\" for plain text password, " -"\"ecdsa-nist256p-challenge\" for key-based challenge authentication, " -"\"external\" for authentication using client side SSL cert, \"dh-blowfish\" " -"for blowfish crypted password (insecure, not recommended), \"dh-aes\" for " -"AES crypted password (insecure, not recommended)" +"\"scram-sha-1\" for SCRAM authentication with SHA-1 algorithm, \"scram-" +"sha-256\" for SCRAM authentication with SHA-256 algorithm, \"scram-sha-512\" " +"for SCRAM authentication with SHA-512 algorithm, \"ecdsa-nist256p-challenge" +"\" for key-based challenge authentication, \"external\" for authentication " +"using client side SSL cert, \"dh-blowfish\" for blowfish crypted password " +"(insecure, not recommended), \"dh-aes\" for AES crypted password (insecure, " +"not recommended)" msgstr "" "mécanisme pour l'authentification SASL : \"plain\" pour un mot de passe en " -"clair, \"ecdsa-nist256p-challenge\" pour une authentification par challenge " -"avec clé, \"external\" pour une authentification en utilisant un certificat " -"SSL côté client, \"dh-blowfish\" pour un mot de passe chiffré avec blowfish " -"(non sûr, non recommandé), \"dh-aes\" pour un mot de passe chiffré avec AES " -"(non sûr, non recommandé)" +"clair, \"scram-sha-1\" pour une authentification SCRAM avec algorithme " +"SHA-1, \"scram-sha-256\" pour une authentification SCRAM avec algorithme " +"SHA-256, \"scram-sha-512\" pour une authentification SCRAM avec algorithme " +"SHA-512, \"ecdsa-nist256p-challenge\" pour une authentification par " +"challenge avec clé, \"external\" pour une authentification en utilisant un " +"certificat SSL côté client, \"dh-blowfish\" pour un mot de passe chiffré " +"avec blowfish (non sûr, non recommandé), \"dh-aes\" pour un mot de passe " +"chiffré avec AES (non sûr, non recommandé)" msgid "" "username for SASL authentication; this option is not used for mechanism " @@ -10930,11 +10936,11 @@ msgid "%s%s%s%s has unidentified" msgstr "%s%s%s%s n'est plus identifié" #, c-format -msgid "" -"%s%s: error building answer for SASL authentication, using mechanism \"%s\"" -msgstr "" -"%s%s : erreur de construction de la réponse pour l'authentification SASL, en " -"utilisant le mécanisme \"%s\"" +msgid "%s%s: SASL error: %s" +msgstr "%s%s : erreur SASL : %s" + +msgid "internal error" +msgstr "erreur interne" #, c-format msgid "%s%s: client capability, requesting: %s" @@ -11342,26 +11348,28 @@ msgstr "" msgid "%s%s: server \"%s\" not found for redirect" msgstr "%s%s : serveur \"%s\" non trouvé pour la redirection" -#, c-format -msgid "%s%s: unable to read private key in file \"%s\"" -msgstr "%s%s : impossible de lire la clé privée dans le fichier \"%s\"" +msgid "unable to validate server signature" +msgstr "impossible de vérifier la signature du serveur" -#, c-format -msgid "%sgnutls: invalid private key file: error %d %s" -msgstr "%sgnutls : fichier de clé privée invalide : erreur %d %s" +msgid "memory error" +msgstr "erreur de mémoire" + +msgid "base64 decode error" +msgstr "erreur de décodage base64" + +msgid "base64 encode error" +msgstr "erreur d'encodage base64" + +msgid "cryptography error" +msgstr "erreur de cryptographie" + +msgid "protocol error" +msgstr "erreur de protocole" #, c-format msgid "%s%s: signing the challenge with ECC public key: %s" msgstr "%s%s : signature du challenge avec la clé publique ECC : %s" -#, c-format -msgid "%sgnutls: unable to import the private key: error %d %s" -msgstr "%sgnutls : impossible d'importer la clé privée : erreur %d %s" - -#, c-format -msgid "%sgnutls: unable to sign the hashed data: error %d %s" -msgstr "%sgnutls : impossible de signer les données hachées : erreur %d %s" - #, c-format msgid "" "%sgnutls: version >= 3.0.21 is required for SASL \"ecdsa-nist256p-challenge\"" @@ -15378,5 +15386,29 @@ msgstr "%s%s : délai d'attente dépassé pour \"%s\" avec %s" msgid "%s%s: unable to connect: unexpected error (%d)" msgstr "%s%s : impossible de se connecter : erreur inattendue (%d)" +#, c-format +#~ msgid "" +#~ "%s%s: error building answer for SASL authentication, using mechanism \"%s" +#~ "\"" +#~ msgstr "" +#~ "%s%s : erreur de construction de la réponse pour l'authentification SASL, " +#~ "en utilisant le mécanisme \"%s\"" + +#, c-format +#~ msgid "%s%s: unable to read private key in file \"%s\"" +#~ msgstr "%s%s : impossible de lire la clé privée dans le fichier \"%s\"" + +#, c-format +#~ msgid "%sgnutls: invalid private key file: error %d %s" +#~ msgstr "%sgnutls : fichier de clé privée invalide : erreur %d %s" + +#, c-format +#~ msgid "%sgnutls: unable to import the private key: error %d %s" +#~ msgstr "%sgnutls : impossible d'importer la clé privée : erreur %d %s" + +#, c-format +#~ msgid "%sgnutls: unable to sign the hashed data: error %d %s" +#~ msgstr "%sgnutls : impossible de signer les données hachées : erreur %d %s" + #~ msgid "bar size in chars (0 = auto size)" #~ msgstr "taille de la barre en caractères (0 = taille automatique)" diff --git a/po/hu.po b/po/hu.po index 6a3eec0dc..edfcec407 100644 --- a/po/hu.po +++ b/po/hu.po @@ -20,7 +20,7 @@ msgid "" msgstr "" "Project-Id-Version: WeeChat\n" "Report-Msgid-Bugs-To: flashcode@flashtux.org\n" -"POT-Creation-Date: 2021-05-30 15:18+0200\n" +"POT-Creation-Date: 2021-06-01 20:39+0200\n" "PO-Revision-Date: 2021-05-25 18:28+0200\n" "Last-Translator: Andras Voroskoi \n" "Language-Team: weechat-dev \n" @@ -7625,10 +7625,13 @@ msgstr "" msgid "" "mechanism for SASL authentication: \"plain\" for plain text password, " -"\"ecdsa-nist256p-challenge\" for key-based challenge authentication, " -"\"external\" for authentication using client side SSL cert, \"dh-blowfish\" " -"for blowfish crypted password (insecure, not recommended), \"dh-aes\" for " -"AES crypted password (insecure, not recommended)" +"\"scram-sha-1\" for SCRAM authentication with SHA-1 algorithm, \"scram-" +"sha-256\" for SCRAM authentication with SHA-256 algorithm, \"scram-sha-512\" " +"for SCRAM authentication with SHA-512 algorithm, \"ecdsa-nist256p-challenge" +"\" for key-based challenge authentication, \"external\" for authentication " +"using client side SSL cert, \"dh-blowfish\" for blowfish crypted password " +"(insecure, not recommended), \"dh-aes\" for AES crypted password (insecure, " +"not recommended)" msgstr "" #, fuzzy @@ -8667,9 +8670,11 @@ msgstr "%s%s%s kirúgta %s%s%s-t a(z) %s%s szobából" msgid "%s%s%s%s has unidentified" msgstr "A %s%s%s szerver törölve\n" -#, c-format -msgid "" -"%s%s: error building answer for SASL authentication, using mechanism \"%s\"" +#, fuzzy, c-format +msgid "%s%s: SASL error: %s" +msgstr "%sSzerver: %s%s\n" + +msgid "internal error" msgstr "" #, fuzzy, c-format @@ -9068,26 +9073,30 @@ msgstr "" msgid "%s%s: server \"%s\" not found for redirect" msgstr "%s a \"%s\" szerver nem található\n" -#, fuzzy, c-format -msgid "%s%s: unable to read private key in file \"%s\"" -msgstr "Nem sikerült a(z) \"%s\" naplófájlt írni\n" +#, fuzzy +msgid "unable to validate server signature" +msgstr "%s nem sikerült a szervert létrehozni\n" -#, fuzzy, c-format -msgid "%sgnutls: invalid private key file: error %d %s" -msgstr "Nem sikerült a(z) \"%s\" naplófájlt írni\n" +#, fuzzy +msgid "memory error" +msgstr "%sSzerver: %s%s\n" + +msgid "base64 decode error" +msgstr "" + +msgid "base64 encode error" +msgstr "" + +msgid "cryptography error" +msgstr "" + +msgid "protocol error" +msgstr "" #, c-format msgid "%s%s: signing the challenge with ECC public key: %s" msgstr "" -#, fuzzy, c-format -msgid "%sgnutls: unable to import the private key: error %d %s" -msgstr "%s DCC: nem sikerült a csövet létrehozni\n" - -#, fuzzy, c-format -msgid "%sgnutls: unable to sign the hashed data: error %d %s" -msgstr "%s DCC: nem sikerült a csövet létrehozni\n" - #, c-format msgid "" "%sgnutls: version >= 3.0.21 is required for SASL \"ecdsa-nist256p-challenge\"" @@ -12572,3 +12581,19 @@ msgstr "%s hiányzó argumentum a(z) \"%s\" opciónak\n" #, fuzzy, c-format msgid "%s%s: unable to connect: unexpected error (%d)" msgstr "%s DCC: nem sikerült kapcsolódni a küldőhöz\n" + +#, fuzzy, c-format +#~ msgid "%s%s: unable to read private key in file \"%s\"" +#~ msgstr "Nem sikerült a(z) \"%s\" naplófájlt írni\n" + +#, fuzzy, c-format +#~ msgid "%sgnutls: invalid private key file: error %d %s" +#~ msgstr "Nem sikerült a(z) \"%s\" naplófájlt írni\n" + +#, fuzzy, c-format +#~ msgid "%sgnutls: unable to import the private key: error %d %s" +#~ msgstr "%s DCC: nem sikerült a csövet létrehozni\n" + +#, fuzzy, c-format +#~ msgid "%sgnutls: unable to sign the hashed data: error %d %s" +#~ msgstr "%s DCC: nem sikerült a csövet létrehozni\n" diff --git a/po/it.po b/po/it.po index 2b187ad63..8ebea34c9 100644 --- a/po/it.po +++ b/po/it.po @@ -20,7 +20,7 @@ msgid "" msgstr "" "Project-Id-Version: WeeChat\n" "Report-Msgid-Bugs-To: flashcode@flashtux.org\n" -"POT-Creation-Date: 2021-05-30 15:18+0200\n" +"POT-Creation-Date: 2021-06-01 20:39+0200\n" "PO-Revision-Date: 2021-05-25 18:28+0200\n" "Last-Translator: Esteban I. Ruiz Moreno \n" "Language-Team: weechat-dev \n" @@ -8401,10 +8401,13 @@ msgstr "" #, fuzzy msgid "" "mechanism for SASL authentication: \"plain\" for plain text password, " -"\"ecdsa-nist256p-challenge\" for key-based challenge authentication, " -"\"external\" for authentication using client side SSL cert, \"dh-blowfish\" " -"for blowfish crypted password (insecure, not recommended), \"dh-aes\" for " -"AES crypted password (insecure, not recommended)" +"\"scram-sha-1\" for SCRAM authentication with SHA-1 algorithm, \"scram-" +"sha-256\" for SCRAM authentication with SHA-256 algorithm, \"scram-sha-512\" " +"for SCRAM authentication with SHA-512 algorithm, \"ecdsa-nist256p-challenge" +"\" for key-based challenge authentication, \"external\" for authentication " +"using client side SSL cert, \"dh-blowfish\" for blowfish crypted password " +"(insecure, not recommended), \"dh-aes\" for AES crypted password (insecure, " +"not recommended)" msgstr "" "meccanismo per l'autenticazione SASL: \"plain\" per le password in chiaro, " "\"dh-blowfish\" per le password cifrate in blowfish, \"dh-aes\" per le " @@ -9558,12 +9561,12 @@ msgstr "%s%s%s%s ha cacciato %s%s%s" msgid "%s%s%s%s has unidentified" msgstr "%s: Il server %s%s%s è stato eliminato" -#, c-format -msgid "" -"%s%s: error building answer for SASL authentication, using mechanism \"%s\"" +#, fuzzy, c-format +msgid "%s%s: SASL error: %s" +msgstr "%s%s: errore: %s" + +msgid "internal error" msgstr "" -"%s%s: errore nella costruzione della risposta per l'autenticazione SASL, " -"usando il meccanismo \"%s\"" #, c-format msgid "%s%s: client capability, requesting: %s" @@ -9969,26 +9972,30 @@ msgstr "" msgid "%s%s: server \"%s\" not found for redirect" msgstr "%s%s: server \"%s\" non trovato per la redirezione" -#, fuzzy, c-format -msgid "%s%s: unable to read private key in file \"%s\"" -msgstr "%s%s: impossibile leggere il file \"%s\"" +#, fuzzy +msgid "unable to validate server signature" +msgstr "%s%s: impossibile creare il server" -#, fuzzy, c-format -msgid "%sgnutls: invalid private key file: error %d %s" -msgstr "%sgnutls: certificato \"%s\" non valido, errore: %s" +#, fuzzy +msgid "memory error" +msgstr "errore" + +msgid "base64 decode error" +msgstr "" + +msgid "base64 encode error" +msgstr "" + +msgid "cryptography error" +msgstr "" + +msgid "protocol error" +msgstr "" #, c-format msgid "%s%s: signing the challenge with ECC public key: %s" msgstr "" -#, fuzzy, c-format -msgid "%sgnutls: unable to import the private key: error %d %s" -msgstr "%s%s: impossibile creare la pipe: errore %d %s" - -#, fuzzy, c-format -msgid "%sgnutls: unable to sign the hashed data: error %d %s" -msgstr "%s%s: impossibile creare la pipe: errore %d %s" - #, c-format msgid "" "%sgnutls: version >= 3.0.21 is required for SASL \"ecdsa-nist256p-challenge\"" @@ -13586,5 +13593,29 @@ msgstr "%s%s: timeout per \"%s\" con %s" msgid "%s%s: unable to connect: unexpected error (%d)" msgstr "%s%s: impossibile connettersi al mittente" +#, c-format +#~ msgid "" +#~ "%s%s: error building answer for SASL authentication, using mechanism \"%s" +#~ "\"" +#~ msgstr "" +#~ "%s%s: errore nella costruzione della risposta per l'autenticazione SASL, " +#~ "usando il meccanismo \"%s\"" + +#, fuzzy, c-format +#~ msgid "%s%s: unable to read private key in file \"%s\"" +#~ msgstr "%s%s: impossibile leggere il file \"%s\"" + +#, fuzzy, c-format +#~ msgid "%sgnutls: invalid private key file: error %d %s" +#~ msgstr "%sgnutls: certificato \"%s\" non valido, errore: %s" + +#, fuzzy, c-format +#~ msgid "%sgnutls: unable to import the private key: error %d %s" +#~ msgstr "%s%s: impossibile creare la pipe: errore %d %s" + +#, fuzzy, c-format +#~ msgid "%sgnutls: unable to sign the hashed data: error %d %s" +#~ msgstr "%s%s: impossibile creare la pipe: errore %d %s" + #~ msgid "bar size in chars (0 = auto size)" #~ msgstr "dimensione barra in caratteri (0 = dimensione automatica)" diff --git a/po/ja.po b/po/ja.po index fd1fadca6..a4d1ea809 100644 --- a/po/ja.po +++ b/po/ja.po @@ -20,7 +20,7 @@ msgid "" msgstr "" "Project-Id-Version: WeeChat\n" "Report-Msgid-Bugs-To: flashcode@flashtux.org\n" -"POT-Creation-Date: 2021-05-30 15:18+0200\n" +"POT-Creation-Date: 2021-06-01 20:39+0200\n" "PO-Revision-Date: 2021-05-25 18:28+0200\n" "Last-Translator: AYANOKOUZI, Ryuunosuke \n" "Language-Team: Japanese = 3.0.21 is required for SASL \"ecdsa-nist256p-challenge\"" @@ -14659,5 +14669,27 @@ msgstr "%s%s: \"%s\" のタイムアウト %s" msgid "%s%s: unable to connect: unexpected error (%d)" msgstr "%s%s: 接続できません: 未定義のエラー (%d)" +#, c-format +#~ msgid "" +#~ "%s%s: error building answer for SASL authentication, using mechanism \"%s" +#~ "\"" +#~ msgstr "%s%s: SASL 認証の応答を作成中にエラー、\"%s\" メカニズムを使用" + +#, c-format +#~ msgid "%s%s: unable to read private key in file \"%s\"" +#~ msgstr "%s%s: ファイル \"%s\" の秘密鍵を読み込めません" + +#, c-format +#~ msgid "%sgnutls: invalid private key file: error %d %s" +#~ msgstr "%sgnutls: 無効な秘密鍵ファイルです: エラー %d %s" + +#, c-format +#~ msgid "%sgnutls: unable to import the private key: error %d %s" +#~ msgstr "%sgnutls: 秘密鍵をインポートできません: エラー %d %s" + +#, c-format +#~ msgid "%sgnutls: unable to sign the hashed data: error %d %s" +#~ msgstr "%sgnutls: ハッシュ化されたデータを署名できません: エラー %d %s" + #~ msgid "bar size in chars (0 = auto size)" #~ msgstr "文字数単位のバーのサイズ (0 = 自動サイズ)" diff --git a/po/pl.po b/po/pl.po index 50e3fc9d6..d69deefd0 100644 --- a/po/pl.po +++ b/po/pl.po @@ -22,7 +22,7 @@ msgid "" msgstr "" "Project-Id-Version: WeeChat\n" "Report-Msgid-Bugs-To: flashcode@flashtux.org\n" -"POT-Creation-Date: 2021-05-30 15:18+0200\n" +"POT-Creation-Date: 2021-06-01 20:39+0200\n" "PO-Revision-Date: 2021-05-25 18:28+0200\n" "Last-Translator: Krzysztof Korościk \n" "Language-Team: Polish \n" @@ -9473,12 +9473,16 @@ msgstr "" "są dostępne (zobacz /help cap żeby poznać listę opcji wspieranych przez " "WeeChat) (przykład: \"away-notify,multi-prefix\")" +#, fuzzy msgid "" "mechanism for SASL authentication: \"plain\" for plain text password, " -"\"ecdsa-nist256p-challenge\" for key-based challenge authentication, " -"\"external\" for authentication using client side SSL cert, \"dh-blowfish\" " -"for blowfish crypted password (insecure, not recommended), \"dh-aes\" for " -"AES crypted password (insecure, not recommended)" +"\"scram-sha-1\" for SCRAM authentication with SHA-1 algorithm, \"scram-" +"sha-256\" for SCRAM authentication with SHA-256 algorithm, \"scram-sha-512\" " +"for SCRAM authentication with SHA-512 algorithm, \"ecdsa-nist256p-challenge" +"\" for key-based challenge authentication, \"external\" for authentication " +"using client side SSL cert, \"dh-blowfish\" for blowfish crypted password " +"(insecure, not recommended), \"dh-aes\" for AES crypted password (insecure, " +"not recommended)" msgstr "" "mechanizm autentykacji SASL: \"plain\" dla hasła w czystym tekście, \"ecdsa-" "nist256p-challenge\" uwierzytelnianie na podstawie pary kluczy, \"external\" " @@ -10685,12 +10689,12 @@ msgstr "%s%s%s%s zidentyfikował się jako %s" msgid "%s%s%s%s has unidentified" msgstr "%s%s%s%s został niezidentyfikowany" -#, c-format -msgid "" -"%s%s: error building answer for SASL authentication, using mechanism \"%s\"" +#, fuzzy, c-format +msgid "%s%s: SASL error: %s" +msgstr "%s%s: błąd: %s" + +msgid "internal error" msgstr "" -"%s%s: błąd podczas tworzenia odpowiedzi dla uwierzytelniania SASL, używając " -"mechanizmu \"%s\"" #, c-format msgid "%s%s: client capability, requesting: %s" @@ -11099,26 +11103,30 @@ msgstr "" msgid "%s%s: server \"%s\" not found for redirect" msgstr "%s%s: serwer \"%s\" nie został znaleziony dla przekierowania" -#, c-format -msgid "%s%s: unable to read private key in file \"%s\"" -msgstr "%s%s: nie można odczytać klucza prywatnego z pliku \"%s\"" +#, fuzzy +msgid "unable to validate server signature" +msgstr "%s%s: nie można dodać serwera" -#, c-format -msgid "%sgnutls: invalid private key file: error %d %s" -msgstr "%sgnutls: niepoprawny plik klucza prywatnego: błąd %d %s" +#, fuzzy +msgid "memory error" +msgstr "nie udało się utworzyć procesu" + +msgid "base64 decode error" +msgstr "" + +msgid "base64 encode error" +msgstr "" + +msgid "cryptography error" +msgstr "" + +msgid "protocol error" +msgstr "" #, c-format msgid "%s%s: signing the challenge with ECC public key: %s" msgstr "%s%s: podpisuje wyzwanie za pomocą klucza publicnzego ECC: %s" -#, c-format -msgid "%sgnutls: unable to import the private key: error %d %s" -msgstr "%sgnutls: nie można zaimportować klucza prywatnego: błąd %d %s" - -#, c-format -msgid "%sgnutls: unable to sign the hashed data: error %d %s" -msgstr "%sgnutls: nie można podpisać zakodowanych danych: błąd %d %s" - #, c-format msgid "" "%sgnutls: version >= 3.0.21 is required for SASL \"ecdsa-nist256p-challenge\"" @@ -15035,5 +15043,29 @@ msgstr "%s%s: przekroczono czas na \"%s\" z %s" msgid "%s%s: unable to connect: unexpected error (%d)" msgstr "%s%s: nie można połączyć: niespodziewany błąd (%d)" +#, c-format +#~ msgid "" +#~ "%s%s: error building answer for SASL authentication, using mechanism \"%s" +#~ "\"" +#~ msgstr "" +#~ "%s%s: błąd podczas tworzenia odpowiedzi dla uwierzytelniania SASL, " +#~ "używając mechanizmu \"%s\"" + +#, c-format +#~ msgid "%s%s: unable to read private key in file \"%s\"" +#~ msgstr "%s%s: nie można odczytać klucza prywatnego z pliku \"%s\"" + +#, c-format +#~ msgid "%sgnutls: invalid private key file: error %d %s" +#~ msgstr "%sgnutls: niepoprawny plik klucza prywatnego: błąd %d %s" + +#, c-format +#~ msgid "%sgnutls: unable to import the private key: error %d %s" +#~ msgstr "%sgnutls: nie można zaimportować klucza prywatnego: błąd %d %s" + +#, c-format +#~ msgid "%sgnutls: unable to sign the hashed data: error %d %s" +#~ msgstr "%sgnutls: nie można podpisać zakodowanych danych: błąd %d %s" + #~ msgid "bar size in chars (0 = auto size)" #~ msgstr "rozmiar paska w znakach (0 = automatyczny rozmiar)" diff --git a/po/pt.po b/po/pt.po index a29cd5f30..ef7f65f4b 100644 --- a/po/pt.po +++ b/po/pt.po @@ -20,7 +20,7 @@ msgid "" msgstr "" "Project-Id-Version: WeeChat\n" "Report-Msgid-Bugs-To: flashcode@flashtux.org\n" -"POT-Creation-Date: 2021-05-30 15:18+0200\n" +"POT-Creation-Date: 2021-06-01 20:39+0200\n" "PO-Revision-Date: 2021-05-25 18:28+0200\n" "Last-Translator: Vasco Almeida \n" "Language-Team: Portuguese <>\n" @@ -9020,12 +9020,16 @@ msgstr "" "servidor se estiverem disponíveis (ver /help cap para obter uma lista de " "capacidades suportadas pelo WeeChat) (exemplo: \"away-notify,multi-prefix\")" +#, fuzzy msgid "" "mechanism for SASL authentication: \"plain\" for plain text password, " -"\"ecdsa-nist256p-challenge\" for key-based challenge authentication, " -"\"external\" for authentication using client side SSL cert, \"dh-blowfish\" " -"for blowfish crypted password (insecure, not recommended), \"dh-aes\" for " -"AES crypted password (insecure, not recommended)" +"\"scram-sha-1\" for SCRAM authentication with SHA-1 algorithm, \"scram-" +"sha-256\" for SCRAM authentication with SHA-256 algorithm, \"scram-sha-512\" " +"for SCRAM authentication with SHA-512 algorithm, \"ecdsa-nist256p-challenge" +"\" for key-based challenge authentication, \"external\" for authentication " +"using client side SSL cert, \"dh-blowfish\" for blowfish crypted password " +"(insecure, not recommended), \"dh-aes\" for AES crypted password (insecure, " +"not recommended)" msgstr "" "mecanismo de autenticação SASL: \"plain\" para palavra-passe em texto " "simples, \"ecdsa-nist256p-challenge\" para autenticação por desafio com " @@ -10237,12 +10241,12 @@ msgstr "%s%s%s%s expulsou %s%s%s" msgid "%s%s%s%s has unidentified" msgstr "%s: o servidor %s%s%s foi eliminado" -#, c-format -msgid "" -"%s%s: error building answer for SASL authentication, using mechanism \"%s\"" +#, fuzzy, c-format +msgid "%s%s: SASL error: %s" +msgstr "%s%s: erro: %s" + +msgid "internal error" msgstr "" -"%s%s: erro ao construir resposta para a autenticação SASL, usando o " -"mecanismo \"%s\"" #, c-format msgid "%s%s: client capability, requesting: %s" @@ -10647,26 +10651,30 @@ msgstr "" msgid "%s%s: server \"%s\" not found for redirect" msgstr "%s%s: servidor \"%s\" não encontrado para redirecionar" -#, c-format -msgid "%s%s: unable to read private key in file \"%s\"" -msgstr "%s%s: não foi possível ler a chave privada no ficheiro \"%s\"" +#, fuzzy +msgid "unable to validate server signature" +msgstr "%s%s: não é possível adicionar servidor" -#, c-format -msgid "%sgnutls: invalid private key file: error %d %s" -msgstr "%sgnutls: ficheiro de chave privada inválido: erro %d %s" +#, fuzzy +msgid "memory error" +msgstr "erro" + +msgid "base64 decode error" +msgstr "" + +msgid "base64 encode error" +msgstr "" + +msgid "cryptography error" +msgstr "" + +msgid "protocol error" +msgstr "" #, c-format msgid "%s%s: signing the challenge with ECC public key: %s" msgstr "%s%s: a assinar o desafio com a chave ECC pública: %s" -#, c-format -msgid "%sgnutls: unable to import the private key: error %d %s" -msgstr "%sgnutls: não foi possível importar a chave privada: erro %d %s" - -#, c-format -msgid "%sgnutls: unable to sign the hashed data: error %d %s" -msgstr "%sgnutls: não foi possível assinar o resumo dos dados: erro %d %s" - #, c-format msgid "" "%sgnutls: version >= 3.0.21 is required for SASL \"ecdsa-nist256p-challenge\"" @@ -14512,5 +14520,29 @@ msgstr "%s%s: tempo limite de \"%s\" com %s" msgid "%s%s: unable to connect: unexpected error (%d)" msgstr "%s%s: não foi possível conectar: erro inesperado (%d)" +#, c-format +#~ msgid "" +#~ "%s%s: error building answer for SASL authentication, using mechanism \"%s" +#~ "\"" +#~ msgstr "" +#~ "%s%s: erro ao construir resposta para a autenticação SASL, usando o " +#~ "mecanismo \"%s\"" + +#, c-format +#~ msgid "%s%s: unable to read private key in file \"%s\"" +#~ msgstr "%s%s: não foi possível ler a chave privada no ficheiro \"%s\"" + +#, c-format +#~ msgid "%sgnutls: invalid private key file: error %d %s" +#~ msgstr "%sgnutls: ficheiro de chave privada inválido: erro %d %s" + +#, c-format +#~ msgid "%sgnutls: unable to import the private key: error %d %s" +#~ msgstr "%sgnutls: não foi possível importar a chave privada: erro %d %s" + +#, c-format +#~ msgid "%sgnutls: unable to sign the hashed data: error %d %s" +#~ msgstr "%sgnutls: não foi possível assinar o resumo dos dados: erro %d %s" + #~ msgid "bar size in chars (0 = auto size)" #~ msgstr "tamanho da barra em carateres (0 = tamanho automático)" diff --git a/po/pt_BR.po b/po/pt_BR.po index 571ecdf88..5e4308435 100644 --- a/po/pt_BR.po +++ b/po/pt_BR.po @@ -21,7 +21,7 @@ msgid "" msgstr "" "Project-Id-Version: WeeChat\n" "Report-Msgid-Bugs-To: flashcode@flashtux.org\n" -"POT-Creation-Date: 2021-05-30 15:18+0200\n" +"POT-Creation-Date: 2021-06-01 20:39+0200\n" "PO-Revision-Date: 2021-05-25 18:28+0200\n" "Last-Translator: Érico Nogueira \n" "Language-Team: weechat-dev \n" @@ -8067,10 +8067,13 @@ msgstr "" msgid "" "mechanism for SASL authentication: \"plain\" for plain text password, " -"\"ecdsa-nist256p-challenge\" for key-based challenge authentication, " -"\"external\" for authentication using client side SSL cert, \"dh-blowfish\" " -"for blowfish crypted password (insecure, not recommended), \"dh-aes\" for " -"AES crypted password (insecure, not recommended)" +"\"scram-sha-1\" for SCRAM authentication with SHA-1 algorithm, \"scram-" +"sha-256\" for SCRAM authentication with SHA-256 algorithm, \"scram-sha-512\" " +"for SCRAM authentication with SHA-512 algorithm, \"ecdsa-nist256p-challenge" +"\" for key-based challenge authentication, \"external\" for authentication " +"using client side SSL cert, \"dh-blowfish\" for blowfish crypted password " +"(insecure, not recommended), \"dh-aes\" for AES crypted password (insecure, " +"not recommended)" msgstr "" #, fuzzy @@ -9099,12 +9102,12 @@ msgstr "%s%s%s%s se identificou como %s" msgid "%s%s%s%s has unidentified" msgstr "%s%s%s%s removeu sua identificação" -#, c-format -msgid "" -"%s%s: error building answer for SASL authentication, using mechanism \"%s\"" +#, fuzzy, c-format +msgid "%s%s: SASL error: %s" +msgstr "%s%s: erro: %s" + +msgid "internal error" msgstr "" -"%s%s: erro ao construir resposta para autenticação SASL, utilizando " -"mecanismo \"%s\"" #, c-format msgid "%s%s: client capability, requesting: %s" @@ -9505,26 +9508,30 @@ msgstr "" msgid "%s%s: server \"%s\" not found for redirect" msgstr "%s%s: servidor \"%s\" não encontrado para redirecionamento" -#, c-format -msgid "%s%s: unable to read private key in file \"%s\"" -msgstr "%s%s: não foi possível ler a chave privada no arquivo \"%s\"" +#, fuzzy +msgid "unable to validate server signature" +msgstr "%s%s: não foi possível redirecionar saída de erro (stderr)" -#, c-format -msgid "%sgnutls: invalid private key file: error %d %s" -msgstr "%sgnutls: arquivo de chave privada inválido: erro %d %s" +#, fuzzy +msgid "memory error" +msgstr "%s%s: erro: %s" + +msgid "base64 decode error" +msgstr "" + +msgid "base64 encode error" +msgstr "" + +msgid "cryptography error" +msgstr "" + +msgid "protocol error" +msgstr "" #, c-format msgid "%s%s: signing the challenge with ECC public key: %s" msgstr "" -#, fuzzy, c-format -msgid "%sgnutls: unable to import the private key: error %d %s" -msgstr "%s%s: não foi possível criar pipe" - -#, fuzzy, c-format -msgid "%sgnutls: unable to sign the hashed data: error %d %s" -msgstr "%s%s: não foi possível criar pipe" - #, c-format msgid "" "%sgnutls: version >= 3.0.21 is required for SASL \"ecdsa-nist256p-challenge\"" @@ -13055,5 +13062,29 @@ msgstr "%s%s: tempo esgotado para \"%s\" com %s" msgid "%s%s: unable to connect: unexpected error (%d)" msgstr "%s%s: não foi possível conectar ao remetente" +#, c-format +#~ msgid "" +#~ "%s%s: error building answer for SASL authentication, using mechanism \"%s" +#~ "\"" +#~ msgstr "" +#~ "%s%s: erro ao construir resposta para autenticação SASL, utilizando " +#~ "mecanismo \"%s\"" + +#, c-format +#~ msgid "%s%s: unable to read private key in file \"%s\"" +#~ msgstr "%s%s: não foi possível ler a chave privada no arquivo \"%s\"" + +#, c-format +#~ msgid "%sgnutls: invalid private key file: error %d %s" +#~ msgstr "%sgnutls: arquivo de chave privada inválido: erro %d %s" + +#, fuzzy, c-format +#~ msgid "%sgnutls: unable to import the private key: error %d %s" +#~ msgstr "%s%s: não foi possível criar pipe" + +#, fuzzy, c-format +#~ msgid "%sgnutls: unable to sign the hashed data: error %d %s" +#~ msgstr "%s%s: não foi possível criar pipe" + #~ msgid "bar size in chars (0 = auto size)" #~ msgstr "tamanho da barra em caracteres (0 = tamanho automático)" diff --git a/po/ru.po b/po/ru.po index 7083c1054..75dc4f871 100644 --- a/po/ru.po +++ b/po/ru.po @@ -21,7 +21,7 @@ msgid "" msgstr "" "Project-Id-Version: WeeChat\n" "Report-Msgid-Bugs-To: flashcode@flashtux.org\n" -"POT-Creation-Date: 2021-05-30 15:18+0200\n" +"POT-Creation-Date: 2021-06-01 20:39+0200\n" "PO-Revision-Date: 2021-05-25 18:28+0200\n" "Last-Translator: Aleksey V Zapparov AKA ixti \n" "Language-Team: weechat-dev \n" @@ -7655,10 +7655,13 @@ msgstr "" msgid "" "mechanism for SASL authentication: \"plain\" for plain text password, " -"\"ecdsa-nist256p-challenge\" for key-based challenge authentication, " -"\"external\" for authentication using client side SSL cert, \"dh-blowfish\" " -"for blowfish crypted password (insecure, not recommended), \"dh-aes\" for " -"AES crypted password (insecure, not recommended)" +"\"scram-sha-1\" for SCRAM authentication with SHA-1 algorithm, \"scram-" +"sha-256\" for SCRAM authentication with SHA-256 algorithm, \"scram-sha-512\" " +"for SCRAM authentication with SHA-512 algorithm, \"ecdsa-nist256p-challenge" +"\" for key-based challenge authentication, \"external\" for authentication " +"using client side SSL cert, \"dh-blowfish\" for blowfish crypted password " +"(insecure, not recommended), \"dh-aes\" for AES crypted password (insecure, " +"not recommended)" msgstr "" #, fuzzy @@ -8704,9 +8707,11 @@ msgstr "%s%s%s выкинул %s%s%s с канала %s%s" msgid "%s%s%s%s has unidentified" msgstr "Сервер %s%s%s удалён\n" -#, c-format -msgid "" -"%s%s: error building answer for SASL authentication, using mechanism \"%s\"" +#, fuzzy, c-format +msgid "%s%s: SASL error: %s" +msgstr "%sСервер: %s%s\n" + +msgid "internal error" msgstr "" #, fuzzy, c-format @@ -9110,26 +9115,30 @@ msgstr "" msgid "%s%s: server \"%s\" not found for redirect" msgstr "%s сервер \"%s\" не найден\n" -#, fuzzy, c-format -msgid "%s%s: unable to read private key in file \"%s\"" -msgstr "Не могу записать лог-файл \"%s\"\n" +#, fuzzy +msgid "unable to validate server signature" +msgstr "%s не могу создать сервер\n" -#, fuzzy, c-format -msgid "%sgnutls: invalid private key file: error %d %s" -msgstr "Не могу записать лог-файл \"%s\"\n" +#, fuzzy +msgid "memory error" +msgstr "%sСервер: %s%s\n" + +msgid "base64 decode error" +msgstr "" + +msgid "base64 encode error" +msgstr "" + +msgid "cryptography error" +msgstr "" + +msgid "protocol error" +msgstr "" #, c-format msgid "%s%s: signing the challenge with ECC public key: %s" msgstr "" -#, fuzzy, c-format -msgid "%sgnutls: unable to import the private key: error %d %s" -msgstr "%s DCC: не могу создать pipe\n" - -#, fuzzy, c-format -msgid "%sgnutls: unable to sign the hashed data: error %d %s" -msgstr "%s DCC: не могу создать pipe\n" - #, c-format msgid "" "%sgnutls: version >= 3.0.21 is required for SASL \"ecdsa-nist256p-challenge\"" @@ -12606,3 +12615,19 @@ msgstr "%s нет аргумента для параметра \"%s\"\n" #, fuzzy, c-format msgid "%s%s: unable to connect: unexpected error (%d)" msgstr "%s DCC: не могу соединиться с отправителем\n" + +#, fuzzy, c-format +#~ msgid "%s%s: unable to read private key in file \"%s\"" +#~ msgstr "Не могу записать лог-файл \"%s\"\n" + +#, fuzzy, c-format +#~ msgid "%sgnutls: invalid private key file: error %d %s" +#~ msgstr "Не могу записать лог-файл \"%s\"\n" + +#, fuzzy, c-format +#~ msgid "%sgnutls: unable to import the private key: error %d %s" +#~ msgstr "%s DCC: не могу создать pipe\n" + +#, fuzzy, c-format +#~ msgid "%sgnutls: unable to sign the hashed data: error %d %s" +#~ msgstr "%s DCC: не могу создать pipe\n" diff --git a/po/tr.po b/po/tr.po index 9b7ff81b8..d3adbda66 100644 --- a/po/tr.po +++ b/po/tr.po @@ -20,7 +20,7 @@ msgid "" msgstr "" "Project-Id-Version: WeeChat\n" "Report-Msgid-Bugs-To: flashcode@flashtux.org\n" -"POT-Creation-Date: 2021-05-30 15:18+0200\n" +"POT-Creation-Date: 2021-06-01 20:39+0200\n" "PO-Revision-Date: 2021-05-25 18:28+0200\n" "Last-Translator: Emir SARI \n" "Language-Team: weechat-dev \n" @@ -7334,10 +7334,13 @@ msgstr "" msgid "" "mechanism for SASL authentication: \"plain\" for plain text password, " -"\"ecdsa-nist256p-challenge\" for key-based challenge authentication, " -"\"external\" for authentication using client side SSL cert, \"dh-blowfish\" " -"for blowfish crypted password (insecure, not recommended), \"dh-aes\" for " -"AES crypted password (insecure, not recommended)" +"\"scram-sha-1\" for SCRAM authentication with SHA-1 algorithm, \"scram-" +"sha-256\" for SCRAM authentication with SHA-256 algorithm, \"scram-sha-512\" " +"for SCRAM authentication with SHA-512 algorithm, \"ecdsa-nist256p-challenge" +"\" for key-based challenge authentication, \"external\" for authentication " +"using client side SSL cert, \"dh-blowfish\" for blowfish crypted password " +"(insecure, not recommended), \"dh-aes\" for AES crypted password (insecure, " +"not recommended)" msgstr "" msgid "" @@ -8254,9 +8257,11 @@ msgstr "%s%s%s%s, %s olarak kimliği tanımlandı" msgid "%s%s%s%s has unidentified" msgstr "%s%s%s%s kimliği belirsiz" -#, c-format -msgid "" -"%s%s: error building answer for SASL authentication, using mechanism \"%s\"" +#, fuzzy, c-format +msgid "%s%s: SASL error: %s" +msgstr "%s%s: hata: %s" + +msgid "internal error" msgstr "" #, c-format @@ -8642,26 +8647,30 @@ msgstr "" msgid "%s%s: server \"%s\" not found for redirect" msgstr "" -#, c-format -msgid "%s%s: unable to read private key in file \"%s\"" -msgstr "%s%s: \"%s\" dosyasındaki özel anahtar okunamıyor" +#, fuzzy +msgid "unable to validate server signature" +msgstr "%s%s: sunucu eklenemiyor" -#, c-format -msgid "%sgnutls: invalid private key file: error %d %s" -msgstr "%sgnutls: Geçersiz özel anahtar dosyası: hata %d %s" +#, fuzzy +msgid "memory error" +msgstr "çatal hatası" + +msgid "base64 decode error" +msgstr "" + +msgid "base64 encode error" +msgstr "" + +msgid "cryptography error" +msgstr "" + +msgid "protocol error" +msgstr "" #, c-format msgid "%s%s: signing the challenge with ECC public key: %s" msgstr "" -#, c-format -msgid "%sgnutls: unable to import the private key: error %d %s" -msgstr "" - -#, c-format -msgid "%sgnutls: unable to sign the hashed data: error %d %s" -msgstr "" - #, c-format msgid "" "%sgnutls: version >= 3.0.21 is required for SASL \"ecdsa-nist256p-challenge\"" @@ -11897,3 +11906,11 @@ msgstr "%s%s: \"%s\" için %s ile zaman aşımı" #, c-format msgid "%s%s: unable to connect: unexpected error (%d)" msgstr "%s%s: Bağlanılamıyor: Beklenmedik hata (%d)" + +#, c-format +#~ msgid "%s%s: unable to read private key in file \"%s\"" +#~ msgstr "%s%s: \"%s\" dosyasındaki özel anahtar okunamıyor" + +#, c-format +#~ msgid "%sgnutls: invalid private key file: error %d %s" +#~ msgstr "%sgnutls: Geçersiz özel anahtar dosyası: hata %d %s" diff --git a/po/weechat.pot b/po/weechat.pot index 1261522b1..b7bdd1484 100644 --- a/po/weechat.pot +++ b/po/weechat.pot @@ -21,7 +21,7 @@ msgid "" msgstr "" "Project-Id-Version: WeeChat\n" "Report-Msgid-Bugs-To: flashcode@flashtux.org\n" -"POT-Creation-Date: 2021-05-30 15:18+0200\n" +"POT-Creation-Date: 2021-06-01 20:39+0200\n" "PO-Revision-Date: 2014-08-16 10:27+0200\n" "Last-Translator: Sébastien Helleu \n" "Language-Team: weechat-dev \n" @@ -6809,10 +6809,13 @@ msgstr "" msgid "" "mechanism for SASL authentication: \"plain\" for plain text password, " -"\"ecdsa-nist256p-challenge\" for key-based challenge authentication, " -"\"external\" for authentication using client side SSL cert, \"dh-blowfish\" " -"for blowfish crypted password (insecure, not recommended), \"dh-aes\" for " -"AES crypted password (insecure, not recommended)" +"\"scram-sha-1\" for SCRAM authentication with SHA-1 algorithm, \"scram-" +"sha-256\" for SCRAM authentication with SHA-256 algorithm, \"scram-sha-512\" " +"for SCRAM authentication with SHA-512 algorithm, \"ecdsa-nist256p-challenge" +"\" for key-based challenge authentication, \"external\" for authentication " +"using client side SSL cert, \"dh-blowfish\" for blowfish crypted password " +"(insecure, not recommended), \"dh-aes\" for AES crypted password (insecure, " +"not recommended)" msgstr "" msgid "" @@ -7727,8 +7730,10 @@ msgid "%s%s%s%s has unidentified" msgstr "" #, c-format -msgid "" -"%s%s: error building answer for SASL authentication, using mechanism \"%s\"" +msgid "%s%s: SASL error: %s" +msgstr "" + +msgid "internal error" msgstr "" #, c-format @@ -8120,26 +8125,28 @@ msgstr "" msgid "%s%s: server \"%s\" not found for redirect" msgstr "" -#, c-format -msgid "%s%s: unable to read private key in file \"%s\"" +msgid "unable to validate server signature" msgstr "" -#, c-format -msgid "%sgnutls: invalid private key file: error %d %s" +msgid "memory error" +msgstr "" + +msgid "base64 decode error" +msgstr "" + +msgid "base64 encode error" +msgstr "" + +msgid "cryptography error" +msgstr "" + +msgid "protocol error" msgstr "" #, c-format msgid "%s%s: signing the challenge with ECC public key: %s" msgstr "" -#, c-format -msgid "%sgnutls: unable to import the private key: error %d %s" -msgstr "" - -#, c-format -msgid "%sgnutls: unable to sign the hashed data: error %d %s" -msgstr "" - #, c-format msgid "" "%sgnutls: version >= 3.0.21 is required for SASL \"ecdsa-nist256p-challenge\"" diff --git a/src/plugins/irc/irc-config.c b/src/plugins/irc/irc-config.c index 2230c4c3d..cba9ae2a1 100644 --- a/src/plugins/irc/irc-config.c +++ b/src/plugins/irc/irc-config.c @@ -1859,6 +1859,12 @@ irc_config_server_new_option (struct t_config_file *config_file, option_name, "integer", N_("mechanism for SASL authentication: " "\"plain\" for plain text password, " + "\"scram-sha-1\" for SCRAM authentication with SHA-1 " + "algorithm, " + "\"scram-sha-256\" for SCRAM authentication with SHA-256 " + "algorithm, " + "\"scram-sha-512\" for SCRAM authentication with SHA-512 " + "algorithm, " "\"ecdsa-nist256p-challenge\" for key-based " "challenge authentication, " "\"external\" for authentication using client side SSL " @@ -1867,7 +1873,8 @@ irc_config_server_new_option (struct t_config_file *config_file, "(insecure, not recommended), " "\"dh-aes\" for AES crypted password " "(insecure, not recommended)"), - "plain|ecdsa-nist256p-challenge|external|dh-blowfish|dh-aes", + "plain|scram-sha-1|scram-sha-256|scram-sha-512|" + "ecdsa-nist256p-challenge|external|dh-blowfish|dh-aes", 0, 0, default_value, value, null_value_allowed, diff --git a/src/plugins/irc/irc-protocol.c b/src/plugins/irc/irc-protocol.c index 2dc179eb1..ab0ce07af 100644 --- a/src/plugins/irc/irc-protocol.c +++ b/src/plugins/irc/irc-protocol.c @@ -408,65 +408,89 @@ IRC_PROTOCOL_CALLBACK(account) IRC_PROTOCOL_CALLBACK(authenticate) { int sasl_mechanism; - char *sasl_username, *sasl_password, *answer; + char *sasl_username, *sasl_password, *answer, *sasl_error; const char *sasl_key; IRC_PROTOCOL_MIN_ARGS(2); - if (irc_server_sasl_enabled (server)) + if (!irc_server_sasl_enabled (server)) + return WEECHAT_RC_OK; + + sasl_mechanism = IRC_SERVER_OPTION_INTEGER( + server, IRC_SERVER_OPTION_SASL_MECHANISM); + sasl_username = irc_server_eval_expression ( + server, + IRC_SERVER_OPTION_STRING(server, IRC_SERVER_OPTION_SASL_USERNAME)); + sasl_password = irc_server_eval_expression ( + server, + IRC_SERVER_OPTION_STRING(server, IRC_SERVER_OPTION_SASL_PASSWORD)); + sasl_key = IRC_SERVER_OPTION_STRING(server, IRC_SERVER_OPTION_SASL_KEY); + answer = NULL; + sasl_error = NULL; + switch (sasl_mechanism) { - sasl_mechanism = IRC_SERVER_OPTION_INTEGER( - server, IRC_SERVER_OPTION_SASL_MECHANISM); - sasl_username = irc_server_eval_expression ( - server, - IRC_SERVER_OPTION_STRING(server, IRC_SERVER_OPTION_SASL_USERNAME)); - sasl_password = irc_server_eval_expression ( - server, - IRC_SERVER_OPTION_STRING(server, IRC_SERVER_OPTION_SASL_PASSWORD)); - sasl_key = IRC_SERVER_OPTION_STRING(server, IRC_SERVER_OPTION_SASL_KEY); - answer = NULL; - switch (sasl_mechanism) - { - case IRC_SASL_MECHANISM_PLAIN: - answer = irc_sasl_mechanism_plain (sasl_username, - sasl_password); - break; - case IRC_SASL_MECHANISM_ECDSA_NIST256P_CHALLENGE: - answer = irc_sasl_mechanism_ecdsa_nist256p_challenge ( - server, argv[1], sasl_username, sasl_key); - break; - case IRC_SASL_MECHANISM_EXTERNAL: - answer = strdup ("+"); - break; - case IRC_SASL_MECHANISM_DH_BLOWFISH: - answer = irc_sasl_mechanism_dh_blowfish ( - argv[1], sasl_username, sasl_password); - break; - case IRC_SASL_MECHANISM_DH_AES: - answer = irc_sasl_mechanism_dh_aes ( - argv[1], sasl_username, sasl_password); - break; - } - if (answer) - { - irc_server_sendf (server, 0, NULL, "AUTHENTICATE %s", answer); - free (answer); - } - else - { - weechat_printf ( - server->buffer, - _("%s%s: error building answer for SASL authentication, " - "using mechanism \"%s\""), - weechat_prefix ("error"), IRC_PLUGIN_NAME, - irc_sasl_mechanism_string[IRC_SERVER_OPTION_INTEGER(server, IRC_SERVER_OPTION_SASL_MECHANISM)]); - irc_server_sendf (server, 0, NULL, "CAP END"); - } - if (sasl_username) - free (sasl_username); - if (sasl_password) - free (sasl_password); + case IRC_SASL_MECHANISM_PLAIN: + answer = irc_sasl_mechanism_plain (sasl_username, sasl_password); + break; + case IRC_SASL_MECHANISM_SCRAM_SHA_1: + answer = irc_sasl_mechanism_scram ( + server, "sha1", argv[1], sasl_username, sasl_password, + &sasl_error); + break; + case IRC_SASL_MECHANISM_SCRAM_SHA_256: + answer = irc_sasl_mechanism_scram ( + server, "sha256", argv[1], sasl_username, sasl_password, + &sasl_error); + break; + case IRC_SASL_MECHANISM_SCRAM_SHA_512: + answer = irc_sasl_mechanism_scram ( + server, "sha512", argv[1], sasl_username, sasl_password, + &sasl_error); + break; + case IRC_SASL_MECHANISM_ECDSA_NIST256P_CHALLENGE: + answer = irc_sasl_mechanism_ecdsa_nist256p_challenge ( + server, argv[1], sasl_username, sasl_key, &sasl_error); + break; + case IRC_SASL_MECHANISM_EXTERNAL: + answer = strdup ("+"); + break; + case IRC_SASL_MECHANISM_DH_BLOWFISH: + answer = irc_sasl_mechanism_dh_blowfish ( + argv[1], sasl_username, sasl_password, &sasl_error); + break; + case IRC_SASL_MECHANISM_DH_AES: + answer = irc_sasl_mechanism_dh_aes ( + argv[1], sasl_username, sasl_password, &sasl_error); + break; } + if (answer) + { + if (sasl_error) + { + weechat_printf (server->buffer, + _("%s%s: SASL error: %s"), + weechat_prefix ("error"), + IRC_PLUGIN_NAME, + sasl_error); + } + irc_server_sendf (server, 0, NULL, "AUTHENTICATE %s", answer); + free (answer); + } + else + { + weechat_printf (server->buffer, + _("%s%s: SASL error: %s"), + weechat_prefix ("error"), + IRC_PLUGIN_NAME, + (sasl_error) ? sasl_error : _("internal error")); + irc_server_sendf (server, 0, NULL, "CAP END"); + } + if (sasl_username) + free (sasl_username); + if (sasl_password) + free (sasl_password); + if (sasl_error) + free (sasl_error); return WEECHAT_RC_OK; } @@ -6335,6 +6359,8 @@ IRC_PROTOCOL_CALLBACK(900) argv[3], IRC_COLOR_CHAT_DELIMITERS); + irc_server_free_sasl_data (server); + return WEECHAT_RC_OK; } @@ -6391,6 +6417,8 @@ IRC_PROTOCOL_CALLBACK(sasl_end_ok) if (!server->is_connected) irc_server_sendf (server, 0, NULL, "CAP END"); + irc_server_free_sasl_data (server); + return WEECHAT_RC_OK; } @@ -6428,6 +6456,8 @@ IRC_PROTOCOL_CALLBACK(sasl_end_fail) if (!server->is_connected) irc_server_sendf (server, 0, NULL, "CAP END"); + irc_server_free_sasl_data (server); + return WEECHAT_RC_OK; } diff --git a/src/plugins/irc/irc-sasl.c b/src/plugins/irc/irc-sasl.c index 6a0e42f40..b9ed8a542 100644 --- a/src/plugins/irc/irc-sasl.c +++ b/src/plugins/irc/irc-sasl.c @@ -42,7 +42,8 @@ * valid values for the AUTHENTICATE command (example: "AUTHENTICATE PLAIN") */ char *irc_sasl_mechanism_string[IRC_NUM_SASL_MECHANISMS] = -{ "plain", "ecdsa-nist256p-challenge", "external", "dh-blowfish", "dh-aes" }; +{ "plain", "scram-sha-1", "scram-sha-256", "scram-sha-512", + "ecdsa-nist256p-challenge", "external", "dh-blowfish", "dh-aes" }; /* @@ -54,7 +55,7 @@ char *irc_sasl_mechanism_string[IRC_NUM_SASL_MECHANISMS] = char * irc_sasl_mechanism_plain (const char *sasl_username, const char *sasl_password) { - char *string, *answer_base64; + char *answer_base64, *string; int length_username, length; answer_base64 = NULL; @@ -85,6 +86,373 @@ irc_sasl_mechanism_plain (const char *sasl_username, const char *sasl_password) return answer_base64; } +/* + * Builds answer for SASL authentication, using mechanism + * "SCRAM-SHA-1", "SCRAM-SHA-256" or "SCRAM-SHA-512". + * + * If an error is received from the server and sasl_error is not NULL, + * *sasl_error is set to the error and must be freed after use. + * + * Note: result must be freed after use. + */ + +char * +irc_sasl_mechanism_scram (struct t_irc_server *server, + const char *hash_algo, + const char *data_base64, + const char *sasl_username, + const char *sasl_password, + char **sasl_error) +{ + char *answer_base64, *string, *username, *username2, *data, **attrs, *error; + char nonce_client[18], nonce_client_base64[24 + 1], *nonce_server; + char *salt_base64, *salt, *verifier_base64, *verifier, *attr_error; + char *auth_no_proof, *auth_message; + char salted_password[512 / 8], client_key[512 / 8], stored_key[512 / 8]; + char client_signature[512 / 8], client_proof[512 / 8]; + char client_proof_base64[((512 / 8) * 4) + 1], server_key[512 / 8]; + char server_signature[512 / 8]; + int i, length, num_attrs, iterations, salt_size, salted_password_size; + int client_key_size, stored_key_size, client_signature_size; + int server_key_size, server_signature_size, verifier_size; + long number; + + answer_base64 = NULL; + string = NULL; + length = 0; + username = NULL; + username2 = NULL; + data = NULL; + attrs = NULL; + nonce_server = NULL; + salt_base64 = NULL; + salt = NULL; + salt_size = 0; + iterations = 0; + verifier_base64 = NULL; + verifier = NULL; + verifier_size = 0; + attr_error = NULL; + auth_no_proof = NULL; + auth_message = NULL; + + if (strcmp (data_base64, "+") == 0) + { + /* send username and nonce with form: "n,,n=username,r=nonce" */ + gcry_create_nonce (nonce_client, sizeof (nonce_client)); + length = weechat_string_base_encode ( + 64, + nonce_client, sizeof (nonce_client), + nonce_client_base64); + if (length != sizeof (nonce_client_base64) - 1) + goto base64_encode_error; + username = weechat_string_replace (sasl_username, "=", "=3D"); + if (!username) + goto memory_error; + username2 = weechat_string_replace (username, ",", "=2C"); + if (!username2) + goto memory_error; + length = 5 + strlen (username2) + 3 + sizeof (nonce_client_base64) - 1; + string = malloc (length + 1); + if (string) + { + snprintf (string, length + 1, "n,,n=%s,r=%s", + username2, nonce_client_base64); + if (server->sasl_scram_client_first) + free (server->sasl_scram_client_first); + server->sasl_scram_client_first = strdup (string + 3); + } + } + else + { + /* decode SCRAM attributes sent by the server */ + data = malloc (strlen (data_base64) + 1); + if (!data) + goto memory_error; + if (weechat_string_base_decode (64, data_base64, data) <= 0) + goto base64_decode_error; + + /* split attributes */ + attrs = weechat_string_split (data, ",", NULL, + WEECHAT_STRING_SPLIT_STRIP_LEFT + | WEECHAT_STRING_SPLIT_STRIP_RIGHT + | WEECHAT_STRING_SPLIT_COLLAPSE_SEPS, + 0, &num_attrs); + if (!attrs) + goto proto_error; + for (i = 0; i < num_attrs; i++) + { + if (strncmp (attrs[i], "r=", 2) == 0) + { + if (nonce_server) + free (nonce_server); + nonce_server = strdup (attrs[i] + 2); + } + else if (strncmp (attrs[i], "s=", 2) == 0) + { + if (salt_base64) + free (salt_base64); + salt_base64 = strdup (attrs[i] + 2); + } + else if (strncmp (attrs[i], "i=", 2) == 0) + { + error = NULL; + number = strtol (attrs[i] + 2, &error, 10); + if (error && !error[0]) + iterations = (int)number; + } + else if (strncmp (attrs[i], "v=", 2) == 0) + { + if (verifier_base64) + free (verifier_base64); + verifier_base64 = strdup (attrs[i] + 2); + } + else if (strncmp (attrs[i], "e=", 2) == 0) + { + if (attr_error) + free (attr_error); + attr_error = strdup (attrs[i] + 2); + } + } + if (attr_error) + { + if (sasl_error) + *sasl_error = strdup (attr_error); + goto end; + } + else if (verifier_base64) + { + /* last exchange: we verify the server signature */ + if (!server->sasl_scram_salted_pwd + || (server->sasl_scram_salted_pwd_size <= 0) + || !server->sasl_scram_auth_message) + { + goto proto_error; + } + verifier = malloc (strlen (verifier_base64) + 1); + if (!verifier) + goto memory_error; + verifier_size = weechat_string_base_decode (64, verifier_base64, + verifier); + if (verifier_size <= 0) + goto base64_decode_error; + /* RFC: ServerKey := HMAC(SaltedPassword, "Server Key") */ + if (!weechat_crypto_hmac (server->sasl_scram_salted_pwd, + server->sasl_scram_salted_pwd_size, + IRC_SASL_SCRAM_SERVER_KEY, + strlen (IRC_SASL_SCRAM_SERVER_KEY), + hash_algo, + server_key, + &server_key_size)) + goto crypto_error; + /* RFC: ServerSignature := HMAC(ServerKey, AuthMessage) */ + if (!weechat_crypto_hmac (server_key, + server_key_size, + server->sasl_scram_auth_message, + strlen (server->sasl_scram_auth_message), + hash_algo, + server_signature, + &server_signature_size)) + goto crypto_error; + if (verifier_size != server_signature_size) + goto crypto_error; + if (memcmp (verifier, server_signature, verifier_size) != 0) + { + if (sasl_error) + { + *sasl_error = strdup ( + _("unable to validate server signature")); + } + string = strdup ("*"); + if (!string) + goto memory_error; + length = strlen (string); + goto end; + } + string = strdup ("+"); + if (!string) + goto memory_error; + length = strlen (string); + } + else + { + if (!server->sasl_scram_client_first || !nonce_server + || !salt_base64 || (iterations <= 0)) + { + goto proto_error; + } + /* decode salt */ + salt = malloc (strlen (salt_base64) + 1); + if (!salt) + goto memory_error; + salt_size = weechat_string_base_decode (64, salt_base64, salt); + if (salt_size <= 0) + goto base64_decode_error; + /* RFC: SaltedPassword := Hi(Normalize(password), salt, i) */ + if (!weechat_crypto_hash_pbkdf2 (sasl_password, + strlen (sasl_password), + hash_algo, + salt, salt_size, + iterations, + salted_password, + &salted_password_size)) + goto crypto_error; + if (server->sasl_scram_salted_pwd) + free (server->sasl_scram_salted_pwd); + server->sasl_scram_salted_pwd = malloc (salted_password_size); + if (!server->sasl_scram_salted_pwd) + goto memory_error; + memcpy (server->sasl_scram_salted_pwd, salted_password, + salted_password_size); + server->sasl_scram_salted_pwd_size = salted_password_size; + /* RFC: ClientKey := HMAC(SaltedPassword, "Client Key") */ + if (!weechat_crypto_hmac (salted_password, + salted_password_size, + IRC_SASL_SCRAM_CLIENT_KEY, + strlen (IRC_SASL_SCRAM_CLIENT_KEY), + hash_algo, + client_key, + &client_key_size)) + goto crypto_error; + /* RFC: StoredKey := H(ClientKey) */ + if (!weechat_crypto_hash (client_key, client_key_size, + hash_algo, + stored_key, + &stored_key_size)) + goto crypto_error; + /* + * RFC: AuthMessage := client-first-message-bare + "," + + * server-first-message + "," + + * client-final-message-without-proof + */ + length = strlen (nonce_server) + 64 + 1; + auth_no_proof = malloc (length); + if (!auth_no_proof) + goto memory_error; + /* "biws" is "n,," encoded to base64 */ + snprintf (auth_no_proof, length, "c=biws,r=%s", + nonce_server); + length = strlen (server->sasl_scram_client_first) + 1 + + strlen (data) + 1 + strlen (auth_no_proof) + 1; + auth_message = malloc (length); + if (!auth_message) + goto memory_error; + snprintf (auth_message, length, "%s,%s,%s", + server->sasl_scram_client_first, + data, + auth_no_proof); + if (server->sasl_scram_auth_message) + free (server->sasl_scram_auth_message); + server->sasl_scram_auth_message = strdup (auth_message); + /* RFC: ClientSignature := HMAC(StoredKey, AuthMessage) */ + if (!weechat_crypto_hmac (stored_key, + stored_key_size, + auth_message, + strlen (auth_message), + hash_algo, + client_signature, + &client_signature_size)) + goto crypto_error; + if (client_key_size != client_signature_size) + goto crypto_error; + /* RFC: ClientProof := ClientKey XOR ClientSignature */ + for (i = 0; i < client_key_size; i++) + { + client_proof[i] = ((unsigned char)client_key[i] ^ + (unsigned char)client_signature[i]); + } + if (weechat_string_base_encode (64, client_proof, client_key_size, + client_proof_base64) < 0) + goto base64_encode_error; + /* final message: auth_no_proof + "," + proof */ + length = strlen (auth_no_proof) + 3 + strlen (client_proof_base64); + string = malloc (length + 1); + snprintf (string, length + 1, "%s,p=%s", + auth_no_proof, + client_proof_base64); + } + } + goto end; + +memory_error: + if (sasl_error) + *sasl_error = strdup (_("memory error")); + goto end; + +base64_decode_error: + if (sasl_error) + *sasl_error = strdup (_("base64 decode error")); + goto end; + +base64_encode_error: + if (sasl_error) + *sasl_error = strdup (_("base64 encode error")); + goto end; + +crypto_error: + if (sasl_error) + *sasl_error = strdup (_("cryptography error")); + goto end; + +proto_error: + if (sasl_error) + *sasl_error = strdup (_("protocol error")); + goto end; + +end: + if (string && (length > 0)) + { + if ((strcmp (string, "+") == 0) || (strcmp (string, "*") == 0)) + { + answer_base64 = strdup (string); + } + else + { + answer_base64 = malloc ((length + 1) * 4); + if (answer_base64) + { + if (weechat_string_base_encode (64, string, length, + answer_base64) < 0) + { + free (answer_base64); + answer_base64 = NULL; + if (sasl_error) + *sasl_error = strdup (_("base64 encode error")); + } + } + } + } + + if (string) + free (string); + if (username) + free (username); + if (username2) + free (username2); + if (data) + free (data); + if (attrs) + weechat_string_free_split (attrs); + if (nonce_server) + free (nonce_server); + if (salt_base64) + free (salt_base64); + if (salt) + free (salt); + if (verifier_base64) + free (verifier_base64); + if (verifier) + free (verifier); + if (attr_error) + free (attr_error); + if (auth_no_proof) + free (auth_no_proof); + if (auth_message) + free (auth_message); + + return answer_base64; +} + /* * Returns the content of file with SASL key. * @@ -92,9 +460,9 @@ irc_sasl_mechanism_plain (const char *sasl_username, const char *sasl_password) */ char * -irc_sasl_get_key_content (struct t_irc_server *server, const char *sasl_key) +irc_sasl_get_key_content (const char *sasl_key, char **sasl_error) { - char *key_path, *content; + char *key_path, *content, str_error[4096]; struct t_hashtable *options; if (!sasl_key) @@ -116,14 +484,12 @@ irc_sasl_get_key_content (struct t_irc_server *server, const char *sasl_key) if (key_path) content = weechat_file_get_content (key_path); - if (!content) + if (!content && sasl_error) { - weechat_printf ( - server->buffer, - _("%s%s: unable to read private key in file \"%s\""), - weechat_prefix ("error"), - IRC_PLUGIN_NAME, - key_path); + snprintf (str_error, sizeof (str_error), + "unable to read private key in file \"%s\"", + key_path); + *sasl_error = strdup (str_error); } if (key_path) @@ -143,10 +509,11 @@ char * irc_sasl_mechanism_ecdsa_nist256p_challenge (struct t_irc_server *server, const char *data_base64, const char *sasl_username, - const char *sasl_key) + const char *sasl_key, + char **sasl_error) { #if LIBGNUTLS_VERSION_NUMBER >= 0x030015 /* 3.0.21 */ - char *data, *string, *answer_base64; + char *answer_base64, *string, *data, str_error[4096]; int length_data, length_username, length, ret; char *str_privkey; gnutls_x509_privkey_t x509_privkey; @@ -160,11 +527,11 @@ irc_sasl_mechanism_ecdsa_nist256p_challenge (struct t_irc_server *server, answer_base64 = NULL; string = NULL; + length = 0; if (strcmp (data_base64, "+") == 0) { /* send "username" + '\0' + "username" */ - answer_base64 = NULL; length_username = strlen (sasl_username); length = length_username + 1 + length_username; string = malloc (length + 1); @@ -185,7 +552,7 @@ irc_sasl_mechanism_ecdsa_nist256p_challenge (struct t_irc_server *server, length_data = weechat_string_base_decode (64, data_base64, data); /* read file with private key */ - str_privkey = irc_sasl_get_key_content (server, sasl_key); + str_privkey = irc_sasl_get_key_content (sasl_key, sasl_error); if (!str_privkey) { free (data); @@ -202,12 +569,14 @@ irc_sasl_mechanism_ecdsa_nist256p_challenge (struct t_irc_server *server, free (str_privkey); if (ret != GNUTLS_E_SUCCESS) { - weechat_printf ( - server->buffer, - _("%sgnutls: invalid private key file: error %d %s"), - weechat_prefix ("error"), - ret, - gnutls_strerror (ret)); + if (sasl_error) + { + snprintf (str_error, sizeof (str_error), + "invalid private key file: error %d %s", + ret, + gnutls_strerror (ret)); + *sasl_error = strdup (str_error); + } gnutls_x509_privkey_deinit (x509_privkey); gnutls_privkey_deinit (privkey); free (data); @@ -253,12 +622,14 @@ irc_sasl_mechanism_ecdsa_nist256p_challenge (struct t_irc_server *server, ret = gnutls_privkey_import_x509 (privkey, x509_privkey, 0); /* gnutls >= 2.11.0 */ if (ret != GNUTLS_E_SUCCESS) { - weechat_printf ( - server->buffer, - _("%sgnutls: unable to import the private key: error %d %s"), - weechat_prefix ("error"), - ret, - gnutls_strerror (ret)); + if (sasl_error) + { + snprintf (str_error, sizeof (str_error), + "unable to import the private key: error %d %s", + ret, + gnutls_strerror (ret)); + *sasl_error = strdup (str_error); + } gnutls_x509_privkey_deinit (x509_privkey); gnutls_privkey_deinit (privkey); free (data); @@ -271,12 +642,14 @@ irc_sasl_mechanism_ecdsa_nist256p_challenge (struct t_irc_server *server, &decoded_data, &signature); if (ret != GNUTLS_E_SUCCESS) { - weechat_printf ( - server->buffer, - _("%sgnutls: unable to sign the hashed data: error %d %s"), - weechat_prefix ("error"), - ret, - gnutls_strerror (ret)); + if (sasl_error) + { + snprintf (str_error, sizeof (str_error), + "unable to sign the hashed data: error %d %s", + ret, + gnutls_strerror (ret)); + *sasl_error = strdup (str_error); + } gnutls_x509_privkey_deinit (x509_privkey); gnutls_privkey_deinit (privkey); free (data); @@ -308,8 +681,6 @@ irc_sasl_mechanism_ecdsa_nist256p_challenge (struct t_irc_server *server, answer_base64 = NULL; } } - free (string); - string = NULL; } if (string) @@ -324,10 +695,12 @@ irc_sasl_mechanism_ecdsa_nist256p_challenge (struct t_irc_server *server, (void) sasl_username; (void) sasl_key; - weechat_printf (server->buffer, - _("%sgnutls: version >= 3.0.21 is required for SASL " - "\"ecdsa-nist256p-challenge\""), - weechat_prefix ("error")); + if (sasl_error) + { + *sasl_error = strdup ( + _("%sgnutls: version >= 3.0.21 is required for SASL " + "\"ecdsa-nist256p-challenge\"")); + } return NULL; #endif /* LIBGNUTLS_VERSION_NUMBER >= 0x030015 */ @@ -344,7 +717,7 @@ irc_sasl_mechanism_ecdsa_nist256p_challenge (struct t_irc_server *server, int irc_sasl_dh (const char *data_base64, unsigned char **public_bin, unsigned char **secret_bin, - int *length_key) + int *length_key, char **sasl_error) { char *data; unsigned char *ptr_data; @@ -366,7 +739,7 @@ irc_sasl_dh (const char *data_base64, /* decode data */ data = malloc (strlen (data_base64) + 1); if (!data) - goto dhend; + goto memory_error; length_data = weechat_string_base_decode (64, data_base64, data); ptr_data = (unsigned char *)data; @@ -375,12 +748,12 @@ irc_sasl_dh (const char *data_base64, ptr_data += 2; length_data -= 2; if (size > length_data) - goto dhend; + goto crypto_error; data_prime_number = gcry_mpi_new (size * 8); gcry_mpi_scan (&data_prime_number, GCRYMPI_FMT_USG, ptr_data, size, NULL); num_bits_prime_number = gcry_mpi_get_nbits (data_prime_number); if (num_bits_prime_number == 0 || INT_MAX - 7 < num_bits_prime_number) - goto dhend; + goto crypto_error; ptr_data += size; length_data -= size; @@ -389,7 +762,7 @@ irc_sasl_dh (const char *data_base64, ptr_data += 2; length_data -= 2; if (size > length_data) - goto dhend; + goto crypto_error; data_generator_number = gcry_mpi_new (size * 8); gcry_mpi_scan (&data_generator_number, GCRYMPI_FMT_USG, ptr_data, size, NULL); ptr_data += size; @@ -400,7 +773,7 @@ irc_sasl_dh (const char *data_base64, ptr_data += 2; length_data -= 2; if (size > length_data) - goto dhend; + goto crypto_error; data_server_pub_key = gcry_mpi_new (size * 8); gcry_mpi_scan (&data_server_pub_key, GCRYMPI_FMT_USG, ptr_data, size, NULL); @@ -426,7 +799,19 @@ irc_sasl_dh (const char *data_base64, &num_written, pub_key); rc = 1; -dhend: + goto end; + +memory_error: + if (sasl_error) + *sasl_error = strdup (_("memory error")); + goto end; + +crypto_error: + if (sasl_error) + *sasl_error = strdup (_("cryptography error")); + goto end; + +end: if (data) free (data); if (data_prime_number) @@ -460,7 +845,8 @@ dhend: char * irc_sasl_mechanism_dh_blowfish (const char *data_base64, const char *sasl_username, - const char *sasl_password) + const char *sasl_password, + char **sasl_error) { char *answer, *ptr_answer, *answer_base64; unsigned char *password_clear, *password_crypted; @@ -475,8 +861,11 @@ irc_sasl_mechanism_dh_blowfish (const char *data_base64, secret_bin = NULL; public_bin = NULL; - if (!irc_sasl_dh (data_base64, &public_bin, &secret_bin, &length_key)) - goto bfend; + if (!irc_sasl_dh (data_base64, &public_bin, &secret_bin, &length_key, + sasl_error)) + { + goto end; + } /* create password buffers (clear and crypted) */ length_password = strlen (sasl_password) + @@ -488,13 +877,13 @@ irc_sasl_mechanism_dh_blowfish (const char *data_base64, /* crypt password using blowfish */ if (gcry_cipher_open (&gcrypt_handle, GCRY_CIPHER_BLOWFISH, GCRY_CIPHER_MODE_ECB, 0) != 0) - goto bfend; + goto crypto_error; if (gcry_cipher_setkey (gcrypt_handle, secret_bin, length_key) != 0) - goto bfend; + goto crypto_error; if (gcry_cipher_encrypt (gcrypt_handle, password_crypted, length_password, password_clear, length_password) != 0) - goto bfend; + goto crypto_error; gcry_cipher_close (gcrypt_handle); @@ -529,7 +918,14 @@ irc_sasl_mechanism_dh_blowfish (const char *data_base64, } } -bfend: + goto end; + +crypto_error: + if (sasl_error) + *sasl_error = strdup (_("cryptography error")); + goto end; + +end: if (secret_bin) free (secret_bin); if (public_bin) @@ -559,7 +955,8 @@ bfend: char * irc_sasl_mechanism_dh_aes (const char *data_base64, const char *sasl_username, - const char *sasl_password) + const char *sasl_password, + char **sasl_error) { char *answer, *ptr_answer, *answer_base64; unsigned char *ptr_userpass, *userpass_clear, *userpass_crypted; @@ -577,8 +974,11 @@ irc_sasl_mechanism_dh_aes (const char *data_base64, secret_bin = NULL; public_bin = NULL; - if (irc_sasl_dh (data_base64, &public_bin, &secret_bin, &length_key) == 0) - goto aesend; + if (!irc_sasl_dh (data_base64, &public_bin, &secret_bin, &length_key, + sasl_error)) + { + goto end; + } /* Select cipher algorithm: key length * 8 = cipher bit size */ switch (length_key) @@ -594,7 +994,7 @@ irc_sasl_mechanism_dh_aes (const char *data_base64, break; default: /* Invalid bit length */ - goto aesend; + goto end; } /* Generate the IV */ @@ -615,15 +1015,15 @@ irc_sasl_mechanism_dh_aes (const char *data_base64, /* crypt password using AES in CBC mode */ if (gcry_cipher_open (&gcrypt_handle, cipher_algo, GCRY_CIPHER_MODE_CBC, 0) != 0) - goto aesend; + goto crypto_error; if (gcry_cipher_setkey (gcrypt_handle, secret_bin, length_key) != 0) - goto aesend; + goto crypto_error; if (gcry_cipher_setiv (gcrypt_handle, iv, sizeof (iv)) != 0) - goto aesend; + goto crypto_error; if (gcry_cipher_encrypt (gcrypt_handle, userpass_crypted, length_userpass, userpass_clear, length_userpass) != 0) - goto aesend; + goto crypto_error; gcry_cipher_close (gcrypt_handle); @@ -657,7 +1057,14 @@ irc_sasl_mechanism_dh_aes (const char *data_base64, } } -aesend: + goto end; + +crypto_error: + if (sasl_error) + *sasl_error = strdup (_("cryptography error")); + goto end; + +end: if (secret_bin) free (secret_bin); if (public_bin) diff --git a/src/plugins/irc/irc-sasl.h b/src/plugins/irc/irc-sasl.h index bf75afd1a..841d0dbdf 100644 --- a/src/plugins/irc/irc-sasl.h +++ b/src/plugins/irc/irc-sasl.h @@ -20,6 +20,9 @@ #ifndef WEECHAT_PLUGIN_IRC_SASL_H #define WEECHAT_PLUGIN_IRC_SASL_H +#define IRC_SASL_SCRAM_CLIENT_KEY "Client Key" +#define IRC_SASL_SCRAM_SERVER_KEY "Server Key" + struct t_irc_server; /* SASL authentication mechanisms */ @@ -27,6 +30,9 @@ struct t_irc_server; enum t_irc_sasl_mechanism { IRC_SASL_MECHANISM_PLAIN = 0, + IRC_SASL_MECHANISM_SCRAM_SHA_1, + IRC_SASL_MECHANISM_SCRAM_SHA_256, + IRC_SASL_MECHANISM_SCRAM_SHA_512, IRC_SASL_MECHANISM_ECDSA_NIST256P_CHALLENGE, IRC_SASL_MECHANISM_EXTERNAL, IRC_SASL_MECHANISM_DH_BLOWFISH, @@ -39,15 +45,24 @@ extern char *irc_sasl_mechanism_string[]; extern char *irc_sasl_mechanism_plain (const char *sasl_username, const char *sasl_password); +extern char *irc_sasl_mechanism_scram (struct t_irc_server *server, + const char *hash_algo, + const char *data_base64, + const char *sasl_username, + const char *sasl_password, + char **sasl_error); extern char *irc_sasl_mechanism_ecdsa_nist256p_challenge (struct t_irc_server *server, const char *data_base64, const char *sasl_username, - const char *sasl_key); + const char *sasl_key, + char **sasl_error); extern char *irc_sasl_mechanism_dh_blowfish (const char *data_base64, const char *sasl_username, - const char *sasl_password); + const char *sasl_password, + char **sasl_error); extern char *irc_sasl_mechanism_dh_aes (const char *data_base64, const char *sasl_username, - const char *sasl_password); + const char *sasl_password, + char **sasl_error); #endif /* WEECHAT_PLUGIN_IRC_SASL_H */ diff --git a/src/plugins/irc/irc-server.c b/src/plugins/irc/irc-server.c index b754ec3e3..97d9691a7 100644 --- a/src/plugins/irc/irc-server.c +++ b/src/plugins/irc/irc-server.c @@ -1464,6 +1464,10 @@ irc_server_alloc (const char *name) new_server->hook_fd = NULL; new_server->hook_timer_connection = NULL; new_server->hook_timer_sasl = NULL; + new_server->sasl_scram_client_first = NULL; + new_server->sasl_scram_salted_pwd = NULL; + new_server->sasl_scram_salted_pwd_size = 0; + new_server->sasl_scram_auth_message = NULL; new_server->is_connected = 0; new_server->ssl_connected = 0; new_server->disconnected = 0; @@ -1943,6 +1947,31 @@ irc_server_outqueue_free_all (struct t_irc_server *server, int priority) } } +/* + * Frees SASL data in server. + */ + +void +irc_server_free_sasl_data (struct t_irc_server *server) +{ + if (server->sasl_scram_client_first) + { + free (server->sasl_scram_client_first); + server->sasl_scram_client_first = NULL; + } + if (server->sasl_scram_salted_pwd) + { + free (server->sasl_scram_salted_pwd); + server->sasl_scram_salted_pwd = NULL; + } + server->sasl_scram_salted_pwd_size = 0; + if (server->sasl_scram_auth_message) + { + free (server->sasl_scram_auth_message); + server->sasl_scram_auth_message = NULL; + } +} + /* * Frees server data. */ @@ -1997,6 +2026,7 @@ irc_server_free_data (struct t_irc_server *server) weechat_unhook (server->hook_timer_connection); if (server->hook_timer_sasl) weechat_unhook (server->hook_timer_sasl); + irc_server_free_sasl_data (server); if (server->unterminated_message) free (server->unterminated_message); if (server->nicks_array) @@ -3708,6 +3738,7 @@ irc_server_close_connection (struct t_irc_server *server) weechat_unhook (server->hook_timer_sasl); server->hook_timer_sasl = NULL; } + irc_server_free_sasl_data (server); if (server->hook_fd) { @@ -5879,6 +5910,10 @@ irc_server_hdata_server_cb (const void *pointer, void *data, WEECHAT_HDATA_VAR(struct t_irc_server, hook_fd, POINTER, 0, NULL, "hook"); WEECHAT_HDATA_VAR(struct t_irc_server, hook_timer_connection, POINTER, 0, NULL, "hook"); WEECHAT_HDATA_VAR(struct t_irc_server, hook_timer_sasl, POINTER, 0, NULL, "hook"); + WEECHAT_HDATA_VAR(struct t_irc_server, sasl_scram_client_first, STRING, 0, NULL, NULL); + WEECHAT_HDATA_VAR(struct t_irc_server, sasl_scram_salted_pwd, OTHER, 0, NULL, NULL); + WEECHAT_HDATA_VAR(struct t_irc_server, sasl_scram_salted_pwd_size, INTEGER, 0, NULL, NULL); + WEECHAT_HDATA_VAR(struct t_irc_server, sasl_scram_auth_message, STRING, 0, NULL, NULL); WEECHAT_HDATA_VAR(struct t_irc_server, is_connected, INTEGER, 0, NULL, NULL); WEECHAT_HDATA_VAR(struct t_irc_server, ssl_connected, INTEGER, 0, NULL, NULL); WEECHAT_HDATA_VAR(struct t_irc_server, disconnected, INTEGER, 0, NULL, NULL); @@ -6218,383 +6253,387 @@ irc_server_print_log () weechat_log_printf ("[server %s (addr:0x%lx)]", ptr_server->name, ptr_server); /* addresses */ if (weechat_config_option_is_null (ptr_server->options[IRC_SERVER_OPTION_ADDRESSES])) - weechat_log_printf (" addresses. . . . . . : null ('%s')", + weechat_log_printf (" addresses . . . . . . . . : null ('%s')", IRC_SERVER_OPTION_STRING(ptr_server, IRC_SERVER_OPTION_ADDRESSES)); else - weechat_log_printf (" addresses. . . . . . : '%s'", + weechat_log_printf (" addresses . . . . . . . . : '%s'", weechat_config_string (ptr_server->options[IRC_SERVER_OPTION_ADDRESSES])); /* proxy */ if (weechat_config_option_is_null (ptr_server->options[IRC_SERVER_OPTION_PROXY])) - weechat_log_printf (" proxy. . . . . . . . : null ('%s')", + weechat_log_printf (" proxy . . . . . . . . . . : null ('%s')", IRC_SERVER_OPTION_STRING(ptr_server, IRC_SERVER_OPTION_PROXY)); else - weechat_log_printf (" proxy. . . . . . . . : '%s'", + weechat_log_printf (" proxy . . . . . . . . . . : '%s'", weechat_config_string (ptr_server->options[IRC_SERVER_OPTION_PROXY])); /* ipv6 */ if (weechat_config_option_is_null (ptr_server->options[IRC_SERVER_OPTION_IPV6])) - weechat_log_printf (" ipv6 . . . . . . . . : null (%s)", + weechat_log_printf (" ipv6. . . . . . . . . . . : null (%s)", (IRC_SERVER_OPTION_BOOLEAN(ptr_server, IRC_SERVER_OPTION_IPV6)) ? "on" : "off"); else - weechat_log_printf (" ipv6 . . . . . . . . : %s", + weechat_log_printf (" ipv6. . . . . . . . . . . : %s", (weechat_config_boolean (ptr_server->options[IRC_SERVER_OPTION_IPV6])) ? "on" : "off"); /* ssl */ if (weechat_config_option_is_null (ptr_server->options[IRC_SERVER_OPTION_SSL])) - weechat_log_printf (" ssl. . . . . . . . . : null (%s)", + weechat_log_printf (" ssl . . . . . . . . . . . : null (%s)", (IRC_SERVER_OPTION_BOOLEAN(ptr_server, IRC_SERVER_OPTION_SSL)) ? "on" : "off"); else - weechat_log_printf (" ssl. . . . . . . . . : %s", + weechat_log_printf (" ssl . . . . . . . . . . . : %s", (weechat_config_boolean (ptr_server->options[IRC_SERVER_OPTION_SSL])) ? "on" : "off"); /* ssl_cert */ if (weechat_config_option_is_null (ptr_server->options[IRC_SERVER_OPTION_SSL_CERT])) - weechat_log_printf (" ssl_cert . . . . . . : null ('%s')", + weechat_log_printf (" ssl_cert. . . . . . . . . : null ('%s')", IRC_SERVER_OPTION_STRING(ptr_server, IRC_SERVER_OPTION_SSL_CERT)); else - weechat_log_printf (" ssl_cert . . . . . . : '%s'", + weechat_log_printf (" ssl_cert. . . . . . . . . : '%s'", weechat_config_string (ptr_server->options[IRC_SERVER_OPTION_SSL_CERT])); /* ssl_password */ if (weechat_config_option_is_null (ptr_server->options[IRC_SERVER_OPTION_SSL_PASSWORD])) - weechat_log_printf (" ssl_password . . . . : null"); + weechat_log_printf (" ssl_password. . . . . . . : null"); else - weechat_log_printf (" ssl_password . . . . : (hidden)"); + weechat_log_printf (" ssl_password. . . . . . . : (hidden)"); /* ssl_priorities */ if (weechat_config_option_is_null (ptr_server->options[IRC_SERVER_OPTION_SSL_PRIORITIES])) - weechat_log_printf (" ssl_priorities . . . : null ('%s')", + weechat_log_printf (" ssl_priorities. . . . . . : null ('%s')", IRC_SERVER_OPTION_STRING(ptr_server, IRC_SERVER_OPTION_SSL_PRIORITIES)); else - weechat_log_printf (" ssl_priorities . . . : '%s'", + weechat_log_printf (" ssl_priorities. . . . . . : '%s'", weechat_config_string (ptr_server->options[IRC_SERVER_OPTION_SSL_PRIORITIES])); /* ssl_dhkey_size */ if (weechat_config_option_is_null (ptr_server->options[IRC_SERVER_OPTION_SSL_DHKEY_SIZE])) - weechat_log_printf (" ssl_dhkey_size . . . : null ('%d')", + weechat_log_printf (" ssl_dhkey_size. . . . . . : null ('%d')", IRC_SERVER_OPTION_INTEGER(ptr_server, IRC_SERVER_OPTION_SSL_DHKEY_SIZE)); else - weechat_log_printf (" ssl_dhkey_size . . . : '%d'", + weechat_log_printf (" ssl_dhkey_size. . . . . . : '%d'", weechat_config_integer (ptr_server->options[IRC_SERVER_OPTION_SSL_DHKEY_SIZE])); /* ssl_fingerprint */ if (weechat_config_option_is_null (ptr_server->options[IRC_SERVER_OPTION_SSL_FINGERPRINT])) - weechat_log_printf (" ssl_fingerprint. . . : null ('%s')", + weechat_log_printf (" ssl_fingerprint . . . . . : null ('%s')", IRC_SERVER_OPTION_STRING(ptr_server, IRC_SERVER_OPTION_SSL_FINGERPRINT)); else - weechat_log_printf (" ssl_fingerprint. . . : '%s'", + weechat_log_printf (" ssl_fingerprint . . . . . : '%s'", weechat_config_string (ptr_server->options[IRC_SERVER_OPTION_SSL_FINGERPRINT])); /* ssl_verify */ if (weechat_config_option_is_null (ptr_server->options[IRC_SERVER_OPTION_SSL_VERIFY])) - weechat_log_printf (" ssl_verify . . . . . : null (%s)", + weechat_log_printf (" ssl_verify. . . . . . . . : null (%s)", (IRC_SERVER_OPTION_BOOLEAN(ptr_server, IRC_SERVER_OPTION_SSL_VERIFY)) ? "on" : "off"); else - weechat_log_printf (" ssl_verify . . . . . : %s", + weechat_log_printf (" ssl_verify. . . . . . . . : %s", (weechat_config_boolean (ptr_server->options[IRC_SERVER_OPTION_SSL_VERIFY])) ? "on" : "off"); /* password */ if (weechat_config_option_is_null (ptr_server->options[IRC_SERVER_OPTION_PASSWORD])) - weechat_log_printf (" password . . . . . . : null"); + weechat_log_printf (" password. . . . . . . . . : null"); else - weechat_log_printf (" password . . . . . . : (hidden)"); + weechat_log_printf (" password. . . . . . . . . : (hidden)"); /* client capabilities */ if (weechat_config_option_is_null (ptr_server->options[IRC_SERVER_OPTION_CAPABILITIES])) - weechat_log_printf (" capabilities . . . . : null ('%s')", + weechat_log_printf (" capabilities. . . . . . . : null ('%s')", IRC_SERVER_OPTION_STRING(ptr_server, IRC_SERVER_OPTION_CAPABILITIES)); else - weechat_log_printf (" capabilities . . . . : '%s'", + weechat_log_printf (" capabilities. . . . . . . : '%s'", weechat_config_string (ptr_server->options[IRC_SERVER_OPTION_CAPABILITIES])); /* sasl_mechanism */ if (weechat_config_option_is_null (ptr_server->options[IRC_SERVER_OPTION_SASL_MECHANISM])) - weechat_log_printf (" sasl_mechanism . . . : null ('%s')", + weechat_log_printf (" sasl_mechanism. . . . . . : null ('%s')", irc_sasl_mechanism_string[IRC_SERVER_OPTION_INTEGER(ptr_server, IRC_SERVER_OPTION_SASL_MECHANISM)]); else - weechat_log_printf (" sasl_mechanism . . . : '%s'", + weechat_log_printf (" sasl_mechanism. . . . . . : '%s'", irc_sasl_mechanism_string[weechat_config_integer (ptr_server->options[IRC_SERVER_OPTION_SASL_MECHANISM])]); /* sasl_username */ if (weechat_config_option_is_null (ptr_server->options[IRC_SERVER_OPTION_SASL_USERNAME])) - weechat_log_printf (" sasl_username. . . . : null ('%s')", + weechat_log_printf (" sasl_username . . . . . . : null ('%s')", IRC_SERVER_OPTION_STRING(ptr_server, IRC_SERVER_OPTION_SASL_USERNAME)); else - weechat_log_printf (" sasl_username. . . . : '%s'", + weechat_log_printf (" sasl_username . . . . . . : '%s'", weechat_config_string (ptr_server->options[IRC_SERVER_OPTION_SASL_USERNAME])); /* sasl_password */ if (weechat_config_option_is_null (ptr_server->options[IRC_SERVER_OPTION_SASL_PASSWORD])) - weechat_log_printf (" sasl_password. . . . : null"); + weechat_log_printf (" sasl_password . . . . . . : null"); else - weechat_log_printf (" sasl_password. . . . : (hidden)"); + weechat_log_printf (" sasl_password . . . . . . : (hidden)"); /* sasl_key */ if (weechat_config_option_is_null (ptr_server->options[IRC_SERVER_OPTION_SASL_KEY])) - weechat_log_printf (" sasl_key. . . . . . : null ('%s')", + weechat_log_printf (" sasl_key. . . . . . . . . : null ('%s')", IRC_SERVER_OPTION_STRING(ptr_server, IRC_SERVER_OPTION_SASL_KEY)); else - weechat_log_printf (" sasl_key. . . . . . : '%s'", + weechat_log_printf (" sasl_key. . . . . . . . . : '%s'", weechat_config_string (ptr_server->options[IRC_SERVER_OPTION_SASL_KEY])); /* sasl_fail */ if (weechat_config_option_is_null (ptr_server->options[IRC_SERVER_OPTION_SASL_FAIL])) - weechat_log_printf (" sasl_fail. . . . . . : null ('%s')", + weechat_log_printf (" sasl_fail . . . . . . . . : null ('%s')", irc_server_sasl_fail_string[IRC_SERVER_OPTION_INTEGER(ptr_server, IRC_SERVER_OPTION_SASL_FAIL)]); else - weechat_log_printf (" sasl_fail. . . . . . : '%s'", + weechat_log_printf (" sasl_fail . . . . . . . . : '%s'", irc_server_sasl_fail_string[weechat_config_integer (ptr_server->options[IRC_SERVER_OPTION_SASL_FAIL])]); /* autoconnect */ if (weechat_config_option_is_null (ptr_server->options[IRC_SERVER_OPTION_AUTOCONNECT])) - weechat_log_printf (" autoconnect. . . . . : null (%s)", + weechat_log_printf (" autoconnect . . . . . . . : null (%s)", (IRC_SERVER_OPTION_BOOLEAN(ptr_server, IRC_SERVER_OPTION_AUTOCONNECT)) ? "on" : "off"); else - weechat_log_printf (" autoconnect. . . . . : %s", + weechat_log_printf (" autoconnect . . . . . . . : %s", (weechat_config_boolean (ptr_server->options[IRC_SERVER_OPTION_AUTOCONNECT])) ? "on" : "off"); /* autoreconnect */ if (weechat_config_option_is_null (ptr_server->options[IRC_SERVER_OPTION_AUTORECONNECT])) - weechat_log_printf (" autoreconnect. . . . : null (%s)", + weechat_log_printf (" autoreconnect . . . . . . : null (%s)", (IRC_SERVER_OPTION_BOOLEAN(ptr_server, IRC_SERVER_OPTION_AUTORECONNECT)) ? "on" : "off"); else - weechat_log_printf (" autoreconnect. . . . : %s", + weechat_log_printf (" autoreconnect . . . . . . : %s", (weechat_config_boolean (ptr_server->options[IRC_SERVER_OPTION_AUTORECONNECT])) ? "on" : "off"); /* autoreconnect_delay */ if (weechat_config_option_is_null (ptr_server->options[IRC_SERVER_OPTION_AUTORECONNECT_DELAY])) - weechat_log_printf (" autoreconnect_delay. : null (%d)", + weechat_log_printf (" autoreconnect_delay . . . : null (%d)", IRC_SERVER_OPTION_INTEGER(ptr_server, IRC_SERVER_OPTION_AUTORECONNECT_DELAY)); else - weechat_log_printf (" autoreconnect_delay. : %d", + weechat_log_printf (" autoreconnect_delay . . . : %d", weechat_config_integer (ptr_server->options[IRC_SERVER_OPTION_AUTORECONNECT_DELAY])); /* nicks */ if (weechat_config_option_is_null (ptr_server->options[IRC_SERVER_OPTION_NICKS])) - weechat_log_printf (" nicks. . . . . . . . : null ('%s')", + weechat_log_printf (" nicks . . . . . . . . . . : null ('%s')", IRC_SERVER_OPTION_STRING(ptr_server, IRC_SERVER_OPTION_NICKS)); else - weechat_log_printf (" nicks. . . . . . . . : '%s'", + weechat_log_printf (" nicks . . . . . . . . . . : '%s'", weechat_config_string (ptr_server->options[IRC_SERVER_OPTION_NICKS])); /* nicks_alternate */ if (weechat_config_option_is_null (ptr_server->options[IRC_SERVER_OPTION_NICKS_ALTERNATE])) - weechat_log_printf (" nicks_alternate. . . : null (%s)", + weechat_log_printf (" nicks_alternate . . . . . : null (%s)", (IRC_SERVER_OPTION_BOOLEAN(ptr_server, IRC_SERVER_OPTION_NICKS_ALTERNATE)) ? "on" : "off"); else - weechat_log_printf (" nicks_alternate. . . : %s", + weechat_log_printf (" nicks_alternate . . . . . : %s", (weechat_config_boolean (ptr_server->options[IRC_SERVER_OPTION_NICKS_ALTERNATE])) ? "on" : "off"); /* username */ if (weechat_config_option_is_null (ptr_server->options[IRC_SERVER_OPTION_USERNAME])) - weechat_log_printf (" username . . . . . . : null ('%s')", + weechat_log_printf (" username. . . . . . . . . : null ('%s')", IRC_SERVER_OPTION_STRING(ptr_server, IRC_SERVER_OPTION_USERNAME)); else - weechat_log_printf (" username . . . . . . : '%s'", + weechat_log_printf (" username. . . . . . . . . : '%s'", weechat_config_string (ptr_server->options[IRC_SERVER_OPTION_USERNAME])); /* realname */ if (weechat_config_option_is_null (ptr_server->options[IRC_SERVER_OPTION_REALNAME])) - weechat_log_printf (" realname . . . . . . : null ('%s')", + weechat_log_printf (" realname. . . . . . . . . : null ('%s')", IRC_SERVER_OPTION_STRING(ptr_server, IRC_SERVER_OPTION_REALNAME)); else - weechat_log_printf (" realname . . . . . . : '%s'", + weechat_log_printf (" realname. . . . . . . . . : '%s'", weechat_config_string (ptr_server->options[IRC_SERVER_OPTION_REALNAME])); /* local_hostname */ if (weechat_config_option_is_null (ptr_server->options[IRC_SERVER_OPTION_LOCAL_HOSTNAME])) - weechat_log_printf (" local_hostname . . . : null ('%s')", + weechat_log_printf (" local_hostname. . . . . . : null ('%s')", IRC_SERVER_OPTION_STRING(ptr_server, IRC_SERVER_OPTION_LOCAL_HOSTNAME)); else - weechat_log_printf (" local_hostname . . . : '%s'", + weechat_log_printf (" local_hostname. . . . . . : '%s'", weechat_config_string (ptr_server->options[IRC_SERVER_OPTION_LOCAL_HOSTNAME])); /* usermode */ if (weechat_config_option_is_null (ptr_server->options[IRC_SERVER_OPTION_USERMODE])) - weechat_log_printf (" usermode . . . . . . : null ('%s')", + weechat_log_printf (" usermode. . . . . . . . . : null ('%s')", IRC_SERVER_OPTION_STRING(ptr_server, IRC_SERVER_OPTION_USERMODE)); else - weechat_log_printf (" usermode . . . . . . : '%s'", + weechat_log_printf (" usermode. . . . . . . . . : '%s'", weechat_config_string (ptr_server->options[IRC_SERVER_OPTION_USERMODE])); /* command */ if (weechat_config_option_is_null (ptr_server->options[IRC_SERVER_OPTION_COMMAND])) - weechat_log_printf (" command. . . . . . . : null"); + weechat_log_printf (" command . . . . . . . . . : null"); else - weechat_log_printf (" command. . . . . . . : (hidden)"); + weechat_log_printf (" command . . . . . . . . . : (hidden)"); /* command_delay */ if (weechat_config_option_is_null (ptr_server->options[IRC_SERVER_OPTION_COMMAND_DELAY])) - weechat_log_printf (" command_delay. . . . : null (%d)", + weechat_log_printf (" command_delay . . . . . . : null (%d)", IRC_SERVER_OPTION_INTEGER(ptr_server, IRC_SERVER_OPTION_COMMAND_DELAY)); else - weechat_log_printf (" command_delay. . . . : %d", + weechat_log_printf (" command_delay . . . . . . : %d", weechat_config_integer (ptr_server->options[IRC_SERVER_OPTION_COMMAND_DELAY])); /* autojoin */ if (weechat_config_option_is_null (ptr_server->options[IRC_SERVER_OPTION_AUTOJOIN])) - weechat_log_printf (" autojoin . . . . . . : null ('%s')", + weechat_log_printf (" autojoin. . . . . . . . . : null ('%s')", IRC_SERVER_OPTION_STRING(ptr_server, IRC_SERVER_OPTION_AUTOJOIN)); else - weechat_log_printf (" autojoin . . . . . . : '%s'", + weechat_log_printf (" autojoin. . . . . . . . . : '%s'", weechat_config_string (ptr_server->options[IRC_SERVER_OPTION_AUTOJOIN])); /* autorejoin */ if (weechat_config_option_is_null (ptr_server->options[IRC_SERVER_OPTION_AUTOREJOIN])) - weechat_log_printf (" autorejoin . . . . . : null (%s)", + weechat_log_printf (" autorejoin. . . . . . . . : null (%s)", (IRC_SERVER_OPTION_BOOLEAN(ptr_server, IRC_SERVER_OPTION_AUTOREJOIN)) ? "on" : "off"); else - weechat_log_printf (" autorejoin . . . . . : %s", + weechat_log_printf (" autorejoin. . . . . . . . : %s", (weechat_config_boolean (ptr_server->options[IRC_SERVER_OPTION_AUTOREJOIN])) ? "on" : "off"); /* autorejoin_delay */ if (weechat_config_option_is_null (ptr_server->options[IRC_SERVER_OPTION_AUTOREJOIN_DELAY])) - weechat_log_printf (" autorejoin_delay . . : null (%d)", + weechat_log_printf (" autorejoin_delay. . . . . : null (%d)", IRC_SERVER_OPTION_INTEGER(ptr_server, IRC_SERVER_OPTION_AUTOREJOIN_DELAY)); else - weechat_log_printf (" autorejoin_delay . . : %d", + weechat_log_printf (" autorejoin_delay. . . . . : %d", weechat_config_integer (ptr_server->options[IRC_SERVER_OPTION_AUTOREJOIN_DELAY])); /* connection_timeout */ if (weechat_config_option_is_null (ptr_server->options[IRC_SERVER_OPTION_CONNECTION_TIMEOUT])) - weechat_log_printf (" connection_timeout . : null (%d)", + weechat_log_printf (" connection_timeout. . . . : null (%d)", IRC_SERVER_OPTION_INTEGER(ptr_server, IRC_SERVER_OPTION_CONNECTION_TIMEOUT)); else - weechat_log_printf (" connection_timeout . : %d", + weechat_log_printf (" connection_timeout. . . . : %d", weechat_config_integer (ptr_server->options[IRC_SERVER_OPTION_CONNECTION_TIMEOUT])); /* anti_flood_prio_high */ if (weechat_config_option_is_null (ptr_server->options[IRC_SERVER_OPTION_ANTI_FLOOD_PRIO_HIGH])) - weechat_log_printf (" anti_flood_prio_high : null (%d)", + weechat_log_printf (" anti_flood_prio_high. . . : null (%d)", IRC_SERVER_OPTION_INTEGER(ptr_server, IRC_SERVER_OPTION_ANTI_FLOOD_PRIO_HIGH)); else - weechat_log_printf (" anti_flood_prio_high : %d", + weechat_log_printf (" anti_flood_prio_high. . . : %d", weechat_config_integer (ptr_server->options[IRC_SERVER_OPTION_ANTI_FLOOD_PRIO_HIGH])); /* anti_flood_prio_low */ if (weechat_config_option_is_null (ptr_server->options[IRC_SERVER_OPTION_ANTI_FLOOD_PRIO_LOW])) - weechat_log_printf (" anti_flood_prio_low. : null (%d)", + weechat_log_printf (" anti_flood_prio_low . . . : null (%d)", IRC_SERVER_OPTION_INTEGER(ptr_server, IRC_SERVER_OPTION_ANTI_FLOOD_PRIO_LOW)); else - weechat_log_printf (" anti_flood_prio_low. : %d", + weechat_log_printf (" anti_flood_prio_low . . . : %d", weechat_config_integer (ptr_server->options[IRC_SERVER_OPTION_ANTI_FLOOD_PRIO_LOW])); /* away_check */ if (weechat_config_option_is_null (ptr_server->options[IRC_SERVER_OPTION_AWAY_CHECK])) - weechat_log_printf (" away_check . . . . . : null (%d)", + weechat_log_printf (" away_check. . . . . . . . : null (%d)", IRC_SERVER_OPTION_INTEGER(ptr_server, IRC_SERVER_OPTION_AWAY_CHECK)); else - weechat_log_printf (" away_check . . . . . : %d", + weechat_log_printf (" away_check. . . . . . . . : %d", weechat_config_integer (ptr_server->options[IRC_SERVER_OPTION_AWAY_CHECK])); /* away_check_max_nicks */ if (weechat_config_option_is_null (ptr_server->options[IRC_SERVER_OPTION_AWAY_CHECK_MAX_NICKS])) - weechat_log_printf (" away_check_max_nicks : null (%d)", + weechat_log_printf (" away_check_max_nicks. . . : null (%d)", IRC_SERVER_OPTION_INTEGER(ptr_server, IRC_SERVER_OPTION_AWAY_CHECK_MAX_NICKS)); else - weechat_log_printf (" away_check_max_nicks : %d", + weechat_log_printf (" away_check_max_nicks. . . : %d", weechat_config_integer (ptr_server->options[IRC_SERVER_OPTION_AWAY_CHECK_MAX_NICKS])); /* msg_kick */ if (weechat_config_option_is_null (ptr_server->options[IRC_SERVER_OPTION_MSG_KICK])) - weechat_log_printf (" msg_kick . . . . . . : null ('%s')", + weechat_log_printf (" msg_kick. . . . . . . . . : null ('%s')", IRC_SERVER_OPTION_STRING(ptr_server, IRC_SERVER_OPTION_MSG_KICK)); else - weechat_log_printf (" msg_kick . . . . . . : '%s'", + weechat_log_printf (" msg_kick. . . . . . . . . : '%s'", weechat_config_string (ptr_server->options[IRC_SERVER_OPTION_MSG_KICK])); /* msg_part */ if (weechat_config_option_is_null (ptr_server->options[IRC_SERVER_OPTION_MSG_PART])) - weechat_log_printf (" msg_part . . . . . . : null ('%s')", + weechat_log_printf (" msg_part. . . . . . . . . : null ('%s')", IRC_SERVER_OPTION_STRING(ptr_server, IRC_SERVER_OPTION_MSG_PART)); else - weechat_log_printf (" msg_part . . . . . . : '%s'", + weechat_log_printf (" msg_part. . . . . . . . . : '%s'", weechat_config_string (ptr_server->options[IRC_SERVER_OPTION_MSG_PART])); /* msg_quit */ if (weechat_config_option_is_null (ptr_server->options[IRC_SERVER_OPTION_MSG_QUIT])) - weechat_log_printf (" msg_quit . . . . . . : null ('%s')", + weechat_log_printf (" msg_quit. . . . . . . . . : null ('%s')", IRC_SERVER_OPTION_STRING(ptr_server, IRC_SERVER_OPTION_MSG_QUIT)); else - weechat_log_printf (" msg_quit . . . . . . : '%s'", + weechat_log_printf (" msg_quit. . . . . . . . . : '%s'", weechat_config_string (ptr_server->options[IRC_SERVER_OPTION_MSG_QUIT])); /* other server variables */ - weechat_log_printf (" temp_server. . . . . : %d", ptr_server->temp_server); - weechat_log_printf (" fake_server. . . . . : %d", ptr_server->fake_server); - weechat_log_printf (" reloading_from_config: %d", ptr_server->reloaded_from_config); - weechat_log_printf (" reloaded_from_config : %d", ptr_server->reloaded_from_config); - weechat_log_printf (" addresses_eval . . . : '%s'", ptr_server->addresses_eval); - weechat_log_printf (" addresses_count. . . : %d", ptr_server->addresses_count); - weechat_log_printf (" addresses_array. . . : 0x%lx", ptr_server->addresses_array); - weechat_log_printf (" ports_array. . . . . : 0x%lx", ptr_server->ports_array); - weechat_log_printf (" retry_array. . . . . : 0x%lx", ptr_server->retry_array); - weechat_log_printf (" index_current_address: %d", ptr_server->index_current_address); - weechat_log_printf (" current_address. . . : '%s'", ptr_server->current_address); - weechat_log_printf (" current_ip . . . . . : '%s'", ptr_server->current_ip); - weechat_log_printf (" current_port . . . . : %d", ptr_server->current_port); - weechat_log_printf (" current_retry. . . . : %d", ptr_server->current_retry); - weechat_log_printf (" sock . . . . . . . . : %d", ptr_server->sock); - weechat_log_printf (" hook_connect . . . . : 0x%lx", ptr_server->hook_connect); - weechat_log_printf (" hook_fd. . . . . . . : 0x%lx", ptr_server->hook_fd); - weechat_log_printf (" hook_timer_connection: 0x%lx", ptr_server->hook_timer_connection); - weechat_log_printf (" hook_timer_sasl. . . : 0x%lx", ptr_server->hook_timer_sasl); - weechat_log_printf (" is_connected . . . . : %d", ptr_server->is_connected); - weechat_log_printf (" ssl_connected. . . . : %d", ptr_server->ssl_connected); - weechat_log_printf (" disconnected . . . . : %d", ptr_server->disconnected); - weechat_log_printf (" gnutls_sess. . . . . : 0x%lx", ptr_server->gnutls_sess); - weechat_log_printf (" unterminated_message : '%s'", ptr_server->unterminated_message); - weechat_log_printf (" nicks_count. . . . . : %d", ptr_server->nicks_count); - weechat_log_printf (" nicks_array. . . . . : 0x%lx", ptr_server->nicks_array); - weechat_log_printf (" nick_first_tried . . : %d", ptr_server->nick_first_tried); - weechat_log_printf (" nick_alternate_number: %d", ptr_server->nick_alternate_number); - weechat_log_printf (" nick . . . . . . . . : '%s'", ptr_server->nick); - weechat_log_printf (" nick_modes . . . . . : '%s'", ptr_server->nick_modes); - weechat_log_printf (" host . . . . . . . . : '%s'", ptr_server->host); - weechat_log_printf (" checking_cap_ls. . . : %d", ptr_server->checking_cap_ls); - weechat_log_printf (" cap_ls . . . . . . . : 0x%lx (hashtable: '%s')", + weechat_log_printf (" temp_server . . . . . . . : %d", ptr_server->temp_server); + weechat_log_printf (" fake_server . . . . . . . : %d", ptr_server->fake_server); + weechat_log_printf (" reloading_from_config . . : %d", ptr_server->reloaded_from_config); + weechat_log_printf (" reloaded_from_config. . . : %d", ptr_server->reloaded_from_config); + weechat_log_printf (" addresses_eval. . . . . . : '%s'", ptr_server->addresses_eval); + weechat_log_printf (" addresses_count . . . . . : %d", ptr_server->addresses_count); + weechat_log_printf (" addresses_array . . . . . : 0x%lx", ptr_server->addresses_array); + weechat_log_printf (" ports_array . . . . . . . : 0x%lx", ptr_server->ports_array); + weechat_log_printf (" retry_array . . . . . . . : 0x%lx", ptr_server->retry_array); + weechat_log_printf (" index_current_address . . : %d", ptr_server->index_current_address); + weechat_log_printf (" current_address . . . . . : '%s'", ptr_server->current_address); + weechat_log_printf (" current_ip. . . . . . . . : '%s'", ptr_server->current_ip); + weechat_log_printf (" current_port. . . . . . . : %d", ptr_server->current_port); + weechat_log_printf (" current_retry . . . . . . : %d", ptr_server->current_retry); + weechat_log_printf (" sock. . . . . . . . . . . : %d", ptr_server->sock); + weechat_log_printf (" hook_connect. . . . . . . : 0x%lx", ptr_server->hook_connect); + weechat_log_printf (" hook_fd . . . . . . . . . : 0x%lx", ptr_server->hook_fd); + weechat_log_printf (" hook_timer_connection . . : 0x%lx", ptr_server->hook_timer_connection); + weechat_log_printf (" hook_timer_sasl . . . . . : 0x%lx", ptr_server->hook_timer_sasl); + weechat_log_printf (" sasl_scram_client_first . : '%s'", ptr_server->sasl_scram_client_first); + weechat_log_printf (" sasl_scram_salted_pwd . . : (hidden)"); + weechat_log_printf (" sasl_scram_salted_pwd_size: %d", ptr_server->sasl_scram_salted_pwd_size); + weechat_log_printf (" sasl_scram_auth_message . : (hidden)"); + weechat_log_printf (" is_connected. . . . . . . : %d", ptr_server->is_connected); + weechat_log_printf (" ssl_connected . . . . . . : %d", ptr_server->ssl_connected); + weechat_log_printf (" disconnected. . . . . . . : %d", ptr_server->disconnected); + weechat_log_printf (" gnutls_sess . . . . . . . : 0x%lx", ptr_server->gnutls_sess); + weechat_log_printf (" unterminated_message. . . : '%s'", ptr_server->unterminated_message); + weechat_log_printf (" nicks_count . . . . . . . : %d", ptr_server->nicks_count); + weechat_log_printf (" nicks_array . . . . . . . : 0x%lx", ptr_server->nicks_array); + weechat_log_printf (" nick_first_tried. . . . . : %d", ptr_server->nick_first_tried); + weechat_log_printf (" nick_alternate_number . . : %d", ptr_server->nick_alternate_number); + weechat_log_printf (" nick. . . . . . . . . . . : '%s'", ptr_server->nick); + weechat_log_printf (" nick_modes. . . . . . . . : '%s'", ptr_server->nick_modes); + weechat_log_printf (" host. . . . . . . . . . . : '%s'", ptr_server->host); + weechat_log_printf (" checking_cap_ls . . . . . : %d", ptr_server->checking_cap_ls); + weechat_log_printf (" cap_ls. . . . . . . . . . : 0x%lx (hashtable: '%s')", ptr_server->cap_ls, weechat_hashtable_get_string (ptr_server->cap_ls, "keys_values")); - weechat_log_printf (" checking_cap_list. . : %d", ptr_server->checking_cap_list); - weechat_log_printf (" cap_list . . . . . . : 0x%lx (hashtable: '%s')", + weechat_log_printf (" checking_cap_list . . . . : %d", ptr_server->checking_cap_list); + weechat_log_printf (" cap_list. . . . . . . . . : 0x%lx (hashtable: '%s')", ptr_server->cap_list, weechat_hashtable_get_string (ptr_server->cap_list, "keys_values")); - weechat_log_printf (" isupport . . . . . . : '%s'", ptr_server->isupport); - weechat_log_printf (" prefix_modes . . . . : '%s'", ptr_server->prefix_modes); - weechat_log_printf (" prefix_chars . . . . : '%s'", ptr_server->prefix_chars); - weechat_log_printf (" nick_max_length. . . : %d", ptr_server->nick_max_length); - weechat_log_printf (" user_max_length. . . : %d", ptr_server->user_max_length); - weechat_log_printf (" host_max_length. . . : %d", ptr_server->host_max_length); - weechat_log_printf (" casemapping. . . . . : %d (%s)", + weechat_log_printf (" isupport. . . . . . . . . : '%s'", ptr_server->isupport); + weechat_log_printf (" prefix_modes. . . . . . . : '%s'", ptr_server->prefix_modes); + weechat_log_printf (" prefix_chars. . . . . . . : '%s'", ptr_server->prefix_chars); + weechat_log_printf (" nick_max_length . . . . . : %d", ptr_server->nick_max_length); + weechat_log_printf (" user_max_length . . . . . : %d", ptr_server->user_max_length); + weechat_log_printf (" host_max_length . . . . . : %d", ptr_server->host_max_length); + weechat_log_printf (" casemapping . . . . . . . : %d (%s)", ptr_server->casemapping, irc_server_casemapping_string[ptr_server->casemapping]); - weechat_log_printf (" utf8mapping. . . . . : %d (%s)", + weechat_log_printf (" utf8mapping . . . . . . . : %d (%s)", ptr_server->utf8mapping, irc_server_utf8mapping_string[ptr_server->utf8mapping]); - weechat_log_printf (" chantypes. . . . . . : '%s'", ptr_server->chantypes); - weechat_log_printf (" chanmodes. . . . . . : '%s'", ptr_server->chanmodes); - weechat_log_printf (" monitor. . . . . . . : %d", ptr_server->monitor); - weechat_log_printf (" monitor_time . . . . : %lld", (long long)ptr_server->monitor_time); - weechat_log_printf (" reconnect_delay. . . : %d", ptr_server->reconnect_delay); - weechat_log_printf (" reconnect_start. . . : %lld", (long long)ptr_server->reconnect_start); - weechat_log_printf (" command_time . . . . : %lld", (long long)ptr_server->command_time); - weechat_log_printf (" reconnect_join . . . : %d", ptr_server->reconnect_join); - weechat_log_printf (" disable_autojoin . . : %d", ptr_server->disable_autojoin); - weechat_log_printf (" is_away. . . . . . . : %d", ptr_server->is_away); - weechat_log_printf (" away_message . . . . : '%s'", ptr_server->away_message); - weechat_log_printf (" away_time. . . . . . : %lld", (long long)ptr_server->away_time); - weechat_log_printf (" lag. . . . . . . . . : %d", ptr_server->lag); - weechat_log_printf (" lag_displayed. . . . : %d", ptr_server->lag_displayed); - weechat_log_printf (" lag_check_time . . . : tv_sec:%d, tv_usec:%d", + weechat_log_printf (" chantypes . . . . . . . . : '%s'", ptr_server->chantypes); + weechat_log_printf (" chanmodes . . . . . . . . : '%s'", ptr_server->chanmodes); + weechat_log_printf (" monitor . . . . . . . . . : %d", ptr_server->monitor); + weechat_log_printf (" monitor_time. . . . . . . : %lld", (long long)ptr_server->monitor_time); + weechat_log_printf (" reconnect_delay . . . . . : %d", ptr_server->reconnect_delay); + weechat_log_printf (" reconnect_start . . . . . : %lld", (long long)ptr_server->reconnect_start); + weechat_log_printf (" command_time. . . . . . . : %lld", (long long)ptr_server->command_time); + weechat_log_printf (" reconnect_join. . . . . . : %d", ptr_server->reconnect_join); + weechat_log_printf (" disable_autojoin. . . . . : %d", ptr_server->disable_autojoin); + weechat_log_printf (" is_away . . . . . . . . . : %d", ptr_server->is_away); + weechat_log_printf (" away_message. . . . . . . : '%s'", ptr_server->away_message); + weechat_log_printf (" away_time . . . . . . . . : %lld", (long long)ptr_server->away_time); + weechat_log_printf (" lag . . . . . . . . . . . : %d", ptr_server->lag); + weechat_log_printf (" lag_displayed . . . . . . : %d", ptr_server->lag_displayed); + weechat_log_printf (" lag_check_time. . . . . . : tv_sec:%d, tv_usec:%d", ptr_server->lag_check_time.tv_sec, ptr_server->lag_check_time.tv_usec); - weechat_log_printf (" lag_next_check . . . : %lld", (long long)ptr_server->lag_next_check); - weechat_log_printf (" lag_last_refresh . . : %lld", (long long)ptr_server->lag_last_refresh); - weechat_log_printf (" cmd_list_regexp. . . : 0x%lx", ptr_server->cmd_list_regexp); - weechat_log_printf (" last_user_message. . : %lld", (long long)ptr_server->last_user_message); - weechat_log_printf (" last_away_check. . . : %lld", (long long)ptr_server->last_away_check); - weechat_log_printf (" last_data_purge. . . : %lld", (long long)ptr_server->last_data_purge); + weechat_log_printf (" lag_next_check. . . . . . : %lld", (long long)ptr_server->lag_next_check); + weechat_log_printf (" lag_last_refresh. . . . . : %lld", (long long)ptr_server->lag_last_refresh); + weechat_log_printf (" cmd_list_regexp . . . . . : 0x%lx", ptr_server->cmd_list_regexp); + weechat_log_printf (" last_user_message . . . . : %lld", (long long)ptr_server->last_user_message); + weechat_log_printf (" last_away_check . . . . . : %lld", (long long)ptr_server->last_away_check); + weechat_log_printf (" last_data_purge . . . . . : %lld", (long long)ptr_server->last_data_purge); for (i = 0; i < IRC_SERVER_NUM_OUTQUEUES_PRIO; i++) { - weechat_log_printf (" outqueue[%02d] . . . . : 0x%lx", i, ptr_server->outqueue[i]); - weechat_log_printf (" last_outqueue[%02d]. . : 0x%lx", i, ptr_server->last_outqueue[i]); + weechat_log_printf (" outqueue[%02d]. . . . . . . : 0x%lx", i, ptr_server->outqueue[i]); + weechat_log_printf (" last_outqueue[%02d] . . . . : 0x%lx", i, ptr_server->last_outqueue[i]); } - weechat_log_printf (" redirects. . . . . . : 0x%lx", ptr_server->redirects); - weechat_log_printf (" last_redirect. . . . : 0x%lx", ptr_server->last_redirect); - weechat_log_printf (" notify_list. . . . . : 0x%lx", ptr_server->notify_list); - weechat_log_printf (" last_notify. . . . . : 0x%lx", ptr_server->last_notify); - weechat_log_printf (" notify_count . . . . : %d", ptr_server->notify_count); - weechat_log_printf (" join_manual. . . . . : 0x%lx (hashtable: '%s')", + weechat_log_printf (" redirects . . . . . . . . : 0x%lx", ptr_server->redirects); + weechat_log_printf (" last_redirect . . . . . . : 0x%lx", ptr_server->last_redirect); + weechat_log_printf (" notify_list . . . . . . . : 0x%lx", ptr_server->notify_list); + weechat_log_printf (" last_notify . . . . . . . : 0x%lx", ptr_server->last_notify); + weechat_log_printf (" notify_count. . . . . . . : %d", ptr_server->notify_count); + weechat_log_printf (" join_manual . . . . . . . : 0x%lx (hashtable: '%s')", ptr_server->join_manual, weechat_hashtable_get_string (ptr_server->join_manual, "keys_values")); - weechat_log_printf (" join_channel_key . . : 0x%lx (hashtable: '%s')", + weechat_log_printf (" join_channel_key. . . . . : 0x%lx (hashtable: '%s')", ptr_server->join_channel_key, weechat_hashtable_get_string (ptr_server->join_channel_key, "keys_values")); - weechat_log_printf (" join_noswitch. . . . : 0x%lx (hashtable: '%s')", + weechat_log_printf (" join_noswitch . . . . . . : 0x%lx (hashtable: '%s')", ptr_server->join_noswitch, weechat_hashtable_get_string (ptr_server->join_noswitch, "keys_values")); - weechat_log_printf (" buffer . . . . . . . : 0x%lx", ptr_server->buffer); - weechat_log_printf (" buffer_as_string . . : 0x%lx", ptr_server->buffer_as_string); - weechat_log_printf (" channels . . . . . . : 0x%lx", ptr_server->channels); - weechat_log_printf (" last_channel . . . . : 0x%lx", ptr_server->last_channel); - weechat_log_printf (" prev_server. . . . . : 0x%lx", ptr_server->prev_server); - weechat_log_printf (" next_server. . . . . : 0x%lx", ptr_server->next_server); + weechat_log_printf (" buffer. . . . . . . . . . : 0x%lx", ptr_server->buffer); + weechat_log_printf (" buffer_as_string. . . . . : 0x%lx", ptr_server->buffer_as_string); + weechat_log_printf (" channels. . . . . . . . . : 0x%lx", ptr_server->channels); + weechat_log_printf (" last_channel. . . . . . . : 0x%lx", ptr_server->last_channel); + weechat_log_printf (" prev_server . . . . . . . : 0x%lx", ptr_server->prev_server); + weechat_log_printf (" next_server . . . . . . . : 0x%lx", ptr_server->next_server); irc_redirect_print_log (ptr_server); diff --git a/src/plugins/irc/irc-server.h b/src/plugins/irc/irc-server.h index e5bb74578..2dbb98ff9 100644 --- a/src/plugins/irc/irc-server.h +++ b/src/plugins/irc/irc-server.h @@ -193,6 +193,10 @@ struct t_irc_server struct t_hook *hook_fd; /* hook for server socket */ struct t_hook *hook_timer_connection; /* timer for connection */ struct t_hook *hook_timer_sasl; /* timer for SASL authentication */ + char *sasl_scram_client_first; /* first message sent for SASL SCRAM */ + char *sasl_scram_salted_pwd; /* salted password for SASL SCRAM */ + int sasl_scram_salted_pwd_size; /* size of salted password for SASL SCRAM*/ + char *sasl_scram_auth_message; /* auth message for SASL SCRAM */ int is_connected; /* 1 if WeeChat is connected to server */ int ssl_connected; /* = 1 if connected with SSL */ int disconnected; /* 1 if server has been disconnected */ @@ -388,6 +392,7 @@ extern void irc_server_switch_address (struct t_irc_server *server, extern void irc_server_disconnect (struct t_irc_server *server, int switch_address, int reconnect); extern void irc_server_disconnect_all (); +extern void irc_server_free_sasl_data (struct t_irc_server *server); extern void irc_server_free (struct t_irc_server *server); extern int irc_server_xfer_send_ready_cb (const void *pointer, void *data, const char *signal,