Diff of the two buildlogs: -- --- b1/build.log 2024-05-12 11:19:30.048587663 +0000 +++ b2/build.log 2024-05-12 11:25:45.520599153 +0000 @@ -1,6 +1,6 @@ I: pbuilder: network access will be disabled during build -I: Current time: Sat May 11 23:09:20 -12 2024 -I: pbuilder-time-stamp: 1715512160 +I: Current time: Sun Jun 15 07:42:32 +14 2025 +I: pbuilder-time-stamp: 1749922952 I: Building the build Environment I: extracting base tarball [/var/cache/pbuilder/unstable-reproducible-base.tgz] I: copying local configuration @@ -45,52 +45,84 @@ dpkg-source: info: applying 0013-Fix-FTBFS-with-Ruby-3.2.patch I: Not using root during the build. I: Installing the build-deps -I: user script /srv/workspace/pbuilder/2812895/tmp/hooks/D02_print_environment starting +I: user script /srv/workspace/pbuilder/3608579/tmp/hooks/D01_modify_environment starting +debug: Running on ionos5-amd64. +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 Jun 14 17:42 /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/3608579/tmp/hooks/D01_modify_environment finished +I: user script /srv/workspace/pbuilder/3608579/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='amd64' - DEBIAN_FRONTEND='noninteractive' - DEB_BUILD_OPTIONS='buildinfo=+all reproducible=+all parallel=20 ' - DISTRIBUTION='unstable' - HOME='/root' - HOST_ARCH='amd64' + 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]="21" [3]="1" [4]="release" [5]="x86_64-pc-linux-gnu") + BASH_VERSION='5.2.21(1)-release' + BUILDDIR=/build/reproducible-path + BUILDUSERGECOS='second user,second room,second work-phone,second home-phone,second other' + BUILDUSERNAME=pbuilder2 + BUILD_ARCH=amd64 + DEBIAN_FRONTEND=noninteractive + DEB_BUILD_OPTIONS='buildinfo=+all reproducible=+all parallel=42 ' + DIRSTACK=() + DISTRIBUTION=unstable + EUID=0 + FUNCNAME=([0]="Echo" [1]="main") + GROUPS=() + HOME=/root + HOSTNAME=i-capture-the-hostname + HOSTTYPE=x86_64 + HOST_ARCH=amd64 IFS=' ' - INVOCATION_ID='ca000345ff084b1884493f730de5ae86' - 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='2812895' - PS1='# ' - PS2='> ' + INVOCATION_ID=d54a972c78724efaa2c26938d22b3a74 + LANG=C + LANGUAGE=et_EE:et + LC_ALL=C + MACHTYPE=x86_64-pc-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=3608579 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.yHBiIz9L/pbuilderrc_dAW2 --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.yHBiIz9L/b1 --logfile b1/build.log schleuder_4.0.3-11.dsc' - SUDO_GID='111' - SUDO_UID='106' - SUDO_USER='jenkins' - TERM='unknown' - TZ='/usr/share/zoneinfo/Etc/GMT+12' - USER='root' - _='/usr/bin/systemd-run' - http_proxy='http://46.16.76.132: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.yHBiIz9L/pbuilderrc_GOY9 --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.yHBiIz9L/b2 --logfile b2/build.log schleuder_4.0.3-11.dsc' + SUDO_GID=110 + SUDO_UID=105 + SUDO_USER=jenkins + TERM=unknown + TZ=/usr/share/zoneinfo/Etc/GMT-14 + UID=0 + USER=root + _='I: set' + http_proxy=http://213.165.73.152:3128 I: uname -a - Linux ionos11-amd64 6.1.0-21-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.1.90-1 (2024-05-03) x86_64 GNU/Linux + Linux i-capture-the-hostname 6.6.13+bpo-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.6.13-1~bpo12+1 (2024-02-15) x86_64 GNU/Linux I: ls -l /bin - lrwxrwxrwx 1 root root 7 May 11 07:43 /bin -> usr/bin -I: user script /srv/workspace/pbuilder/2812895/tmp/hooks/D02_print_environment finished + lrwxrwxrwx 1 root root 7 Jun 13 14:07 /bin -> usr/bin +I: user script /srv/workspace/pbuilder/3608579/tmp/hooks/D02_print_environment finished -> Attempting to satisfy build-dependencies -> Creating pbuilder-satisfydepends-dummy package Package: pbuilder-satisfydepends-dummy @@ -327,7 +359,7 @@ Get: 161 http://deb.debian.org/debian unstable/main amd64 ruby-sqlite3 amd64 1.4.2-4+b4 [43.3 kB] Get: 162 http://deb.debian.org/debian unstable/main amd64 ruby-thor all 1.3.1-1 [49.2 kB] Get: 163 http://deb.debian.org/debian unstable/main amd64 thin amd64 1.8.1-2+b1 [60.7 kB] -Fetched 50.6 MB in 22s (2264 kB/s) +Fetched 50.6 MB in 0s (121 MB/s) debconf: delaying package configuration, since apt-utils is not installed Selecting previously unselected package libpython3.11-minimal:amd64. (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 ... 19699 files and directories currently installed.) @@ -864,8 +896,8 @@ Setting up tzdata (2024a-4) ... Current default time zone: 'Etc/UTC' -Local time is now: Sun May 12 11:10:54 UTC 2024. -Universal Time is now: Sun May 12 11:10:54 UTC 2024. +Local time is now: Sat Jun 14 17:43:03 UTC 2025. +Universal Time is now: Sat Jun 14 17:43:03 UTC 2025. Run 'dpkg-reconfigure tzdata' if you wish to change it. Setting up autotools-dev (20220109.1) ... @@ -1015,7 +1047,11 @@ Building tag database... -> Finished parsing the build-deps I: Building the package -I: Running cd /build/reproducible-path/schleuder-4.0.3/ && 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_4.0.3-11_source.changes +I: user script /srv/workspace/pbuilder/3608579/tmp/hooks/A99_set_merged_usr starting +Not re-configuring usrmerge for unstable +I: user script /srv/workspace/pbuilder/3608579/tmp/hooks/A99_set_merged_usr finished +hostname: Name or service not known +I: Running cd /build/reproducible-path/schleuder-4.0.3/ && 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_4.0.3-11_source.changes dpkg-buildpackage: info: source package schleuder dpkg-buildpackage: info: source version 4.0.3-11 dpkg-buildpackage: info: source distribution unstable @@ -1051,7 +1087,7 @@ dh_ruby --build dh_auto_test -O--buildsystem=ruby dh_ruby --test - rm -fr -- /tmp/dh-xdg-rundir-jUnF5IEE + rm -fr -- /tmp/dh-xdg-rundir-fWmoTnlC create-stamp debian/debhelper-build-stamp dh_testroot -O--buildsystem=ruby dh_prep -O--buildsystem=ruby @@ -1173,697 +1209,697 @@ RUBYLIB=/build/reproducible-path/schleuder-4.0.3/debian/schleuder/usr/lib/ruby/vendor_ruby:. GEM_PATH=/build/reproducible-path/schleuder-4.0.3/debian/schleuder/usr/share/rubygems-integration/all:/build/reproducible-path/schleuder-4.0.3/debian/.debhelper/generated/_source/home/.local/share/gem/ruby/3.1.0:/var/lib/gems/3.1.0:/usr/local/lib/ruby/gems/3.1.0:/usr/lib/ruby/gems/3.1.0:/usr/lib/x86_64-linux-gnu/ruby/gems/3.1.0:/usr/share/rubygems-integration/3.1.0:/usr/share/rubygems-integration/all:/usr/lib/x86_64-linux-gnu/rubygems-integration/3.1.0 ruby3.1 -S rake --rakelibdir /gem2deb-nonexistent -f debian/ruby-tests.rake /usr/bin/ruby3.1 -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 37049 +Randomized with seed 42086 -Errors - ::KeyAdduidFailed shows sensible string in response to to_s() - ::MessageNotFromAdmin shows sensible string in response to to_s() - ::TooManyKeys shows sensible string in response to to_s() - ::LoadingListSettingsFailed shows sensible string in response to to_s() - ::MessageUnsigned shows sensible string in response to to_s() - ::ListNotFound shows sensible string in response to to_s() - ::MessageUnauthenticated shows sensible string in response to to_s() - ::DecryptionFailed 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() - ::KeyGenerationFailed shows sensible string in response to to_s() - ::MessageUnencrypted 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() - ::KeywordAdminOnly shows sensible string in response to to_s() +lists via api + correctly finds a list by email-address that starts with a number + creates a list + shows a list -Schleuder::Filters::Runner - is expected to respond to #run - loading filters - 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 - loads custom filters from filters_dir and sorts them in, ignores filter not following convention - loads filters from built-in filters_dir sorts them - #run - stops on a StandardError and returns error even with bounces_drop_all - runs the filters - stops on a StandardError and returns error - stops on a StandardError and returns error even on headers match +user sends a plain text message + from thunderbird being signed-mime + from thunderbird being plain + from thunderbird being signed-inline -Schleuder::KeywordHandlers::SignThis - responds to the configured keyword method - signs body content if no attachments are present - signs attachment (even if a body is present) +cli + #refresh_keys + warns about file system permissions if it was run as root + updates keys from the keyserver + updates keys from the keyserver for only a specific list + reports errors from refreshing keys + #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 -status - returns status code 200 +protected subject + is included as mime-part in body + is included in mime-headers + is not leaked + recognizes keywords in mails with protected headers and empty subject + don't block request-messages + works with mutt protected headers + +authorization via api + allows authorized access + blocks un-authorized access to other URLs + allows un-authorized access to /status.json + +running filters + .fix_exchange_messages! + accepts a valid plain-text message + accepts an invalid pgp/mime Exchange message + .max_message_size + bounces to big mails + .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 + +someone sends an email to a listname-dash-address + 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 -owner + forwards the message to the admins if extension is -bounce + sends the list's key as reply to -sendkey + +Schleuder::Subscription + is invalid if delivery_enabled is blank + removes whitespaces and 0x from the fingerprint + is valid when fingerprint is nil + formats email address when email begins with a space + is invalid when list_id is blank + downcases all letters of an email address + is invalid when email is blank + is invalid when email does not contain an @ + is valid when fingerprint is empty + is expected to respond to #admin + is invalid when fingerprint contains invalid characters + is invalid if the given email is already subscribed for the list + has a valid factory + is invalid if admin is blank + is invalid if delivery_enabled is nil + is expected to respond to #delivery_enabled + is expected to respond to #fingerprint + is expected to respond to #email + is invalid when email is nil + is expected to respond to #list_id + is invalid if admin is nil + #fingerprint + transforms the fingerprint to upper case GPGME::Key - #summary - displays the expected attributes for an expiring key - displays the expected basic attributes - displays the expected attributes for a revoked key - displays the expected attributes for a key that's not capable of encryption - displays the expected attributes for an expired key #minimal returns a minimal key .valid_fingerprint? valid fingerprints + accepts 0x59C71FB38AEE22E091C78259D06350440F759BD3 as a valid fingerprint accepts 0x59C71FB38AEE22E091C78259D0635044 as a valid fingerprint accepts 59C71FB38AEE22E091C78259D0635044 as a valid fingerprint - accepts 0x59C71FB38AEE22E091C78259D06350440F759BD3 as a valid fingerprint accepts 59C71FB38AEE22E091C78259D06350440F759BD3 as a valid fingerprint invalid fingerprints - rejects 59C71FB38AEE22E091C78259D06350440F759BD3A as an invalid fingerprint - rejects Z9C71FB38AEE22E091C78259D0635044 as an invalid fingerprint rejects Z9C71FB38AEE22E091C78259D06350440F759BD3 as an invalid fingerprint rejects Z9C71FB38AEE22E091C78259D0635044 as an invalid fingerprint + rejects 59C71FB38AEE22E091C78259D06350440F759BD3A as an invalid fingerprint + rejects Z9C71FB38AEE22E091C78259D0635044 as an invalid fingerprint rejects 59C71FB38AEE22E091C78259D06350440F759BD as an invalid fingerprint rejects 0x59C71FB38AEE22E091C78259D06350440F759B as an invalid fingerprint + #summary + displays the expected attributes for a revoked key + displays the expected attributes for an expiring key + displays the expected attributes for an expired key + displays the expected basic attributes + displays the expected attributes for a key that's not capable of encryption Schleuder::Conf reads ERB code in config files +subscription via api + unsubscribes members + subscribes an admin user with a truthy value + subscribes new member to a list + subscribes an admin user + doesn't subscribe new member without authentication + subscribes an user and unsets delivery flag + version - returns the current schleuder version if authorized does not return the current schleuder version if not authorized + returns the current schleuder version if authorized -Schleuder::KeywordHandlers::Base - stores mail, list and arguments as instance variables - provides methods to register keywords - -a bounce message is received - from bounce example - -Schleuder::Filters - .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 - 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 - rejects a message with a non-subscribed address as From-header if list.receive_from_subscribed_emailaddresses_only is set - .strip_html_from_alternative_if_keywords_present - does not choke on nor change a message without Content-Type-header - strips HTML-part from multipart/alternative-message that contains keywords - does NOT strip HTML-part from multipart/alternative-message that does NOT contain keywords - .fix_exchange_messages - fixes pgp/mime-messages that were mangled by Exchange - works with a text/plain message - .strip_html_from_alternative - 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 - does NOT strip HTML-part from multipart/alternative-message that does NOT contain ascii-armored PGP-data - -someone sends an email to a listname-dash-address - 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 -owner - sends the list's key as reply to -sendkey - -running filters - .fix_exchange_messages! - accepts a valid plain-text message - accepts an invalid pgp/mime Exchange message - .max_message_size - bounces to big mails - .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 - -user sends a plain text message - from thunderbird being signed-inline - from thunderbird being signed-mime - from thunderbird being plain +keys via api + list + doesn't list keys without authentication + does list keys with authentication + a key with broken utf8 in uid + does add key + already imported + does delete key + does get key + does list this key + check + doesn't check keys without authentication + does check keys with authorization + delete + does delete keys with authentication + doesn't delete keys without authentication + import + doesn't import keys without authentication + does list keys with authentication + export + does list keys with authentication + doesn't export keys without authentication -Schleuder::KeywordHandlers::KeyManagement - registers keywords - .add_key - imports a key from attached quoted-printable binary material - imports from attached quoted-printable ascii-armored key-material - rejects garbage - imports a key from inline ascii-armored material - imports from attached quoted-printable binary key-material (as produced by Mutt 2.0.5) - imports a key from attached explicitly base64-encoded binary material - imports a key from attached binary material (without specified encoding) - imports a key from attached acsii-armored material - imports from an inline mix of ascii-armored key and non-key material - ignores arguments - ignores body if an ascii-armored attachment is present - imports from attached quoted-printable key-material (as produced by Thunderbird 115) - updates a key - .delete_key - deletes no key if the argument does not match - returns a string as error message if input message has no content - deletes a key that distinctly matches the argument - deletes multiple keys that each distinctly match one argument - sends error message if no argument is given +user sends keyword + x-list-key with correctly prefixed email-sub-string + x-unset-fingerprint with other email-address as non-admin + x-fetch-key with fingerprint + x-resend-cc-encrypted-only with matching key + x-get-version + x-resend-cc-encrypted-only with expired key + x-resend-encrypted-only with two matching keys, one of which is expired + x-unset-fingerprint with not-subscribed email-address + x-unset-fingerprint with own email-address as admin but without force + x-resend-encrypted-only with matching key + x-get-logfile with error-level sends empty logfile + x-set-fingerprint with own email-address and valid, spaces-separated fingerprint + x-resend-cc-encrypted-only to 2 addresses with matching keys + x-set-fingerprint without email-address and with valid fingerprint + x-subscribe without attributes + x-resend with invalid recipient + x-unsubscribe with invalid argument + x-resend + x-sign-this with inline text + x-subscribe with one attribute and spaces-separated fingerprint + x-unset-fingerprint with other email-address as admin + x-resend with admin-notification + x-subscribe with attributes and spaces-separated fingerprint + x-set-fingerprint with own email-address and valid fingerprint + x-sign-this with attachments + x-unsubscribe + x-subscribe with attributes + x-set-fingerprint without email-address and with invalid fingerprint + x-resend-cc-encrypted-only to 2 addresses with one missing keys + x-resend-cc to 2 addresses with one missing keys + x-resend-cc to 2 addresses with missing keys + x-fetch-key with invalid input + x-fetch-key with unknown email-address + resend returns an error about wrong arguments if email content got into the arguments due to no blank line + x-list-subscriptions without arguments but with admin-notification + x-get-key with empty argument + x-subscribe with attributes (last one 'true') and spaces-separated fingerprint + x-list-keys without arguments + x-get-key with invalid argument + x-resend-cc-encrypted-only to 2 addresses with missing keys + x-set-fingerprint with email-address but without valid fingerprint + x-get-key with valid argument + x-list-subscriptions with matching argument + x-resend with iso-8859-1 body + x-set-fingerprint with email-address but without fingerprint + x-set-fingerprint with not-subscribed email-address and valid fingerprint + x-resend-encrypted-only with expired key + x-subscribe without arguments + x-resend-unencrypted with matching key + x-get-version with delivery disabled + x-get-logfile with debug level sends non-empty logfile + x-unset-fingerprint without argument + x-fetch-key with fingerprint of unchanged key + x-list-subscriptions without arguments + x-fetch-key with URL + x-fetch-key with invalid URL + x-fetch-key with unknown fingerprint + x-set-fingerprint with other email-address and valid fingerprint + x-list-key with prefixed fingerprint + x-subscribe with attributes (first one 'false') and spaces-separated fingerprint + x-attach-listkey from Thunderbird with protected headers + x-set-fingerprint with other email-address and valid fingerprint as non-admin + x-subscribe without attributes, but with spaces-separated fingerprint + x-fetch-key with email address + x-resend-cc-encrypted-only to 3 addresses with one missing keys + x-attach-listkey + x-resend with admin-notification and admin has delivery disabled + x-list-key with arbitrary email-sub-string + x-unsubscribe without argument + x-unset-fingerprint with own email-address as admin and force + x-unsubscribe doesn't unsubscribe last admin + x-resend with utf-8 body and umlauts + x-list-keys with two arguments + x-list-subscriptions with non-matching argument + x-set-fingerprint without argument + x-fetch-key without arguments + does not parse keywords once the mail body started + x-resend does not include internal_footer + x-list-keys with one argument + x-subscribe with invalid arguments + with broken utf8 in key + x-add-key with inline key-material + x-get-key with valid argument + x-list-keys works -protected subject - is included in mime-headers - is included as mime-part in body - recognizes keywords in mails with protected headers and empty subject - is not leaked - works with mutt protected headers - don't block request-messages +Schleuder::Filters::Runner + is expected to respond to #run + #run + runs the filters + stops on a StandardError and returns error even with bounces_drop_all + stops on a StandardError and returns error even on headers match + stops on a StandardError and returns error + loading filters + loads filters from built-in filters_dir sorts them + loads custom filters from filters_dir and sorts them in, ignores filter not following convention + loads custom filters from filters_dir and sorts them in with missing dir + loads custom filters from filters_dir even with non-2-digit priority Schleuder::List - has a valid factory - is invalid when email contains a space is invalid if subject_prefix contains a linebreak - is expected to respond to #receive_authenticated_only - is expected to respond to #forward_all_incoming_to_admins - is expected to respond to #log_level - is valid if subject_prefix_in is nil - is invalid if send_encrypted_only is nil - is expected to respond to #bounces_drop_all - is expected to respond to #logfiles_to_keep - is valid if keywords_admin_only does not contain special characters - is expected to respond to #include_list_headers + is invalid if max_message_size_kb is 0 + is invalid if include_list_headers is nil + is expected to respond to #receive_encrypted_only + is invalid if public_footer includes a non-printable character + is invalid if subject_prefix_in contains a linebreak is expected to respond to #receive_signed_only + is invalid if keywords_admin_notify contains special characters + is invalid if openpgp_header_preference is foobar + is expected to respond to #keywords_admin_only + is expected to respond to #set_reply_to_to_sender + is invalid if subject_prefix_out contains a linebreak + is valid if subject_prefix is nil + is invalid if bounces_drop_on_headers contains special characters is invalid if receive_authenticated_only is blank - is invalid if deliver_selfsent is blank - is invalid if include_openpgp_header is blank - is invalid if forward_all_incoming_to_admins is nil - is invalid if headers_to_meta contains special characters - is invalid if receive_from_subscribed_emailaddresses_only is blank - is invalid if logfiles_to_keep is 0 - is invalid if set_reply_to_to_sender is blank - is expected to respond to #openpgp_header_preference - is invalid if receive_admin_only is blank - is valid if keywords_admin_notify does not contain special characters - is expected to respond to #public_footer + is invalid if keep_msgid is nil is invalid if log_level is foobar - is expected to respond to #subscriptions + 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 nil + is invalid if include_list_headers is nil + is invalid if include_list_headers is blank + is invalid when fingerprint contains invalid characters is expected to respond to #subject_prefix_out + is expected to respond to #include_list_headers + is valid if keywords_admin_only does not contain special characters + is invalid when email contains a space + is expected to respond to #subscriptions + is invalid if keywords_admin_only contains special characters is expected to respond to #receive_from_subscribed_emailaddresses_only - is invalid if receive_signed_only is nil - is expected to respond to #set_reply_to_to_sender - is invalid if bounces_notify_admins is nil - is invalid if receive_encrypted_only is blank - is invalid if include_openpgp_header is nil - is invalid if max_message_size_kb is 0 + is invalid if deliver_selfsent is nil + is expected to respond to #logfiles_to_keep is invalid if munge_from is nil - is expected to respond to #include_openpgp_header - is expected to respond to #munge_from - is invalid if bounces_drop_on_headers contains special characters - is expected to respond to #fingerprint - is invalid if receive_admin_only is nil - is invalid if bounces_drop_all is nil - is expected to respond to #deliver_selfsent - is invalid when fingerprint contains invalid characters - is invalid if keep_msgid is blank - is invalid if receive_from_subscribed_emailaddresses_only is nil - is expected to respond to #keep_msgid - is invalid if openpgp_header_preference is foobar - is expected to respond to #bounces_drop_on_headers - is expected to respond to #send_encrypted_only - is invalid if internal_footer includes a non-printable character - is valid if subject_prefix_out is nil + is expected to respond to #email + is invalid when email does not contain an @ is expected to respond to #max_message_size_kb + is expected to respond to #language is invalid if receive_signed_only is blank - is invalid if deliver_selfsent is nil - is expected to respond to #headers_to_meta - is invalid if receive_encrypted_only is nil - is invalid if set_reply_to_to_sender is nil + is invalid when fingerprint is nil + is expected to respond to #deliver_selfsent + is expected to respond to #openpgp_header_preference + is expected to respond to #subject_prefix is invalid if bounces_notify_admins is blank - is expected to respond to #subject_prefix_in - is invalid if keywords_admin_only contains special characters - is invalid if subject_prefix_in contains a linebreak + is expected to respond to #log_level is invalid if bounces_drop_all is blank - is expected to respond to #language - is expected to respond to #receive_encrypted_only - is expected to respond to #email - is expected to respond to #keywords_admin_notify - is valid if subject_prefix is nil - is invalid if send_encrypted_only is blank - is valid if headers_to_meta does not contain special characters - is invalid when fingerprint is nil is invalid if receive_authenticated_only is nil - is invalid if keywords_admin_notify contains special characters - is invalid if language is jp - is expected to respond to #subject_prefix - is invalid if public_footer includes a non-printable character + is expected to respond to #bounces_drop_on_headers + is invalid if include_openpgp_header is blank + is expected to respond to #keywords_admin_notify is invalid if munge_from is blank - is invalid if include_list_headers is blank - is expected to respond to #bounces_notify_admins - exports the key with the given fingerprint - is invalid if include_list_headers is blank - is expected to respond to #keywords_admin_only - is invalid when email does not contain an @ - is invalid if subject_prefix_out contains a linebreak + is expected to respond to #public_footer + is expected to respond to #internal_footer is invalid when email is blank - is invalid when fingerprint is blank - is invalid if keep_msgid is nil - is invalid if include_list_headers is nil - is invalid if include_list_headers is nil + is invalid if logfiles_to_keep is 0 + is valid if subject_prefix_out is nil + is expected to respond to #headers_to_meta + is expected to respond to #fingerprint + is valid if headers_to_meta does not contain special characters is invalid when email is nil + is invalid if deliver_selfsent is blank + is valid if subject_prefix_in is nil + is invalid if receive_from_subscribed_emailaddresses_only is blank + is expected to respond to #receive_authenticated_only + is expected to respond to #forward_all_incoming_to_admins + is invalid if include_openpgp_header is nil + is expected to respond to #include_openpgp_header + is expected to respond to #keep_msgid + is invalid if bounces_drop_all is nil + is invalid if send_encrypted_only is blank + is invalid if language is jp + is invalid if receive_encrypted_only is nil + is expected to respond to #munge_from + is invalid when fingerprint is blank + is invalid if set_reply_to_to_sender is nil is expected to respond to #receive_admin_only + is invalid if internal_footer includes a non-printable character + is invalid if keep_msgid is blank + is invalid if receive_signed_only is nil + is invalid if include_list_headers is blank + is expected to respond to #bounces_drop_all + is expected to respond to #bounces_notify_admins + is expected to respond to #subject_prefix_in + is expected to respond to #send_encrypted_only + is invalid if receive_encrypted_only is blank + is invalid if set_reply_to_to_sender is blank + is invalid if forward_all_incoming_to_admins is nil + is invalid if bounces_notify_admins is nil is invalid if forward_all_incoming_to_admins is blank - is expected to respond to #internal_footer - #munge_from - sets from to munged version when enabled - is disabled by default - does not munge from address when disabled - #keys - returns an array of keys matching the given fingerprint - 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 + has a valid factory + is invalid if headers_to_meta contains special characters + exports the key with the given fingerprint + is invalid if receive_admin_only is blank + is invalid if receive_admin_only is nil + #fetch_keys + fetches one key by URL + fetches one key by email address + does not import non-self-signatures + fetches one key by fingerprint + .by_recipient + returns the list for a given address #logger calls the ListLogger - #to_s - returns the email + #import_key + imports a given key + #bounce_address + adds the bounce keyword to the email address + #logfile + returns the logfile path #key returns the key with the fingerprint of the list #sendkey_address adds the sendkey keyword to the email address - #check_keys - 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 - adds a message if a key is invalid + .configurable_attributes + does not contain the attributes email and fingerprint + returns an array that contains the configurable attributes + #munge_from + does not munge from address when disabled + is disabled by default + sets from to munged version when enabled + #delete_key + returns false if no key with the fingerprint was found + deletes the key with the given fingerprint + #export_key + exports the key with the fingerprint of the list if no argument is given #admins returns subscriptions of admin users - send_list_key_to_subscriptions - sends its key to all subscriptions - #bounce_address - adds the bounce keyword to the email address + #request_address + adds the request keyword to the email address #subscribe + 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 ignores a given fingerprint if key material is given, too subscribes and sets the fingerprint from key material that contains exactly one key subscribes and does not set the fingerprint from key material containing no keys - subscribes and ignores nil-values for admin and delivery_enabled - .configurable_attributes - returns an array that contains the configurable attributes - does not contain the attributes email and fingerprint + subscribes and ignores a given fingerprint if key material is given, too + #to_s + returns the email + #check_keys + adds a message if a key is revoked + adds a message if a key is disabled + adds a message if a key is invalid + adds a message if a key expires in two weeks or less #owner_address adds the owner keyword to the email address - #export_key - exports the key with the fingerprint of the list if no argument is given + #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 #key_minimal_base64_encoded - returns the key with the fingerprint of the list if no argument is given in an Autocrypt-compatible format does not return the key with the fingerprint in an Autocrypt-compatible format if the argument given does not correspond to a key - .by_recipient - returns the list for a given address - #logfile - returns the logfile path - #fetch_keys - fetches one key by fingerprint - fetches one key by email address - fetches one key by URL - does not import non-self-signatures + returns the key with the fingerprint of the list if no argument is given in an Autocrypt-compatible format + send_list_key_to_subscriptions + sends its key to all subscriptions + #keys + returns an array with the keys matching the given bracketed email address + returns an array with the keys matching the given email address + returns an array of keys matching the given fingerprint + it returns an array with the keys of the list #send_to_subscriptions - sends the message to all subscribers but not the sender, if deliver_selfsent is false and the mail is correctly signed 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 including the sender, if deliver_selfsent is false but the mail is not correctly signed 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 but not the sender, if deliver_selfsent is false and the mail is correctly signed + sends the message to all subscribers, in the clear if one's key is unusable, if send_encrypted_only is false 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 including the sender, if deliver_selfsent is false but the mail is not correctly signed sends the message to all subscribers - #secret_key - returns the secret key with the fingerprint of the list #gpg - sets the GNUPGHOME environment variable to the listdir returns an instance of GPGME::Ctx - #delete_key - returns false if no key with the fingerprint was found - deletes the key with the given fingerprint + sets the GNUPGHOME environment variable to the listdir #set_reply_to_to_sender - sets reply-to to senders from-address when enabled - does not set reply_to mail address when disabled is disabled by default prefers reply_to of the sender over from when existing - #import_key - imports a given key - #request_address - adds the request keyword to the email address - #fingerprint - transforms the fingerprint to upper case - removes whitespaces and 0x from the fingerprint - -user sends an encrypted message - from thunderbird being encrypted-mime - from thunderbird being encrypted-inline - from thunderbird being encrypted+signed-mime - from thunderbird being encrypted+signed-inline - -user sends keyword - x-subscribe with attributes (last one 'true') and spaces-separated fingerprint - x-subscribe with attributes - x-list-keys with two arguments - x-fetch-key with invalid input - x-unset-fingerprint with not-subscribed email-address - x-fetch-key without arguments - x-sign-this with inline text - x-list-subscriptions with non-matching argument - x-resend - x-resend-cc-encrypted-only to 2 addresses with missing keys - x-fetch-key with unknown fingerprint - x-unset-fingerprint with own email-address as admin but without force - x-unsubscribe doesn't unsubscribe last admin - x-subscribe without attributes - x-attach-listkey from Thunderbird with protected headers - x-fetch-key with URL - x-fetch-key with fingerprint - x-unsubscribe - x-get-key with empty argument - resend returns an error about wrong arguments if email content got into the arguments due to no blank line - x-fetch-key with invalid URL - x-resend-cc-encrypted-only to 3 addresses with one missing keys - x-resend-cc to 2 addresses with missing keys - x-resend-cc-encrypted-only to 2 addresses with matching keys - x-subscribe with invalid arguments - x-get-logfile with debug level sends non-empty logfile - x-resend-cc to 2 addresses with one missing keys - x-get-version - x-unsubscribe with invalid argument - x-unsubscribe without argument - x-list-key with arbitrary email-sub-string - x-set-fingerprint with other email-address and valid fingerprint as non-admin - x-resend-cc-encrypted-only to 2 addresses with one missing keys - x-list-keys with one argument - x-set-fingerprint with own email-address and valid, spaces-separated fingerprint - x-set-fingerprint with email-address but without valid fingerprint - x-resend-encrypted-only with matching key - x-sign-this with attachments - x-set-fingerprint with own email-address and valid fingerprint - x-subscribe with attributes and spaces-separated fingerprint - x-attach-listkey - x-resend-encrypted-only with expired key - x-fetch-key with fingerprint of unchanged key - x-unset-fingerprint with other email-address as non-admin - x-set-fingerprint without email-address and with invalid fingerprint - x-list-key with prefixed fingerprint - x-resend with utf-8 body and umlauts - x-list-key with correctly prefixed email-sub-string - x-fetch-key with unknown email-address - x-set-fingerprint without argument - x-fetch-key with email address - x-list-subscriptions without arguments - x-resend with iso-8859-1 body - x-set-fingerprint with email-address but without fingerprint - x-subscribe with one attribute and spaces-separated fingerprint - x-resend-cc-encrypted-only with matching key - x-set-fingerprint without email-address and with valid fingerprint - x-list-subscriptions with matching argument - x-resend-unencrypted with matching key - x-resend does not include internal_footer - x-resend with invalid recipient - x-list-keys without arguments - x-unset-fingerprint with other email-address as admin - x-get-version with delivery disabled - x-get-logfile with error-level sends empty logfile - x-set-fingerprint with not-subscribed email-address and valid fingerprint - x-set-fingerprint with other email-address and valid fingerprint - x-resend with admin-notification - x-unset-fingerprint without argument - x-list-subscriptions without arguments but with admin-notification - x-resend-cc-encrypted-only with expired key - x-unset-fingerprint with own email-address as admin and force - does not parse keywords once the mail body started - x-subscribe with attributes (first one 'false') and spaces-separated fingerprint - x-resend with admin-notification and admin has delivery disabled - x-resend-encrypted-only with two matching keys, one of which is expired - x-get-key with valid argument - x-get-key with invalid argument - x-subscribe without attributes, but with spaces-separated fingerprint - x-subscribe without arguments - with broken utf8 in key - x-list-keys works - x-get-key with valid argument - x-add-key with inline key-material - -Schleuder::Subscription - removes whitespaces and 0x from the fingerprint - is expected to respond to #list_id - formats email address when email begins with a space - is invalid if delivery_enabled is blank - is valid when fingerprint is empty - is expected to respond to #fingerprint - is expected to respond to #delivery_enabled - is invalid when email is nil - is expected to respond to #admin - is invalid if admin is nil - is invalid when list_id is blank - downcases all letters of an email address - is valid when fingerprint is nil - is invalid when email does not contain an @ - is invalid if the given email is already subscribed for the list - is invalid when email is blank - is invalid if admin is blank - has a valid factory - is invalid if delivery_enabled is nil - is invalid when fingerprint contains invalid characters - is expected to respond to #email - #fingerprint - transforms the fingerprint to upper case + sets reply-to to senders from-address when enabled + does not set reply_to mail address when disabled -subscription via api - subscribes an admin user with a truthy value - subscribes an admin user - doesn't subscribe new member without authentication - unsubscribes members - subscribes new member to a list - subscribes an user and unsets delivery flag +Schleuder::Filters + .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 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 + .strip_html_from_alternative_if_keywords_present + does NOT strip HTML-part from multipart/alternative-message that does NOT contain keywords + does not choke on nor change a message without Content-Type-header + strips HTML-part from multipart/alternative-message that contains keywords + .strip_html_from_alternative + does not choke on nor change a message without Content-Type-header + 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 -user sends emails with different charsets - works with japanese - works with simple_jpiso2022 - works with signed_utf8 - works with japanese_iso_2022 - works with simple_utf8 - works with simple_latin1 - works with japanese_attachment - works with thunderbird-multi-alt-html - works with simple_jis - works with ks_c_5601-1987 - works with japanese_attachment_long_name - works with japanese_shift_jis +a bounce message is received + from bounce example Schleuder::LoggerNotifications + notifies admins encryptedly if their key is usable notifies admins of multiple text-messages and the original message notifies admins of multiple text-messages - notifies admins encryptedly if their key is usable - 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 + notifies admins in the clear if their key is unusable return path - sets superadmin sets default superadmin + sets superadmin + +Schleuder::KeywordHandlers::KeyManagement + registers keywords + .add_key + ignores arguments + imports a key from attached binary material (without specified encoding) + ignores body if an ascii-armored attachment is present + imports a key from attached quoted-printable binary material + imports a key from attached acsii-armored material + updates a key + imports a key from inline ascii-armored material + imports from attached quoted-printable key-material (as produced by Thunderbird 115) + rejects garbage + imports from an inline mix of ascii-armored key and non-key material + imports from attached quoted-printable ascii-armored key-material + imports from attached quoted-printable binary key-material (as produced by Mutt 2.0.5) + imports a key from attached explicitly base64-encoded binary material + .delete_key + sends error message if no argument is given + deletes a key that distinctly matches the argument + returns a string as error message if input message has no content + deletes multiple keys that each distinctly match one argument + deletes no key if the argument does not match GPGME::Ctx - #clean_and_classify_input with URL #clean_and_classify_input with bracketed email-address + #find_keys with un-prefixed fingerprint + #clean_and_classify_input with URL + #find_keys with bracketed wrong email-address #find_keys with correctly marked narrower sub-string - #keyimport with unusable data - #find_keys with un-marked sub-string + #find_keys with prefixed fingerprint + #clean_and_classify_input with un-prefixed fingerprint #clean_and_classify_input with prefixed fingerprint - #find_keys with bracketed email-address + #clean_and_classify_input with un-bracketed email-address #find_keys with un-bracketed wrong email-address - #find_keys with un-bracketed email-address #find_keys without argument - #find_keys with un-prefixed fingerprint - #find_keys with bracketed wrong email-address - #gpgcli returns correct data types + #find_keys with correctly marked sub-string + #find_keys with un-bracketed email-address + #keyimport with unusable data #keyimport #clean_and_classify_input with some string - #clean_and_classify_input with un-prefixed fingerprint - #find_keys with prefixed fingerprint - #clean_and_classify_input with un-bracketed email-address - #find_keys with correctly marked sub-string - #refresh_keys - updates keys from the keyserver - reports errors from refreshing keys - does not import non-self-signatures + #find_keys with bracketed email-address + #gpgcli returns correct data types + #find_keys with un-marked sub-string #keyserver_arg returns keyserver-args if a keyserver is configured returns a blank string if the keyserver-option is set to a blank value + #refresh_keys + does not import non-self-signatures + reports errors from refreshing keys + updates keys from the keyserver -authorization via api - blocks un-authorized access to other URLs - allows authorized access - allows un-authorized access to /status.json - -keys via api - export - does list keys with authentication - doesn't export keys without authentication - delete - does delete keys with authentication - doesn't delete keys without authentication - a key with broken utf8 in uid - does add key - already imported - does list this key - does get key - does delete key - check - does check keys with authorization - doesn't check keys without authentication - import - does list keys with authentication - doesn't import keys without authentication - list - does list keys with authentication - doesn't list keys without authentication - -lists via api - shows a list - correctly finds a list by email-address that starts with a number - creates a list +Errors + ::ListNotFound shows sensible string in response to to_s() + ::MessageNotFromAdmin shows sensible string in response to to_s() + ::MessageUnauthenticated shows sensible string in response to to_s() + ::MessageUnencrypted shows sensible string in response to to_s() + ::KeywordAdminOnly shows sensible string in response to to_s() + ::MessageSenderNotSubscribed shows sensible string in response to to_s() + ::MessageUnsigned shows sensible string in response to to_s() + ::KeyGenerationFailed shows sensible string in response to to_s() + ::MessageTooBig shows sensible string in response to to_s() + ::ListdirProblem 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() + ::KeyAdduidFailed shows sensible string in response to to_s() + ::DecryptionFailed shows sensible string in response to to_s() + ::TooManyKeys shows sensible string in response to to_s() -Schleuder::Runner - after keyword parsing - falling back works also with non-ascii content - falls back to default charset per RFC if none is set - #run - 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 - 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) - injects pseudoheaders appropriately into an unsigned thunderbird-multipart/alternative-message - does not throw an error on emails with broken utf-8 - does not throw an error on emails that contain other gpg keywords - delivers a signed error message if a subscription's key is expired on a encrypted-only list - 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 a plain text message - doesn't have unwanted headerlines from the original message - has the correct headerlines - contains the list headers if include_list_headers is set to true - doesn't leak the Message-Id as configured - does not contain the Autocrypt header if include_autocrypt_header is set to false - contains the open pgp header if include_openpgp_header is set to true - delivers the incoming message - includes the internal_footer - contains the specified pseudoheaders in the correct order - contains the Autocrypt header if include_autocrypt_header is set to true - does keep the Message-Id as configured - does not include the public_footer - does not deliver content if send_encrypted_only is set to true - Quoted-Printable encoding - is handled properly in encrypted+signed emails - is handled properly in cleartext emails - is handled properly in encrypted emails - 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 - mails not encrypted to the list key - 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 - handles a mail containing PGP-garbage and returns DecryptionFailed error +Schleuder::KeywordHandlers::SignThis + signs attachment (even if a body is present) + signs body content if no attachments are present + responds to the configured keyword method -KeywordHandlersRunner - loads additional keyword handlers - does not require mandatory keywords if no keywords are present - stores a keyword that was registered - notifies admins - requires X-LIST-NAME - rejects X-LIST-NAME with mismatching argument - returns an error message if keyword is configured as admin-only - rejects unknown keywords +user sends emails with different charsets + works with japanese_iso_2022 + works with simple_utf8 + works with japanese_attachment_long_name + works with simple_latin1 + works with simple_jpiso2022 + works with thunderbird-multi-alt-html + works with japanese_attachment + works with ks_c_5601-1987 + works with japanese + works with signed_utf8 + works with simple_jis + works with japanese_shift_jis -Schleuder::ListBuilder - creates a new, valid list - subscribes the adminaddress and respects the given adminfingerprint - creates a list-key with all required UIDs - creates a listdir for the list - returns an error-message if given an invalid email-address - returns an error-message if given an invalid email-address with a space - subscribes the adminaddress and ignores the adminfingerprint if an adminkey was given - subscribes the adminaddress and imports the adminkey +Schleuder::KeywordHandlers::Base + provides methods to register keywords + stores mail, list and arguments as instance variables Mail::Message - does not misclassify bounce spec/fixtures/mails/bounces/tt_bounce_22.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_06.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_1234175799.txt.eml as normal message + does not misclassify bounce spec/fixtures/mails/bounces/tt_1234211931.txt.eml as normal message + recognizes a sudo message with 'Auto-Submitted'-header NOT as automated 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_1234210655.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/tt_bounce_18.txt.eml as normal message - does not misclassify bounce spec/fixtures/mails/bounces/malformed_bounce_01.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_1234285532.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/unknown_code_bounce_01.txt.eml as normal message + does not misclassify bounce spec/fixtures/mails/bounces/undeliverable_gmail.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 + recognizes a cron message with 'Auto-Submitted'-header NOT as automated message + recognizes bounce message subject using the bounce_email gem + 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 + 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_12_soft.txt.eml as normal message - does not misclassify bounce spec/fixtures/mails/bounces/tt_1234211932.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_bounce_04.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_1234175799.txt.eml as normal message doesn't change the order of mime-parts - does not misclassify bounce spec/fixtures/mails/bounces/tt_bounce_02.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/undeliverable_gmail.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 - does not misclassify bounce spec/fixtures/mails/bounces/tt_bounce_03.txt.eml as normal message - verifies an encapsulated (signed-then-encrypted) message - does not misclassify bounce spec/fixtures/mails/bounces/tt_1234211357.txt.eml as normal message - recognizes a sudo message with 'Auto-Submitted'-header NOT as automated message + recognizes a Jenkins message with 'Auto-Submitted'-header NOT as automated 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_04.txt.eml as normal message does not misclassify bounce spec/fixtures/mails/bounces/tt_1234285668.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/tt_1234211357.txt.eml as normal message + does not misclassify bounce spec/fixtures/mails/bounces/tt_bounce_24.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/tt_bounce_10.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_19.txt.eml as normal 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_1234211931.txt.eml as normal 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_07.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_06.txt.eml as normal message - adds list#internal_footer as last mime-part without changing its value - 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_08.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/Bug_948982-_marked_as_pending_in_schleuder.eml as bounce - recognizes a cron message with 'Auto-Submitted'-header NOT as automated message - does not misclassify bounce spec/fixtures/mails/bounces/tt_bounce_15.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_07.txt.eml as normal message does not misclassify bounce spec/fixtures/mails/bounces/tt_bounce_25.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/unknown_code_bounce_01.txt.eml as normal message - does not misclassify bounce spec/fixtures/mails/bounces/tt_bounce_20.txt.eml as normal message + verifies an encapsulated (signed-then-encrypted) message + adds list#public_footer as last mime-part without changing its value + 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_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_bounce_14.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_16.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_1234177688.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_03.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 + 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_1234285532.txt.eml as normal message does not misclassify normal message spec/fixtures/mails/not_bounces/tt_1234211024.txt.eml as bounce + 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/malformed_bounce_01.txt.eml as normal message + does not misclassify bounce spec/fixtures/mails/bounces/tt_bounce_20.txt.eml as normal message + recognizes a message sent to listname-bounce@hostname as automated message + adds list#internal_footer as last mime-part without changing its value 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_bounce_15.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_02.txt.eml as normal message + does not misclassify bounce spec/fixtures/mails/bounces/tt_bounce_01.txt.eml as normal message makes a pseudo header - that single multiline are getting indented that a multiline with less than 76 get wrapped correctly on the first line that is getting wrapped - that multiline are getting wrapped that a multiline with less than 76 get wrapped correctly on the first line and the following lines + that a line with less than 76 gets wrapped + that single multiline are getting indented + that multiline are getting wrapped without value with key / value - that a line with less than 76 gets wrapped with empty value + #add_subject_prefix! + adds a configured subject prefix without subject + does not add a subject prefix if already present + adds a configured subject prefix .keywords - drops empty lines in keyword arguments parsing ignores empty lines before keywords + drops multiple empty lines between keywords and content stops looking for keywords when a blank line that is not followed by another keyword is met - stops looking for keywords when the first line is already email content - splits lines into words and downcases them in keyword arguments + reads multiple lines as keyword arguments stops looking for keywords when already the first line is blank followed by email content + drops empty lines in keyword arguments parsing + stops looking for keywords when the first line is already email content takes the whole rest of the body as keyword argument if blank lines are present - drops multiple empty lines between keywords and content - reads multiple lines as keyword arguments - #add_subject_prefix! - adds a configured subject prefix - does not add a subject prefix if already present - adds a configured subject prefix without subject + splits lines into words and downcases them in keyword arguments -cli - #check_keys - warns about file system permissions if it was run as root - #refresh_keys - updates keys from the keyserver - updates keys from the keyserver for only a specific list - reports errors from refreshing 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 +status + returns status code 200 + +Schleuder::ListBuilder + subscribes the adminaddress and respects the given adminfingerprint + subscribes the adminaddress and imports the adminkey + returns an error-message if given an invalid email-address + creates a list-key with all required UIDs + returns an error-message if given an invalid email-address with a space + subscribes the adminaddress and ignores the adminfingerprint if an adminkey was given + creates a new, valid list + creates a listdir for the list + +Schleuder::Runner + #run + 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 + injects pseudoheaders appropriately into a signed multipart/alternative-message (thunderbird+enigmail-1.9) + does not throw an error on emails that contain other gpg keywords + 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 + does not throw an error on emails with large first mime-part + injects pseudoheaders appropriately into an unsigned thunderbird-multipart/alternative-message + does not throw an error on emails with broken utf-8 + mails not encrypted to the list key + 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 + handles a mail containing PGP-garbage and returns DecryptionFailed error + Quoted-Printable encoding + is handled properly in encrypted emails + is handled properly in encrypted+signed emails + is handled properly in cleartext emails + 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 + with a plain text message + contains the open pgp header if include_openpgp_header is set to true + delivers the incoming message + does keep the Message-Id as configured + contains the Autocrypt header if include_autocrypt_header is set to true + does not include the public_footer + doesn't have unwanted headerlines from the original message + contains the specified pseudoheaders in the correct order + doesn't leak the Message-Id as configured + does not deliver content if send_encrypted_only is set to true + 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 + includes the internal_footer + has the correct headerlines + 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 + after keyword parsing + falling back works also with non-ascii content + falls back to default charset per RFC if none is set + +KeywordHandlersRunner + rejects unknown keywords + rejects X-LIST-NAME with mismatching argument + notifies admins + does not require mandatory keywords if no keywords are present + requires X-LIST-NAME + stores a keyword that was registered + loads additional keyword handlers + returns an error message if keyword is configured as admin-only + +user sends an encrypted message + from thunderbird being encrypted-inline + from thunderbird being encrypted-mime + from thunderbird being encrypted+signed-inline + from thunderbird being encrypted+signed-mime -Finished in 7 minutes 44 seconds (files took 2.3 seconds to load) +Finished in 5 minutes 24 seconds (files took 1.15 seconds to load) 556 examples, 0 failures -Randomized with seed 37049 +Randomized with seed 42086 ┌──────────────────────────────────────────────────────────────────────────────┐ @@ -1988,12 +2024,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/3608579/tmp/hooks/B01_cleanup starting +I: user script /srv/workspace/pbuilder/3608579/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/2812895 and its subdirectories -I: Current time: Sat May 11 23:19:29 -12 2024 -I: pbuilder-time-stamp: 1715512769 +I: removing directory /srv/workspace/pbuilder/3608579 and its subdirectories +I: Current time: Sun Jun 15 07:48:44 +14 2025 +I: pbuilder-time-stamp: 1749923324