Discourse-setup falla en el nombre de usuario SMTP con una /

Continuando la discusión de Mover de un contenedor independiente a contenedores web y de datos separados:

Descripción del error

Al ejecutar discourse-setup con un nombre de usuario SMTP que contiene una barra (/), el script falla:

sed: expresión -e #1, carácter 74: opción desconocida para `s’
DISCOURSE_SMTP_USER_NAME cambio fallido.

Comportamiento esperado

Los nombres de usuario SMTP que contienen barras (/) deberían ser aceptados.

La barra (/) es un carácter válido para un nombre de usuario SMTP, según RFC3696:

Sin comillas, las partes locales pueden consistir en cualquier combinación de
caracteres alfabéticos, dígitos o cualquiera de los caracteres especiales

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

Vía de corrección

El script falla en un comando sed que, por defecto, utiliza la barra (/) como separador.
Dado que la barra (/) no es un carácter aceptable para la parte local de una dirección de correo electrónico, se puede utilizar en lugar de la barra (/), sin ningún efecto secundario que otro carácter como una coma o un punto y coma podría tener (excepto que las barras en los patrones sed deben escaparse; tenga en cuenta que usar ] en su lugar eliminaría la necesidad de escapar las barras):

  • línea 589:
    smtp_domain=$(echo $notification_email | sed -e \"s/.*@//\") debería ser
    smtp_domain=$(echo $notification_email | sed -e \"s:.*@::\")
  • línea 648: DISCOURSE_DEVELOPER_EMAILS utiliza comas (,) para separar direcciones de correo electrónico, por lo que también podría usar barras (:) de forma segura.
  • línea 675 es la fuente de mi error:
    sed -i -e \"s/^ #\\?DISCOURSE_SMTP_USER_NAME:.*/ DISCOURSE_SMTP_USER_NAME: $smtp_user_name/w $changelog\" $web_file podría ser
    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
  • lo mismo para la línea 684 (DISCOURSE_NOTIFICATION_EMAIL)
4 Me gusta

No tengo control sobre ese código, pero lo escribí hace mucho tiempo. Esa es una gran solución. Debería haberlo pensado. Supongo que se aceptaría una PR.

4 Me gusta

Lamentablemente perdí el acceso a mi cuenta de Github. Me piden un código y ya no uso el correo electrónico vinculado, por lo que simplemente dejé de usar esa plataforma excepto para clonar código público.

1 me gusta

Gracias por el informe, pongo pr-welcome en caso de que alguien pueda enviar un parche.
Siempre podrías publicar un .diff aquí y que un miembro de la comunidad se lleve el mérito :slight_smile:

4 Me gusta

Aquí tienes un parche:

Corregir comandos sed para permitir direcciones de correo electrónico compatibles con RFC3696

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 Me gusta

¿Querías dejar la barra inclinada ahí en esa?

2 Me gusta

¡Gracias por esta buena corrección! Actualicé el parche.

3 Me gusta