Discourse-setup schlägt fehl mit SMTP-Benutzernamen mit einem /

Fortsetzung der Diskussion von Umzug vom eigenständigen Container zu separaten Web- und Datencontainern:

Bugbeschreibung

Wenn discourse-setup mit einem SMTP-Benutzernamen ausgeführt wird, der ein / enthält, schlägt das Skript fehl:

sed: -e Ausdruck #1, Zeichen 74: unbekannte Option zu `s’
DISCOURSE_SMTP_USER_NAME Änderung fehlgeschlagen.

Erwartetes Verhalten

SMTP-Benutzernamen, die / enthalten, sollten akzeptiert werden.

/ ist ein gültiges Zeichen für einen SMTP-Benutzernamen gemäß RFC3696:

Ohne Anführungszeichen können lokale Teile aus jeder Kombination von
alphabetischen Zeichen, Ziffern oder Sonderzeichen bestehen

! # $ % & ’ * + - / = ? ^ _ ` . { | } ~

Korrekturweg

Das Skript schlägt bei einem sed-Befehl fehl, der standardmäßig / als Trennzeichen verwendet.
Da der Doppelpunkt (:) kein akzeptables Zeichen für den local-part einer E-Mail-Adresse ist, kann er anstelle von / verwendet werden, ohne Nebenwirkungen wie bei anderen Zeichen wie Komma oder Semikolon (mit Ausnahme, dass Doppelpunkte in den sed-Mustern maskiert werden müssen – beachten Sie, dass die Verwendung von ] anstelle von / die Notwendigkeit der Maskierung von Doppelpunkten beseitigen würde):

  • Zeile 589:
    smtp_domain=$(echo $notification_email | sed -e \"s/.*@//\") sollte sein
    smtp_domain=$(echo $notification_email | sed -e \"s:.*@::\")
  • Zeile 648: DISCOURSE_DEVELOPER_EMAILS verwendet , zur Trennung von E-Mail-Adressen, daher könnte es auch sicher : verwenden
  • Zeile 675 ist die Quelle meines Fehlers:
    sed -i -e \"s/^ #\\?DISCOURSE_SMTP_USER_NAME:.*/ DISCOURSE_SMTP_USER_NAME: $smtp_user_name/w $changelog\" $web_file könnte sein
    sed -i -e \"s:^ #\\?DISCOURSE_SMTP_USER_NAME\\:.*: DISCOURSE_SMTP_USER_NAME\\: $smtp_user_name:w $changelog\" $web_file oder
    sed -i -e \"s]^ #\\?DISCOURSE_SMTP_USER_NAME:.*] DISCOURSE_SMTP_USER_NAME: $smtp_user_name]w $changelog\" $web_file
  • dito für Zeile 684 (DISCOURSE_NOTIFICATION_EMAIL)
4 „Gefällt mir“

Ich habe keine Kontrolle über diesen Code, aber ich habe ihn vor langer Zeit geschrieben. Das ist eine großartige Lösung. Daran hätte ich denken sollen. Ich würde vermuten, dass ein PR willkommen wäre.

4 „Gefällt mir“

Leider habe ich den Zugriff auf mein Github-Konto verloren. Sie verlangen einen Code, und ich benutze die verknüpfte E-Mail nicht mehr, daher habe ich diese Plattform einfach nicht mehr genutzt, außer um öffentlichen Code zu klonen.

1 „Gefällt mir“

Danke für den Bericht, ich füge pr-welcome hinzu, falls jemand einen Patch einreichen kann.

Sie könnten auch einfach ein .diff hier posten und dann einem Community-Mitglied die Anerkennung überlassen :slight_smile:

4 „Gefällt mir“

Hier ist ein Patch:

Beheben Sie sed-Befehle, um RFC3696-konforme E-Mail-Adressen zuzulassen

discourse-setup.fix-272514.patch.gz (601 Bytes)

diff --git a/discourse-setup b/discourse-setup
index 0daafcb..121982e 100755
--- a/discourse-setup
+++ b/discourse-setup
@@ -586,7 +586,7 @@ ask_user_for_config() {
     fi
 
     # set smtp_domain default value here rather than use Rails default of localhost
-    smtp_domain=$(echo $notification_email | sed -e "s/.*@//")
+    smtp_domain=$(echo $notification_email | sed -e "s].*@]]")
 
     if [ ! -z $letsencrypt_account_email ]
     then
@@ -645,7 +645,7 @@ ask_user_for_config() {
     update_ok="n"
   fi
 
-  sed -i -e "s/^  DISCOURSE_DEVELOPER_EMAILS:.*/  DISCOURSE_DEVELOPER_EMAILS: '$developer_emails'/w $changelog" $web_file
+  sed -i -e "s]^  DISCOURSE_DEVELOPER_EMAILS:.*]  DISCOURSE_DEVELOPER_EMAILS: '$developer_emails']w $changelog" $web_file
   if [ -s $changelog ]
   then
     rm $changelog
@@ -672,7 +672,7 @@ ask_user_for_config() {
     update_ok="n"
   fi
 
-  sed -i -e "s/^  #\?DISCOURSE_SMTP_USER_NAME:.*/  DISCOURSE_SMTP_USER_NAME: $smtp_user_name/w $changelog" $web_file
+  sed -i -e "s]^  #\?DISCOURSE_SMTP_USER_NAME:.*]  DISCOURSE_SMTP_USER_NAME: $smtp_user_name]w $changelog" $web_file
   if [ -s $changelog ]
   then
     rm $changelog
@@ -681,7 +681,7 @@ ask_user_for_config() {
     update_ok="n"
   fi
 
-  sed -i -e "s/^  #\?DISCOURSE_NOTIFICATION_EMAIL:.*/  DISCOURSE_NOTIFICATION_EMAIL: $notification_email/w $changelog" $web_file
+  sed -i -e "s]^  #\?DISCOURSE_NOTIFICATION_EMAIL:.*]  DISCOURSE_NOTIFICATION_EMAIL: $notification_email]w $changelog" $web_file
   if [ -s $changelog ]
   then
     rm $changelog
@@ -745,7 +745,7 @@
   then
     echo "Enabling Let's Encrypt"
   fi
-  sed -i -e "s/^  #\?LETSENCRYPT_ACCOUNT_EMAIL:.*/  LETSENCRYPT_ACCOUNT_EMAIL: $letsencrypt_account_email/w $changelog" $web_file
+  sed -i -e "s]^  #\?LETSENCRYPT_ACCOUNT_EMAIL:.*]  LETSENCRYPT_ACCOUNT_EMAIL: $letsencrypt_account_email]w $changelog" $web_file
   if [ -s $changelog ]
   then
     rm $changelog
3 „Gefällt mir“

Meinten Sie, den Schrägstrich dort zu lassen?

2 „Gefällt mir“

Vielen Dank für diesen guten Fang! Ich habe den Patch aktualisiert.

3 „Gefällt mir“