Discourse-setup fallisce con nome utente SMTP con un /

Continuando la discussione da Spostamento da un container standalone a container web e dati separati:

Descrizione del bug

Quando si esegue discourse-setup con un nome utente SMTP che contiene un <kbd>/</kbd>, lo script fallisce:

sed: espressione -e #1, carattere 74: opzione non valida per `s’
DISCOURSE_SMTP_USER_NAME change failed.

Comportamento previsto

I nomi utente SMTP contenenti <kbd>/</kbd> dovrebbero essere accettati.

<kbd>/</kbd> è un carattere valido per un nome utente SMTP, secondo RFC3696:

Senza virgolette, le parti locali possono consistere in qualsiasi combinazione di
caratteri alfabetici, cifre o uno qualsiasi dei caratteri speciali

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

Percorso correttivo

Lo script fallisce su un comando sed che, per impostazione predefinita, utilizza <kbd>/</kbd> come separatore.
Poiché il due punti (<kbd>:</kbd>) non è un carattere accettabile per la local-part di un indirizzo email, può essere utilizzato al posto di <kbd>/</kbd>, senza alcun effetto collaterale che un altro carattere come una virgola o un punto e virgola potrebbe portare (tranne che i due punti nei pattern sed devono essere escapati — si noti che l’uso di <kbd>]</kbd> invece rimuoverebbe la necessità di escapare i due punti):

  • riga 589:
    smtp_domain=$(echo $notification_email | sed -e \"s/.*@//\") dovrebbe essere
    smtp_domain=$(echo $notification_email | sed -e \"s:.*@::\")
  • riga 648: DISCOURSE_DEVELOPER_EMAILS utilizza <kbd>,</kbd> per separare gli indirizzi email, quindi potrebbe tranquillamente utilizzare anche <kbd>:</kbd>
  • la riga 675 è la fonte del mio bug:
    sed -i -e \"s/^ #\\?DISCOURSE_SMTP_USER_NAME:.*/ DISCOURSE_SMTP_USER_NAME: $smtp_user_name/w $changelog\" $web_file potrebbe essere
    sed -i -e \"s:^ #\\?DISCOURSE_SMTP_USER_NAME\\:.*: DISCOURSE_SMTP_USER_NAME\\: $smtp_user_name:w $changelog\" $web_file o
    sed -i -e \"s] #\\?DISCOURSE_SMTP_USER_NAME:.*] DISCOURSE_SMTP_USER_NAME: $smtp_user_name]w $changelog\" $web_file
  • idem per la riga 684 (DISCOURSE_NOTIFICATION_EMAIL)
4 Mi Piace

Non ho il controllo di quel codice, ma l’ho scritto molto tempo fa. Quella è un’ottima soluzione. Avrei dovuto pensarci. Suppongo che una PR sarebbe benvenuta.

4 Mi Piace

Purtroppo ho perso l’accesso al mio account Github. Mi chiedono un codice e non uso più l’email collegata, quindi ho semplicemente smesso di usare quella piattaforma tranne che per clonare codice pubblico.

1 Mi Piace

Grazie per la segnalazione, metto pr-welcome nel caso qualcuno sia in grado di inviare una patch.
Puoi sempre pubblicare un .diff qui e poi far sì che un membro della community se ne prenda il merito :slight_smile:

4 Mi Piace

Ecco una patch:

Correggere i comandi sed per consentire indirizzi email conformi a RFC3696

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

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 Mi Piace

Intendevi lasciare lo slash lì?

2 Mi Piace

Grazie per questa bella segnalazione! Ho aggiornato la patch.

3 Mi Piace