Diff of the two buildlogs: -- --- b1/build.log 2025-07-14 08:54:22.218260981 +0000 +++ b2/build.log 2025-07-14 09:01:18.221037264 +0000 @@ -1,6 +1,6 @@ I: pbuilder: network access will be disabled during build -I: Current time: Sun Jul 13 20:48:33 -12 2025 -I: pbuilder-time-stamp: 1752482913 +I: Current time: Mon Aug 17 05:17:23 +14 2026 +I: pbuilder-time-stamp: 1786893443 I: Building the build Environment I: extracting base tarball [/var/cache/pbuilder/unstable-reproducible-base.tgz] I: copying local configuration @@ -35,52 +35,84 @@ dpkg-source: info: applying 0012-Relax-version-constraint-on-sqlite3-gem.patch I: Not using root during the build. I: Installing the build-deps -I: user script /srv/workspace/pbuilder/854234/tmp/hooks/D02_print_environment starting +I: user script /srv/workspace/pbuilder/1626286/tmp/hooks/D01_modify_environment starting +debug: Running on codethink03-arm64. +I: Changing host+domainname to test build reproducibility +I: Adding a custom variable just for the fun of it... +I: Changing /bin/sh to bash +'/bin/sh' -> '/bin/bash' +lrwxrwxrwx 1 root root 9 Aug 16 15:17 /bin/sh -> /bin/bash +I: Setting pbuilder2's login shell to /bin/bash +I: Setting pbuilder2's GECOS to second user,second room,second work-phone,second home-phone,second other +I: user script /srv/workspace/pbuilder/1626286/tmp/hooks/D01_modify_environment finished +I: user script /srv/workspace/pbuilder/1626286/tmp/hooks/D02_print_environment starting I: set - BUILDDIR='/build/reproducible-path' - BUILDUSERGECOS='first user,first room,first work-phone,first home-phone,first other' - BUILDUSERNAME='pbuilder1' - BUILD_ARCH='arm64' - DEBIAN_FRONTEND='noninteractive' + BASH=/bin/sh + BASHOPTS=checkwinsize:cmdhist:complete_fullquote:extquote:force_fignore:globasciiranges:globskipdots:hostcomplete:interactive_comments:patsub_replacement:progcomp:promptvars:sourcepath + BASH_ALIASES=() + BASH_ARGC=() + BASH_ARGV=() + BASH_CMDS=() + BASH_LINENO=([0]="12" [1]="0") + BASH_LOADABLES_PATH=/usr/local/lib/bash:/usr/lib/bash:/opt/local/lib/bash:/usr/pkg/lib/bash:/opt/pkg/lib/bash:. + BASH_SOURCE=([0]="/tmp/hooks/D02_print_environment" [1]="/tmp/hooks/D02_print_environment") + BASH_VERSINFO=([0]="5" [1]="2" [2]="37" [3]="1" [4]="release" [5]="aarch64-unknown-linux-gnu") + BASH_VERSION='5.2.37(1)-release' + BUILDDIR=/build/reproducible-path + BUILDUSERGECOS='second user,second room,second work-phone,second home-phone,second other' + BUILDUSERNAME=pbuilder2 + BUILD_ARCH=arm64 + DEBIAN_FRONTEND=noninteractive DEB_BUILD_OPTIONS='buildinfo=+all reproducible=+all parallel=12 ' - DISTRIBUTION='unstable' - HOME='/root' - HOST_ARCH='arm64' + DIRSTACK=() + DISTRIBUTION=unstable + EUID=0 + FUNCNAME=([0]="Echo" [1]="main") + GROUPS=() + HOME=/root + HOSTNAME=i-capture-the-hostname + HOSTTYPE=aarch64 + HOST_ARCH=arm64 IFS=' ' - INVOCATION_ID='9ec964d01d53483e8ec565a97f387f6c' - LANG='C' - LANGUAGE='en_US:en' - LC_ALL='C' - MAIL='/var/mail/root' - OPTIND='1' - PATH='/usr/sbin:/usr/bin:/sbin:/bin:/usr/games' - PBCURRENTCOMMANDLINEOPERATION='build' - PBUILDER_OPERATION='build' - PBUILDER_PKGDATADIR='/usr/share/pbuilder' - PBUILDER_PKGLIBDIR='/usr/lib/pbuilder' - PBUILDER_SYSCONFDIR='/etc' - PPID='854234' - PS1='# ' - PS2='> ' + INVOCATION_ID=7628475564bf430a827bb3b8ab165e24 + LANG=C + LANGUAGE=nl_BE:nl + LC_ALL=C + MACHTYPE=aarch64-unknown-linux-gnu + MAIL=/var/mail/root + OPTERR=1 + OPTIND=1 + OSTYPE=linux-gnu + PATH=/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/i/capture/the/path + PBCURRENTCOMMANDLINEOPERATION=build + PBUILDER_OPERATION=build + PBUILDER_PKGDATADIR=/usr/share/pbuilder + PBUILDER_PKGLIBDIR=/usr/lib/pbuilder + PBUILDER_SYSCONFDIR=/etc + PIPESTATUS=([0]="0") + POSIXLY_CORRECT=y + PPID=1626286 PS4='+ ' - PWD='/' - SHELL='/bin/bash' - SHLVL='2' - SUDO_COMMAND='/usr/bin/timeout -k 18.1h 18h /usr/bin/ionice -c 3 /usr/bin/nice /usr/sbin/pbuilder --build --configfile /srv/reproducible-results/rbuild-debian/r-b-build.Rks95F4e/pbuilderrc_95Ru --distribution unstable --hookdir /etc/pbuilder/first-build-hooks --debbuildopts -b --basetgz /var/cache/pbuilder/unstable-reproducible-base.tgz --buildresult /srv/reproducible-results/rbuild-debian/r-b-build.Rks95F4e/b1 --logfile b1/build.log schleuder_5.0.1-2.dsc' - SUDO_GID='109' - SUDO_UID='104' - SUDO_USER='jenkins' - TERM='unknown' - TZ='/usr/share/zoneinfo/Etc/GMT+12' - USER='root' - _='/usr/bin/systemd-run' - http_proxy='http://192.168.101.4:3128' + PWD=/ + SHELL=/bin/bash + SHELLOPTS=braceexpand:errexit:hashall:interactive-comments:posix + SHLVL=3 + SUDO_COMMAND='/usr/bin/timeout -k 24.1h 24h /usr/bin/ionice -c 3 /usr/bin/nice -n 11 /usr/bin/unshare --uts -- /usr/sbin/pbuilder --build --configfile /srv/reproducible-results/rbuild-debian/r-b-build.Rks95F4e/pbuilderrc_cNeE --distribution unstable --hookdir /etc/pbuilder/rebuild-hooks --debbuildopts -b --basetgz /var/cache/pbuilder/unstable-reproducible-base.tgz --buildresult /srv/reproducible-results/rbuild-debian/r-b-build.Rks95F4e/b2 --logfile b2/build.log schleuder_5.0.1-2.dsc' + SUDO_GID=109 + SUDO_UID=104 + SUDO_USER=jenkins + TERM=unknown + TZ=/usr/share/zoneinfo/Etc/GMT-14 + UID=0 + USER=root + _='I: set' + http_proxy=http://192.168.101.4:3128 I: uname -a - Linux codethink04-arm64 6.1.0-37-cloud-arm64 #1 SMP Debian 6.1.140-1 (2025-05-22) aarch64 GNU/Linux + Linux i-capture-the-hostname 6.1.0-37-cloud-arm64 #1 SMP Debian 6.1.140-1 (2025-05-22) aarch64 GNU/Linux I: ls -l /bin - lrwxrwxrwx 1 root root 7 May 12 19:25 /bin -> usr/bin -I: user script /srv/workspace/pbuilder/854234/tmp/hooks/D02_print_environment finished + lrwxrwxrwx 1 root root 7 May 12 2025 /bin -> usr/bin +I: user script /srv/workspace/pbuilder/1626286/tmp/hooks/D02_print_environment finished -> Attempting to satisfy build-dependencies -> Creating pbuilder-satisfydepends-dummy package Package: pbuilder-satisfydepends-dummy @@ -343,7 +375,7 @@ Get: 185 http://deb.debian.org/debian unstable/main arm64 ruby-thor all 1.3.2-2.1 [49.4 kB] Get: 186 http://deb.debian.org/debian unstable/main arm64 ruby-typhoeus all 1.4.0-6 [36.5 kB] Get: 187 http://deb.debian.org/debian unstable/main arm64 thin arm64 1.8.2+git20250216.de6b618-1 [60.9 kB] -Fetched 52.2 MB in 0s (177 MB/s) +Fetched 52.2 MB in 0s (167 MB/s) Preconfiguring packages ... Selecting previously unselected package libpython3.13-minimal:arm64. (Reading database ... (Reading database ... 5% (Reading database ... 10% (Reading database ... 15% (Reading database ... 20% (Reading database ... 25% (Reading database ... 30% (Reading database ... 35% (Reading database ... 40% (Reading database ... 45% (Reading database ... 50% (Reading database ... 55% (Reading database ... 60% (Reading database ... 65% (Reading database ... 70% (Reading database ... 75% (Reading database ... 80% (Reading database ... 85% (Reading database ... 90% (Reading database ... 95% (Reading database ... 100% (Reading database ... 19963 files and directories currently installed.) @@ -958,8 +990,8 @@ Setting up tzdata (2025b-4) ... Current default time zone: 'Etc/UTC' -Local time is now: Mon Jul 14 08:49:02 UTC 2025. -Universal Time is now: Mon Jul 14 08:49:02 UTC 2025. +Local time is now: Sun Aug 16 15:17:55 UTC 2026. +Universal Time is now: Sun Aug 16 15:17:55 UTC 2026. Run 'dpkg-reconfigure tzdata' if you wish to change it. Setting up ruby-minitest (5.25.4-3) ... @@ -1128,7 +1160,11 @@ Building tag database... -> Finished parsing the build-deps I: Building the package -I: Running cd /build/reproducible-path/schleuder-5.0.1/ && env PATH="/usr/sbin:/usr/bin:/sbin:/bin:/usr/games" HOME="/nonexistent/first-build" dpkg-buildpackage -us -uc -b && env PATH="/usr/sbin:/usr/bin:/sbin:/bin:/usr/games" HOME="/nonexistent/first-build" dpkg-genchanges -S > ../schleuder_5.0.1-2_source.changes +I: user script /srv/workspace/pbuilder/1626286/tmp/hooks/A99_set_merged_usr starting +Not re-configuring usrmerge for unstable +I: user script /srv/workspace/pbuilder/1626286/tmp/hooks/A99_set_merged_usr finished +hostname: Name or service not known +I: Running cd /build/reproducible-path/schleuder-5.0.1/ && env PATH="/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/i/capture/the/path" HOME="/nonexistent/second-build" dpkg-buildpackage -us -uc -b && env PATH="/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/i/capture/the/path" HOME="/nonexistent/second-build" dpkg-genchanges -S > ../schleuder_5.0.1-2_source.changes dpkg-buildpackage: info: source package schleuder dpkg-buildpackage: info: source version 5.0.1-2 dpkg-buildpackage: info: source distribution unstable @@ -1163,7 +1199,7 @@ dh_ruby --build dh_auto_test -O--buildsystem=ruby dh_ruby --test - rm -fr -- /tmp/dh-xdg-rundir-j7zXu2xP + rm -fr -- /tmp/dh-xdg-rundir-q35n92m3 create-stamp debian/debhelper-build-stamp dh_testroot -O--buildsystem=ruby dh_prep -O--buildsystem=ruby @@ -1310,736 +1346,736 @@ RUBYLIB=/build/reproducible-path/schleuder-5.0.1/debian/schleuder/usr/lib/ruby/vendor_ruby:. GEM_PATH=/build/reproducible-path/schleuder-5.0.1/debian/schleuder/usr/share/rubygems-integration/all:/build/reproducible-path/schleuder-5.0.1/debian/.debhelper/generated/_source/home/.local/share/gem/ruby/3.3.0:/var/lib/gems/3.3.0:/usr/local/lib/ruby/gems/3.3.0:/usr/lib/ruby/gems/3.3.0:/usr/lib/aarch64-linux-gnu/ruby/gems/3.3.0:/usr/share/rubygems-integration/3.3.0:/usr/share/rubygems-integration/all:/usr/lib/aarch64-linux-gnu/rubygems-integration/3.3.0 ruby3.3 -S rake --rakelibdir /gem2deb-nonexistent -f debian/ruby-tests.rake /usr/bin/ruby3.3 -S rake -f debian/Rakefile db:create -Created database '/tmp/schleuder-9a0d38f53c4b2f6daf1845c49c67ffcf/test.sqlite3' +Created database '/tmp/schleuder-467e4cfcd286d7d5f170cb08056f1619/test.sqlite3' /usr/bin/ruby3.3 -S rake -f debian/Rakefile db:schema:load /usr/bin/ruby3.3 -I/usr/share/rubygems-integration/all/gems/rspec-support-3.13.1/lib:/usr/share/rubygems-integration/all/gems/rspec-core-3.13.0/lib /usr/share/rubygems-integration/all/gems/rspec-core-3.13.0/exe/rspec --format documentation -Randomized with seed 22439 +Randomized with seed 44657 + +user sends a plain text message + from thunderbird being signed-inline + from thunderbird being signed-mime + from thunderbird being plain + +cli + #check_keys + warns about file system permissions if it was run as root + #commands + exits with a status code of 1 in case the command is not implemented + #refresh_keys + reports errors from refreshing keys + warns about file system permissions if it was run as root + updates keys from the keyserver for only a specific list + updates keys from the keyserver + +running filters + .strip_html_from_alternative! + does NOT strip HTML-part from multipart/alternative-message that does NOT contain ascii-armored PGP-data + strips HTML-part from multipart/alternative-message that contains ascii-armored PGP-data + .max_message_size + bounces to big mails + .key_auto_import_from_autocrypt_header + successfully validates a signature, whose previously unknown key is in the autocrypt-header + .key_auto_import_from_attachments + successfully validates a signature, whose previously unknown key is attached + successfully validates a signature, whose previously unknown key is attached, from an encrypted+signed message + .fix_exchange_messages! + accepts an invalid pgp/mime Exchange message + accepts a valid plain-text message + +Schleuder::Filters + .key_auto_import_from_attachments + imports key and reports new key + imports key and reports no change + imports key and reports the change + only imports the one key that matches the sender address if keydata contains more than one key + does not import key if attachment has a different content-type than "application/pgp-keys" + does not import key if sender address does not match key UID + .fix_exchange_messages + works with a text/plain message + fixes pgp/mime-messages that were mangled by Exchange + .strip_html_from_alternative_if_keywords_present + strips related-part from encapsulated multipart/alternative-part that contains keywords + strips HTML-part from multipart/alternative-message that contains keywords + does not choke on nor change a message without Content-Type-header + does NOT strip HTML-part from multipart/alternative-message that does NOT contain keywords + .strip_html_from_alternative + does NOT strip HTML-part from multipart/alternative-message that does NOT contain ascii-armored PGP-data + strips HTML-part from multipart/alternative-message that contains ascii-armored PGP-data + does not choke on nor change a message without Content-Type-header + .key_auto_import_from_autocrypt_header + imports key and reports the change + imports key and reports no change + imports key and reports new key + only imports the one key that matches the sender address if keydata contains more than one key + does not import key if sender address does not match key UID, regardless of Autocrypt addr attribute + .receive_from_subscribed_emailaddresses_only + rejects a message with a non-subscribed address as From-header if list.receive_from_subscribed_emailaddresses_only is set + does not reject a message with a subscribed address as From-header if list.receive_from_subscribed_emailaddresses_only is set + does not reject a message with a non-subscribed address as From-header if list.receive_from_subscribed_emailaddresses_only is not set + does not reject a message with a subscribed address as From-header with different letter case if list.receive_from_subscribed_emailaddresses_only is set Schleuder::KeyFetcher #fetch - reports the returned body content when receiving an unexpected HTTP status from the server - reports an error if both, vks_keyserver and sks_keyserver, are blank + reports an error from trying to import non-key-material fetches one key by email from SKS if vks_keyserver is blank - fetches one key from a good URL fetches one key by fingerprint from SKS if vks_keyserver is blank - reports an error from trying to import non-key-material - fetches one key by email from VKS if vks_keyserver is set reports an error from trying to fetch an URL that doesn't exist fetches one key by fingerprint from VKS if vks_keyserver is set + reports an error if both, vks_keyserver and sks_keyserver, are blank + reports the returned body content when receiving an unexpected HTTP status from the server + fetches one key by email from VKS if vks_keyserver is set + fetches one key from a good URL -Schleuder::LoggerNotifications - notifies admins of multiple text-messages - notifies admins encryptedly if their key is usable - notifies admins of multiple text-messages and the original message - notifies admins in the clear if their key is unusable - includes a List-Id header in notification mails sent to admins - notifies admins of simple text-message - return path - sets superadmin - sets default superadmin - -Schleuder::Conf - reads ERB code in config files - -status - returns status code 200 - -Schleuder::Filters::Runner - is expected to respond to #run - #run - stops on a StandardError and returns error even with bounces_drop_all - stops on a StandardError and returns error - stops on a StandardError and returns error even on headers match - runs the filters - loading filters - loads custom filters from filters_dir and sorts them in, ignores filter not following convention - loads filters from built-in filters_dir sorts them - loads custom filters from filters_dir even with non-2-digit priority - loads custom filters from filters_dir and sorts them in with missing dir +GPGME::Key + .valid_fingerprint? + valid fingerprints + accepts 59C71FB38AEE22E091C78259D06350440F759BD3 as a valid fingerprint + accepts 59C71FB38AEE22E091C78259D0635044 as a valid fingerprint + accepts 0x59C71FB38AEE22E091C78259D06350440F759BD3 as a valid fingerprint + accepts 0x59C71FB38AEE22E091C78259D0635044 as a valid fingerprint + invalid fingerprints + rejects Z9C71FB38AEE22E091C78259D0635044 as an invalid fingerprint + rejects 59C71FB38AEE22E091C78259D06350440F759BD as an invalid fingerprint + rejects 0x59C71FB38AEE22E091C78259D06350440F759B as an invalid fingerprint + rejects 59C71FB38AEE22E091C78259D06350440F759BD3A as an invalid fingerprint + rejects Z9C71FB38AEE22E091C78259D0635044 as an invalid fingerprint + rejects Z9C71FB38AEE22E091C78259D06350440F759BD3 as an invalid fingerprint + #summary + displays the expected attributes for a key that's not capable of encryption + displays the expected attributes for a revoked key + displays the expected attributes for an expired key + displays the expected basic attributes + displays the expected attributes for an expiring key + #minimal + returns a minimal key Mail::Message - does not misclassify bounce spec/fixtures/mails/bounces/tt_1234241665.txt.eml as normal message - does not misclassify bounce spec/fixtures/mails/bounces/tt_bounce_22.txt.eml as normal message - does not misclassify bounce spec/fixtures/mails/bounces/tt_1234177688.txt.eml as normal message - does not misclassify bounce spec/fixtures/mails/bounces/tt_bounce_10.txt.eml as normal message does not misclassify bounce spec/fixtures/mails/bounces/tt_bounce_23.txt.eml as normal message + does not misclassify bounce spec/fixtures/mails/bounces/undeliverable_gmail.txt.eml as normal message + does not misclassify bounce spec/fixtures/mails/bounces/tt_bounce_14.txt.eml as normal message + does not misclassify bounce spec/fixtures/mails/bounces/tt_bounce_01.txt.eml as normal message + does not misclassify bounce spec/fixtures/mails/bounces/tt_bounce_16.txt.eml as normal message + recognizes a sudo message with 'Auto-Submitted'-header NOT as automated message doesn't change the order of mime-parts - adds list#internal_footer as last mime-part without changing its value - does not misclassify normal message spec/fixtures/mails/not_bounces/Bug_948981-_marked_as_pending_in_schleuder.eml as bounce - recognizes a Jenkins message with 'Auto-Submitted'-header NOT as automated message - does not misclassify bounce spec/fixtures/mails/bounces/tt_bounce_04.txt.eml as normal message - does not misclassify bounce spec/fixtures/mails/bounces/tt_bounce_19.txt.eml as normal message + does not misclassify bounce spec/fixtures/mails/bounces/tt_bounce_21.txt.eml as normal message + recognizes bounce message subject using the bounce_email gem + does not misclassify bounce spec/fixtures/mails/bounces/tt_bounce_05.txt.eml as normal message adds list#public_footer as last mime-part without changing its value - does not misclassify bounce spec/fixtures/mails/bounces/tt_1234175799.txt.eml as normal message - recognizes a message sent to listname-bounce@hostname as automated message - does not misclassify bounce spec/fixtures/mails/bounces/tt_1234211929.txt.eml as normal message - does not misclassify bounce spec/fixtures/mails/bounces/tt_1234211357.txt.eml as normal message does not misclassify bounce spec/fixtures/mails/bounces/tt_bounce_06.txt.eml as normal message - does not misclassify bounce spec/fixtures/mails/bounces/tt_1234211931.txt.eml as normal message - does not misclassify bounce spec/fixtures/mails/bounces/tt_bounce_20.txt.eml as normal message + does not misclassify bounce spec/fixtures/mails/bounces/tt_bounce_08.txt.eml as normal message + does not misclassify bounce spec/fixtures/mails/bounces/malformed_bounce_01.txt.eml as normal message + does not misclassify bounce spec/fixtures/mails/bounces/tt_bounce_19.txt.eml as normal message + does not misclassify bounce spec/fixtures/mails/bounces/tt_1234211929.txt.eml as normal message + does not misclassify bounce spec/fixtures/mails/bounces/tt_bounce_15.txt.eml as normal message + does not misclassify bounce spec/fixtures/mails/bounces/tt_1234285532.txt.eml as normal message + does not misclassify bounce spec/fixtures/mails/bounces/tt_bounce_24.txt.eml as normal message does not misclassify normal message spec/fixtures/mails/not_bounces/tt_1234210666.txt.eml as bounce - does not misclassify bounce spec/fixtures/mails/bounces/tt_bounce_18.txt.eml as normal message - does not misclassify bounce spec/fixtures/mails/bounces/tt_1234211932.txt.eml as normal message + does not misclassify bounce spec/fixtures/mails/bounces/tt_1234210655.txt.eml as normal message + recognizes a message sent to listname-bounce@hostname as automated message + does not misclassify bounce spec/fixtures/mails/bounces/tt_bounce_09.txt.eml as normal message + does not misclassify bounce spec/fixtures/mails/bounces/tt_bounce_20.txt.eml as normal message + recognizes a cron message with 'Auto-Submitted'-header NOT as automated message does not misclassify bounce spec/fixtures/mails/bounces/tt_bounce_25.txt.eml as normal message - does not misclassify normal message spec/fixtures/mails/not_bounces/Bug_948982-_marked_as_pending_in_schleuder.eml as bounce - does not misclassify bounce spec/fixtures/mails/bounces/undeliverable_gmail.txt.eml as normal message - does not misclassify bounce spec/fixtures/mails/bounces/tt_bounce_16.txt.eml as normal message - does not misclassify bounce spec/fixtures/mails/bounces/tt_bounce_05.txt.eml as normal message - does not misclassify bounce spec/fixtures/mails/bounces/unknown_code_bounce_01.txt.eml as normal message - does not misclassify bounce spec/fixtures/mails/bounces/tt_1234285532.txt.eml as normal message does not misclassify bounce spec/fixtures/mails/bounces/tt_bounce_13.txt.eml as normal message - does not misclassify bounce spec/fixtures/mails/bounces/tt_bounce_11.txt.eml as normal message - does not misclassify bounce spec/fixtures/mails/bounces/tt_bounce_14.txt.eml as normal message - does not misclassify normal message spec/fixtures/mails/not_bounces/Bug_948980-_marked_as_pending_in_schleuder.eml as bounce - does not misclassify bounce spec/fixtures/mails/bounces/tt_bounce_01.txt.eml as normal message + does not misclassify bounce spec/fixtures/mails/bounces/tt_bounce_17.txt.eml as normal message does not misclassify bounce spec/fixtures/mails/bounces/tt_bounce_12_soft.txt.eml as normal message - does not misclassify normal message spec/fixtures/mails/not_bounces/tt_1234241664.txt.eml as bounce + does not misclassify bounce spec/fixtures/mails/bounces/tt_1234211357.txt.eml as normal message + does not misclassify bounce spec/fixtures/mails/bounces/tt_1234211932.txt.eml as normal message + does not misclassify bounce spec/fixtures/mails/bounces/tt_bounce_22.txt.eml as normal message + does not misclassify bounce spec/fixtures/mails/bounces/tt_bounce_02.txt.eml as normal message + verifies an encapsulated (signed-then-encrypted) message + does not misclassify bounce spec/fixtures/mails/bounces/tt_bounce_10.txt.eml as normal message + does not misclassify normal message spec/fixtures/mails/not_bounces/Bug_948981-_marked_as_pending_in_schleuder.eml as bounce + adds list#internal_footer as last mime-part without changing its value + does not misclassify bounce spec/fixtures/mails/bounces/tt_1234241665.txt.eml as normal message + does not misclassify bounce spec/fixtures/mails/bounces/tt_bounce_11.txt.eml as normal message + does not misclassify bounce spec/fixtures/mails/bounces/tt_1234177688.txt.eml as normal message + recognizes a Jenkins message with 'Auto-Submitted'-header NOT as automated message does not misclassify bounce spec/fixtures/mails/bounces/tt_bounce_07.txt.eml as normal message does not misclassify bounce spec/fixtures/mails/bounces/tt_bounce_03.txt.eml as normal message - does not misclassify bounce spec/fixtures/mails/bounces/tt_bounce_15.txt.eml as normal message - does not misclassify bounce spec/fixtures/mails/bounces/tt_bounce_21.txt.eml as normal message - recognizes a sudo message with 'Auto-Submitted'-header NOT as automated message - does not misclassify normal message spec/fixtures/mails/not_bounces/tt_1234211024.txt.eml as bounce - does not misclassify bounce spec/fixtures/mails/bounces/tt_bounce_24.txt.eml as normal message - verifies an encapsulated (signed-then-encrypted) message - does not misclassify bounce spec/fixtures/mails/bounces/tt_bounce_09.txt.eml as normal message - does not misclassify bounce spec/fixtures/mails/bounces/malformed_bounce_01.txt.eml as normal message - does not misclassify bounce spec/fixtures/mails/bounces/tt_1234210655.txt.eml as normal message - recognizes bounce message subject using the bounce_email gem - does not misclassify bounce spec/fixtures/mails/bounces/tt_bounce_02.txt.eml as normal message - recognizes a cron message with 'Auto-Submitted'-header NOT as automated message - does not misclassify bounce spec/fixtures/mails/bounces/tt_bounce_17.txt.eml as normal message - does not misclassify bounce spec/fixtures/mails/bounces/tt_bounce_08.txt.eml as normal message + does not misclassify bounce spec/fixtures/mails/bounces/tt_bounce_04.txt.eml as normal message does not misclassify bounce spec/fixtures/mails/bounces/tt_1234285668.txt.eml as normal message - #add_subject_prefix! - adds a configured subject prefix - does not add a subject prefix if already present - adds a configured subject prefix without subject + does not misclassify bounce spec/fixtures/mails/bounces/tt_1234175799.txt.eml as normal message + does not misclassify bounce spec/fixtures/mails/bounces/tt_1234211931.txt.eml as normal message + does not misclassify normal message spec/fixtures/mails/not_bounces/tt_1234241664.txt.eml as bounce + does not misclassify normal message spec/fixtures/mails/not_bounces/tt_1234211024.txt.eml as bounce + does not misclassify bounce spec/fixtures/mails/bounces/unknown_code_bounce_01.txt.eml as normal message + does not misclassify normal message spec/fixtures/mails/not_bounces/Bug_948980-_marked_as_pending_in_schleuder.eml as bounce + does not misclassify bounce spec/fixtures/mails/bounces/tt_bounce_18.txt.eml as normal message + does not misclassify normal message spec/fixtures/mails/not_bounces/Bug_948982-_marked_as_pending_in_schleuder.eml as bounce .keywords - drops empty lines in keyword arguments parsing - stops looking for keywords when the first line is already email content - drops multiple empty lines between keywords and content splits lines into words and downcases them in keyword arguments - stops looking for keywords when already the first line is blank followed by email content reads multiple lines as keyword arguments - stops looking for keywords when a blank line that is not followed by another keyword is met + stops looking for keywords when already the first line is blank followed by email content ignores empty lines before keywords takes the whole rest of the body as keyword argument if blank lines are present + stops looking for keywords when the first line is already email content + drops multiple empty lines between keywords and content + drops empty lines in keyword arguments parsing + stops looking for keywords when a blank line that is not followed by another keyword is met makes a pseudo header - with empty value - that multiline are getting wrapped - that a line with less than 76 gets wrapped - with key / value - that is getting wrapped - that single multiline are getting indented without value + that multiline are getting wrapped + with empty value that a multiline with less than 76 get wrapped correctly on the first line and the following lines + that is getting wrapped that a multiline with less than 76 get wrapped correctly on the first line + with key / value + that single multiline are getting indented + that a line with less than 76 gets wrapped + #add_subject_prefix! + adds a configured subject prefix + adds a configured subject prefix without subject + does not add a subject prefix if already present + +Schleuder::KeywordHandlers::Base + stores mail, list and arguments as instance variables + provides methods to register keywords + +user sends an encrypted message + from thunderbird being encrypted+signed-inline + from thunderbird being encrypted+signed-mime + from thunderbird being encrypted-inline + from thunderbird being encrypted-mime + +Errors + ::KeywordAdminOnly shows sensible string in response to to_s() + ::KeyAdduidFailed shows sensible string in response to to_s() + ::TooManyKeys shows sensible string in response to to_s() + ::MessageTooBig shows sensible string in response to to_s() + ::MessageSenderNotSubscribed shows sensible string in response to to_s() + ::MessageNotFromAdmin shows sensible string in response to to_s() + ::MessageUnsigned shows sensible string in response to to_s() + ::DecryptionFailed shows sensible string in response to to_s() + ::KeyGenerationFailed shows sensible string in response to to_s() + ::MessageEmpty shows sensible string in response to to_s() + ::ListdirProblem shows sensible string in response to to_s() + ::MessageUnencrypted shows sensible string in response to to_s() + ::ListNotFound shows sensible string in response to to_s() + ::LoadingListSettingsFailed shows sensible string in response to to_s() + ::MessageUnauthenticated shows sensible string in response to to_s() + +GPGME::Ctx + #find_keys with bracketed email-address + #normalize_key_identifier with some string + #normalize_key_identifier with URL + #keyimport + #normalize_key_identifier with un-prefixed fingerprint + #find_keys without argument + #keyimport with unusable data + #find_keys with correctly marked narrower sub-string + #gpgcli returns correct data types + #find_keys with prefixed fingerprint + #normalize_key_identifier with bracketed email-address + #normalize_key_identifier with prefixed fingerprint + #find_keys with un-marked sub-string + #find_keys with un-bracketed email-address + #find_keys with un-bracketed wrong email-address + #find_keys with bracketed wrong email-address + #find_keys with un-prefixed fingerprint + #find_keys with correctly marked sub-string + #normalize_key_identifier with un-bracketed email-address user sends keyword - x-fetch-key with unknown email-address - x-get-logfile with error-level sends empty logfile - x-resend-cc-encrypted-only to 3 addresses with one missing keys - x-unset-fingerprint with other email-address as admin - x-set-fingerprint with other email-address and valid fingerprint as non-admin + x-set-fingerprint with not-subscribed email-address and valid fingerprint + x-resend-encrypted-only with matching key + x-unset-fingerprint with not-subscribed email-address + x-list-key with correctly prefixed email-sub-string x-fetch-key without arguments + x-set-fingerprint with own email-address and valid, spaces-separated fingerprint + x-set-fingerprint without email-address and with valid fingerprint + x-unsubscribe without argument + x-resend with iso-8859-1 body + x-resend-cc-encrypted-only with expired key + x-subscribe without attributes x-list-key with prefixed fingerprint + x-set-fingerprint without argument + x-set-fingerprint with own email-address and valid fingerprint + x-fetch-key with URL + x-unset-fingerprint with own email-address as admin but without force + x-subscribe without arguments x-resend-encrypted-only with two matching keys, one of which is expired - x-resend with invalid recipient - x-resend-cc-encrypted-only to 2 addresses with one missing keys - x-fetch-key with invalid input - x-unsubscribe - x-get-version with delivery disabled - x-get-key with valid argument - x-resend-cc to 2 addresses with one missing keys x-fetch-key with invalid URL - x-resend-unencrypted with matching key - x-attach-listkey from Thunderbird with protected headers - x-list-subscriptions with matching argument - x-resend with admin-notification and admin has delivery disabled - x-subscribe with invalid arguments - x-set-fingerprint without email-address and with valid fingerprint - x-unset-fingerprint with not-subscribed email-address - x-unset-fingerprint with other email-address as non-admin x-sign-this with attachments - x-set-fingerprint without email-address and with invalid fingerprint - x-subscribe without attributes, but with spaces-separated fingerprint - x-set-fingerprint with email-address but without fingerprint - x-resend-encrypted-only with matching key - x-fetch-key with fingerprint - x-resend-cc-encrypted-only with expired key - x-subscribe without attributes - x-subscribe with attributes (last one 'true') and spaces-separated fingerprint - x-list-keys with one argument - x-resend-cc-encrypted-only to 2 addresses with missing keys - x-unsubscribe doesn't unsubscribe last admin - x-fetch-key with unknown fingerprint - x-list-subscriptions without arguments but with admin-notification - x-list-keys without arguments + x-fetch-key with unknown email-address + x-list-subscriptions with matching argument + x-set-fingerprint with other email-address and valid fingerprint + x-unset-fingerprint with other email-address as admin x-list-keys with two arguments - x-resend-cc to 2 addresses with missing keys + x-fetch-key with email address x-resend with admin-notification - x-resend does not include internal_footer - x-resend with iso-8859-1 body - x-fetch-key with fingerprint of unchanged key - x-resend-cc-encrypted-only to 2 addresses with matching keys - resend returns an error about wrong arguments if email content got into the arguments due to no blank line - x-get-key with empty argument - x-subscribe with attributes (first one 'false') and spaces-separated fingerprint - x-subscribe with attributes and spaces-separated fingerprint - x-get-version - x-resend-cc-encrypted-only with matching key - x-attach-listkey - x-subscribe without arguments - x-set-fingerprint with email-address but without valid fingerprint - x-set-fingerprint with not-subscribed email-address and valid fingerprint - x-set-fingerprint with own email-address and valid, spaces-separated fingerprint x-resend - x-unset-fingerprint with own email-address as admin and force - x-list-subscriptions with non-matching argument x-subscribe with attributes - x-set-fingerprint with own email-address and valid fingerprint - x-set-fingerprint without argument - x-list-key with correctly prefixed email-sub-string - x-resend-encrypted-only with expired key - x-list-key with arbitrary email-sub-string - x-get-key with invalid argument - x-set-fingerprint with other email-address and valid fingerprint - x-fetch-key with URL - x-unsubscribe without argument + x-attach-listkey + x-resend-cc-encrypted-only to 2 addresses with missing keys + x-unset-fingerprint with own email-address as admin and force + x-sign-this with inline text + x-resend-cc to 2 addresses with one missing keys + x-list-keys with one argument x-unsubscribe with invalid argument + x-get-key with valid argument + x-get-logfile with error-level sends empty logfile + x-set-fingerprint with other email-address and valid fingerprint as non-admin + x-resend with invalid recipient + x-fetch-key with unknown fingerprint + x-resend-cc-encrypted-only to 2 addresses with one missing keys + x-list-subscriptions without arguments but with admin-notification + x-list-subscriptions without arguments + x-resend-encrypted-only with expired key + x-get-key with empty argument + x-unset-fingerprint with other email-address as non-admin + x-list-keys without arguments x-get-logfile with debug level sends non-empty logfile + x-subscribe with attributes (last one 'true') and spaces-separated fingerprint + x-list-key with arbitrary email-sub-string + x-unsubscribe does not parse keywords once the mail body started - x-list-subscriptions without arguments - x-unset-fingerprint without argument - x-sign-this with inline text x-resend with utf-8 body and umlauts - x-unset-fingerprint with own email-address as admin but without force - x-fetch-key with email address + x-set-fingerprint without email-address and with invalid fingerprint + x-subscribe with attributes (first one 'false') and spaces-separated fingerprint + x-resend does not include internal_footer x-subscribe with one attribute and spaces-separated fingerprint + x-fetch-key with fingerprint + x-get-version + x-subscribe with attributes and spaces-separated fingerprint + resend returns an error about wrong arguments if email content got into the arguments due to no blank line + x-attach-listkey from Thunderbird with protected headers + x-set-fingerprint with email-address but without fingerprint + x-unsubscribe doesn't unsubscribe last admin + x-subscribe with invalid arguments + x-resend-unencrypted with matching key + x-fetch-key with invalid input + x-subscribe without attributes, but with spaces-separated fingerprint + x-resend-cc-encrypted-only to 2 addresses with matching keys + x-list-subscriptions with non-matching argument + x-get-version with delivery disabled + x-fetch-key with fingerprint of unchanged key + x-get-key with invalid argument + x-set-fingerprint with email-address but without valid fingerprint + x-resend-cc-encrypted-only with matching key + x-resend with admin-notification and admin has delivery disabled + x-unset-fingerprint without argument + x-resend-cc to 2 addresses with missing keys + x-resend-cc-encrypted-only to 3 addresses with one missing keys with broken utf8 in key x-get-key with valid argument - x-list-keys works x-add-key with inline key-material - -a bounce message is received - from bounce example - -lists via api - correctly finds a list by email-address that starts with a number - creates a list - shows a list - -subscription via api - unsubscribes members - subscribes an user and unsets delivery flag - subscribes new member to a list - doesn't subscribe new member without authentication - subscribes an admin user with a truthy value - subscribes an admin user - -running filters - .strip_html_from_alternative! - strips HTML-part from multipart/alternative-message that contains ascii-armored PGP-data - does NOT strip HTML-part from multipart/alternative-message that does NOT contain ascii-armored PGP-data - .fix_exchange_messages! - accepts an invalid pgp/mime Exchange message - accepts a valid plain-text message - .max_message_size - bounces to big mails - .key_auto_import_from_attachments - successfully validates a signature, whose previously unknown key is attached - successfully validates a signature, whose previously unknown key is attached, from an encrypted+signed message - .key_auto_import_from_autocrypt_header - successfully validates a signature, whose previously unknown key is in the autocrypt-header - -Schleuder::KeywordHandlers::KeyManagement - registers keywords - .delete_key - deletes multiple keys that each distinctly match one argument - deletes no key if the argument does not match - returns a string as error message if input message has no content - sends error message if no argument is given - deletes a key that distinctly matches the argument - .add_key - imports from attached quoted-printable binary key-material (as produced by Mutt 2.0.5) - ignores arguments - ignores body if an ascii-armored attachment is present - imports a key from attached acsii-armored material - updates a key - imports from attached quoted-printable ascii-armored key-material - imports a key from inline ascii-armored material - rejects garbage - imports a key from attached explicitly base64-encoded binary material - imports a key from attached quoted-printable binary material - imports from an inline mix of ascii-armored key and non-key material - imports a key from attached binary material (without specified encoding) - imports from attached quoted-printable key-material (as produced by Thunderbird 115) - -user sends emails with different charsets - works with japanese - works with simple_jis - works with japanese_shift_jis - works with japanese_iso_2022 - works with signed_utf8 - works with thunderbird-multi-alt-html - works with japanese_attachment_long_name - works with simple_jpiso2022 - works with ks_c_5601-1987 - works with simple_latin1 - works with simple_utf8 - works with japanese_attachment - -KeywordHandlersRunner - rejects X-LIST-NAME with mismatching argument - does not require mandatory keywords if no keywords are present - loads additional keyword handlers - stores a keyword that was registered - notifies admins - returns an error message if keyword is configured as admin-only - rejects unknown keywords - requires X-LIST-NAME + x-list-keys works keys via api + import + does list keys with authentication + doesn't import keys without authentication + returns json with key details about imported keys + returns json with empty array in case of useless input + export + does list keys with authentication + doesn't export keys without authentication check - does check keys with authorization doesn't check keys without authentication + does check keys with authorization list doesn't list keys without authentication does list keys with authentication delete - does delete keys with authentication doesn't delete keys without authentication - export - doesn't export keys without authentication - does list keys with authentication + does delete keys with authentication a key with broken utf8 in uid does add key already imported does delete key does list this key does get key - import - does list keys with authentication - returns json with key details about imported keys - doesn't import keys without authentication - returns json with empty array in case of useless input + +Schleuder::KeywordHandlers::KeyManagement + registers keywords + .delete_key + returns a string as error message if input message has no content + deletes no key if the argument does not match + deletes multiple keys that each distinctly match one argument + sends error message if no argument is given + deletes a key that distinctly matches the argument + .add_key + ignores body if an ascii-armored attachment is present + rejects garbage + updates a key + imports from an inline mix of ascii-armored key and non-key material + imports a key from attached quoted-printable binary material + imports a key from attached explicitly base64-encoded binary material + ignores arguments + imports a key from inline ascii-armored material + imports from attached quoted-printable key-material (as produced by Thunderbird 115) + imports a key from attached acsii-armored material + imports from attached quoted-printable binary key-material (as produced by Mutt 2.0.5) + imports from attached quoted-printable ascii-armored key-material + imports a key from attached binary material (without specified encoding) + +protected subject + is not leaked + is included in mime-headers + works with mutt protected headers + is included as mime-part in body + don't block request-messages + recognizes keywords in mails with protected headers and empty subject Schleuder::ListBuilder - returns an error-message if given an invalid email-address creates a listdir for the list - returns an error-message if given an invalid email-address with a space - creates a new, valid list subscribes the adminaddress and imports the adminkey - subscribes the adminaddress and respects the given adminfingerprint - creates a list-key with all required UIDs + returns an error-message if given an invalid email-address + creates a new, valid list subscribes the adminaddress and ignores the adminfingerprint if an adminkey was given + returns an error-message if given an invalid email-address with a space + creates a list-key with all required UIDs + subscribes the adminaddress and respects the given adminfingerprint -Schleuder::Http - uses a proxy if one is configured +Schleuder::KeywordHandlers::SignThis + responds to the configured keyword method + signs attachment (even if a body is present) + signs body content if no attachments are present -Schleuder::Filters - .strip_html_from_alternative - does not choke on nor change a message without Content-Type-header - does NOT strip HTML-part from multipart/alternative-message that does NOT contain ascii-armored PGP-data - strips HTML-part from multipart/alternative-message that contains ascii-armored PGP-data - .strip_html_from_alternative_if_keywords_present - does NOT strip HTML-part from multipart/alternative-message that does NOT contain keywords - strips related-part from encapsulated multipart/alternative-part that contains keywords - does not choke on nor change a message without Content-Type-header - strips HTML-part from multipart/alternative-message that contains keywords - .fix_exchange_messages - fixes pgp/mime-messages that were mangled by Exchange - works with a text/plain message - .receive_from_subscribed_emailaddresses_only - does not reject a message with a subscribed address as From-header with different letter case if list.receive_from_subscribed_emailaddresses_only is set - rejects a message with a non-subscribed address as From-header if list.receive_from_subscribed_emailaddresses_only is set - does not reject a message with a non-subscribed address as From-header if list.receive_from_subscribed_emailaddresses_only is not set - does not reject a message with a subscribed address as From-header if list.receive_from_subscribed_emailaddresses_only is set - .key_auto_import_from_attachments - does not import key if attachment has a different content-type than "application/pgp-keys" - does not import key if sender address does not match key UID - imports key and reports the change - imports key and reports new key - only imports the one key that matches the sender address if keydata contains more than one key - imports key and reports no change - .key_auto_import_from_autocrypt_header - does not import key if sender address does not match key UID, regardless of Autocrypt addr attribute - imports key and reports new key - imports key and reports no change - imports key and reports the change - only imports the one key that matches the sender address if keydata contains more than one key +a bounce message is received + from bounce example -cli - #refresh_keys - warns about file system permissions if it was run as root - updates keys from the keyserver for only a specific list - reports errors from refreshing keys - updates keys from the keyserver - #commands - exits with a status code of 1 in case the command is not implemented - #check_keys - warns about file system permissions if it was run as root +version + does not return the current schleuder version if not authorized + returns the current schleuder version if authorized -authorization via api - blocks un-authorized access to other URLs - allows authorized access - allows un-authorized access to /status.json +Schleuder::LoggerNotifications + notifies admins encryptedly if their key is usable + includes a List-Id header in notification mails sent to admins + notifies admins in the clear if their key is unusable + notifies admins of simple text-message + notifies admins of multiple text-messages and the original message + notifies admins of multiple text-messages + return path + sets default superadmin + sets superadmin -user sends a plain text message - from thunderbird being signed-mime - from thunderbird being plain - from thunderbird being signed-inline +user sends emails with different charsets + works with simple_jis + works with signed_utf8 + works with japanese_shift_jis + works with japanese_attachment_long_name + works with japanese_iso_2022 + works with japanese + works with thunderbird-multi-alt-html + works with simple_utf8 + works with simple_latin1 + works with japanese_attachment + works with ks_c_5601-1987 + works with simple_jpiso2022 -Errors - ::MessageNotFromAdmin shows sensible string in response to to_s() - ::ListdirProblem shows sensible string in response to to_s() - ::ListNotFound shows sensible string in response to to_s() - ::MessageTooBig shows sensible string in response to to_s() - ::TooManyKeys shows sensible string in response to to_s() - ::MessageUnauthenticated shows sensible string in response to to_s() - ::MessageEmpty shows sensible string in response to to_s() - ::LoadingListSettingsFailed shows sensible string in response to to_s() - ::MessageSenderNotSubscribed shows sensible string in response to to_s() - ::KeyGenerationFailed shows sensible string in response to to_s() - ::MessageUnsigned shows sensible string in response to to_s() - ::DecryptionFailed shows sensible string in response to to_s() - ::KeyAdduidFailed shows sensible string in response to to_s() - ::KeywordAdminOnly shows sensible string in response to to_s() - ::MessageUnencrypted shows sensible string in response to to_s() +subscription via api + subscribes new member to a list + subscribes an admin user with a truthy value + subscribes an user and unsets delivery flag + subscribes an admin user + doesn't subscribe new member without authentication + unsubscribes members + +Schleuder::Runner + after keyword parsing + falls back to default charset per RFC if none is set + falling back works also with non-ascii content + #run + does not throw an error on emails that contain other gpg keywords + injects pseudoheaders appropriately into a signed multipart/alternative-message (thunderbird+enigmail-1.9) + does not throw an error on emails with an attached pgp key as application/octet-stream + does not throw an error on encrypted but unsigned emails that contain a forwarded encrypted email + delivers a signed error message if a subscription's key is not available on a encrypted-only list + delivers a signed error message if a subscription's key is expired on a encrypted-only list + does not throw an error on emails with broken utf-8 + injects pseudoheaders appropriately into an unsigned thunderbird-multipart/alternative-message + does not throw an error on emails with large first mime-part + with a plain text message + delivers the incoming message + does keep the Message-Id as configured + contains the Autocrypt header if include_autocrypt_header is set to true + doesn't leak the Message-Id as configured + does not include the public_footer + contains the specified pseudoheaders in the correct order + contains the list headers if include_list_headers is set to true + includes the internal_footer + does not contain the Autocrypt header if include_autocrypt_header is set to false + doesn't have unwanted headerlines from the original message + has the correct headerlines + does not deliver content if send_encrypted_only is set to true + contains the open pgp header if include_openpgp_header is set to true + Quoted-Printable encoding + is handled properly in encrypted emails + is handled properly in cleartext emails + is handled properly in encrypted+signed emails + with bounces_drop_all set to false + bounces and notifies admins about bounces when bounces_notify_admins is set to true + bounces and does not notify admins if bounces_notify_admins is set to false + with bounces_drop_all set to true + drops all bounces when bounces_notify_admins is set to false + notifies admins about bounces when bounces_notify_admins is set to true + mails not encrypted to the list key + handles a mail containing PGP-garbage and returns DecryptionFailed error + handles a mail which was encrypted to a passphrase and returns DecryptionFailed error + handles a mail which was encrypted to an absent key and returns DecryptionFailed error + +lists via api + correctly finds a list by email-address that starts with a number + shows a list + creates a list + +Schleuder::Subscription + is invalid when list_id is blank + is invalid when email does not contain an @ + is invalid if admin is blank + removes whitespaces and 0x from the fingerprint + is expected to respond to #list_id + is valid when fingerprint is empty + is invalid when fingerprint contains invalid characters + has a valid factory + downcases all letters of an email address + is invalid if delivery_enabled is blank + is invalid when email is nil + formats email address when email begins with a space + is expected to respond to #admin + is expected to respond to #email + is expected to respond to #fingerprint + is invalid if the given email is already subscribed for the list + is invalid if admin is nil + is invalid if delivery_enabled is nil + is expected to respond to #delivery_enabled + is invalid when email is blank + is valid when fingerprint is nil + #fingerprint + transforms the fingerprint to upper case Schleuder::List - is invalid if receive_signed_only is blank - is invalid when fingerprint is nil - is invalid if keywords_admin_notify contains special characters + is expected to respond to #bounces_drop_all + is expected to respond to #receive_signed_only + is invalid if receive_signed_only is nil + is invalid if set_reply_to_to_sender is nil + is invalid if send_encrypted_only is nil + is expected to respond to #bounces_notify_admins + is invalid if subject_prefix_in contains a linebreak + is invalid if keep_msgid is blank is invalid if receive_encrypted_only is blank - is expected to respond to #logfiles_to_keep + is expected to respond to #receive_authenticated_only + is invalid if deliver_selfsent is blank + is expected to respond to #include_list_headers is expected to respond to #subscriptions - is invalid if include_list_headers is nil - is expected to respond to #bounces_drop_all - is invalid if subject_prefix contains a linebreak - is invalid when email does not contain an @ - is invalid if keep_msgid is nil - is valid if subject_prefix is nil - is invalid if bounces_drop_all is blank is expected to respond to #forward_all_incoming_to_admins - is expected to respond to #include_openpgp_header - is invalid if receive_signed_only is nil - is expected to respond to #fingerprint - is valid if subject_prefix_out is nil - is expected to respond to #subject_prefix_in - is expected to respond to #set_reply_to_to_sender - is invalid if openpgp_header_preference is foobar - is invalid if receive_admin_only is blank + is valid if headers_to_meta does not contain special characters + is expected to respond to #receive_encrypted_only + is invalid if bounces_drop_on_headers contains special characters + is invalid when fingerprint is nil + is invalid if receive_encrypted_only is nil + is invalid when email is nil + is invalid if keywords_admin_notify contains special characters is invalid if receive_from_subscribed_emailaddresses_only is blank + is expected to respond to #bounces_drop_on_headers + is invalid if language is jp + is invalid if include_openpgp_header is nil + is invalid if include_list_headers is nil + is invalid if keep_msgid is nil + is invalid if subject_prefix contains a linebreak + is expected to respond to #keywords_admin_only + is invalid when fingerprint is blank + is invalid when email contains a space + is expected to respond to #subject_prefix is expected to respond to #key_auto_import_from_email + is expected to respond to #receive_admin_only + is expected to respond to #receive_from_subscribed_emailaddresses_only + is invalid if headers_to_meta contains special characters + is invalid if receive_admin_only is blank is invalid if forward_all_incoming_to_admins is blank + is invalid if receive_admin_only is nil + has a valid factory + is invalid if max_message_size_kb is 0 + is valid if keywords_admin_only does not contain special characters + is invalid if public_footer includes a non-printable character + is invalid if receive_authenticated_only is blank + is expected to respond to #fingerprint + is expected to respond to #internal_footer + is invalid when email is blank + is valid if subject_prefix_in is nil is invalid if include_list_headers is blank + is expected to respond to #set_reply_to_to_sender + is invalid when email does not contain an @ + is expected to respond to #send_encrypted_only + is valid if subject_prefix is nil + is expected to respond to #keep_msgid + is expected to respond to #subject_prefix_out is expected to respond to #language + is invalid if bounces_notify_admins is nil + is invalid if keywords_admin_only contains special characters + is expected to respond to #headers_to_meta + is invalid if forward_all_incoming_to_admins is nil + is invalid if internal_footer includes a non-printable character + is expected to respond to #munge_from + is invalid if openpgp_header_preference is foobar + is invalid if set_reply_to_to_sender is blank + is invalid if log_level is foobar + is expected to respond to #subject_prefix_in + is invalid if munge_from is nil is invalid if include_list_headers is blank - is expected to respond to #email is invalid if include_list_headers is nil - is expected to respond to #munge_from - is invalid if send_encrypted_only is nil + is invalid if receive_signed_only is blank + is invalid if bounces_notify_admins is blank is expected to respond to #log_level - is expected to respond to #receive_admin_only - is invalid if bounces_notify_admins is nil - is invalid if receive_admin_only is nil - is valid if headers_to_meta does not contain special characters is expected to respond to #max_message_size_kb + is invalid if logfiles_to_keep is 0 is expected to respond to #deliver_selfsent + is invalid if receive_from_subscribed_emailaddresses_only is nil + is valid if keywords_admin_notify does not contain special characters + is invalid if send_encrypted_only is blank is invalid if receive_authenticated_only is nil - is invalid if bounces_drop_on_headers contains special characters - is invalid if receive_authenticated_only is blank - is invalid if include_openpgp_header is blank - is invalid if log_level is foobar - is expected to respond to #internal_footer - is valid if keywords_admin_only does not contain special characters - is invalid if language is jp - is invalid if munge_from is blank is invalid if bounces_drop_all is nil - is invalid if subject_prefix_out contains a linebreak - is expected to respond to #receive_encrypted_only - is invalid if subject_prefix_in contains a linebreak is expected to respond to #public_footer - is invalid if send_encrypted_only is blank - is expected to respond to #receive_authenticated_only - is expected to respond to #subject_prefix - is expected to respond to #keywords_admin_notify - is expected to respond to #send_encrypted_only + is invalid if include_openpgp_header is blank + is invalid if deliver_selfsent is nil is expected to respond to #openpgp_header_preference - is valid if keywords_admin_notify does not contain special characters - is invalid if set_reply_to_to_sender is blank - is invalid if logfiles_to_keep is 0 - is invalid if set_reply_to_to_sender is nil - is expected to respond to #bounces_notify_admins - is invalid if bounces_notify_admins is blank - is invalid if forward_all_incoming_to_admins is nil - exports the key with the given fingerprint - is expected to respond to #receive_from_subscribed_emailaddresses_only - is expected to respond to #bounces_drop_on_headers - is invalid if deliver_selfsent is blank - is invalid if receive_from_subscribed_emailaddresses_only is nil - is invalid if headers_to_meta contains special characters - is invalid if keep_msgid is blank - is invalid if internal_footer includes a non-printable character - is expected to respond to #receive_signed_only - is invalid if munge_from is nil - is valid if subject_prefix_in is nil - is expected to respond to #subject_prefix_out - is invalid if public_footer includes a non-printable character - is expected to respond to #include_list_headers - is expected to respond to #headers_to_meta - is invalid if max_message_size_kb is 0 - is invalid if receive_encrypted_only is nil - is expected to respond to #keep_msgid - is invalid when email contains a space - is invalid if keywords_admin_only contains special characters - is invalid when fingerprint is blank + is invalid if munge_from is blank + is expected to respond to #keywords_admin_notify + is valid if subject_prefix_out is nil + is invalid if subject_prefix_out contains a linebreak + is expected to respond to #email is invalid when fingerprint contains invalid characters - is invalid when email is blank - is invalid when email is nil - has a valid factory - is invalid if deliver_selfsent is nil - is invalid if include_openpgp_header is nil - is expected to respond to #keywords_admin_only - .configurable_attributes - returns an array that contains the configurable attributes - does not contain the attributes email and fingerprint + is invalid if bounces_drop_all is blank + is expected to respond to #logfiles_to_keep + is expected to respond to #include_openpgp_header + exports the key with the given fingerprint + #refresh_keys + does not import non-self-signatures + reports errors from refreshing keys + updates keys from the keyserver + #key + returns the key with the fingerprint of the list #logger calls the ListLogger - #secret_key - returns the secret key with the fingerprint of the list - #fingerprint - removes whitespaces and 0x from the fingerprint - transforms the fingerprint to upper case - #owner_address - adds the owner keyword to the email address - #send_to_subscriptions - sends the message only to subscribers with usable keys if send_encrypted_only is true, and a notification to the other subscribers - sends the message only to subscribers with available keys if send_encrypted_only is true, and a notification to the other subscribers - sends the message to all subscribers, in the clear if one's key is unusable, if send_encrypted_only is false - sends the message to all subscribers - sends the message to all subscribers including the sender, if deliver_selfsent is true and the mail is correctly signed - sends the message to all subscribers including the sender, if deliver_selfsent is false but the mail is not correctly signed - sends the message to all subscribers but not the sender, if deliver_selfsent is false and the mail is correctly signed - sends the message to subscribers if deliver_selfsent is set to false + #logfile + returns the logfile path + #fetch_keys + fetches one key by fingerprint + fetches one key by URL + does not import non-self-signatures + fetches one key by email address #munge_from - sets from to munged version when enabled does not munge from address when disabled + sets from to munged version when enabled is disabled by default - .by_recipient - returns the list for a given address - #delete_key - returns false if no key with the fingerprint was found - deletes the key with the given fingerprint - #sendkey_address - adds the sendkey keyword to the email address #key_minimal_base64_encoded does not return the key with the fingerprint in an Autocrypt-compatible format if the argument given does not correspond to a key returns the key with the fingerprint of the list if no argument is given in an Autocrypt-compatible format - #to_s - returns the email + #sendkey_address + adds the sendkey keyword to the email address + send_list_key_to_subscriptions + sends its key to all subscriptions + .configurable_attributes + does not contain the attributes email and fingerprint + returns an array that contains the configurable attributes + #check_keys + adds a message if a key is disabled + adds a message if a key expires in two weeks or less + adds a message if a key is invalid + adds a message if a key is revoked + #export_key + exports the key with the fingerprint of the list if no argument is given #bounce_address adds the bounce keyword to the email address - #gpg - returns an instance of GPGME::Ctx - sets the GNUPGHOME environment variable to the listdir + #owner_address + adds the owner keyword to the email address + .by_recipient + returns the list for a given address #subscribe subscribes and does not set the fingerprint from key material containing no keys - subscribes and does not set the fingerprint from key material containing multiple keys - subscribes and ignores a given fingerprint if key material is given, too subscribes and ignores nil-values for admin and delivery_enabled + subscribes and does not set the fingerprint from key material containing multiple keys subscribes and sets the fingerprint from key material that contains exactly one key - #admins - returns subscriptions of admin users - #check_keys - adds a message if a key is invalid - adds a message if a key expires in two weeks or less - adds a message if a key is revoked - adds a message if a key is disabled - #fetch_keys - fetches one key by email address - does not import non-self-signatures - fetches one key by URL - fetches one key by fingerprint - #key - returns the key with the fingerprint of the list + subscribes and ignores a given fingerprint if key material is given, too + #fingerprint + removes whitespaces and 0x from the fingerprint + transforms the fingerprint to upper case + #keys + returns an array with the keys matching the given bracketed email address + returns an array of keys matching the given fingerprint + it returns an array with the keys of the list + returns an array with the keys matching the given email address + #send_to_subscriptions + sends the message to all subscribers including the sender, if deliver_selfsent is true and the mail is correctly signed + sends the message to all subscribers + sends the message only to subscribers with usable keys if send_encrypted_only is true, and a notification to the other subscribers + sends the message to all subscribers, in the clear if one's key is unusable, if send_encrypted_only is false + sends the message to all subscribers but not the sender, if deliver_selfsent is false and the mail is correctly signed + sends the message to all subscribers including the sender, if deliver_selfsent is false but the mail is not correctly signed + sends the message to subscribers if deliver_selfsent is set to false + sends the message only to subscribers with available keys if send_encrypted_only is true, and a notification to the other subscribers + #secret_key + returns the secret key with the fingerprint of the list #import_key imports a given key - send_list_key_to_subscriptions - sends its key to all subscriptions + #admins + returns subscriptions of admin users + #gpg + sets the GNUPGHOME environment variable to the listdir + returns an instance of GPGME::Ctx + #to_s + returns the email #set_reply_to_to_sender - does not set reply_to mail address when disabled - is disabled by default - sets reply-to to senders from-address when enabled prefers reply_to of the sender over from when existing + sets reply-to to senders from-address when enabled + is disabled by default + does not set reply_to mail address when disabled + #delete_key + deletes the key with the given fingerprint + returns false if no key with the fingerprint was found #request_address adds the request keyword to the email address - #export_key - exports the key with the fingerprint of the list if no argument is given - #logfile - returns the logfile path - #refresh_keys - updates keys from the keyserver - reports errors from refreshing keys - does not import non-self-signatures - #keys - returns an array with the keys matching the given email address - returns an array with the keys matching the given bracketed email address - it returns an array with the keys of the list - returns an array of keys matching the given fingerprint -Schleuder::Runner +Schleuder::Filters::Runner + is expected to respond to #run #run - delivers a signed error message if a subscription's key is expired on a encrypted-only list - does not throw an error on emails with broken utf-8 - does not throw an error on emails with an attached pgp key as application/octet-stream - does not throw an error on encrypted but unsigned emails that contain a forwarded encrypted email - delivers a signed error message if a subscription's key is not available on a encrypted-only list - injects pseudoheaders appropriately into an unsigned thunderbird-multipart/alternative-message - does not throw an error on emails that contain other gpg keywords - does not throw an error on emails with large first mime-part - injects pseudoheaders appropriately into a signed multipart/alternative-message (thunderbird+enigmail-1.9) - mails not encrypted to the list key - handles a mail containing PGP-garbage and returns DecryptionFailed error - handles a mail which was encrypted to an absent key and returns DecryptionFailed error - handles a mail which was encrypted to a passphrase and returns DecryptionFailed error - Quoted-Printable encoding - is handled properly in encrypted+signed emails - is handled properly in encrypted emails - is handled properly in cleartext emails - with bounces_drop_all set to false - bounces and does not notify admins if bounces_notify_admins is set to false - bounces and notifies admins about bounces when bounces_notify_admins is set to true - with bounces_drop_all set to true - notifies admins about bounces when bounces_notify_admins is set to true - drops all bounces when bounces_notify_admins is set to false - with a plain text message - does not include the public_footer - doesn't have unwanted headerlines from the original message - contains the specified pseudoheaders in the correct order - does not deliver content if send_encrypted_only is set to true - includes the internal_footer - delivers the incoming message - does keep the Message-Id as configured - does not contain the Autocrypt header if include_autocrypt_header is set to false - contains the list headers if include_list_headers is set to true - contains the open pgp header if include_openpgp_header is set to true - doesn't leak the Message-Id as configured - has the correct headerlines - contains the Autocrypt header if include_autocrypt_header is set to true - after keyword parsing - falls back to default charset per RFC if none is set - falling back works also with non-ascii content - -Schleuder::KeywordHandlers::SignThis - signs attachment (even if a body is present) - responds to the configured keyword method - signs body content if no attachments are present - -Schleuder::KeywordHandlers::Base - stores mail, list and arguments as instance variables - provides methods to register keywords - -protected subject - don't block request-messages - works with mutt protected headers - is included as mime-part in body - is included in mime-headers - recognizes keywords in mails with protected headers and empty subject - is not leaked + runs the filters + stops on a StandardError and returns error even on headers match + stops on a StandardError and returns error + stops on a StandardError and returns error even with bounces_drop_all + loading filters + loads custom filters from filters_dir and sorts them in with missing dir + loads custom filters from filters_dir and sorts them in, ignores filter not following convention + loads custom filters from filters_dir even with non-2-digit priority + loads filters from built-in filters_dir sorts them someone sends an email to a listname-dash-address - sends the list's key as reply to -sendkey - forwards the message to the admins if extension is -bounce forwards the message to the admins if extension is -bounce and it's a real bounce mail + forwards the message to the admins if extension is -bounce + sends the list's key as reply to -sendkey forwards the message to the admins if extension is -owner -user sends an encrypted message - from thunderbird being encrypted-mime - from thunderbird being encrypted+signed-mime - from thunderbird being encrypted-inline - from thunderbird being encrypted+signed-inline +Schleuder::Conf + reads ERB code in config files -GPGME::Key - .valid_fingerprint? - valid fingerprints - accepts 59C71FB38AEE22E091C78259D06350440F759BD3 as a valid fingerprint - accepts 59C71FB38AEE22E091C78259D0635044 as a valid fingerprint - accepts 0x59C71FB38AEE22E091C78259D06350440F759BD3 as a valid fingerprint - accepts 0x59C71FB38AEE22E091C78259D0635044 as a valid fingerprint - invalid fingerprints - rejects Z9C71FB38AEE22E091C78259D06350440F759BD3 as an invalid fingerprint - rejects 59C71FB38AEE22E091C78259D06350440F759BD3A as an invalid fingerprint - rejects Z9C71FB38AEE22E091C78259D0635044 as an invalid fingerprint - rejects 0x59C71FB38AEE22E091C78259D06350440F759B as an invalid fingerprint - rejects Z9C71FB38AEE22E091C78259D0635044 as an invalid fingerprint - rejects 59C71FB38AEE22E091C78259D06350440F759BD as an invalid fingerprint - #minimal - returns a minimal key - #summary - displays the expected basic attributes - displays the expected attributes for an expiring key - displays the expected attributes for a revoked key - displays the expected attributes for an expired key - displays the expected attributes for a key that's not capable of encryption +Schleuder::Http + uses a proxy if one is configured -Schleuder::Subscription - is invalid if delivery_enabled is nil - formats email address when email begins with a space - is expected to respond to #fingerprint - is expected to respond to #email - is invalid if the given email is already subscribed for the list - is invalid when email is blank - is valid when fingerprint is nil - is expected to respond to #delivery_enabled - is valid when fingerprint is empty - is invalid if delivery_enabled is blank - is invalid if admin is blank - is expected to respond to #admin - is expected to respond to #list_id - is invalid when email is nil - has a valid factory - downcases all letters of an email address - is invalid if admin is nil - is invalid when fingerprint contains invalid characters - removes whitespaces and 0x from the fingerprint - is invalid when list_id is blank - is invalid when email does not contain an @ - #fingerprint - transforms the fingerprint to upper case +authorization via api + allows authorized access + allows un-authorized access to /status.json + blocks un-authorized access to other URLs -version - does not return the current schleuder version if not authorized - returns the current schleuder version if authorized +KeywordHandlersRunner + does not require mandatory keywords if no keywords are present + loads additional keyword handlers + stores a keyword that was registered + notifies admins + rejects unknown keywords + requires X-LIST-NAME + rejects X-LIST-NAME with mismatching argument + returns an error message if keyword is configured as admin-only -GPGME::Ctx - #find_keys with correctly marked sub-string - #keyimport - #find_keys with un-bracketed email-address - #find_keys with prefixed fingerprint - #normalize_key_identifier with un-prefixed fingerprint - #keyimport with unusable data - #normalize_key_identifier with some string - #normalize_key_identifier with URL - #find_keys with un-marked sub-string - #normalize_key_identifier with prefixed fingerprint - #gpgcli returns correct data types - #normalize_key_identifier with un-bracketed email-address - #find_keys with bracketed email-address - #find_keys with bracketed wrong email-address - #find_keys without argument - #find_keys with correctly marked narrower sub-string - #normalize_key_identifier with bracketed email-address - #find_keys with un-bracketed wrong email-address - #find_keys with un-prefixed fingerprint +status + returns status code 200 -Finished in 4 minutes 54.4 seconds (files took 2.04 seconds to load) +Finished in 5 minutes 49 seconds (files took 2.09 seconds to load) 583 examples, 0 failures -Randomized with seed 22439 +Randomized with seed 44657 ┌──────────────────────────────────────────────────────────────────────────────┐ @@ -2075,10 +2111,10 @@ install -p -m0644 ./man/schleuder.8 debian/schleuder/usr/share/man/man8/schleuder.8 man-recode --to-code UTF-8 --suffix .dh-new debian/schleuder/usr/share/man/man8/schleuder-api-daemon.8 man-recode --to-code UTF-8 --suffix .dh-new debian/schleuder/usr/share/man/man8/schleuder.8 - mv debian/schleuder/usr/share/man/man8/schleuder.8.dh-new debian/schleuder/usr/share/man/man8/schleuder.8 - chmod 0644 -- debian/schleuder/usr/share/man/man8/schleuder.8 mv debian/schleuder/usr/share/man/man8/schleuder-api-daemon.8.dh-new debian/schleuder/usr/share/man/man8/schleuder-api-daemon.8 chmod 0644 -- debian/schleuder/usr/share/man/man8/schleuder-api-daemon.8 + mv debian/schleuder/usr/share/man/man8/schleuder.8.dh-new debian/schleuder/usr/share/man/man8/schleuder.8 + chmod 0644 -- debian/schleuder/usr/share/man/man8/schleuder.8 dh_installcron -O--buildsystem=ruby install -m0755 -d debian/schleuder/etc/cron.weekly install -p -m0755 debian/schleuder.cron.weekly debian/schleuder/etc/cron.weekly/schleuder @@ -2164,12 +2200,14 @@ dpkg-buildpackage: info: binary-only upload (no source included) dpkg-genchanges: info: not including original source code in upload I: copying local configuration +I: user script /srv/workspace/pbuilder/1626286/tmp/hooks/B01_cleanup starting +I: user script /srv/workspace/pbuilder/1626286/tmp/hooks/B01_cleanup finished I: unmounting dev/ptmx filesystem I: unmounting dev/pts filesystem I: unmounting dev/shm filesystem I: unmounting proc filesystem I: unmounting sys filesystem I: cleaning the build env -I: removing directory /srv/workspace/pbuilder/854234 and its subdirectories -I: Current time: Sun Jul 13 20:54:21 -12 2025 -I: pbuilder-time-stamp: 1752483261 +I: removing directory /srv/workspace/pbuilder/1626286 and its subdirectories +I: Current time: Mon Aug 17 05:24:16 +14 2026 +I: pbuilder-time-stamp: 1786893856