Hello community, here is the log from the commit of package enigmail for openSUSE:Factory checked in at 2020-01-04 19:21:12 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/enigmail (Old) and /work/SRC/openSUSE:Factory/.enigmail.new.6675 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "enigmail" Sat Jan 4 19:21:12 2020 rev:38 rq:760727 version:2.1.5 Changes: -------- --- /work/SRC/openSUSE:Factory/enigmail/enigmail.changes 2019-12-16 15:19:29.699160992 +0100 +++ /work/SRC/openSUSE:Factory/.enigmail.new.6675/enigmail.changes 2020-01-04 19:21:16.253135367 +0100 @@ -1,0 +2,8 @@ +Fri Jan 3 11:46:40 UTC 2020 - Andreas Stieger <[email protected]> + +- enigmail 2.1.5: + * Security issue: unsigned MIME parts displayed as signed boo#1159973 + * Ensure that upgrading GnuPG 2.0.x to 2.2.x upgrade converts keyring format + * Make Enigmail Compatible with Protected-Headers spec, draft 2 + +------------------------------------------------------------------- Old: ---- enigmail-2.1.4.tar.gz enigmail-2.1.4.tar.gz.asc New: ---- enigmail-2.1.5.tar.gz enigmail-2.1.5.tar.gz.asc ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ enigmail.spec ++++++ --- /var/tmp/diff_new_pack.pqyPoi/_old 2020-01-04 19:21:16.741135583 +0100 +++ /var/tmp/diff_new_pack.pqyPoi/_new 2020-01-04 19:21:16.745135584 +0100 @@ -1,7 +1,7 @@ # # spec file for package enigmail # -# Copyright (c) 2019 SUSE LINUX GmbH, Nuernberg, Germany. +# Copyright (c) 2020 SUSE LINUX GmbH, Nuernberg, Germany. # Copyright (c) 2014 Wolfgang Rosenauer <[email protected]> # # All modifications and additions to the file contributed by third parties @@ -18,7 +18,7 @@ Name: enigmail -Version: 2.1.4 +Version: 2.1.5 Release: 0 Summary: OpenPGP addon for Mozilla Thunderbird License: MPL-2.0 @@ -44,7 +44,7 @@ %build %configure -make %{?_smp_mflags} +make # %{?_smp_mflags} %install # Thunderbird location ++++++ enigmail-2.1.4.tar.gz -> enigmail-2.1.5.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/enigmail/build.sh new/enigmail/build.sh --- old/enigmail/build.sh 2019-12-11 18:23:50.000000000 +0100 +++ new/enigmail/build.sh 1970-01-01 01:00:00.000000000 +0100 @@ -1,12 +0,0 @@ -#!/usr/bin/env bash -# -# This Source Code Form is subject to the terms of the Mozilla Public -# License, v. 2.0. If a copy of the MPL was not distributed with this -# file, You can obtain one at https://mozilla.org/MPL/2.0/. -# - -export TB_PATH=${TB_PATH:-`which thunderbird`} -make clean -make distclean -./configure --with-tb-path=$TB_PATH -make diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/enigmail/configure new/enigmail/configure --- old/enigmail/configure 2019-12-11 18:23:50.000000000 +0100 +++ new/enigmail/configure 2019-12-31 16:19:51.000000000 +0100 @@ -1,6 +1,6 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.69 for enigmail 2.1.4. +# Generated by GNU Autoconf 2.69 for enigmail 2.1.5. # # Report bugs to <https://www.enigmail.net>. # @@ -579,8 +579,8 @@ # Identity of this package. PACKAGE_NAME='enigmail' PACKAGE_TARNAME='enigmail' -PACKAGE_VERSION='2.1.4' -PACKAGE_STRING='enigmail 2.1.4' +PACKAGE_VERSION='2.1.5' +PACKAGE_STRING='enigmail 2.1.5' PACKAGE_BUGREPORT='https://www.enigmail.net' PACKAGE_URL='' @@ -1208,7 +1208,7 @@ # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF -\`configure' configures enigmail 2.1.4 to adapt to many kinds of systems. +\`configure' configures enigmail 2.1.5 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1275,7 +1275,7 @@ if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of enigmail 2.1.4:";; + short | recursive ) echo "Configuration of enigmail 2.1.5:";; esac cat <<\_ACEOF @@ -1358,7 +1358,7 @@ test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -enigmail configure 2.1.4 +enigmail configure 2.1.5 generated by GNU Autoconf 2.69 Copyright (C) 2012 Free Software Foundation, Inc. @@ -1375,7 +1375,7 @@ This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. -It was created by enigmail $as_me 2.1.4, which was +It was created by enigmail $as_me 2.1.5, which was generated by GNU Autoconf 2.69. Invocation command line was $ $0 $@ @@ -2615,7 +2615,7 @@ # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" -This file was extended by enigmail $as_me 2.1.4, which was +This file was extended by enigmail $as_me 2.1.5, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -2668,7 +2668,7 @@ cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ -enigmail config.status 2.1.4 +enigmail config.status 2.1.5 configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/enigmail/configure.ac new/enigmail/configure.ac --- old/enigmail/configure.ac 2019-12-11 18:23:50.000000000 +0100 +++ new/enigmail/configure.ac 2019-12-31 16:19:51.000000000 +0100 @@ -2,7 +2,7 @@ AC_PREREQ(2.61) min_automake_version="1.10" -AC_INIT([enigmail],[2.1.4], [https://www.enigmail.net]) +AC_INIT([enigmail],[2.1.5], [https://www.enigmail.net]) AC_PATH_PROG(PYTHON, "python3") diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/enigmail/lang/ca/enigmail.properties new/enigmail/lang/ca/enigmail.properties --- old/enigmail/lang/ca/enigmail.properties 2019-12-11 18:23:50.000000000 +0100 +++ new/enigmail/lang/ca/enigmail.properties 2019-12-31 16:19:51.000000000 +0100 @@ -855,3 +855,4 @@ # importSettings.errorNoFile=The file you specified is not a regular file! # importSettings.cancelWhileInProgress=Restoring is in progress. Do you really want to abort the process? # importSettings.button.abortImport=&Abort process +updateGnuPG.downloadingGnuPG=Baixant GnuPG diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/enigmail/lang/cs/enigmail.properties new/enigmail/lang/cs/enigmail.properties --- old/enigmail/lang/cs/enigmail.properties 2019-12-11 18:23:50.000000000 +0100 +++ new/enigmail/lang/cs/enigmail.properties 2019-12-31 16:19:51.000000000 +0100 @@ -855,3 +855,7 @@ # importSettings.errorNoFile=The file you specified is not a regular file! # importSettings.cancelWhileInProgress=Restoring is in progress. Do you really want to abort the process? # importSettings.button.abortImport=&Abort process +updateGnuPG.downloadingGnuPG=Stahování GnuPG +updateGnuPG.startingInstaller=Spuštění instalačního programu. Prosím, postupujte podle kroků průvodce instalací GnuPG. +updateGnuPG.downloadingGnuPG=Stahování GnuPG +updateGnuPG.startingInstaller=Spuštění instalačního programu. Prosím, postupujte podle kroků průvodce instalací GnuPG. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/enigmail/lang/de/enigmail.properties new/enigmail/lang/de/enigmail.properties --- old/enigmail/lang/de/enigmail.properties 2019-12-11 18:23:50.000000000 +0100 +++ new/enigmail/lang/de/enigmail.properties 2019-12-31 16:19:51.000000000 +0100 @@ -855,3 +855,6 @@ importSettings.errorNoFile=Die von Ihnen angegebene Datei ist keine reguläre Datei. importSettings.cancelWhileInProgress=Die Wiederherstellung läuft noch. Wollen Sie den Prozess wirklich abbrechen? importSettings.button.abortImport=&Prozess abbrechen +updateGnuPG.importingKeys=Die Schlüssel werden in GnuPG importiert. Es kann sein, dass sie dabei (auch mehrfach) nach der Passphrase für Ihre Schlüssel gefragt werden. +updateGnuPG.downloadingGnuPG=GnuPG wird heruntergeladen +updateGnuPG.startingInstaller=Die GnuPG-Installation wird gestartet. Bitte folgen Sie dem GnuPG-Installations-Assistenten. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/enigmail/lang/el/enigmail.properties new/enigmail/lang/el/enigmail.properties --- old/enigmail/lang/el/enigmail.properties 2019-12-11 18:23:50.000000000 +0100 +++ new/enigmail/lang/el/enigmail.properties 2019-12-31 16:19:51.000000000 +0100 @@ -855,3 +855,5 @@ # importSettings.errorNoFile=The file you specified is not a regular file! # importSettings.cancelWhileInProgress=Restoring is in progress. Do you really want to abort the process? # importSettings.button.abortImport=&Abort process +updateGnuPG.downloadingGnuPG=Λήψη GnuPG +updateGnuPG.startingInstaller=Ο εγκαταστάτης αρχίζει. Παρακαλώ ακολουθήστε τα βήματά του. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/enigmail/lang/es-ES/enigmail.properties new/enigmail/lang/es-ES/enigmail.properties --- old/enigmail/lang/es-ES/enigmail.properties 2019-12-11 18:23:50.000000000 +0100 +++ new/enigmail/lang/es-ES/enigmail.properties 2019-12-31 16:19:51.000000000 +0100 @@ -855,3 +855,6 @@ importSettings.errorNoFile=¡El fichero que ha especificado no es un fichero común! importSettings.cancelWhileInProgress=Restauración en marcha. ¿En verdad desea abortar el proceso? importSettings.button.abortImport=&Abortar proceso +updateGnuPG.importingKeys=Importando claves en GnuPG. Puede que se le pidan las frases-contraseña de sus claves. +updateGnuPG.downloadingGnuPG=Descargando GnuPG +updateGnuPG.startingInstaller=Iniciando el instalador. Siga los pasos del asistente de instalación de GnuPG diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/enigmail/lang/fa/enigmail.properties new/enigmail/lang/fa/enigmail.properties --- old/enigmail/lang/fa/enigmail.properties 2019-12-11 18:23:50.000000000 +0100 +++ new/enigmail/lang/fa/enigmail.properties 2019-12-31 16:19:51.000000000 +0100 @@ -855,3 +855,6 @@ importSettings.errorNoFile=فایلی که شما مشخص کرده اید یک فایل عادی نمی باشد! importSettings.cancelWhileInProgress=بازیابی در حال انجام است. آیا واقعا می خواهید این رویه را لغو کنید؟ importSettings.button.abortImport=&لغو رویه +updateGnuPG.importingKeys=در حال وارد کردن کلید ها در GnuPG. ممکن است لازم باشد عبارت(های) عبور کلید (های) خود را وارد کنید. +updateGnuPG.downloadingGnuPG=دانلود GnuPG +updateGnuPG.startingInstaller=در حال شروع نصب کننده. لطفا قدم های ویزارد نصب کننده GnuPG را دنبال کنید. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/enigmail/lang/fr/enigmail.properties new/enigmail/lang/fr/enigmail.properties --- old/enigmail/lang/fr/enigmail.properties 2019-12-11 18:23:50.000000000 +0100 +++ new/enigmail/lang/fr/enigmail.properties 2019-12-31 16:19:51.000000000 +0100 @@ -855,3 +855,6 @@ importSettings.errorNoFile=Le fichier que vous avez indiqué n’est pas un fichier standard ! importSettings.cancelWhileInProgress=La restauration est en cours. Voulez-vous vraiment abandonner le processus ? importSettings.button.abortImport=&Abandonner le processus +updateGnuPG.importingKeys=Importation des clés dans GnuPG. Les phrases de passe de vos clés vous seront peut-être demandées. +updateGnuPG.downloadingGnuPG=Téléchargement de GnuPG… +updateGnuPG.startingInstaller=Démarrage du programme d’installation. Veuillez suivre les étapes de l’assistant d’installation GnuPG. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/enigmail/lang/gd/enigmail.properties new/enigmail/lang/gd/enigmail.properties --- old/enigmail/lang/gd/enigmail.properties 2019-12-11 18:23:50.000000000 +0100 +++ new/enigmail/lang/gd/enigmail.properties 2019-12-31 16:19:51.000000000 +0100 @@ -855,3 +855,6 @@ importSettings.errorNoFile=Chan eil am faidhle a shònraich thu ’na fhaidhle àbhaisteach! importSettings.cancelWhileInProgress=Tha aiseag a’ dol air adhart. A bheil thu cinnteach gu bheil thu airson sgur dheth? importSettings.button.abortImport=&Sguir dhen phròiseas +updateGnuPG.importingKeys=Ion-phortaich iuchraichean ann an GnuPG. Dh’fhaoidte gun dèid an abairt-fhaire airson iuchair no dhà iarraidh ort. +updateGnuPG.downloadingGnuPG=A’ luchdadh a-nuas GnuPG… +updateGnuPG.startingInstaller=A’ tòiseachadh an stàlaicheir. Lean air adhart leis na ceuman aig draoidh an stàlaicheir GnuPG. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/enigmail/lang/gl/enigmail.properties new/enigmail/lang/gl/enigmail.properties --- old/enigmail/lang/gl/enigmail.properties 2019-12-11 18:23:50.000000000 +0100 +++ new/enigmail/lang/gl/enigmail.properties 2019-12-31 16:19:51.000000000 +0100 @@ -855,3 +855,5 @@ # importSettings.errorNoFile=The file you specified is not a regular file! # importSettings.cancelWhileInProgress=Restoring is in progress. Do you really want to abort the process? # importSettings.button.abortImport=&Abort process +updateGnuPG.downloadingGnuPG=Descargando GnuPG +updateGnuPG.startingInstaller=Iniciando o instalador. Siga os pasos do asistente de instalación de GnuPG. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/enigmail/lang/hr/enigmail.properties new/enigmail/lang/hr/enigmail.properties --- old/enigmail/lang/hr/enigmail.properties 2019-12-11 18:23:50.000000000 +0100 +++ new/enigmail/lang/hr/enigmail.properties 2019-12-31 16:19:51.000000000 +0100 @@ -855,3 +855,5 @@ # importSettings.errorNoFile=The file you specified is not a regular file! # importSettings.cancelWhileInProgress=Restoring is in progress. Do you really want to abort the process? # importSettings.button.abortImport=&Abort process +updateGnuPG.downloadingGnuPG=Preuzmi GnuPG +updateGnuPG.startingInstaller=Pokrećem instaler. Molim Vas da pratite korake GnuPG instalacijskog čarobnjaka. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/enigmail/lang/hu/enigmail.properties new/enigmail/lang/hu/enigmail.properties --- old/enigmail/lang/hu/enigmail.properties 2019-12-11 18:23:50.000000000 +0100 +++ new/enigmail/lang/hu/enigmail.properties 2019-12-31 16:19:51.000000000 +0100 @@ -855,3 +855,5 @@ importSettings.errorNoFile=A megadott fájl nem egy hagyományos fájl. importSettings.cancelWhileInProgress=A visszaállítás folyamatban. Valóban megkívánja szakítani a folyamatot? importSettings.button.abortImport=Művelet megszakítás&a +updateGnuPG.downloadingGnuPG=GnuPG letöltése… +updateGnuPG.startingInstaller=Telepítő indítása. Telepítse a GnuPG programot a telepítővarázsló segítségével. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/enigmail/lang/it/enigmail.properties new/enigmail/lang/it/enigmail.properties --- old/enigmail/lang/it/enigmail.properties 2019-12-11 18:23:50.000000000 +0100 +++ new/enigmail/lang/it/enigmail.properties 2019-12-31 16:19:51.000000000 +0100 @@ -855,3 +855,5 @@ importSettings.errorNoFile=Il file specificato non è un file normale! # importSettings.cancelWhileInProgress=Restoring is in progress. Do you really want to abort the process? importSettings.button.abortImport=&Interrompi processo +updateGnuPG.downloadingGnuPG=Scaricamento di GnuPG in corso +updateGnuPG.startingInstaller=Avvio dell'installazione. Segui i passi della procedura guidata di installazione di GnuPG. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/enigmail/lang/ja/enigmail.properties new/enigmail/lang/ja/enigmail.properties --- old/enigmail/lang/ja/enigmail.properties 2019-12-11 18:23:50.000000000 +0100 +++ new/enigmail/lang/ja/enigmail.properties 2019-12-31 16:19:51.000000000 +0100 @@ -855,3 +855,6 @@ importSettings.errorNoFile=ファイルの形式が正常ではありません! importSettings.cancelWhileInProgress=復元中です。プロセスを中断しますか? importSettings.button.abortImport=プロセスを中断(&A) +updateGnuPG.importingKeys=鍵を GnuPG にインポートしています。しばらくお待ちください. データをエクスポート中です。途中であなたの秘密鍵のパスフレーズを尋ねられるかもしれません。 +updateGnuPG.downloadingGnuPG=GnuPG をダウンロード +updateGnuPG.startingInstaller=GnuPG のインストールを開始します。ウィザードに従ってください。 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/enigmail/lang/ko/enigmail.properties new/enigmail/lang/ko/enigmail.properties --- old/enigmail/lang/ko/enigmail.properties 2019-12-11 18:23:50.000000000 +0100 +++ new/enigmail/lang/ko/enigmail.properties 2019-12-31 16:19:51.000000000 +0100 @@ -855,3 +855,5 @@ # importSettings.errorNoFile=The file you specified is not a regular file! # importSettings.cancelWhileInProgress=Restoring is in progress. Do you really want to abort the process? # importSettings.button.abortImport=&Abort process +updateGnuPG.downloadingGnuPG=GnuPG 다운로드중 +updateGnuPG.startingInstaller=설치관리자 개시. GnuPG설치 마법사를 따라 차례로 진행하세요. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/enigmail/lang/lt/enigmail.properties new/enigmail/lang/lt/enigmail.properties --- old/enigmail/lang/lt/enigmail.properties 2019-12-11 18:23:50.000000000 +0100 +++ new/enigmail/lang/lt/enigmail.properties 2019-12-31 16:19:51.000000000 +0100 @@ -855,3 +855,9 @@ importSettings.errorNoFile=Jūsų nurodytas failas nėra įprastas failas! importSettings.cancelWhileInProgress=Vyksta atkūrimas. Ar tikrai norite nutraukti procesą? importSettings.button.abortImport=&Nutraukti procesą +updateGnuPG.importingKeys=Importuojami raktai į GnuPG. Jūsų gali būti paklausta jūsų rakto(-ų) slaptafrazės(-ių). +updateGnuPG.importingKeys=Importuojami raktai į GnuPG. Jūsų gali būti paklausta jūsų rakto(-ų) slaptafrazės(-ių). +updateGnuPG.downloadingGnuPG=Atsiunčiama GnuPG +updateGnuPG.startingInstaller=Paleidžiama diegimo programa. Sekite GnuPG diegimo vediklio žingsnius. +updateGnuPG.downloadingGnuPG=Atsiunčiama GnuPG +updateGnuPG.startingInstaller=Paleidžiama diegimo programa. Sekite GnuPG diegimo vediklio žingsnius. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/enigmail/lang/nb/enigmail.properties new/enigmail/lang/nb/enigmail.properties --- old/enigmail/lang/nb/enigmail.properties 2019-12-11 18:23:50.000000000 +0100 +++ new/enigmail/lang/nb/enigmail.properties 2019-12-31 16:19:51.000000000 +0100 @@ -855,3 +855,5 @@ # importSettings.errorNoFile=The file you specified is not a regular file! # importSettings.cancelWhileInProgress=Restoring is in progress. Do you really want to abort the process? # importSettings.button.abortImport=&Abort process +updateGnuPG.downloadingGnuPG=Laster ned GnuPG +updateGnuPG.startingInstaller=Starter installasjonen. Følg trinnene i GnuPG-installasjonsveilederen. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/enigmail/lang/nl/enigmail.properties new/enigmail/lang/nl/enigmail.properties --- old/enigmail/lang/nl/enigmail.properties 2019-12-11 18:23:50.000000000 +0100 +++ new/enigmail/lang/nl/enigmail.properties 2019-12-31 16:19:51.000000000 +0100 @@ -855,3 +855,6 @@ importSettings.errorNoFile=Het bestand dat u op heeft gegeven is geen normaal bestand! importSettings.cancelWhileInProgress=Bezig met herstellen. Wilt u het proces echt afbreken? importSettings.button.abortImport=Proces &afbreken +updateGnuPG.importingKeys=Sleutels worden geïmporteerd in GnuPG. Mogelijk wordt om de wachtwoordzin(nen) van uw sleutel(s) gevraagd. +updateGnuPG.downloadingGnuPG=GnuPG downloaden… +updateGnuPG.startingInstaller=Het installatieprogramma wordt gestart. Volg de stappen van de GnuPG-installatiewizard. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/enigmail/lang/pl/enigmail.properties new/enigmail/lang/pl/enigmail.properties --- old/enigmail/lang/pl/enigmail.properties 2019-12-11 18:23:50.000000000 +0100 +++ new/enigmail/lang/pl/enigmail.properties 2019-12-31 16:19:51.000000000 +0100 @@ -855,3 +855,6 @@ # importSettings.errorNoFile=The file you specified is not a regular file! # importSettings.cancelWhileInProgress=Restoring is in progress. Do you really want to abort the process? # importSettings.button.abortImport=&Abort process +updateGnuPG.importingKeys=Importowanie kluczy w GnuPG. Program może poprosić o hasła do twoich kluczy. +updateGnuPG.downloadingGnuPG=Pobieranie GnuPG… +updateGnuPG.startingInstaller=Uruchamianie instalatora. Wykonuj czynności sugerowane przez asystenta instalacji GnuPG. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/enigmail/lang/pt-BR/enigmail.properties new/enigmail/lang/pt-BR/enigmail.properties --- old/enigmail/lang/pt-BR/enigmail.properties 2019-12-11 18:23:50.000000000 +0100 +++ new/enigmail/lang/pt-BR/enigmail.properties 2019-12-31 16:19:51.000000000 +0100 @@ -855,3 +855,5 @@ # importSettings.errorNoFile=The file you specified is not a regular file! # importSettings.cancelWhileInProgress=Restoring is in progress. Do you really want to abort the process? # importSettings.button.abortImport=&Abort process +updateGnuPG.downloadingGnuPG=Baixando o GNUPG () +updateGnuPG.startingInstaller=Iniciando a instalação. Siga os passos do assistente de instalação do GnuPG. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/enigmail/lang/pt-PT/enigmail.properties new/enigmail/lang/pt-PT/enigmail.properties --- old/enigmail/lang/pt-PT/enigmail.properties 2019-12-11 18:23:50.000000000 +0100 +++ new/enigmail/lang/pt-PT/enigmail.properties 2019-12-31 16:19:51.000000000 +0100 @@ -855,3 +855,5 @@ # importSettings.errorNoFile=The file you specified is not a regular file! # importSettings.cancelWhileInProgress=Restoring is in progress. Do you really want to abort the process? # importSettings.button.abortImport=&Abort process +updateGnuPG.downloadingGnuPG=Transferindo o GnuPG +updateGnuPG.startingInstaller=Iniciando o instalador. Por favor siga os passos do assistente para instalar o GnuPG. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/enigmail/lang/ru/enigmail.properties new/enigmail/lang/ru/enigmail.properties --- old/enigmail/lang/ru/enigmail.properties 2019-12-11 18:23:50.000000000 +0100 +++ new/enigmail/lang/ru/enigmail.properties 2019-12-31 16:19:51.000000000 +0100 @@ -855,3 +855,5 @@ # importSettings.errorNoFile=The file you specified is not a regular file! # importSettings.cancelWhileInProgress=Restoring is in progress. Do you really want to abort the process? # importSettings.button.abortImport=&Abort process +updateGnuPG.downloadingGnuPG=Загрузка GnuPG +updateGnuPG.startingInstaller=Запуск мастера. Следуйте инструкциям мастера установки GnuPG. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/enigmail/lang/sk/enigmail.properties new/enigmail/lang/sk/enigmail.properties --- old/enigmail/lang/sk/enigmail.properties 2019-12-11 18:23:50.000000000 +0100 +++ new/enigmail/lang/sk/enigmail.properties 2019-12-31 16:19:51.000000000 +0100 @@ -855,3 +855,5 @@ # importSettings.errorNoFile=The file you specified is not a regular file! # importSettings.cancelWhileInProgress=Restoring is in progress. Do you really want to abort the process? # importSettings.button.abortImport=&Abort process +updateGnuPG.downloadingGnuPG=Sťahujem GnuPG +updateGnuPG.startingInstaller=Spúštam inštaláciu. Prosím pokračujte krokmi GnuPG inštalačného pomocníka. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/enigmail/lang/sl/enigmail.properties new/enigmail/lang/sl/enigmail.properties --- old/enigmail/lang/sl/enigmail.properties 2019-12-11 18:23:50.000000000 +0100 +++ new/enigmail/lang/sl/enigmail.properties 2019-12-31 16:19:51.000000000 +0100 @@ -855,3 +855,5 @@ # importSettings.errorNoFile=The file you specified is not a regular file! # importSettings.cancelWhileInProgress=Restoring is in progress. Do you really want to abort the process? # importSettings.button.abortImport=&Abort process +updateGnuPG.downloadingGnuPG=Prenašanje GnuPG … +updateGnuPG.startingInstaller=Začenjanje namestilnika. Sledite korakom v čarovniku namestilnika GnuPG. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/enigmail/lang/sq/enigmail.properties new/enigmail/lang/sq/enigmail.properties --- old/enigmail/lang/sq/enigmail.properties 2019-12-11 18:23:50.000000000 +0100 +++ new/enigmail/lang/sq/enigmail.properties 2019-12-31 16:19:51.000000000 +0100 @@ -855,3 +855,6 @@ importSettings.errorNoFile=Kartela që treguat s’është kartelë e rregullt! importSettings.cancelWhileInProgress=Rimarrja është në punë e sipër. Doni vërtet të ndërpritet procesi? importSettings.button.abortImport=&Ndërprite procesin +updateGnuPG.importingKeys=Po importohen kyça në GnuPG. Mund t'ju kërkohet frazëkalimi(et) për kyçin(et) tuaj. +updateGnuPG.downloadingGnuPG=Po shkarkohet GnuPG-ja +updateGnuPG.startingInstaller=Po niset instaluesi. Ju lutemi, ndiqni hapat e ndihmësit të instalimit të GnuPG-së. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/enigmail/lang/sv/enigmail.properties new/enigmail/lang/sv/enigmail.properties --- old/enigmail/lang/sv/enigmail.properties 2019-12-11 18:23:50.000000000 +0100 +++ new/enigmail/lang/sv/enigmail.properties 2019-12-31 16:19:51.000000000 +0100 @@ -855,3 +855,6 @@ importSettings.errorNoFile=Filen du angav är inte en vanlig fil! importSettings.cancelWhileInProgress=Återställningen pågår. Vill du verkligen avbryta processen? importSettings.button.abortImport=&Avbryt process +updateGnuPG.importingKeys=Importerar nycklar i GnuPG. Du kan bli tillfrågad om lösenfrasen för din nyckel. +updateGnuPG.downloadingGnuPG=Hämta GnuPG +updateGnuPG.startingInstaller=Startar installationsprogrammet. Följ stegen i GnuPG:s installationsguide. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/enigmail/lang/zh-CN/enigmail.properties new/enigmail/lang/zh-CN/enigmail.properties --- old/enigmail/lang/zh-CN/enigmail.properties 2019-12-11 18:23:50.000000000 +0100 +++ new/enigmail/lang/zh-CN/enigmail.properties 2019-12-31 16:19:51.000000000 +0100 @@ -855,3 +855,5 @@ # importSettings.errorNoFile=The file you specified is not a regular file! # importSettings.cancelWhileInProgress=Restoring is in progress. Do you really want to abort the process? # importSettings.button.abortImport=&Abort process +updateGnuPG.downloadingGnuPG=正在下载 GnuPG… +updateGnuPG.startingInstaller=正在启动安装程序。请遵循 GnuPG 安装程序的向导指示。 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/enigmail/lang/zh-TW/enigmail.properties new/enigmail/lang/zh-TW/enigmail.properties --- old/enigmail/lang/zh-TW/enigmail.properties 2019-12-11 18:23:50.000000000 +0100 +++ new/enigmail/lang/zh-TW/enigmail.properties 2019-12-31 16:19:51.000000000 +0100 @@ -855,3 +855,6 @@ importSettings.errorNoFile=你指定檔案不是正規檔案! importSettings.cancelWhileInProgress=正在回復中,確定要放棄回復嗎? importSettings.button.abortImport=&放棄回復 +updateGnuPG.importingKeys=正在匯入GnuPC的密鑰,這可能需要一點時間. 保存進度中。您可能會被要求提供您的密鑰的密碼短語。 +updateGnuPG.downloadingGnuPG=正在下載 GnuPG… +updateGnuPG.startingInstaller=正在啟動安裝程式,請依照 GnuPG 安裝精靈的步驟執行。 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/enigmail/package/autoSetup.jsm new/enigmail/package/autoSetup.jsm --- old/enigmail/package/autoSetup.jsm 2019-12-11 18:23:50.000000000 +0100 +++ new/enigmail/package/autoSetup.jsm 2019-12-31 16:19:51.000000000 +0100 @@ -72,6 +72,23 @@ return new Promise(async (resolve, reject) => { EnigmailLog.DEBUG("autoSetup.jsm: determinePreviousInstallType()\n"); + let resolved = false; + const currDateInSeconds = getCurrentTime(); + + function doResolve(value) { + if (resolved) return; + resolved = true; + resolve(value); + } + + // if after task runs for more than 3 minutes, then return whatever has been found (or not found) so far + EnigmailTimer.setTimeout(function _f() { + if (!resolved) { + EnigmailLog.DEBUG(`autoSetup.jsm: determinePreviousInstallType: timeout after 3 minutes\n`); + } + doResolve(gDeterminedSetupType); + }, 3 * 60 * 1000); // 3 minutes + try { let msgAccountManager = Cc["@mozilla.org/messenger/account-manager;1"].getService(nsIMsgAccountManager); let folderService = Cc["@mozilla.org/mail/folder-lookup;1"].getService(nsIFolderLookupService); @@ -87,7 +104,7 @@ // If no account, except Local Folders is configured if (accounts.length <= 1) { gDeterminedSetupType.value = EnigmailConstants.AUTOSETUP_NO_ACCOUNT; - resolve(gDeterminedSetupType); + doResolve(gDeterminedSetupType); return; } @@ -145,12 +162,12 @@ let mms = messenger.messageServiceFromURI(msgURI).QueryInterface(nsIMsgMessageService); let headerObj = await getStreamedHeaders(msgURI, mms); - let checkHeaderValues = await checkHeaders(headerObj, msgHeader, msgAuthor, account.defaultIdentity.email, msgFolder, returnMsgValue, msgHeaders); + if (headerObj) { + let checkHeaderValues = await checkHeaders(headerObj, msgHeader, msgAuthor, account.defaultIdentity.email, msgFolder, returnMsgValue, msgHeaders); - msgHeaders = checkHeaderValues.msgHeaders; - returnMsgValue = checkHeaderValues.returnMsgValue; - - const currDateInSeconds = getCurrentTime(); + msgHeaders = checkHeaderValues.msgHeaders; + returnMsgValue = checkHeaderValues.returnMsgValue; + } const diffSecond = currDateInSeconds - msgHeader.dateInSeconds; /** @@ -168,7 +185,7 @@ if (returnMsgValue.acSetupMessage) { EnigmailLog.DEBUG(`autoSetup.jsm: determinePreviousInstallType: found AC-Setup message\n`); gDeterminedSetupType = returnMsgValue; - resolve(gDeterminedSetupType); + doResolve(gDeterminedSetupType); } else { EnigmailLog.DEBUG(`msgHeaders.length: ${msgHeaders.length}\n`); @@ -212,7 +229,7 @@ gDeterminedSetupType = returnMsgValue; EnigmailLog.DEBUG(`autoSetup.jsm: determinePreviousInstallType: found type: ${returnMsgValue.value}\n`); - resolve(returnMsgValue); + doResolve(returnMsgValue); } } catch (x) { @@ -614,6 +631,16 @@ return new Promise((resolve, reject) => { let headers = Cc["@mozilla.org/messenger/mimeheaders;1"].createInstance(Ci.nsIMimeHeaders); let headerObj = {}; + let done = false; + + EnigmailTimer.setTimeout(function _f() { + // Stream did not do anyting after 5 seconds, skip message + if (!done) { + EnigmailLog.DEBUG(`autoSetup.jsm: getStreamedHeaders: no response after 5 seconds\n`); + resolve(null); + } + }, 5000); // return after 5 seconds of inactivity + try { mms.streamHeaders(msgURI, EnigmailStreams.newStringStreamListener(aRawString => { try { @@ -645,9 +672,11 @@ } } catch (e) { + done = true; reject({}); EnigmailLog.DEBUG("autoSetup.jsm: getStreamedHeaders: Error: " + e + "\n"); } + done = true; resolve(headerObj); }), null, false); } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/enigmail/package/constants.jsm new/enigmail/package/constants.jsm --- old/enigmail/package/constants.jsm 2019-12-11 18:23:50.000000000 +0100 +++ new/enigmail/package/constants.jsm 2019-12-31 16:19:51.000000000 +0100 @@ -162,5 +162,8 @@ ADDON_INSTALL: 5, // The add-on is being installed. ADDON_UNINSTALL: 6, // The add-on is being uninstalled. ADDON_UPGRADE: 7, // The add-on is being upgraded. - ADDON_DOWNGRADE: 8 // The add-on is being downgraded. + ADDON_DOWNGRADE: 8, // The add-on is being downgraded. + + /* Protected subject replacement as specified in Protected Headers Spec, draft 02*/ + PROTECTED_SUBJECT: "..." }; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/enigmail/package/core.jsm new/enigmail/package/core.jsm --- old/enigmail/package/core.jsm 2019-12-11 18:23:50.000000000 +0100 +++ new/enigmail/package/core.jsm 2019-12-31 16:19:51.000000000 +0100 @@ -47,6 +47,7 @@ // Interfaces const nsIEnvironment = Ci.nsIEnvironment; +const APP_STARTUP = 1; var gPreferredGpgPath = null; var gOverwriteEnvVar = []; @@ -68,6 +69,7 @@ startup: function(reason) { let self = this; + let observerFired = 0; let env = getEnvironment(); initializeLogDirectory(); @@ -82,6 +84,21 @@ this.factories = []; + function initService() { + if (observerFired > 0) return; + + ++observerFired; + const configuredVersion = getEnigmailPrefs().getPref("configuredVersion"); + + if (configuredVersion && configuredVersion.length > 0) { + self.createInstance(); + if (!gEnigmailService.initialized) { + // try to initialize Enigmail + gEnigmailService.initialize(null, getEnigmailApp().getVersion()); + } + } + } + function continueStartup(type) { logger.DEBUG(`core.jsm: startup.continueStartup(${type})\n`); @@ -92,15 +109,11 @@ self.factories.push(new Factory(getEnigmailProtocolHandler())); self.factories.push(new Factory(mimeEncrypt.Handler)); - const configuredVersion = getEnigmailPrefs().getPref("configuredVersion"); - - if (configuredVersion && configuredVersion.length > 0) { - self.createInstance(); - if (!gEnigmailService.initialized) { - // try to initialize Enigmail - gEnigmailService.initialize(null, getEnigmailApp().getVersion()); - } + if (isPostbox() || reason !== APP_STARTUP) { + // Postbox or while not starting up + initService(); } + } catch (ex) { gEnigmailService = null; @@ -108,6 +121,11 @@ } } + if ((!isPostbox()) && reason === APP_STARTUP) { + // if TB starts up, observe "mail-tabs-session-restored" + Services.obs.addObserver(initService, "mail-tabs-session-restored", false); + } + getEnigmailVerify().registerContentTypeHandler(); getEnigmailWksMimeHandler().registerContentTypeHandler(); getEnigmailFiltersWrapper().onStartup(); @@ -503,3 +521,10 @@ Cm.unregisterFactory(this.component.prototype.classID, this); } } + +function isPostbox() { + const POSTBOX_ID = "[email protected]"; + const XPCOM_APPINFO = "@mozilla.org/xre/app-info;1"; + + return Cc[XPCOM_APPINFO].getService(Ci.nsIXULAppInfo).ID == POSTBOX_ID; +} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/enigmail/package/funcs.jsm new/enigmail/package/funcs.jsm --- old/enigmail/package/funcs.jsm 2019-12-11 18:23:50.000000000 +0100 +++ new/enigmail/package/funcs.jsm 2019-12-31 16:19:51.000000000 +0100 @@ -269,18 +269,6 @@ return res; }, - /*** - * Get the text for the encrypted subject (either configured by user or default) - */ - getProtectedSubjectText: function() { - if (EnigmailPrefs.getPref("protectedSubjectText").length > 0) { - return EnigmailData.convertToUnicode(EnigmailPrefs.getPref("protectedSubjectText"), "utf-8"); - } - else { - return "..."; - } - }, - cloneObj: function(orig) { let newObj; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/enigmail/package/gnupgUpdate.jsm new/enigmail/package/gnupgUpdate.jsm --- old/enigmail/package/gnupgUpdate.jsm 2019-12-11 18:23:50.000000000 +0100 +++ new/enigmail/package/gnupgUpdate.jsm 2019-12-31 16:19:51.000000000 +0100 @@ -13,10 +13,15 @@ const InstallGnuPG = ChromeUtils.import("chrome://enigmail/content/modules/installGnuPG.jsm").InstallGnuPG; const EnigmailOS = ChromeUtils.import("chrome://enigmail/content/modules/os.jsm").EnigmailOS; const EnigmailGpg = ChromeUtils.import("chrome://enigmail/content/modules/gpg.jsm").EnigmailGpg; +const EnigmailGpgAgent = ChromeUtils.import("chrome://enigmail/content/modules/gpgAgent.jsm").EnigmailGpgAgent; const EnigmailLog = ChromeUtils.import("chrome://enigmail/content/modules/log.jsm").EnigmailLog; const EnigmailVersioning = ChromeUtils.import("chrome://enigmail/content/modules/versioning.jsm").EnigmailVersioning; const EnigmailTimer = ChromeUtils.import("chrome://enigmail/content/modules/timer.jsm").EnigmailTimer; const EnigmailDialog = ChromeUtils.import("chrome://enigmail/content/modules/dialog.jsm").EnigmailDialog; +const EnigmailFiles = ChromeUtils.import("chrome://enigmail/content/modules/files.jsm").EnigmailFiles; +const EnigmailOpenPGP = ChromeUtils.import("chrome://enigmail/content/modules/openpgp.jsm").EnigmailOpenPGP; +const EnigmailKeyRing = ChromeUtils.import("chrome://enigmail/content/modules/keyRing.jsm").EnigmailKeyRing; +const EnigmailLocale = ChromeUtils.import("chrome://enigmail/content/modules/locale.jsm").EnigmailLocale; var EnigmailGnuPGUpdate = { isUpdateAvailable: async function() { @@ -71,7 +76,8 @@ case "WINNT": return isGpg4WinInstalled(); } - } catch (x) {} + } + catch (x) {} return false; }, @@ -99,6 +105,40 @@ w.openGnuPGUpdate(); } }, timeoutSec * 1000); + }, + + /** + * Is is required to upgrade the keyring from GnuPG 2.0 to 2.2 + * + * @return {Boolean}: true if upgrade required + */ + requireKeyRingUpgrade: function() { + return EnigmailVersioning.greaterThan("2.1", EnigmailGpg.agentVersion); + }, + + /** + * Perform Update of GnuPG. + * + * @param {Object} progressListener: same structure as InstallGnuPG progressListener + */ + performUpdate: function(progressListener) { + InstallGnuPG.startInstaller(progressListener); + }, + + /** + * Trigger conversion of GnuPG 2.0 keyring to GnuPG 2.2. + * + * This is done by (re-)reading the secret keys, after the file gpg-v21-migrated was deleted. + */ + triggerKeyringConversion: function() { + EnigmailLog.DEBUG(`gnupgUpdate.jsm: importKeysFromOldGnupg()\n`); + + if (prepareKeyringConversion()) { + importKeysFromOldGnuPG(); + } + + EnigmailKeyRing.clearCache(); + EnigmailKeyRing.getAllKeys(); } }; @@ -118,9 +158,61 @@ return (EnigmailGpg.agentPath.path.search(/^\/usr\/local\/gnupg-2.[12]\//) === 0); } +/** + * Prepare conversion of keyring + * + * @return {Boolean}: true - need to import keys / false: key import not needed + */ +function prepareKeyringConversion() { + // delete gpg-v21-migrated in GnuPG profile if existing + EnigmailLog.DEBUG(`gnupgUpdate.jsm: prepareKeyringConversion()\n`); + let homeDir = EnigmailGpgAgent.getGpgHomeDir(); + let gpgHomeDir = Cc["@mozilla.org/file/local;1"].createInstance(Ci.nsIFile); + EnigmailFiles.initPath(gpgHomeDir, homeDir); + + try { + let gpgMigrationFile = gpgHomeDir.clone(); + gpgMigrationFile.append("gpg-v21-migrated"); -function performUpdate() { - EnigmailDialog.info(null, "GnuPG will be downloaded in the background. Once complete, the setup process will start automatically"); + if (gpgMigrationFile.exists()) { + gpgMigrationFile.remove(false); + } + } + catch (ex) {} + + try { + // if pubring.kbx is present, then re-import all keys from pubring.gpg and secring.gpg + let pubring = gpgHomeDir.clone(); + pubring.append("pubring.kbx"); - InstallGnuPG.startInstaller(null); + if (pubring.exists()) { + return true; + } + } + catch(ex) {} + + return false; +} + + +function importKeysFromOldGnuPG() { + EnigmailLog.DEBUG(`gnupgUpdate.jsm: importKeysFromOldGnuPG()\n`); + + let homeDir = EnigmailGpgAgent.getGpgHomeDir(); + let gpgHomeDir = Cc["@mozilla.org/file/local;1"].createInstance(Ci.nsIFile); + EnigmailFiles.initPath(gpgHomeDir, homeDir); + + let keyRing = gpgHomeDir.clone(); + try { + keyRing.append("secring.gpg"); + if (keyRing.exists()) EnigmailKeyRing.importKeyFromFile(keyRing); + } + catch (ex) {} + + keyRing = gpgHomeDir.clone(); + try { + keyRing.append("pubring.gpg"); + if (keyRing.exists()) EnigmailKeyRing.importKeyFromFile(keyRing); + } + catch (ex) {} } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/enigmail/package/keyRing.jsm new/enigmail/package/keyRing.jsm --- old/enigmail/package/keyRing.jsm 2019-12-11 18:23:50.000000000 +0100 +++ new/enigmail/package/keyRing.jsm 2019-12-31 16:19:51.000000000 +0100 @@ -299,6 +299,9 @@ EnigmailKeyRing.clearCache(); } + if (errorMsgObj) { + errorMsgObj.value = res.errorMsg; + } return res.exitCode; }, diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/enigmail/package/mime.jsm new/enigmail/package/mime.jsm --- old/enigmail/package/mime.jsm 2019-12-11 18:23:50.000000000 +0100 +++ new/enigmail/package/mime.jsm 2019-12-31 16:19:51.000000000 +0100 @@ -292,43 +292,7 @@ headers.initialize(contentBody); let innerCt = headers.extractHeader("content-type", false) || ""; - - if (innerCt.search(/^text\/rfc822-headers/i) === 0) { - - let charset = EnigmailMime.getCharset(innerCt); - let ctt = headers.extractHeader("content-transfer-encoding", false) || ""; - - // determine where the headers end and the MIME-subpart body starts - let bodyStartPos = contentBody.search(/\r?\n\s*\r?\n/) + 1; - - if (bodyStartPos < 10) return null; - - bodyStartPos += contentBody.substr(bodyStartPos).search(/^[A-Za-z]/m); - - let ctBodyData = contentBody.substr(bodyStartPos); - - if (ctt.search(/^base64/i) === 0) { - ctBodyData = EnigmailData.decodeBase64(ctBodyData) + "\n"; - } - else if (ctt.search(/^quoted-printable/i) === 0) { - ctBodyData = EnigmailData.decodeQuotedPrintable(ctBodyData) + "\n"; - } - - if (charset) { - ctBodyData = EnigmailData.convertToUnicode(ctBodyData, charset); - } - - // get the headers of the MIME-subpart body --> that's the ones we need - let bodyHdr = Cc["@mozilla.org/messenger/mimeheaders;1"].createInstance(Ci.nsIMimeHeaders); - bodyHdr.initialize(ctBodyData); - - for (let i in protectedHdr) { - if (bodyHdr.hasHeader(protectedHdr[i])) { - newHeaders[protectedHdr[i]] = jsmime.headerparser.decodeRFC2047Words(bodyHdr.extractHeader(protectedHdr[i], true)) || undefined; - } - } - } - else { + if (!(innerCt.search(/^text\/(plain|rfc822-headers)/i) === 0 && innerCt.search(/; *protected-headers="?v1"?/i) > 0)) { startPos = -1; endPos = -1; } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/enigmail/package/mimeEncrypt.jsm new/enigmail/package/mimeEncrypt.jsm --- old/enigmail/package/mimeEncrypt.jsm 2019-12-11 18:23:50.000000000 +0100 +++ new/enigmail/package/mimeEncrypt.jsm 2019-12-31 16:19:51.000000000 +0100 @@ -26,6 +26,7 @@ const EnigmailPEPAdapter = ChromeUtils.import("chrome://enigmail/content/modules/pEpAdapter.jsm").EnigmailPEPAdapter; const EnigmailKeyRing = ChromeUtils.import("chrome://enigmail/content/modules/keyRing.jsm").EnigmailKeyRing; const EnigmailLocale = ChromeUtils.import("chrome://enigmail/content/modules/locale.jsm").EnigmailLocale; +const EnigmailPrefs = ChromeUtils.import("chrome://enigmail/content/modules/prefs.jsm").EnigmailPrefs; // our own contract IDs const PGPMIME_ENCRYPT_CID = Components.ID("{96fe88f9-d2cd-466f-93e0-3a351df4c6d2}"); @@ -394,7 +395,18 @@ w += this.getAutocryptGossip() + `\r\n--${this.encHeader}\r\n`; this.writeToPipe(w); - if (this.cryptoMode == MIME_SIGNED) this.writeOut(w); + if (this.cryptoMode == MIME_SIGNED) { + this.writeOut(w); + } + else if (EnigmailPrefs.getPref("protectedHeadersLegacyPart") && + this.originalSubject && this.originalSubject.length > 0 && + (this.sendFlags & EnigmailConstants.ENCRYPT_HEADERS)) { + w = 'Content-Type: text/plain; charset=utf-8; protected-headers="v1"\r\n' + + 'Content-Disposition: inline\r\n\r\n' + + 'Subject: ' + EnigmailData.convertFromUnicode(this.originalSubject, "utf-8") + "\r\n\r\n" + + `--${this.encHeader}\r\n`; + this.writeToPipe(w); + } }, getAutocryptGossip: function() { @@ -423,7 +435,7 @@ let subj = ""; if (this.sendFlags & EnigmailConstants.ENCRYPT_HEADERS) { - subj = jsmime.headeremitter.emitStructuredHeader("subject", EnigmailFuncs.getProtectedSubjectText(), {}); + subj = jsmime.headeremitter.emitStructuredHeader("subject", EnigmailConstants.PROTECTED_SUBJECT, {}); } this.writeOut(subj + diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/enigmail/package/prefs/defaultPrefs.js new/enigmail/package/prefs/defaultPrefs.js --- old/enigmail/package/prefs/defaultPrefs.js 2019-12-11 18:23:50.000000000 +0100 +++ new/enigmail/package/prefs/defaultPrefs.js 2019-12-31 16:19:51.000000000 +0100 @@ -221,7 +221,10 @@ // enable encryption/signing of headers like subject, from, to // 1: default: ask user at 1st time use / 0: off / 2: on pref("extensions.enigmail.protectedHeaders", 1); -pref("extensions.enigmail.protectedSubjectText", ""); + +// Create the Legacy Display part of Protected headers +// false: off / true: on +pref("extensions.enigmail.protectedHeadersLegacyPart", false); // do reset the "references" and "in-reply-to" headers? pref("extensions.enigmail.protectReferencesHdr", false); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/enigmail/package/tests/mime-test.js new/enigmail/package/tests/mime-test.js --- old/enigmail/package/tests/mime-test.js 2019-12-11 18:23:50.000000000 +0100 +++ new/enigmail/package/tests/mime-test.js 2019-12-31 16:19:51.000000000 +0100 @@ -34,28 +34,26 @@ const msg1 = 'Content-Type: multipart/mixed; boundary="OuterBoundary";\r\n' + ' protected-headers="v1"\r\n' + 'References: <[email protected]>\r\n' + - 'Subject: Outer hidden subject\r\n' + + 'Subject: The hidden subject\r\n' + + 'From: Starworks <[email protected]>\r\n' + + 'To: Alan <[email protected]>, Bingo <[email protected]>\r\n' + + 'Cc: Alan <[email protected]>, Bingo <[email protected]>\r\n' + + 'Reply-To: Starworks alternative <[email protected]>\r\n' + + 'Date: Sun, 21 Jun 2015 15:19:32 +0200\r\n' + '\r\n' + '--OuterBoundary\r\n' + - 'Content-Transfer-Encoding: base64\r\n' + - 'Content-Type: text/rfc822-headers; charset="us-ascii";\r\n' + + 'Content-Type: text/plain; charset="us-ascii"; protected-headers="v1"\r\n' + 'Content-Disposition: inline\r\n' + '\r\n' + - 'U3ViamVjdDogVGhlIGhpZGRlbiBzdWJqZWN0CkRhdGU6IFN1biwgMjEgSnVuIDIwMTUgMT\r\n' + - 'U6MTk6MzIgKzAyMDAKRnJvbTogU3RhcndvcmtzIDxzdHJpa2VmcmVlZG9tQGVuaWdtYWls\r\n' + - 'LXRlc3QubmV0PgpUbzogUGF0cmljayA8cGF0cmlja0BlbmlnbWFpbC10ZXN0Lm5ldD4sIE\r\n' + - 'JpbmdvIDxiaW5nb0BlbmlnbWFpbC10ZXN0Lm5ldD4KQ2M6IFBhdHJpY2sgPHBhdHJpY2sy\r\n' + - 'QGVuaWdtYWlsLXRlc3QubmV0PiwgQmluZ28gPDJiaW5nb0BlbmlnbWFpbC10ZXN0Lm5ldD\r\n' + - '4KUmVwbHktVG86IFN0YXJ3b3JrcyBhbHRlcm5hdGl2ZSA8YWx0ZXJuYXRpdmVAZW5pZ21h\r\n' + - 'aWwtdGVzdC5uZXQ+Cg==\r\n' + + 'Subject: The hidden subject\r\n' + '\r\n' + '--OuterBoundary\r\n' + 'Content-Type: multipart/mixed; boundary="innerContent"\r\n' + '\r\n' + '--innerContent\r\n' + - 'Content-Type: text/plain; charset="us-ascii"\r\n' + + 'Content-Type: text/html; charset="us-ascii"\r\n' + '\r\n' + - 'Hello World!\r\n' + + '<p>Hello World!</p>\r\n' + '\r\n' + '--innerContent--\r\n' + '--OuterBoundary--\r\n\r\n'; @@ -83,29 +81,29 @@ var expected = msg2; var got = r.startPos; - Assert.equal(got, 144, "startPos of removed data"); + Assert.equal(got, 429, "startPos of removed data"); got = r.endPos; - Assert.equal(got, 739, "endPos of removed data"); + Assert.equal(got, 578, "endPos of removed data"); got = r.newHeaders.subject; expected = "The hidden subject"; Assert.equal(got, expected, "subject"); got = r.newHeaders.from; - expected = "Starworks <[email protected]>"; + expected = "Starworks <[email protected]>"; Assert.equal(got, expected, "from"); got = r.newHeaders.to; - expected = "Patrick <[email protected]>, Bingo <[email protected]>"; + expected = "Alan <[email protected]>, Bingo <[email protected]>"; Assert.equal(got, expected, "to"); got = r.newHeaders.cc; - expected = "Patrick <[email protected]>, Bingo <[email protected]>"; + expected = "Alan <[email protected]>, Bingo <[email protected]>"; Assert.equal(got, expected, "cc"); got = r.newHeaders["reply-to"]; - expected = "Starworks alternative <[email protected]>"; + expected = "Starworks alternative <[email protected]>"; Assert.equal(got, expected, "reply-to"); got = r.newHeaders.date; @@ -122,7 +120,7 @@ let tree = EnigmailMime.getMimeTree(msg1); Assert.ok(tree.headers.contentType.type, "multipart/mixed"); - Assert.equal(tree.subParts[0].headers.contentType.type, "text/rfc822-headers"); + Assert.equal(tree.subParts[0].headers.contentType.type, "text/plain"); Assert.equal(tree.subParts[0].headers.charset, "us-ascii"); - Assert.equal(tree.subParts[1].subParts[0].headers.contentType.type, "text/plain"); + Assert.equal(tree.subParts[1].subParts[0].headers.contentType.type, "text/html"); }); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/enigmail/package/tests/mimeEncrypt-test.js new/enigmail/package/tests/mimeEncrypt-test.js --- old/enigmail/package/tests/mimeEncrypt-test.js 1970-01-01 01:00:00.000000000 +0100 +++ new/enigmail/package/tests/mimeEncrypt-test.js 2019-12-31 16:19:51.000000000 +0100 @@ -0,0 +1,177 @@ +/*global do_load_module: false, do_get_file: false, do_get_cwd: false, testing: false, test: false, Assert: false, resetting: false */ +/*global component: false, withEnigmail: false withTestGpgHome: false, JSUnit: false */ +/* + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at https://mozilla.org/MPL/2.0/. + */ + +"use strict"; + + +do_load_module("file://" + do_get_cwd().path + "/testHelper.js"); + +testing("mimeEncrypt.jsm"); +/* global EnigmailMimeEncrypt: false, PgpMimeEncrypt: false + EnigmailConstants: false, EnigmailKeyRing: false, + EnigmailPrefs: false, + MIME_SIGNED: false, MIME_ENCRYPTED: false */ + +const EnigmailFiles = component("enigmail/files.jsm").EnigmailFiles; + +test(function testSignedMessage() { + const e = new PgpMimeEncrypt(null); + e.msgCompFields = []; + e.hashAlgorithm = "SHA256"; + e.cryptoMode = MIME_SIGNED; + e.sendFlags = EnigmailConstants.SEND_PGP_MIME | EnigmailConstants.SEND_SIGNED; + e.startCryptoHeaders(); + + Assert.equal(e.pipeQueue.search(/Content-Type: multipart\/mixed; boundary=\"[a-zA-Z0-9]+\"\r\n\r\n--[a-zA-Z0-9]+\r\n/), 0); + Assert.equal(e.outQueue.search(/Content-Type: multipart\/signed; micalg=pgp-sha256;\r\n protocol=\"application\/pgp-signature\";\r\n boundary=\"[a-zA-Z0-9]+\"/), 0); +}); + + +test(withTestGpgHome(withEnigmail(function testFinishCryptoEncapsulation() { + const publicKey = do_get_file("resources/dev-strike.asc", false); + const secretKey = do_get_file("resources/dev-strike.sec", false); + const errorMsgObj = {}; + const importedKeysObj = {}; + EnigmailKeyRing.importKeyFromFile(publicKey, errorMsgObj, importedKeysObj); + EnigmailKeyRing.importKeyFromFile(secretKey, errorMsgObj, importedKeysObj); + const strikeAccount = "[email protected]"; + + const e = new PgpMimeEncrypt(null); + e.msgCompFields = []; + e.hashAlgorithm = "SHA256"; + e.useSmime = false; + e.cryptoMode = MIME_ENCRYPTED; + e.sendFlags = EnigmailConstants.SEND_PGP_MIME | EnigmailConstants.SEND_ENCRYPTED | EnigmailConstants.SEND_ALWAYS_TRUST; + e.senderEmailAddr = strikeAccount; + e.recipients = strikeAccount; + e.bccRecipients = ""; + e.pipeQueue = "Hello World"; + e.win = JSUnit.createStubWindow(); + e.checkSMime = false; + e.encapsulate = false; + e.encHeader = null; + e.flushOutput = function() {}; + + e.finishCryptoEncapsulation(false, false); + Assert.equal(e.encryptedData.substr(0, 27), "-----BEGIN PGP MESSAGE-----"); + + Assert.ok(e.encryptedData.split(/[\r\n]+/).length >= 14); + + // test if we get an exception if encryption fails + e.sendFlags = EnigmailConstants.SEND_PGP_MIME | EnigmailConstants.SEND_ENCRYPTED; + try { + e.finishCryptoEncapsulation(false, false); + Assert.ok(false); // should not succeed because "always trust" is off + } + catch (ex) { + Assert.ok(true); + } + + // test signed message + e.sendFlags = EnigmailConstants.SEND_PGP_MIME | EnigmailConstants.SEND_SIGNED; + e.finishCryptoEncapsulation(false, false); + Assert.equal(e.encryptedData.substr(0, 29), "-----BEGIN PGP SIGNATURE-----"); +}))); + + +test(withTestGpgHome(withEnigmail(function testBeginCryptoEncapsulation() { + const secretKey = do_get_file("resources/dev-strike.sec", false); + const errorMsgObj = {}; + const importedKeysObj = {}; + EnigmailKeyRing.importKeyFromFile(secretKey, errorMsgObj, importedKeysObj); + const strikeAccount = "[email protected]"; + + // force GnuPG to use SHA512 + EnigmailPrefs.setPref("agentAdditionalParam", "--digest-algo SHA512"); + + const e = new PgpMimeEncrypt(null); + e.msgCompFields = []; + e.hashAlgorithm = ""; + e.useSmime = false; + e.cryptoMode = MIME_ENCRYPTED; + e.sendFlags = EnigmailConstants.SEND_PGP_MIME | EnigmailConstants.SEND_SIGNED; + e.senderEmailAddr = strikeAccount; + e.recipients = strikeAccount; + e.bccRecipients = ""; + e.pipeQueue = "Hello World"; + e.win = JSUnit.createStubWindow(); + e.checkSMime = false; + e.encapsulate = false; + e.encHeader = null; + + e.beginCryptoEncapsulation({}, strikeAccount, {}, {}, false, false); + + Assert.equal(e.hashAlgorithm, "sha512"); + EnigmailPrefs.setPref("agentAdditionalParam", ""); +}))); + +test(function testWriteSecureHeaders() { + const e = new PgpMimeEncrypt(null); + const SUBJECT = "Some subject with umlauts like ä and é"; + e.msgCompFields = { + from: "Sender <[email protected]>", + to: "Recipient <[email protected]>" + }; + e.getAutocryptGossip = function() { + return ""; + }; + e.encHeader = null; + e.cryptoMode = MIME_ENCRYPTED; + e.originalSubject = SUBJECT; + + e.sendFlags = EnigmailConstants.SEND_PGP_MIME | EnigmailConstants.SEND_SIGNED; + EnigmailPrefs.setPref("protectedHeadersLegacyPart", false); + e.pipeQueue = ""; + e.writeSecureHeaders(); + Assert.equal(e.pipeQueue, `Content-Type: multipart/mixed; boundary="${e.encHeader}"\r\n\r\n--${e.encHeader}\r\n`); + + e.sendFlags = EnigmailConstants.SEND_PGP_MIME | EnigmailConstants.SEND_SIGNED; + EnigmailPrefs.setPref("protectedHeadersLegacyPart", true); + e.pipeQueue = ""; + e.writeSecureHeaders(); + Assert.equal(e.pipeQueue, `Content-Type: multipart/mixed; boundary="${e.encHeader}"\r\n\r\n--${e.encHeader}\r\n`); + + e.sendFlags = EnigmailConstants.SEND_PGP_MIME | EnigmailConstants.SEND_SIGNED | EnigmailConstants.ENCRYPT_HEADERS; + EnigmailPrefs.setPref("protectedHeadersLegacyPart", false); + e.pipeQueue = ""; + e.writeSecureHeaders(); + let expected = `Content-Type: multipart/mixed; boundary="${e.encHeader}";\r\n protected-headers="v1"\r\n` + + `From: ${e.msgCompFields.from}\r\n` + + `To: ${e.msgCompFields.to}\r\n` + + `Subject: =?UTF-8?Q?Some_subject_with_umlauts_like_=c3=a4_and_=c3=a9?=\r\n\r\n` + + `--${e.encHeader}\r\n`; + Assert.equal(e.pipeQueue, expected); + + e.sendFlags = EnigmailConstants.SEND_PGP_MIME | EnigmailConstants.SEND_SIGNED | EnigmailConstants.ENCRYPT_HEADERS; + EnigmailPrefs.setPref("protectedHeadersLegacyPart", true); + e.pipeQueue = ""; + e.writeSecureHeaders(); + expected = `Content-Type: multipart/mixed; boundary="${e.encHeader}";\r\n protected-headers="v1"\r\n` + + `From: ${e.msgCompFields.from}\r\n` + + `To: ${e.msgCompFields.to}\r\n` + + `Subject: =?UTF-8?Q?Some_subject_with_umlauts_like_=c3=a4_and_=c3=a9?=\r\n\r\n` + + `--${e.encHeader}\r\n` + + 'Content-Type: text/plain; charset=utf-8; protected-headers="v1"\r\n' + + 'Content-Disposition: inline\r\n\r\n' + + `Subject: Some subject with umlauts like ä and é\r\n\r\n` + + `--${e.encHeader}\r\n`; + Assert.equal(e.pipeQueue, expected); + + e.originalSubject = null; + e.sendFlags = EnigmailConstants.SEND_PGP_MIME | EnigmailConstants.SEND_SIGNED | EnigmailConstants.ENCRYPT_HEADERS; + EnigmailPrefs.setPref("protectedHeadersLegacyPart", true); + e.pipeQueue = ""; + e.writeSecureHeaders(); + expected = `Content-Type: multipart/mixed; boundary="${e.encHeader}";\r\n protected-headers="v1"\r\n` + + `From: ${e.msgCompFields.from}\r\n` + + `To: ${e.msgCompFields.to}\r\n\r\n` + + `--${e.encHeader}\r\n`; + Assert.equal(e.pipeQueue, expected); + + EnigmailPrefs.setPref("protectedHeadersLegacyPart", false); +}); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/enigmail/package/versioning.jsm new/enigmail/package/versioning.jsm --- old/enigmail/package/versioning.jsm 2019-12-11 18:23:50.000000000 +0100 +++ new/enigmail/package/versioning.jsm 2019-12-31 16:19:51.000000000 +0100 @@ -9,10 +9,6 @@ const EXPORTED_SYMBOLS = ["EnigmailVersioning"]; - - - - const EnigmailLog = ChromeUtils.import("chrome://enigmail/content/modules/log.jsm").EnigmailLog; const EnigmailExecution = ChromeUtils.import("chrome://enigmail/content/modules/execution.jsm").EnigmailExecution; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/enigmail/ui/content/enigmailAttachmentsDialog.js new/enigmail/ui/content/enigmailAttachmentsDialog.js --- old/enigmail/ui/content/enigmailAttachmentsDialog.js 2019-12-11 18:23:50.000000000 +0100 +++ new/enigmail/ui/content/enigmailAttachmentsDialog.js 2019-12-31 16:19:51.000000000 +0100 @@ -106,9 +106,9 @@ } if (optionSel) { if (optionSel.value !== "") { - gArguments[ENIG_RESULT].selected = optionSel.value; + gArguments[ENIG_RESULT].selected = Number(optionSel.value); if (gArguments[ENIG_INPUT].restrictedScenario === false) { - EnigSetPref("encryptAttachments", optionSel.value); + EnigSetPref("encryptAttachments", Number(optionSel.value)); } return true; } else { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/enigmail/ui/content/enigmailMessengerOverlay.js new/enigmail/ui/content/enigmailMessengerOverlay.js --- old/enigmail/ui/content/enigmailMessengerOverlay.js 2019-12-11 18:23:50.000000000 +0100 +++ new/enigmail/ui/content/enigmailMessengerOverlay.js 2019-12-31 16:19:51.000000000 +0100 @@ -10,7 +10,7 @@ /* global ReloadMessage: false, gDBView: false, gSignatureStatus: false, gEncryptionStatus: false, showMessageReadSecurityInfo: false */ /* global gFolderDisplay: false, messenger: false, currentAttachments: false, msgWindow: false, PanelUI: false */ /* global currentHeaderData: false, gViewAllHeaders: false, gExpandedHeaderList: false, goDoCommand: false, HandleSelectedAttachments: false */ -/* global statusFeedback: false, displayAttachmentsForExpandedView: false, gMessageListeners: false, gExpandedHeaderView */ +/* global statusFeedback: false, displayAttachmentsForExpandedView: false, gMessageListeners: false, gExpandedHeaderView: false, gSignedUINode: false */ var EnigmailCompat = ChromeUtils.import("chrome://enigmail/content/modules/compat.jsm").EnigmailCompat; var EnigmailCore = ChromeUtils.import("chrome://enigmail/content/modules/core.jsm").EnigmailCore; @@ -733,6 +733,8 @@ }; } + this.hideNonStandardMimeStructure(mimeMsg); + // Copy selected headers Enigmail.msg.savedHeaders = { autocrypt: [] @@ -921,6 +923,27 @@ return -1; }, + hideNonStandardMimeStructure: function(mimeMsg) { + if (Enigmail.msg.securityInfo === null) return; + if (Enigmail.msg.securityInfo.encryptedMimePart === "1") return; + if (!((Enigmail.msg.securityInfo.statusFlags & EnigmailConstants.PGP_MIME_SIGNED) !== 0 && + (Enigmail.msg.securityInfo.statusFlags & EnigmailConstants.DECRYPTION_OKAY) === 0)) return; + + if (Enigmail.msg.securityInfo.encryptedMimePart === "1.1" && + mimeMsg.subParts.length === 2 && + mimeMsg.headers.contentType.type === "multipart/mixed" && + mimeMsg.subParts[1].headers.contentType.type === "text/plain") return; + + // Hide status bar for PGP/MIME signed messages, if we found a non-standard message structure + Enigmail.msg.securityInfo.statusFlags = 0; + Enigmail.msg.securityInfo.statusLine = ""; + Enigmail.msg.securityInfo.statusInfo = ""; + Enigmail.hdrView.displayStatusBar(); + let signedUINode = Enigmail.hdrView.getSignedIcon(); + signedUINode.removeAttribute("signed"); + signedUINode.collapsed = true; + }, + // display header about reparing buggy MS-Exchange messages buggyMailHeader: function() { let uriStr = EnigmailURIs.createMessageURI(this.getCurrentMsgUrl(), diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/enigmail/ui/content/enigmailMsgComposeOverlay.js new/enigmail/ui/content/enigmailMsgComposeOverlay.js --- old/enigmail/ui/content/enigmailMsgComposeOverlay.js 2019-12-11 18:23:50.000000000 +0100 +++ new/enigmail/ui/content/enigmailMsgComposeOverlay.js 2019-12-31 16:19:51.000000000 +0100 @@ -4051,15 +4051,15 @@ // dialog cancelled return null; } - else if (resultObj.selected == 1) { + else if (resultObj.selected === 1) { // encrypt attachments inlineEncAttach = true; } - else if (resultObj.selected == 2) { + else if (resultObj.selected === 2) { // send as PGP/MIME sendFlags |= EnigmailConstants.SEND_PGP_MIME; } - else if (resultObj.selected == 3) { + else if (resultObj.selected === 3) { // cancel the encryption/signing for the whole message sendFlags &= ~EnigmailConstants.SEND_ENCRYPTED; sendFlags &= ~EnigmailConstants.SEND_SIGNED; @@ -4076,7 +4076,8 @@ } return { - inlineEncAttach: inlineEncAttach + inlineEncAttach: inlineEncAttach, + sendFlags: sendFlags }; }, @@ -4264,6 +4265,7 @@ let attach = this.appendInlineAttachments(sendFlags); if (!attach) return false; let inlineEncAttach = attach.inlineEncAttach; + sendFlags = attach.sendFlags; var usingPGPMime = (sendFlags & EnigmailConstants.SEND_PGP_MIME) && (sendFlags & (ENCRYPT | SIGN)); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/enigmail/ui/content/enigmailMsgHdrViewOverlay.js new/enigmail/ui/content/enigmailMsgHdrViewOverlay.js --- old/enigmail/ui/content/enigmailMsgHdrViewOverlay.js 2019-12-11 18:23:50.000000000 +0100 +++ new/enigmail/ui/content/enigmailMsgHdrViewOverlay.js 2019-12-31 16:19:51.000000000 +0100 @@ -255,9 +255,9 @@ statusFlags |= EnigmailConstants.DECRYPTION_INCOMPLETE; } - if (!(statusFlags & EnigmailConstants.PGP_MIME_ENCRYPTED)) { - encMimePartNumber = ""; - } + // if (!(statusFlags & EnigmailConstants.PGP_MIME_ENCRYPTED)) { + // encMimePartNumber = ""; + // } if (!EnigmailPrefs.getPref("displayPartiallySigned")) { if ((statusFlags & (EnigmailConstants.PARTIALLY_PGP)) && @@ -727,10 +727,6 @@ if (EnigmailCompat.isPostbox()) { let doc = document.getElementById("messagepane").contentDocument; - let sigNodes = doc.getElementsByClassName("hdr-signed-button"); - if (sigNodes && sigNodes.length > 0) { - signedUINode = sigNodes[0]; - } let encNodes = doc.getElementsByClassName("hdr-encrypted-button"); if (encNodes && encNodes.length > 0) { @@ -741,10 +737,11 @@ } else { sMimeContainer = gSMIMEContainer; - signedUINode = gSignedUINode; encryptedUINode = gEncryptedUINode; } + signedUINode = this.getSignedIcon(); + /* eslint block-scoped-var: 0*/ if (typeof(sMimeContainer) !== "object") return; @@ -822,8 +819,24 @@ } }, - dispSecurityContext: function() { + getSignedIcon: function() { + let signedUINode = null; + + if (EnigmailCompat.isPostbox()) { + let doc = document.getElementById("messagepane").contentDocument; + let sigNodes = doc.getElementsByClassName("hdr-signed-button"); + if (sigNodes && sigNodes.length > 0) { + signedUINode = sigNodes[0]; + } + } + else { + signedUINode = gSignedUINode; + } + return signedUINode; + }, + + dispSecurityContext: function() { try { if (Enigmail.msg.securityInfo) { if ((Enigmail.msg.securityInfo.statusFlags & EnigmailConstants.NODATA) && diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/enigmail/ui/content/enigmailPrivacyOverlay.js new/enigmail/ui/content/enigmailPrivacyOverlay.js --- old/enigmail/ui/content/enigmailPrivacyOverlay.js 2019-12-11 18:23:50.000000000 +0100 +++ new/enigmail/ui/content/enigmailPrivacyOverlay.js 2019-12-31 16:19:51.000000000 +0100 @@ -26,7 +26,7 @@ document.getElementById("enigmail_juniorMode").value = jm; let prefWindow = document.getElementById("MailPreferences"); - if (this._windowResized === 0 && prefWindow.currentPane.id === "panePrivacy") { + if (this._windowResized === 0 && ("currentPane" in prefWindow) && prefWindow.currentPane.id === "panePrivacy") { window.resizeBy(0, prefGroup.clientHeight); } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/enigmail/ui/content/pref-enigmail.js new/enigmail/ui/content/pref-enigmail.js --- old/enigmail/ui/content/pref-enigmail.js 2019-12-11 18:23:50.000000000 +0100 +++ new/enigmail/ui/content/pref-enigmail.js 2019-12-31 16:19:51.000000000 +0100 @@ -133,7 +133,6 @@ displayPrefs(false, true, false); document.getElementById("enigmail_agentPath").value = EnigConvertToUnicode(EnigGetPref("agentPath"), "utf-8"); - document.getElementById("protectedSubjectText").value = EnigConvertToUnicode(EnigGetPref("protectedSubjectText"), "utf-8"); var maxIdle = -1; if (!gEnigmailSvc) { @@ -412,12 +411,9 @@ document.getElementById("enigmail_agentPath").value = ""; } var newAgentPath = document.getElementById("enigmail_agentPath").value; - var protectedSubjectText = document.getElementById("protectedSubjectText").value; displayPrefs(false, false, true); EnigSetPref("agentPath", EnigConvertFromUnicode(newAgentPath, "utf-8")); - EnigSetPref("protectedSubjectText", EnigConvertFromUnicode(protectedSubjectText, "utf-8")); - if (gMimePartsElement && (gMimePartsElement.checked != gMimePartsValue)) { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/enigmail/ui/content/pref-enigmail.xul new/enigmail/ui/content/pref-enigmail.xul --- old/enigmail/ui/content/pref-enigmail.xul 2019-12-11 18:23:50.000000000 +0100 +++ new/enigmail/ui/content/pref-enigmail.xul 2019-12-31 16:19:51.000000000 +0100 @@ -127,10 +127,6 @@ <description>&enigmail.protectHeadersPrefs.tooltip;</description> </tooltip> - <tooltip id="protectedSubjectText.tooltip"> - <description>&enigmail.protectedSubjectText.tooltip;</description> - </tooltip> - <tooltip id="resetRememberedValues.tooltip"> <description>&enigmail.resetRememberedValues.tooltip;</description> </tooltip> @@ -376,27 +372,9 @@ <description class="enigmailPrefsTitle">&enigmail.moreOptions.label;</description> <spacer flex="0"/> - <vbox class="enigmailGroupbox"> - <vbox> - <checkbox id="enigmail_protectHeaders" - label="&enigmail.protectHeadersPrefs.label;" - tooltip="protectHeaders.tooltip"/> - - <hbox> - <hbox align="center"> - <label control="protectedSubjectText" - tooltip="protectedSubjectText.tooltip" - value="&enigmail.protectedSubjectText.label;"/> - </hbox> - <hbox> - <textbox id="protectedSubjectText" - tooltip="protectedSubjectText.tooltip" - placeholder="&enigmail.protectedSubjectText.placeholder;" - size="40"/> - </hbox> - </hbox> - </vbox> - </vbox> + <checkbox id="enigmail_protectHeaders" + label="&enigmail.protectHeadersPrefs.label;" + tooltip="protectHeaders.tooltip"/> <checkbox id="enigmail_wrapHtmlBeforeSend" label="&enigmail.wrapHtmlBeforeSend.label;" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/enigmail/ui/content/setupWizard2.js new/enigmail/ui/content/setupWizard2.js --- old/enigmail/ui/content/setupWizard2.js 2019-12-11 18:23:50.000000000 +0100 +++ new/enigmail/ui/content/setupWizard2.js 2019-12-31 16:19:51.000000000 +0100 @@ -82,6 +82,8 @@ Promise.all([installPromise, pepPromise, setupPromise]).then(r => { displayExistingEmails(); + }).catch(err => { + displayExistingEmails(); }); } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/enigmail/ui/content/updateGnuPG.html new/enigmail/ui/content/updateGnuPG.html --- old/enigmail/ui/content/updateGnuPG.html 2019-12-11 18:23:50.000000000 +0100 +++ new/enigmail/ui/content/updateGnuPG.html 2019-12-31 16:19:51.000000000 +0100 @@ -62,21 +62,29 @@ <div id="progressBox" style="max-width: 100%; width: 440px" class="hidden"> <p> - Downloading GnuPG + <span txtId="updateGnuPG.downloadingGnuPG"></span> </p> <progress id="downloadProgress" style="width: 100%;" max="100" value="0"/> <p/> <div id="installProgressBox" class="hidden"> <p id="installLabel"> - Launching the GnuPG installer + <span txtId="updateGnuPG.startingInstaller"></span> </p> <progress id="installProgress" style="max-width: 100%; width: 440px; :indeterminate;" max="100"/> </div> </div> + <div id="convertKeyring" class="hidden"> + <p> + <span txtId="updateGnuPG.importingKeys"></span> + <span id="importingKeysProgress" class="enigmailWheel enigmailSpinning"></span> + <span id="importingKeysDone" class="enigmailOkSign hidden"></span> + </p> + </div> + <div id="updateComplete" class="hidden"> <p> - GnuPG has been updated successfully. + <span txtId="updateGnuPG.success"></span> </p> </div> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/enigmail/ui/content/updateGnuPG.js new/enigmail/ui/content/updateGnuPG.js --- old/enigmail/ui/content/updateGnuPG.js 2019-12-11 18:23:50.000000000 +0100 +++ new/enigmail/ui/content/updateGnuPG.js 2019-12-31 16:19:51.000000000 +0100 @@ -12,7 +12,6 @@ const EnigmailLocalizeHtml = ChromeUtils.import("chrome://enigmail/content/modules/localizeHtml.jsm").EnigmailLocalizeHtml; const EnigmailGnuPGUpdate = ChromeUtils.import("chrome://enigmail/content/modules/gnupgUpdate.jsm").EnigmailGnuPGUpdate; -const InstallGnuPG = ChromeUtils.import("chrome://enigmail/content/modules/installGnuPG.jsm").InstallGnuPG; const EnigmailDialog = ChromeUtils.import("chrome://enigmail/content/modules/dialog.jsm").EnigmailDialog; const EnigmailLocale = ChromeUtils.import("chrome://enigmail/content/modules/locale.jsm").EnigmailLocale; const EnigmailPrefs = ChromeUtils.import("chrome://enigmail/content/modules/prefs.jsm").EnigmailPrefs; @@ -65,7 +64,9 @@ btnInstallGnupg.setAttribute("disabled", true); progressBox.classList.remove("hidden"); - InstallGnuPG.startInstaller({ + let requireKeysUpgrade = EnigmailGnuPGUpdate.requireKeyRingUpgrade(); + + EnigmailGnuPGUpdate.performUpdate({ onStart: function(reqObj) { gDownoadObj = reqObj; }, @@ -121,7 +122,7 @@ installProgressBox.classList.add("hidden"); }, - onLoaded: function() { + onLoaded: async function() { installProgress.setAttribute("value", 100); let origPath = EnigmailPrefs.getPref("agentPath"); @@ -134,6 +135,13 @@ this.returnToDownload(); EnigmailDialog.alert(window, EnigmailLocale.getString("setupWizard.installFailed")); } else { + if (requireKeysUpgrade) { + document.getElementById("convertKeyring").classList.remove("hidden"); + EnigmailGnuPGUpdate.triggerKeyringConversion(); + document.getElementById("importingKeysProgress").classList.add("hidden"); + document.getElementById("importingKeysDone").classList.remove("hidden"); + } + document.getElementById("updateComplete").classList.remove("hidden"); } } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/enigmail/ui/locale/en-US/enigmail.properties new/enigmail/ui/locale/en-US/enigmail.properties --- old/enigmail/ui/locale/en-US/enigmail.properties 2019-12-11 18:23:50.000000000 +0100 +++ new/enigmail/ui/locale/en-US/enigmail.properties 2019-12-31 16:19:51.000000000 +0100 @@ -224,7 +224,7 @@ signOffWithReason=Signing: OFF (%S) reasonEnabledByDefault=enabled by default reasonManuallyForced=manually forced -reasonByRecipientRules=forced by per-recipient rules +reasonByRecipientRules=forced by Autocrypt or per-recipient rules reasonByAutoEncryption=forced by auto encryption reasonByConflict=due to conflict in per-recipient rules reasonByEncryptionMode=due to encryption mode @@ -832,6 +832,10 @@ updateGnuPG.installUpdate=Install Update updateGnuPG.noMoreUpdates=Don't check for future updates updateGnuPG.checkUpdate=Check for GnuPG Updates +updateGnuPG.success=GnuPG has been updated successfully. +updateGnuPG.importingKeys=Importing keys in GnuPG. You might be asked for the passphrase(s) of your key(s). +updateGnuPG.downloadingGnuPG=Downloading GnuPG +updateGnuPG.startingInstaller=Starting the installer. Please follow the steps of the GnuPG installer wizard. #strings in keyserver.jsm diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/enigmail/ui/skin/common/enigmail-html.css new/enigmail/ui/skin/common/enigmail-html.css --- old/enigmail/ui/skin/common/enigmail-html.css 2019-12-11 18:23:50.000000000 +0100 +++ new/enigmail/ui/skin/common/enigmail-html.css 2019-12-31 16:19:51.000000000 +0100 @@ -98,4 +98,33 @@ .hidden { visibility: collapse; max-height: 0px; -} \ No newline at end of file +} + +/* a spinning wheel circle */ +.enigmailWheel { + content: url("chrome://enigmail/skin/spinning-wheel.png"); + max-width: 100%; + max-height: 100%; +} + +.enigmailSpinning { + animation: enigmailDoRotation 1.4s infinite linear; + transform: translateZ(0); +} + +@keyframes enigmailDoRotation { + 0% { + transform: rotate(0deg); + } + + 100% { + transform: rotate(360deg); + } +} + +.enigmailOkSign { + content: url("chrome://enigmail/skin/ok-sign.svg"); + padding-left: 5px; + padding-right: 5px; + height: 1.3em; +}
