Échec de la configuration de Discourse sur le nom d'utilisateur SMTP avec un /

En poursuivant la discussion de Passage d’un conteneur autonome à des conteneurs web et de données séparés :

Description du bug

Lorsque l’on exécute discourse-setup avec un nom d’utilisateur SMTP contenant un /, le script échoue :

sed : expression -e n° 1, caractère 74 : option inconnue pour `s’
DISCOURSE_SMTP_USER_NAME change failed.

Comportement attendu

Les noms d’utilisateur SMTP contenant / devraient être acceptés.

/ est un caractère valide pour un nom d’utilisateur SMTP, conformément à la RFC3696 :

Sans guillemets, les parties locales peuvent être constituées de n’importe quelle combinaison de
caractères alphabétiques, de chiffres ou de l’un des caractères spéciaux

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

Chemin correctif

Le script échoue sur une commande sed qui, par défaut, utilise / comme séparateur.
Comme le deux-points (:) n’est pas un caractère acceptable pour la partie locale d’une adresse e-mail, il peut être utilisé à la place de /, sans effet secondaire qu’un autre caractère tel qu’une virgule ou un point-virgule pourrait apporter (sauf que les deux-points dans les motifs sed doivent être échappés — notez qu’utiliser ] à la place supprimerait le besoin d’échapper les deux-points) :

  • ligne 589 :
    smtp_domain=$(echo $notification_email | sed -e \"s/.*@//\") devrait être
    smtp_domain=$(echo $notification_email | sed -e \"s:.*@::\")
  • ligne 648 : DISCOURSE_DEVELOPER_EMAILS utilise , pour séparer les adresses e-mail, il pourrait donc également utiliser : en toute sécurité
  • ligne 675 est la source de mon bug :
    sed -i -e \"s/^ #\\?DISCOURSE_SMTP_USER_NAME:.*/ DISCOURSE_SMTP_USER_NAME: $smtp_user_name/w $changelog\" $web_file pourrait être
    sed -i -e \"s:^ #\\?DISCOURSE_SMTP_USER_NAME\\:.*: DISCOURSE_SMTP_USER_NAME\\: $smtp_user_name:w $changelog\" $web_file ou
    sed -i -e \"s] #\\?DISCOURSE_SMTP_USER_NAME:.*] DISCOURSE_SMTP_USER_NAME: $smtp_user_name]w $changelog\" $web_file
  • idem pour la ligne 684 (DISCOURSE_NOTIFICATION_EMAIL)
4 « J'aime »

Je n’ai pas le contrôle de ce code, mais je l’ai écrit il y a longtemps. C’est une excellente solution. J’aurais dû y penser. Je suppose qu’une PR serait la bienvenue.

4 « J'aime »

Malheureusement, j’ai perdu l’accès à mon compte Github. Ils me demandent un code et je n’utilise plus l’e-mail lié, j’ai donc simplement arrêté d’utiliser cette plateforme, sauf pour cloner du code public.

1 « J'aime »

Merci pour le rapport, ajout de pr-welcome au cas où quelqu’un serait en mesure de soumettre un correctif.
Vous pourriez toujours poster un .diff ici et laisser un membre de la communauté en prendre le crédit :slight_smile:

4 « J'aime »

Voici un correctif :

Correction des commandes sed pour autoriser les adresses e-mail conformes à la RFC3696

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

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 @@ ask_user_for_config() {
   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 « J'aime »

Vouliez-vous laisser la barre oblique sur celle-ci ?

2 « J'aime »

Merci pour cette belle correction ! J’ai mis à jour le correctif.

3 « J'aime »