From 7dad37ed04ec7e85b0a64ee22629528e892628e7 Mon Sep 17 00:00:00 2001 From: Alexandre Aubin Date: Mon, 18 Jan 2021 19:57:31 +0100 Subject: [PATCH 1/9] Make dyndns update more resilient to ns0.yunohost.org being down --- src/yunohost/dyndns.py | 28 +++++++++++++++++++++++++--- 1 file changed, 25 insertions(+), 3 deletions(-) diff --git a/src/yunohost/dyndns.py b/src/yunohost/dyndns.py index fe2a1bc9b..98d59721a 100644 --- a/src/yunohost/dyndns.py +++ b/src/yunohost/dyndns.py @@ -34,7 +34,7 @@ from moulinette import m18n from moulinette.core import MoulinetteError from moulinette.utils.log import getActionLogger from moulinette.utils.filesystem import write_to_file, read_file -from moulinette.utils.network import download_json +from moulinette.utils.network import download_json, dig from moulinette.utils.process import check_output from yunohost.utils.error import YunohostError @@ -216,8 +216,30 @@ def dyndns_update(operation_logger, dyn_host="dyndns.yunohost.org", domain=None, 'zone %s' % host, ] - old_ipv4 = check_output("dig @%s +short %s" % (dyn_host, domain)) or None - old_ipv6 = check_output("dig @%s +short aaaa %s" % (dyn_host, domain)) or None + + def resolve_domain(domain, rdtype): + + ok, result = dig(domain, rdtype, resolvers=[dyn_host]) + if ok == "ok": + return result[0] if len(result) else None + elif result[0] == "Timeout": + logger.debug("Timed-out while trying to resolve %s record for %s using %s" % (rdtype, domain, dyn_host)) + else: + return None + + logger.debug("Falling back to external resolvers") + ok, result = dig(domain, rdtype, resolvers="force_external") + if ok == "ok": + return result[0] if len(result) else None + elif result[0] == "Timeout": + logger.debug("Timed-out while trying to resolve %s record for %s using external resolvers : %s" % (rdtype, domain, result)) + else: + return None + + raise YunohostError("Failed to resolve %s for %s" % (rdtype, domain), raw_msg=True) + + old_ipv4 = resolve_domain(domain, "A") + old_ipv6 = resolve_domain(domain, "AAAA") # Get current IPv4 and IPv6 ipv4_ = get_public_ip() From d5403e5f5f3158fb51f741d6a49b13c3a9641ddc Mon Sep 17 00:00:00 2001 From: Alexandre Aubin Date: Mon, 18 Jan 2021 20:25:36 +0100 Subject: [PATCH 2/9] Typo --- src/yunohost/dyndns.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/yunohost/dyndns.py b/src/yunohost/dyndns.py index 98d59721a..eb03b056e 100644 --- a/src/yunohost/dyndns.py +++ b/src/yunohost/dyndns.py @@ -34,12 +34,12 @@ from moulinette import m18n from moulinette.core import MoulinetteError from moulinette.utils.log import getActionLogger from moulinette.utils.filesystem import write_to_file, read_file -from moulinette.utils.network import download_json, dig +from moulinette.utils.network import download_json from moulinette.utils.process import check_output from yunohost.utils.error import YunohostError from yunohost.domain import _get_maindomain, _build_dns_conf -from yunohost.utils.network import get_public_ip +from yunohost.utils.network import get_public_ip, dig from yunohost.log import is_unit_operation logger = getActionLogger('yunohost.dyndns') From e7300859704c9f815d79f7b1ac63cb813d52120b Mon Sep 17 00:00:00 2001 From: Alexandre Aubin Date: Mon, 18 Jan 2021 20:53:38 +0100 Subject: [PATCH 3/9] Linter is angry about unused import --- src/yunohost/dyndns.py | 1 - 1 file changed, 1 deletion(-) diff --git a/src/yunohost/dyndns.py b/src/yunohost/dyndns.py index eb03b056e..84b55d40e 100644 --- a/src/yunohost/dyndns.py +++ b/src/yunohost/dyndns.py @@ -35,7 +35,6 @@ from moulinette.core import MoulinetteError from moulinette.utils.log import getActionLogger from moulinette.utils.filesystem import write_to_file, read_file from moulinette.utils.network import download_json -from moulinette.utils.process import check_output from yunohost.utils.error import YunohostError from yunohost.domain import _get_maindomain, _build_dns_conf From 8b05248ad45bfe05ae9205e976798a4e722eaee9 Mon Sep 17 00:00:00 2001 From: Alexandre Aubin Date: Tue, 19 Jan 2021 02:34:28 +0100 Subject: [PATCH 4/9] Turns out we need to feed the IP of the resolver and can't use the doman name :/ --- src/yunohost/dyndns.py | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/yunohost/dyndns.py b/src/yunohost/dyndns.py index 84b55d40e..9904d3955 100644 --- a/src/yunohost/dyndns.py +++ b/src/yunohost/dyndns.py @@ -218,7 +218,13 @@ def dyndns_update(operation_logger, dyn_host="dyndns.yunohost.org", domain=None, def resolve_domain(domain, rdtype): - ok, result = dig(domain, rdtype, resolvers=[dyn_host]) + # FIXME make this work for IPv6-only hosts too.. + ok, result = dig(dyn_host, "A") + dyn_host_ip = result[0] if ok == "ok" and len(result) else None + if not dyn_host_ip: + raise YunohostError("Failed to resolve %s" % dyn_host) + + ok, result = dig(domain, rdtype, resolvers=[dyn_host_ip]) if ok == "ok": return result[0] if len(result) else None elif result[0] == "Timeout": From 35a0711713b2dd69457ce862009f2959afe26eea Mon Sep 17 00:00:00 2001 From: Alexandre Aubin Date: Wed, 20 Jan 2021 01:28:55 +0100 Subject: [PATCH 5/9] Stupid yolopatch for not-normalized app path settings >_> (#1141) * Update app.py * Be more careful (c.f. _normalize_domain_path code ... maybe the path doesn't start with / either ..) * Annnnnd ignore case where path is '/' which is fine --- src/yunohost/app.py | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/src/yunohost/app.py b/src/yunohost/app.py index 0349f92e7..ade39bf20 100644 --- a/src/yunohost/app.py +++ b/src/yunohost/app.py @@ -1892,6 +1892,18 @@ def _get_app_settings(app_id): # If label contains unicode char, this may later trigger issues when building strings... # FIXME: this should be propagated to read_yaml so that this fix applies everywhere I think... settings = {k: _encode_string(v) for k, v in settings.items()} + + # Stupid fix for legacy bullshit + # In the past, some setups did not have proper normalization for app domain/path + # Meaning some setups (as of January 2021) still have path=/foobar/ (with a trailing slash) + # resulting in stupid issue unless apps using ynh_app_normalize_path_stuff + # So we yolofix the settings if such an issue is found >_> + # A simple call to `yunohost app list` (which happens quite often) should be enough + # to migrate all app settings ... so this can probably be removed once we're past Bullseye... + if settings.get("path") != "/" and (settings.get("path", "").endswith("/") or not settings.get("path", "/").startswith("/")): + settings["path"] = "/" + settings["path"].strip("/") + _set_app_settings(app_id, settings) + if app_id == settings['id']: return settings except (IOError, TypeError, KeyError): @@ -2423,7 +2435,7 @@ class YunoHostArgumentFormatParser(object): if parsed_question.ask is None: parsed_question.ask = "Enter value for '%s':" % parsed_question.name - + # Empty value is parsed as empty string if parsed_question.default == "": parsed_question.default = None From 63a0fcc75382b9842d3e48c15c456143470c32a3 Mon Sep 17 00:00:00 2001 From: Christian Wehrli Date: Fri, 15 Jan 2021 19:54:39 +0000 Subject: [PATCH 6/9] Translated using Weblate (German) Currently translated at 59.2% (374 of 631 strings) Translation: YunoHost/core Translate-URL: https://translate.yunohost.org/projects/yunohost/core/de/ --- locales/de.json | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/locales/de.json b/locales/de.json index 7811d3677..52f5041bb 100644 --- a/locales/de.json +++ b/locales/de.json @@ -41,14 +41,14 @@ "backup_running_hooks": "Datensicherunghook wird ausgeführt...", "custom_app_url_required": "Es muss eine URL angegeben werden, um deine benutzerdefinierte App {app:s} zu aktualisieren", "domain_cert_gen_failed": "Zertifikat konnte nicht erzeugt werden", - "domain_created": "Die Domain wurde angelegt", - "domain_creation_failed": "Konnte Domain nicht erzeugen", + "domain_created": "Domäne erstellt", + "domain_creation_failed": "Konnte Domäne nicht erzeugen", "domain_deleted": "Domain wurde gelöscht", "domain_deletion_failed": "Domain {domain}: {error} konnte nicht gelöscht werden", - "domain_dyndns_already_subscribed": "Du hast dich schon für eine DynDNS-Domain angemeldet", + "domain_dyndns_already_subscribed": "Sie haben sich schon für eine DynDNS-Domäne registriert", "domain_dyndns_root_unknown": "Unbekannte DynDNS Hauptdomain", - "domain_exists": "Die Domain existiert bereits", - "domain_uninstall_app_first": "Mindestens eine App ist noch für diese Domain installiert. Bitte deinstalliere zuerst die App, bevor du die Domain löschst", + "domain_exists": "Die Domäne existiert bereits", + "domain_uninstall_app_first": "Diese Apps sind noch auf Ihrer Domäne installiert; \n{apps}\n\nBitte deinstallieren Sie sie mit dem Befehl 'yunohost app remove the_app_id' oder verschieben Sie sie mit 'yunohost app change-url the_app_id'", "domain_unknown": "Unbekannte Domain", "done": "Erledigt", "downloading": "Wird heruntergeladen…", @@ -187,7 +187,7 @@ "certmanager_unable_to_parse_self_CA_name": "Der Name der Zertifizierungsstelle für selbstsignierte Zertifikate konnte nicht aufgelöst werden (Datei: {file:s})", "certmanager_http_check_timeout": "Eine Zeitüberschreitung ist aufgetreten, als der Server versuchte sich selbst über HTTP mit der öffentlichen IP (Domain '{domain:s}' mit der IP '{ip:s}') zu erreichen. Möglicherweise ist dafür hairpinning oder eine falsch konfigurierte Firewall/Router deines Servers dafür verantwortlich.", "certmanager_couldnt_fetch_intermediate_cert": "Eine Zeitüberschreitung ist aufgetreten als der Server versuchte die Teilzertifikate von Let's Encrypt zusammenzusetzen. Die Installation/Erneuerung des Zertifikats wurde abgebrochen — bitte versuche es später erneut.", - "domain_hostname_failed": "Erstellen des neuen Hostnamens fehlgeschlagen", + "domain_hostname_failed": "Sie können keinen neuen Hostnamen verwenden. Das kann zukünftige Probleme verursachen (es kann auch sein, dass es funktioniert).", "yunohost_ca_creation_success": "Die lokale Zertifizierungs-Authorität wurde angelegt.", "app_already_installed_cant_change_url": "Diese Application ist bereits installiert. Die URL kann durch diese Funktion nicht modifiziert werden. Überprüfe ob `app changeurl` verfügbar ist.", "app_change_url_failed_nginx_reload": "NGINX konnte nicht neu gestartet werden. Hier ist der Output von 'nginx -t':\n{nginx_errors:s}", @@ -475,5 +475,6 @@ "diagnosis_never_ran_yet": "Sie haben kürzlich einen neuen Yunohost-Server installiert aber es gibt davon noch keinen Diagnosereport. Sie sollten eine Diagnose anstossen. Sie können das entweder vom Webadmin aus oder in der Kommandozeile machen. In der Kommandozeile verwenden Sie dafür den Befehl 'yunohost diagnosis run'.", "diagnosis_http_nginx_conf_not_up_to_date_details": "Um dieses Problem zu beheben, geben Sie in der Kommandozeile yunohost tools regen-conf nginx --dry-run --with-diff ein. Dieses Tool zeigt ihnen den Unterschied an. Wenn Sie damit einverstanden sind, können Sie mit yunohost tools regen-conf nginx --force die Änderungen übernehmen.", "diagnosis_backports_in_sources_list": "Sie haben anscheinend apt (den Paketmanager) für das Backports-Repository konfiguriert. Wir raten strikte davon ab, Pakete aus dem Backports-Repository zu installieren. Diese würden wahrscheinlich zu Instabilitäten und Konflikten führen. Es sei denn, Sie wissen was Sie tun.", - "diagnosis_basesystem_hardware_model": "Das Servermodell ist {model}" + "diagnosis_basesystem_hardware_model": "Das Servermodell ist {model}", + "domain_name_unknown": "Domäne '{domain}' unbekannt" } From f617b2fe72623e3f8f9ba8879deaa1c966b3271f Mon Sep 17 00:00:00 2001 From: penguin321 Date: Sat, 16 Jan 2021 18:37:51 +0000 Subject: [PATCH 7/9] Translated using Weblate (German) Currently translated at 61.3% (387 of 631 strings) Translation: YunoHost/core Translate-URL: https://translate.yunohost.org/projects/yunohost/core/de/ --- locales/de.json | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/locales/de.json b/locales/de.json index 52f5041bb..eab2dc69c 100644 --- a/locales/de.json +++ b/locales/de.json @@ -476,5 +476,18 @@ "diagnosis_http_nginx_conf_not_up_to_date_details": "Um dieses Problem zu beheben, geben Sie in der Kommandozeile yunohost tools regen-conf nginx --dry-run --with-diff ein. Dieses Tool zeigt ihnen den Unterschied an. Wenn Sie damit einverstanden sind, können Sie mit yunohost tools regen-conf nginx --force die Änderungen übernehmen.", "diagnosis_backports_in_sources_list": "Sie haben anscheinend apt (den Paketmanager) für das Backports-Repository konfiguriert. Wir raten strikte davon ab, Pakete aus dem Backports-Repository zu installieren. Diese würden wahrscheinlich zu Instabilitäten und Konflikten führen. Es sei denn, Sie wissen was Sie tun.", "diagnosis_basesystem_hardware_model": "Das Servermodell ist {model}", - "domain_name_unknown": "Domäne '{domain}' unbekannt" + "domain_name_unknown": "Domäne '{domain}' unbekannt", + "group_user_not_in_group": "Der Benutzer {user} ist nicht in der Gruppe {group}", + "group_user_already_in_group": "Der Benutzer {user} ist bereits in der Gruppe {group}", + "group_cannot_edit_visitors": "Die Gruppe \"Besucher\" kann nicht manuell editiert werden. Sie ist eine Sondergruppe und repräsentiert anonyme Besucher", + "group_cannot_edit_all_users": "Die Gruppe \"all_users\" kann nicht manuell editiert werden. Sie ist eine Sondergruppe die dafür gedacht ist alle Benutzer in Yunohost zu halten", + "group_already_exist_on_system_but_removing_it": "Die Gruppe {group} existiert bereits in den Systemgruppen, aber Yunohost wird sie entfernen...", + "group_already_exist_on_system": "Die Gruppe {group} existiert bereits in den Systemgruppen", + "group_already_exist": "Die Gruppe {group} existiert bereits", + "global_settings_setting_smtp_relay_password": "SMTP Relay Host Passwort", + "global_settings_setting_smtp_relay_user": "SMTP Relay Benutzer Account", + "global_settings_setting_smtp_relay_port": "SMTP Relay Port", + "global_settings_setting_smtp_allow_ipv6": "Erlaube die Nutzung von IPv6 um Mails zu empfangen und zu versenden", + "global_settings_setting_pop3_enabled": "Aktiviere das POP3 Protokoll für den Mailserver", + "domain_cannot_remove_main_add_new_one": "Du kannst \"{domain:s}\" nicht entfernen da es die Hauptdomain und deine einzige Domain ist, erst musst erst eine andere Domain hinzufügen indem du eingibst \"yunohost domain add \", setze es dann als deine Hauptdomain indem du eingibst \"yunohost domain main-domain -n \", erst jetzt kannst du die domain \"{domains:s}\" entfernen." } From a61dece925b5ba3d8a9fa0673d4802e22a66ef7c Mon Sep 17 00:00:00 2001 From: Daniel Date: Mon, 18 Jan 2021 13:19:21 +0000 Subject: [PATCH 8/9] Translated using Weblate (German) Currently translated at 62.5% (395 of 631 strings) Translation: YunoHost/core Translate-URL: https://translate.yunohost.org/projects/yunohost/core/de/ --- locales/de.json | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/locales/de.json b/locales/de.json index eab2dc69c..bdf21ac1b 100644 --- a/locales/de.json +++ b/locales/de.json @@ -52,13 +52,13 @@ "domain_unknown": "Unbekannte Domain", "done": "Erledigt", "downloading": "Wird heruntergeladen…", - "dyndns_cron_installed": "DynDNS Cronjob erfolgreich angelegt", - "dyndns_cron_remove_failed": "Der DynDNS Cronjob konnte nicht entfernt werden", + "dyndns_cron_installed": "DynDNS Cronjob erfolgreich erstellt", + "dyndns_cron_remove_failed": "Der DynDNS Cronjob konnte aufgrund dieses Fehlers nicht entfernt werden: {error}", "dyndns_cron_removed": "DynDNS-Cronjob gelöscht", "dyndns_ip_update_failed": "Konnte die IP-Adresse für DynDNS nicht aktualisieren", "dyndns_ip_updated": "Aktualisierung Ihrer IP-Adresse bei DynDNS", "dyndns_key_generating": "Generierung des DNS-Schlüssels..., das könnte eine Weile dauern.", - "dyndns_registered": "Deine DynDNS Domain wurde registriert", + "dyndns_registered": "DynDNS Domain registriert", "dyndns_registration_failed": "DynDNS Domain konnte nicht registriert werden: {error:s}", "dyndns_unavailable": "DynDNS Subdomain ist nicht verfügbar", "executing_command": "Führe den Behfehl '{command:s}' aus…", @@ -160,7 +160,7 @@ "backup_archive_broken_link": "Auf das Backup-Archiv konnte nicht zugegriffen werden (ungültiger Link zu {path:s})", "domains_available": "Verfügbare Domains:", "dyndns_key_not_found": "DNS-Schlüssel für die Domain wurde nicht gefunden", - "dyndns_no_domain_registered": "Es wurde keine Domain mit DynDNS registriert", + "dyndns_no_domain_registered": "Keine Domain mit DynDNS registriert", "ldap_init_failed_to_create_admin": "Die LDAP Initialisierung konnte keinen admin Benutzer erstellen", "mailbox_used_space_dovecot_down": "Der Dovecot Mailbox Dienst muss gestartet sein, wenn du den von der Mailbox belegten Speicher angezeigen lassen willst", "package_unknown": "Unbekanntes Paket '{pkgname}'", @@ -254,7 +254,7 @@ "global_settings_setting_security_ssh_compatibility": "Kompatibilität vs. Sicherheitskompromiss für den SSH-Server. Beeinflusst die Chiffren (und andere sicherheitsrelevante Aspekte)", "group_deleted": "Gruppe '{group}' gelöscht", "group_deletion_failed": "Kann Gruppe '{group}' nicht löschen", - "dyndns_provider_unreachable": "Dyndns-Anbieter {provider} kann nicht erreicht werden: Entweder ist dein YunoHost nicht korrekt mit dem Internet verbunden oder der Dynette-Server ist ausgefallen.", + "dyndns_provider_unreachable": "DynDNS-Anbieter {provider} kann nicht erreicht werden: Entweder ist dein YunoHost nicht korrekt mit dem Internet verbunden oder der Dynette-Server ist ausgefallen.", "group_created": "Gruppe '{group}' angelegt", "group_creation_failed": "Kann Gruppe '{group}' nicht anlegen", "group_unknown": "Die Gruppe '{group:s}' ist unbekannt", @@ -265,7 +265,7 @@ "global_settings_setting_security_postfix_compatibility": "Kompatibilität vs. Sicherheitskompromiss für den Postfix-Server. Beeinflusst die Chiffren (und andere sicherheitsrelevante Aspekte)", "log_category_404": "Die Log-Kategorie '{category}' existiert nicht", "global_settings_unknown_type": "Unerwartete Situation, die Einstellung {setting:s} scheint den Typ {unknown_type:s} zu haben, ist aber kein vom System unterstützter Typ.", - "dpkg_is_broken": "Du kannst das gerade nicht tun, weil dpkg/APT (der Systempaketmanager) in einem defekten Zustand zu sein scheint.... Du kannst versuchen, dieses Problem zu lösen, indem du dich über SSH verbindest und `sudo dpkg --configure -a` ausführst.", + "dpkg_is_broken": "Du kannst das gerade nicht tun, weil dpkg/APT (der Systempaketmanager) in einem defekten Zustand zu sein scheint.... Du kannst versuchen, dieses Problem zu lösen, indem du dich über SSH verbindest und `sudo apt install --fix-broken` sowie/oder `sudo dpkg --configure -a` ausführst.", "global_settings_unknown_setting_from_settings_file": "Unbekannter Schlüssel in den Einstellungen: '{setting_key:s}', verwerfen und speichern in /etc/yunohost/settings-unknown.json", "log_link_to_log": "Vollständiges Log dieser Operation: '{desc}'", "global_settings_setting_example_bool": "Beispiel einer booleschen Option", From 99ab7c642ce7215dea2373debcd07753b1bba3e1 Mon Sep 17 00:00:00 2001 From: Alexandre Aubin Date: Wed, 20 Jan 2021 01:53:04 +0100 Subject: [PATCH 9/9] Update changelog for 4.1.6 --- debian/changelog | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/debian/changelog b/debian/changelog index a6ed39311..6a3691b4e 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,13 @@ +yunohost (4.1.6) stable; urgency=low + + - [fix] Make dyndns update more resilient to ns0.yunohost.org being down ([#1140](https://github.com/yunohost/yunohost/pull/1140)) + - [fix] Stupid yolopatch for not-normalized app path settings ([#1141](https://github.com/yunohost/yunohost/pull/1141)) + - [i18n] Update translations for German + + Thanks to all contributors <3 ! (Christian W., Daniel, penguin321) + + -- Alexandre Aubin Wed, 20 Jan 2021 01:46:02 +0100 + yunohost (4.1.5) stable; urgency=low - [fix] Update helpers ([#1136](https://github.com/yunohost/yunohost/pull/11346)) @@ -9,7 +19,6 @@ yunohost (4.1.5) stable; urgency=low Thanks to all contributors <3 ! (Aleks, Kay0u, Omnia89, jorge-vitrubio, YohannEpitech, xaloc33) - -- Kayou Thu, 14 Jan 2021 21:23:39 +0100 yunohost (4.1.4.4) stable; urgency=low