فشل إعداد Discourse لاسم مستخدم SMTP مع "/"

متابعة للنقاش من الانتقال من حاوية مستقلة إلى حاويات ويب وبيانات منفصلة:

وصف الخطأ

عند تشغيل discourse-setup مع اسم مستخدم SMTP يحتوي على /، يفشل البرنامج النصي:

sed: -e expression #1, char 74: unknown option to `s’
DISCOURSE_SMTP_USER_NAME change failed.

السلوك المتوقع

يجب قبول أسماء مستخدمي SMTP التي تحتوي على /.

/ هو حرف صالح لاسم مستخدم SMTP، وفقًا لـ RFC3696:

Without quotes, local-parts may consist of any combination of
alphabetic characters, digits, or any of the special characters

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

المسار التصحيحي

يفشل البرنامج النصي في أمر sed الذي يستخدم، افتراضيًا، / كفاصل.
نظرًا لأن النقطتين الرأسيتين (:) ليست حرفًا مقبولًا لـ local-part لعنوان بريد إلكتروني، يمكن استخدامها بدلاً من /، دون أي آثار جانبية قد تجلبها أحرف أخرى مثل الفاصلة أو الفاصلة المنقوطة (باستثناء أن النقاط الرأسية في أنماط sed يجب أن يتم الهروب منها — لاحظ أن استخدام ] بدلاً من ذلك سيزيل الحاجة إلى الهروب من النقاط الرأسية):

  • السطر 589:
    smtp_domain=$(echo $notification_email | sed -e \"s/.*@//\") يجب أن يكون
    smtp_domain=$(echo $notification_email | sed -e \"s:.*@::\")
  • السطر 648: DISCOURSE_DEVELOPER_EMAILS يستخدم , لفصل عناوين البريد الإلكتروني، لذلك يمكنه استخدام : بأمان أيضًا
  • السطر 675 هو مصدر خطئي:
    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 أو
    sed -i -e \"s]^ #\\?DISCOURSE_SMTP_USER_NAME:.*] DISCOURSE_SMTP_USER_NAME: $smtp_user_name]w $changelog\" $web_file
  • نفس الشيء للسطر 684 (DISCOURSE_NOTIFICATION_EMAIL)
4 إعجابات

لست مسؤولاً عن هذا الرمز، لكنني كتبته منذ فترة طويلة. هذا حل رائع. كان يجب أن أفكر في ذلك. أعتقد أن طلب السحب سيكون موضع ترحيب.

4 إعجابات

للأسف فقدت الوصول إلى حسابي على جيت هاب. يطلبون مني بعض الرموز ولا أستخدم البريد الإلكتروني المرتبط بعد الآن، لذلك توقفت ببساطة عن استخدام تلك المنصة باستثناء استنساخ الرموز العامة.

إعجاب واحد (1)

شكراً على التقرير، سأضع pr-welcome في حال تمكن شخص ما من تقديم تصحيح.
يمكنك دائمًا نشر .diff هنا ثم السماح لأحد أعضاء المجتمع بالحصول على التقدير :slight_smile:

4 إعجابات

هذا هو التصحيح:

إصلاح أوامر sed للسماح بعناوين البريد الإلكتروني المتوافقة مع 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 إعجابات

هل تقصد ترك الشرطة المائلة هناك؟

إعجابَين (2)

شكراً على هذه الملاحظة الرائعة! لقد قمت بتحديث التصحيح.

3 إعجابات