Diff of the two buildlogs: -- --- b1/build.log 2025-06-30 08:11:34.290047918 +0000 +++ b2/build.log 2025-06-30 08:19:03.089064228 +0000 @@ -1,6 +1,6 @@ I: pbuilder: network access will be disabled during build -I: Current time: Sun Jun 29 20:06:03 -12 2025 -I: pbuilder-time-stamp: 1751270763 +I: Current time: Mon Aug 3 04:34:37 +14 2026 +I: pbuilder-time-stamp: 1785681277 I: Building the build Environment I: extracting base tarball [/var/cache/pbuilder/trixie-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/121862/tmp/hooks/D02_print_environment starting +I: user script /srv/workspace/pbuilder/3757064/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 2 14:34 /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/3757064/tmp/hooks/D01_modify_environment finished +I: user script /srv/workspace/pbuilder/3757064/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='trixie' - HOME='/root' - HOST_ARCH='arm64' + DIRSTACK=() + DISTRIBUTION=trixie + EUID=0 + FUNCNAME=([0]="Echo" [1]="main") + GROUPS=() + HOME=/root + HOSTNAME=i-capture-the-hostname + HOSTTYPE=aarch64 + HOST_ARCH=arm64 IFS=' ' - INVOCATION_ID='1ce78b93a606404ca5a7998d0521e9de' - 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='121862' - PS1='# ' - PS2='> ' + INVOCATION_ID=da2976d20e484ba0b27c96114466208d + 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=3757064 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.3J0PoXJm/pbuilderrc_WDAv --distribution trixie --hookdir /etc/pbuilder/first-build-hooks --debbuildopts -b --basetgz /var/cache/pbuilder/trixie-reproducible-base.tgz --buildresult /srv/reproducible-results/rbuild-debian/r-b-build.3J0PoXJm/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.3J0PoXJm/pbuilderrc_v0my --distribution trixie --hookdir /etc/pbuilder/rebuild-hooks --debbuildopts -b --basetgz /var/cache/pbuilder/trixie-reproducible-base.tgz --buildresult /srv/reproducible-results/rbuild-debian/r-b-build.3J0PoXJm/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/121862/tmp/hooks/D02_print_environment finished + lrwxrwxrwx 1 root root 7 May 12 2025 /bin -> usr/bin +I: user script /srv/workspace/pbuilder/3757064/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 trixie/main arm64 ruby-thor all 1.3.2-2.1 [49.4 kB] Get: 186 http://deb.debian.org/debian trixie/main arm64 ruby-typhoeus all 1.4.0-6 [36.5 kB] Get: 187 http://deb.debian.org/debian trixie/main arm64 thin arm64 1.8.2+git20250216.de6b618-1 [60.9 kB] -Fetched 52.2 MB in 1s (56.4 MB/s) +Fetched 52.2 MB in 1s (76.9 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 ... 19964 files and directories currently installed.) @@ -958,8 +990,8 @@ Setting up tzdata (2025b-3) ... Current default time zone: 'Etc/UTC' -Local time is now: Mon Jun 30 08:06:30 UTC 2025. -Universal Time is now: Mon Jun 30 08:06:30 UTC 2025. +Local time is now: Sun Aug 2 14:35:35 UTC 2026. +Universal Time is now: Sun Aug 2 14:35:35 UTC 2026. Run 'dpkg-reconfigure tzdata' if you wish to change it. Setting up ruby-minitest (5.25.4-2) ... @@ -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/3757064/tmp/hooks/A99_set_merged_usr starting +Not re-configuring usrmerge for trixie +I: user script /srv/workspace/pbuilder/3757064/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-mK910Qjm + rm -fr -- /tmp/dh-xdg-rundir-L6uA7Abw 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-79958aa05bdb0f29d4a7f9fb0cc4fe78/test.sqlite3' +Created database '/tmp/schleuder-f775bb6f95dd7aaaa232d8bd7aaacc08/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 19765 - -subscription via api - unsubscribes members - subscribes an admin user - subscribes new member to a list - subscribes an user and unsets delivery flag - doesn't subscribe new member without authentication - subscribes an admin user with a truthy value +Randomized with seed 51898 user sends keyword - x-unset-fingerprint with own email-address as admin but without force - x-attach-listkey from Thunderbird with protected headers - x-unset-fingerprint without argument - x-subscribe without arguments - x-set-fingerprint without argument - x-resend with admin-notification and admin has delivery disabled - x-list-key with prefixed fingerprint - x-subscribe with invalid arguments - x-unset-fingerprint with other email-address as admin + x-subscribe with attributes (first one 'false') and spaces-separated fingerprint + x-list-subscriptions with non-matching argument + x-resend-cc-encrypted-only to 2 addresses with missing keys x-set-fingerprint with email-address but without fingerprint - x-fetch-key with fingerprint - x-set-fingerprint with own email-address and valid, spaces-separated fingerprint - x-fetch-key with fingerprint of unchanged key - x-set-fingerprint with other email-address and valid fingerprint - x-get-key with valid argument - x-subscribe without attributes, but with spaces-separated fingerprint + x-sign-this with inline text + x-set-fingerprint without argument + x-set-fingerprint with other email-address and valid fingerprint as non-admin x-resend-encrypted-only with two matching keys, one of which is expired - x-resend-unencrypted with matching key - x-resend-cc to 2 addresses with one missing keys - x-resend-cc-encrypted-only with matching key - x-fetch-key with unknown fingerprint - x-subscribe with attributes (first one 'false') and spaces-separated fingerprint - x-resend with utf-8 body and umlauts - x-fetch-key with invalid URL - x-get-key with empty argument + x-get-logfile with error-level sends empty logfile x-resend-cc-encrypted-only to 2 addresses with one missing keys + x-resend-unencrypted with matching key x-resend with admin-notification - x-fetch-key without arguments - x-subscribe with attributes and spaces-separated fingerprint - x-get-logfile with error-level sends empty logfile - x-set-fingerprint with other email-address and valid fingerprint as non-admin - x-resend - x-resend-encrypted-only with matching key - x-subscribe with attributes (last one 'true') and spaces-separated fingerprint - x-set-fingerprint with email-address but without valid fingerprint - x-attach-listkey - x-set-fingerprint with not-subscribed email-address and valid fingerprint - x-fetch-key with email address - x-get-logfile with debug level sends non-empty logfile - x-unset-fingerprint with own email-address as admin and force - x-resend-cc-encrypted-only to 2 addresses with matching keys - x-subscribe without attributes + x-unset-fingerprint with other email-address as admin + x-get-key with empty argument x-set-fingerprint with own email-address and valid fingerprint + x-subscribe without attributes, but with spaces-separated fingerprint + x-resend with admin-notification and admin has delivery disabled + x-resend-cc to 2 addresses with one missing keys x-list-keys with two arguments x-subscribe with attributes - does not parse keywords once the mail body started - x-resend-cc-encrypted-only to 3 addresses with one missing keys - x-unsubscribe without argument + x-unsubscribe + x-unsubscribe with invalid argument + x-list-subscriptions without arguments but with admin-notification + x-resend + x-fetch-key with fingerprint of unchanged key + x-fetch-key with unknown fingerprint x-get-key with invalid argument - x-list-key with arbitrary email-sub-string - x-resend with iso-8859-1 body - x-resend-cc-encrypted-only to 2 addresses with missing keys - x-resend-cc to 2 addresses with missing keys + x-get-key with valid argument + x-unsubscribe without argument + x-fetch-key with fingerprint + x-fetch-key with URL + x-subscribe without arguments + x-set-fingerprint with own email-address and valid, spaces-separated fingerprint x-resend does not include internal_footer - x-list-subscriptions without arguments but with admin-notification - x-sign-this with inline text - x-subscribe with one attribute and spaces-separated fingerprint - resend returns an error about wrong arguments if email content got into the arguments due to no blank line x-unsubscribe doesn't unsubscribe last admin - x-resend-cc-encrypted-only with expired key - x-unset-fingerprint with not-subscribed email-address + x-resend with iso-8859-1 body + x-list-subscriptions without arguments + x-list-key with prefixed fingerprint + x-list-key with correctly prefixed email-sub-string + resend returns an error about wrong arguments if email content got into the arguments due to no blank line + x-fetch-key with invalid input + x-subscribe with one attribute and spaces-separated fingerprint + x-unset-fingerprint without argument + x-resend-encrypted-only with matching key + x-fetch-key with email address x-resend with invalid recipient + x-subscribe without attributes + x-unset-fingerprint with not-subscribed email-address + x-set-fingerprint without email-address and with invalid fingerprint + x-resend-cc to 2 addresses with missing keys + x-list-key with arbitrary email-sub-string + x-resend-cc-encrypted-only with expired key + does not parse keywords once the mail body started + x-get-version + x-subscribe with attributes and spaces-separated fingerprint + x-fetch-key with unknown email-address + x-get-logfile with debug level sends non-empty logfile + x-subscribe with invalid arguments + x-fetch-key with invalid URL + x-subscribe with attributes (last one 'true') and spaces-separated fingerprint + x-list-keys with one argument + x-fetch-key without arguments + x-set-fingerprint with not-subscribed email-address and valid fingerprint + x-unset-fingerprint with own email-address as admin but without force + x-resend with utf-8 body and umlauts + x-resend-cc-encrypted-only to 2 addresses with matching keys x-list-keys without arguments - x-resend-encrypted-only with expired key + x-set-fingerprint without email-address and with valid fingerprint x-get-version with delivery disabled - x-fetch-key with invalid input + x-sign-this with attachments + x-resend-cc-encrypted-only to 3 addresses with one missing keys + x-attach-listkey from Thunderbird with protected headers + x-attach-listkey + x-resend-cc-encrypted-only with matching key x-list-subscriptions with matching argument - x-unsubscribe with invalid argument - x-set-fingerprint without email-address and with valid fingerprint - x-list-subscriptions without arguments - x-fetch-key with unknown email-address + x-unset-fingerprint with own email-address as admin and force x-unset-fingerprint with other email-address as non-admin - x-fetch-key with URL - x-unsubscribe - x-get-version - x-list-keys with one argument - x-list-subscriptions with non-matching argument - x-sign-this with attachments - x-set-fingerprint without email-address and with invalid fingerprint - x-list-key with correctly prefixed email-sub-string + x-resend-encrypted-only with expired key + x-set-fingerprint with email-address but without valid fingerprint + x-set-fingerprint with other email-address and valid fingerprint with broken utf8 in key - x-get-key with valid argument x-list-keys works x-add-key with inline key-material + x-get-key with valid argument -user sends an encrypted message - from thunderbird being encrypted-inline - from thunderbird being encrypted-mime - from thunderbird being encrypted+signed-mime - from thunderbird being encrypted+signed-inline +Schleuder::ListBuilder + subscribes the adminaddress and respects the given adminfingerprint + returns an error-message if given an invalid email-address with a space + creates a list-key with all required UIDs + creates a new, valid list + subscribes the adminaddress and ignores the adminfingerprint if an adminkey was given + creates a listdir for the list + subscribes the adminaddress and imports the adminkey + returns an error-message if given an invalid email-address -Schleuder::KeywordHandlers::Base - provides methods to register keywords - stores mail, list and arguments as instance variables +cli + #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 + #check_keys + warns about file system permissions if it was run as root + +Schleuder::Http + uses a proxy if one is configured authorization via api allows un-authorized access to /status.json blocks un-authorized access to other URLs allows authorized access +protected subject + don't block request-messages + is included as mime-part in body + is included in mime-headers + works with mutt protected headers + recognizes keywords in mails with protected headers and empty subject + is not leaked + +Errors + ::DecryptionFailed shows sensible string in response to to_s() + ::MessageTooBig shows sensible string in response to to_s() + ::KeyGenerationFailed shows sensible string in response to to_s() + ::KeywordAdminOnly shows sensible string in response to to_s() + ::KeyAdduidFailed shows sensible string in response to to_s() + ::ListNotFound shows sensible string in response to to_s() + ::MessageSenderNotSubscribed shows sensible string in response to to_s() + ::MessageEmpty 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() + ::ListdirProblem shows sensible string in response to to_s() + ::LoadingListSettingsFailed shows sensible string in response to to_s() + ::TooManyKeys shows sensible string in response to to_s() + ::MessageUnencrypted shows sensible string in response to to_s() + ::MessageUnsigned shows sensible string in response to to_s() + +Schleuder::List + is expected to respond to #fingerprint + is expected to respond to #subject_prefix + is invalid if include_list_headers is nil + is invalid if bounces_notify_admins is nil + is invalid if receive_from_subscribed_emailaddresses_only is nil + is valid if keywords_admin_notify does not contain special characters + is invalid if keywords_admin_notify contains special characters + is invalid if receive_from_subscribed_emailaddresses_only is blank + has a valid factory + is invalid when fingerprint is nil + is expected to respond to #internal_footer + is expected to respond to #deliver_selfsent + is expected to respond to #receive_signed_only + is invalid when email does not contain an @ + is expected to respond to #subscriptions + is invalid if bounces_drop_on_headers contains special characters + is expected to respond to #subject_prefix_out + is expected to respond to #receive_authenticated_only + is invalid if bounces_notify_admins is blank + is invalid if include_openpgp_header is blank + is invalid when email is blank + is invalid if receive_authenticated_only is blank + is invalid if munge_from is nil + is invalid if public_footer includes a non-printable character + is invalid if munge_from is blank + is expected to respond to #headers_to_meta + is invalid when email is nil + is invalid if deliver_selfsent is blank + is expected to respond to #receive_from_subscribed_emailaddresses_only + is expected to respond to #max_message_size_kb + is invalid if set_reply_to_to_sender is nil + is expected to respond to #set_reply_to_to_sender + is invalid when fingerprint is blank + is invalid if deliver_selfsent is nil + is invalid if subject_prefix_out contains a linebreak + is invalid if openpgp_header_preference is foobar + is expected to respond to #include_list_headers + is expected to respond to #language + is invalid if subject_prefix contains a linebreak + is invalid when email contains a space + is expected to respond to #receive_admin_only + is expected to respond to #key_auto_import_from_email + is invalid if send_encrypted_only is nil + is invalid if receive_admin_only is nil + is expected to respond to #bounces_drop_on_headers + is invalid if receive_admin_only is blank + is expected to respond to #munge_from + is invalid if receive_signed_only is blank + is valid if keywords_admin_only does not contain special characters + is expected to respond to #receive_encrypted_only + is expected to respond to #send_encrypted_only + is invalid if forward_all_incoming_to_admins is nil + is invalid if include_list_headers is nil + is invalid if max_message_size_kb is 0 + is expected to respond to #forward_all_incoming_to_admins + is invalid if set_reply_to_to_sender is blank + is invalid if language is jp + is expected to respond to #logfiles_to_keep + is expected to respond to #subject_prefix_in + is invalid if log_level is foobar + is expected to respond to #keep_msgid + is invalid if include_openpgp_header is nil + is expected to respond to #bounces_drop_all + is expected to respond to #bounces_notify_admins + is invalid if keywords_admin_only contains special characters + is invalid if receive_authenticated_only is nil + is invalid if bounces_drop_all is blank + is expected to respond to #keywords_admin_only + is invalid if bounces_drop_all is nil + is expected to respond to #openpgp_header_preference + is invalid if send_encrypted_only is blank + is invalid if receive_encrypted_only is nil + is invalid if logfiles_to_keep is 0 + is invalid if receive_signed_only is nil + is invalid if subject_prefix_in contains a linebreak + is valid if subject_prefix is nil + is valid if subject_prefix_out is nil + is invalid if forward_all_incoming_to_admins is blank + is valid if headers_to_meta does not contain special characters + is invalid if keep_msgid is blank + is invalid if include_list_headers is blank + is expected to respond to #email + is invalid if include_list_headers is blank + is expected to respond to #public_footer + is invalid when fingerprint contains invalid characters + is expected to respond to #keywords_admin_notify + exports the key with the given fingerprint + is invalid if keep_msgid is nil + is invalid if headers_to_meta contains special characters + is expected to respond to #include_openpgp_header + is valid if subject_prefix_in is nil + is expected to respond to #log_level + is invalid if receive_encrypted_only is blank + is invalid if internal_footer includes a non-printable character + #subscribe + subscribes and ignores nil-values for admin and delivery_enabled + subscribes and sets the fingerprint from key material that contains exactly one key + subscribes and ignores a given fingerprint if key material is given, too + subscribes and does not set the fingerprint from key material containing multiple keys + subscribes and does not set the fingerprint from key material containing no keys + #owner_address + adds the owner keyword to the email address + #request_address + adds the request keyword to the email address + .configurable_attributes + returns an array that contains the configurable attributes + does not contain the attributes email and fingerprint + #keys + returns an array with the keys matching the given email address + it returns an array with the keys of the list + returns an array of keys matching the given fingerprint + returns an array with the keys matching the given bracketed 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 + #fetch_keys + does not import non-self-signatures + fetches one key by URL + fetches one key by fingerprint + fetches one key by email address + #set_reply_to_to_sender + sets reply-to to senders from-address when enabled + prefers reply_to of the sender over from when existing + is disabled by default + does not set reply_to mail address when disabled + #export_key + exports the key with the fingerprint of the list if no argument is given + #admins + returns subscriptions of admin users + #check_keys + adds a message if a key is disabled + adds a message if a key is revoked + adds a message if a key is invalid + adds a message if a key expires in two weeks or less + #refresh_keys + reports errors from refreshing keys + does not import non-self-signatures + updates keys from the keyserver + #to_s + returns the email + #send_to_subscriptions + 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 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 subscribers if deliver_selfsent is set to false + 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 only to subscribers with available keys if send_encrypted_only is true, and a notification to the other subscribers + #logfile + returns the logfile path + #gpg + sets the GNUPGHOME environment variable to the listdir + returns an instance of GPGME::Ctx + .by_recipient + returns the list for a given address + #key + returns the key with the fingerprint of the list + #fingerprint + transforms the fingerprint to upper case + removes whitespaces and 0x from the fingerprint + #logger + calls the ListLogger + #bounce_address + adds the bounce keyword to the email address + send_list_key_to_subscriptions + sends its key to all subscriptions + #import_key + imports a given key + #delete_key + returns false if no key with the fingerprint was found + deletes the key with the given fingerprint + #munge_from + sets from to munged version when enabled + does not munge from address when disabled + is disabled by default + #secret_key + returns the secret key with the fingerprint of the list + #sendkey_address + adds the sendkey keyword to the email address + +a bounce message is received + from bounce example + +Schleuder::KeyFetcher + #fetch + reports an error if both, vks_keyserver and sks_keyserver, are blank + fetches one key by email from SKS if vks_keyserver is blank + reports an error from trying to fetch an URL that doesn't exist + reports the returned body content when receiving an unexpected HTTP status from the server + fetches one key from a good URL + fetches one key by email from VKS if vks_keyserver is set + reports an error from trying to import non-key-material + fetches one key by fingerprint from VKS if vks_keyserver is set + fetches one key by fingerprint from SKS if vks_keyserver is blank + +user sends a plain text message + from thunderbird being plain + from thunderbird being signed-inline + from thunderbird being signed-mime + +Schleuder::Filters + .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 + .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 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 + 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 + .strip_html_from_alternative + does NOT strip HTML-part from multipart/alternative-message that does NOT contain ascii-armored PGP-data + 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 + .key_auto_import_from_attachments + does not import key if sender address does not match key UID + imports key and reports new key + imports key and reports no change + does not import key if attachment has a different content-type than "application/pgp-keys" + imports key and reports the change + only imports the one key that matches the sender address if keydata contains more than one key + .fix_exchange_messages + works with a text/plain message + fixes pgp/mime-messages that were mangled by Exchange + .key_auto_import_from_autocrypt_header + only imports the one key that matches the sender address if keydata contains more than one key + imports key and reports new key + imports key and reports the change + does not import key if sender address does not match key UID, regardless of Autocrypt addr attribute + imports key and reports no change + +Schleuder::Subscription + has a valid factory + is invalid if delivery_enabled is nil + is expected to respond to #list_id + is expected to respond to #admin + is expected to respond to #delivery_enabled + is invalid when fingerprint contains invalid characters + is invalid if admin is blank + is invalid when list_id is blank + is invalid if delivery_enabled is blank + removes whitespaces and 0x from the fingerprint + is expected to respond to #email + is invalid when email 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 valid when fingerprint is empty + formats email address when email begins with a space + is expected to respond to #fingerprint + is invalid if admin is nil + is invalid when email is nil + #fingerprint + transforms the fingerprint to upper case + GPGME::Key + #summary + 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 + displays the expected attributes for an expiring key + displays the expected basic attributes .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 - accepts 59C71FB38AEE22E091C78259D0635044 as a valid fingerprint - accepts 59C71FB38AEE22E091C78259D06350440F759BD3 as a valid fingerprint invalid fingerprints - rejects Z9C71FB38AEE22E091C78259D0635044 as an invalid fingerprint - rejects 59C71FB38AEE22E091C78259D06350440F759BD as an invalid fingerprint rejects 59C71FB38AEE22E091C78259D06350440F759BD3A as an invalid fingerprint + rejects 59C71FB38AEE22E091C78259D06350440F759BD as an invalid fingerprint rejects Z9C71FB38AEE22E091C78259D06350440F759BD3 as an invalid fingerprint rejects Z9C71FB38AEE22E091C78259D0635044 as an invalid fingerprint rejects 0x59C71FB38AEE22E091C78259D06350440F759B as an invalid fingerprint + rejects Z9C71FB38AEE22E091C78259D0635044 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 an expired key - displays the expected attributes for a key that's not capable of encryption - displays the expected attributes for a revoked key -Schleuder::KeywordHandlers::SignThis - signs body content if no attachments are present - signs attachment (even if a body is present) - responds to the configured keyword method +lists via api + correctly finds a list by email-address that starts with a number + shows a list + creates a list Mail::Message - recognizes a Jenkins message with 'Auto-Submitted'-header NOT as automated 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_14.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_1234177688.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_1234211931.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_03.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_1234211932.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_15.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_25.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_06.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/unknown_code_bounce_01.txt.eml as normal message - does not misclassify bounce spec/fixtures/mails/bounces/malformed_bounce_01.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_18.txt.eml as normal message does not misclassify normal message spec/fixtures/mails/not_bounces/tt_1234211024.txt.eml as bounce - recognizes a sudo message with 'Auto-Submitted'-header NOT as automated message - does not misclassify bounce spec/fixtures/mails/bounces/tt_bounce_12_soft.txt.eml as normal message - doesn't change the order of mime-parts - does not misclassify bounce spec/fixtures/mails/bounces/tt_bounce_04.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_23.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_22.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_1234241665.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_1234285668.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_07.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_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_01.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_10.txt.eml as normal message does not misclassify bounce spec/fixtures/mails/bounces/tt_1234211357.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/tt_1234285668.txt.eml as normal message - verifies an encapsulated (signed-then-encrypted) 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_1234210655.txt.eml as normal message + does not misclassify bounce spec/fixtures/mails/bounces/tt_bounce_04.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_bounce_16.txt.eml as normal message - does not misclassify bounce spec/fixtures/mails/bounces/tt_bounce_24.txt.eml as normal message adds list#public_footer as last mime-part without changing its value - recognizes bounce message subject using the bounce_email gem + 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_03.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_1234177688.txt.eml as normal message + does not misclassify bounce spec/fixtures/mails/bounces/tt_bounce_19.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_08.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/malformed_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_23.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_02.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_1234211931.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_06.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/tt_bounce_20.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_bounce_05.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_09.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_1234175799.txt.eml as normal message + recognizes a sudo message with 'Auto-Submitted'-header NOT as automated message + verifies an encapsulated (signed-then-encrypted) 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_21.txt.eml as normal message + does not misclassify bounce spec/fixtures/mails/bounces/tt_bounce_22.txt.eml as normal message + doesn't change the order of mime-parts + does not misclassify normal message spec/fixtures/mails/not_bounces/tt_1234210666.txt.eml as bounce + recognizes bounce message subject using the bounce_email gem + 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_948981-_marked_as_pending_in_schleuder.eml as bounce - 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_18.txt.eml as normal message + does not misclassify bounce spec/fixtures/mails/bounces/unknown_code_bounce_01.txt.eml as normal message + makes a pseudo header + that a multiline with less than 76 get wrapped correctly on the first line + that is getting wrapped + with empty value + that a multiline with less than 76 get wrapped correctly on the first line and the following lines + that multiline are getting wrapped + with key / value + that a line with less than 76 gets wrapped + that single multiline are getting indented + without value #add_subject_prefix! - does not add a subject prefix if already present - adds a configured subject prefix without subject adds a configured subject prefix + adds a configured subject prefix without subject + does not add a subject prefix if already present .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 + reads multiple lines as keyword arguments + stops looking for keywords when already the first line is blank followed by 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 - 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 a blank line that is not followed by another keyword is met drops empty lines in keyword arguments parsing - makes a pseudo header - with key / value - without value - that a multiline with less than 76 get wrapped correctly on the first line - that a multiline with less than 76 get wrapped correctly on the first line and the following lines - that is getting wrapped - with empty value - that a line with less than 76 gets wrapped - that multiline are getting wrapped - that single multiline are getting indented + ignores empty lines before keywords -lists via api - correctly finds a list by email-address that starts with a number - shows a list - creates a list +Schleuder::KeywordHandlers::Base + provides methods to register keywords + stores mail, list and arguments as instance variables + +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 -owner + forwards the message to the admins if extension is -bounce and it's a real bounce mail + sends the list's key as reply to -sendkey + +subscription via api + subscribes new member to a list + subscribes an admin user + subscribes an user and unsets delivery flag + unsubscribes members + subscribes an admin user with a truthy value + doesn't subscribe new member without authentication keys via api - list + export + doesn't export keys without authentication does list keys with authentication + check + doesn't check keys without authentication + does check keys with authorization + list doesn't list keys without authentication + does list keys with authentication import returns json with empty array in case of useless input does list keys with authentication - returns json with key details about imported keys doesn't import keys without authentication + returns json with key details about imported keys a key with broken utf8 in uid does add key already imported - does delete key does list this key + does delete key does get key delete - doesn't delete keys without authentication does delete keys with authentication - check - doesn't check keys without authentication - does check keys with authorization - export - doesn't export keys without authentication - does list keys with authentication - -Schleuder::Http - uses a proxy if one is configured + doesn't delete keys without authentication version - does not return the current schleuder version if not authorized returns the current schleuder version if authorized + does not return the current schleuder version if not authorized -user sends a plain text message - from thunderbird being signed-mime - from thunderbird being signed-inline - from thunderbird being plain - -GPGME::Ctx - #keyimport - #normalize_key_identifier with URL - #find_keys with un-bracketed wrong email-address - #find_keys with correctly marked narrower sub-string - #gpgcli returns correct data types - #find_keys with bracketed wrong email-address - #normalize_key_identifier with un-bracketed email-address - #keyimport with unusable data - #find_keys without argument - #normalize_key_identifier with some string - #find_keys with un-marked sub-string - #normalize_key_identifier with un-prefixed fingerprint - #find_keys with un-prefixed fingerprint - #normalize_key_identifier with bracketed email-address - #find_keys with un-bracketed email-address - #normalize_key_identifier with prefixed fingerprint - #find_keys with bracketed email-address - #find_keys with correctly marked sub-string - #find_keys with prefixed fingerprint +status + returns status code 200 Schleuder::LoggerNotifications - includes a List-Id header in notification mails sent to admins notifies admins encryptedly if their key is usable - notifies admins of simple text-message - notifies admins in the clear if their key is unusable notifies admins of multiple text-messages and the original message + includes a List-Id header in notification mails sent to admins + notifies admins in the clear if their key is unusable notifies admins of multiple text-messages + notifies admins of simple text-message return path - sets default superadmin sets superadmin - -Schleuder::Filters::Runner - is expected to respond to #run - loading filters - 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 custom filters from filters_dir and sorts them in with missing dir - loads filters from built-in filters_dir sorts them - #run - stops on a StandardError and returns error even on headers match - stops on a StandardError and returns error - runs the filters - stops on a StandardError and returns error even with bounces_drop_all - -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 - delivers a signed error message if a subscription's key is expired on a encrypted-only list - 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 an attached pgp key as application/octet-stream - injects pseudoheaders appropriately into an unsigned thunderbird-multipart/alternative-message - 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 - does not throw an error on emails with broken utf-8 - 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 - Quoted-Printable encoding - is handled properly in cleartext emails - is handled properly in encrypted+signed emails - is handled properly in encrypted emails - with a plain text message - does not deliver content if send_encrypted_only is set to true - 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 open pgp header if include_openpgp_header is set to true - contains the list headers if include_list_headers is set to true - doesn't have unwanted headerlines from the original message - delivers the incoming message - does keep the Message-Id as configured - contains the specified pseudoheaders in the correct order - has the correct headerlines - does not contain the Autocrypt header if include_autocrypt_header is set to false - includes the internal_footer - 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 - 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 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 - -Schleuder::Filters - .fix_exchange_messages - fixes pgp/mime-messages that were mangled by Exchange - works with a text/plain message - .key_auto_import_from_autocrypt_header - imports key and reports the change - does not import key if sender address does not match key UID, regardless of Autocrypt addr attribute - only imports the one key that matches the sender address if keydata contains more than one key - imports key and reports no change - imports key and reports new key - .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 - .key_auto_import_from_attachments - imports key and reports the change - does not import key if sender address does not match key UID - does not import key if attachment has a different content-type than "application/pgp-keys" - only imports the one key that matches the sender address if keydata contains more than one key - imports key and reports no change - imports key and reports new key - .strip_html_from_alternative_if_keywords_present - strips related-part from encapsulated multipart/alternative-part that contains keywords - does NOT strip HTML-part from multipart/alternative-message that does NOT contain keywords - strips HTML-part from multipart/alternative-message that contains keywords - does not choke on nor change a message without Content-Type-header - .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 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 non-subscribed address as From-header if list.receive_from_subscribed_emailaddresses_only is not set - -Schleuder::Conf - reads ERB code in config files - -status - returns status code 200 - -KeywordHandlersRunner - requires X-LIST-NAME - returns an error message if keyword is configured as admin-only - does not require mandatory keywords if no keywords are present - loads additional keyword handlers - stores a keyword that was registered - notifies admins - rejects X-LIST-NAME with mismatching argument - rejects unknown keywords - -a bounce message is received - from bounce example + sets default superadmin Schleuder::KeywordHandlers::KeyManagement registers keywords .add_key imports from attached quoted-printable ascii-armored key-material - imports a key from attached explicitly base64-encoded binary material - imports from an inline mix of ascii-armored key and non-key material - imports from attached quoted-printable key-material (as produced by Thunderbird 115) ignores body if an ascii-armored attachment is present + imports a key from attached acsii-armored material + imports from an inline mix of ascii-armored key and non-key material + imports a key from inline ascii-armored material ignores arguments + rejects garbage imports from attached quoted-printable binary key-material (as produced by Mutt 2.0.5) updates a key - imports a key from inline ascii-armored material - imports a key from attached quoted-printable binary material imports a key from attached binary material (without specified encoding) - rejects garbage - imports a key from attached acsii-armored material + imports from attached quoted-printable key-material (as produced by Thunderbird 115) + imports a key from attached quoted-printable binary material + imports a key from attached explicitly base64-encoded binary material .delete_key + deletes multiple keys that each distinctly match one argument sends error message if no argument is given + 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 - deletes no key if the argument does not match - -Errors - ::MessageUnencrypted shows sensible string in response to to_s() - ::MessageEmpty 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() - ::KeywordAdminOnly shows sensible string in response to to_s() - ::KeyGenerationFailed shows sensible string in response to to_s() - ::MessageNotFromAdmin 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() - ::TooManyKeys shows sensible string in response to to_s() - ::ListdirProblem shows sensible string in response to to_s() - ::KeyAdduidFailed shows sensible string in response to to_s() - ::ListNotFound shows sensible string in response to to_s() - ::DecryptionFailed shows sensible string in response to to_s() - ::MessageUnsigned shows sensible string in response to to_s() - -Schleuder::Subscription - is invalid if the given email is already subscribed for the list - is expected to respond to #delivery_enabled - removes whitespaces and 0x from the fingerprint - downcases all letters of an email address - is invalid when email is nil - is valid when fingerprint is empty - is expected to respond to #fingerprint - is valid when fingerprint is nil - is expected to respond to #list_id - is invalid when fingerprint contains invalid characters - is invalid when email is blank - is invalid if admin is nil - is invalid when email does not contain an @ - formats email address when email begins with a space - is invalid if admin is blank - has a valid factory - is invalid if delivery_enabled is nil - is expected to respond to #email - is invalid when list_id is blank - is expected to respond to #admin - is invalid if delivery_enabled is blank - #fingerprint - transforms the fingerprint to upper case -Schleuder::ListBuilder - subscribes the adminaddress and ignores the adminfingerprint if an adminkey was given - 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 respects the given adminfingerprint - subscribes the adminaddress and imports the adminkey - creates a new, valid list - returns an error-message if given an invalid email-address - creates a listdir for the list +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 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 + .key_auto_import_from_autocrypt_header + successfully validates a signature, whose previously unknown key is in the autocrypt-header + .fix_exchange_messages! + accepts an invalid pgp/mime Exchange message + accepts a valid plain-text message .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 + .max_message_size + bounces to big mails + +Schleuder::KeywordHandlers::SignThis + signs body content if no attachments are present + signs attachment (even if a body is present) + responds to the configured keyword method + +Schleuder::Filters::Runner + is expected to respond to #run + #run + stops on a StandardError and returns error even on headers match + runs the filters + stops on a StandardError and returns error + stops on a StandardError and returns error even with bounces_drop_all + 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 user sends emails with different charsets - works with simple_latin1 - works with japanese - works with simple_utf8 - works with japanese_attachment - works with ks_c_5601-1987 works with japanese_attachment_long_name works with japanese_iso_2022 - works with japanese_shift_jis - works with simple_jpiso2022 - works with signed_utf8 works with simple_jis + works with ks_c_5601-1987 + works with japanese_attachment works with thunderbird-multi-alt-html + works with simple_latin1 + works with japanese_shift_jis + works with japanese + works with simple_utf8 + works with signed_utf8 + works with simple_jpiso2022 -Schleuder::KeyFetcher - #fetch - reports an error if both, vks_keyserver and sks_keyserver, are blank - fetches one key by email from VKS if vks_keyserver is set - fetches one key by fingerprint from SKS if vks_keyserver is blank - reports an error from trying to import non-key-material - reports the returned body content when receiving an unexpected HTTP status from the server - fetches one key by fingerprint from VKS if vks_keyserver is set - fetches one key from a good URL - fetches one key by email from SKS if vks_keyserver is blank - reports an error from trying to fetch an URL that doesn't exist - -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 +GPGME::Ctx + #find_keys without argument + #normalize_key_identifier with un-prefixed fingerprint + #keyimport with unusable data + #keyimport + #find_keys with un-marked sub-string + #normalize_key_identifier with bracketed email-address + #normalize_key_identifier with URL + #find_keys with bracketed email-address + #gpgcli returns correct data types + #find_keys with un-bracketed email-address + #find_keys with prefixed fingerprint + #find_keys with un-bracketed wrong email-address + #normalize_key_identifier with un-bracketed email-address + #find_keys with un-prefixed fingerprint + #find_keys with correctly marked narrower sub-string + #find_keys with correctly marked sub-string + #find_keys with bracketed wrong email-address + #normalize_key_identifier with prefixed fingerprint + #normalize_key_identifier with some string -protected subject - is included as mime-part in body - works with mutt protected headers - is included in mime-headers - don't block request-messages - is not leaked - recognizes keywords in mails with protected headers and empty subject +KeywordHandlersRunner + returns an error message if keyword is configured as admin-only + stores a keyword that was registered + loads additional keyword handlers + requires X-LIST-NAME + rejects X-LIST-NAME with mismatching argument + does not require mandatory keywords if no keywords are present + notifies admins + rejects unknown keywords -cli - #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 - #refresh_keys - warns about file system permissions if it was run as root - updates keys from the keyserver - reports errors from refreshing keys - updates keys from the keyserver for only a specific list +Schleuder::Conf + reads ERB code in config files -Schleuder::List - is invalid if max_message_size_kb is 0 - is invalid if receive_admin_only is blank - is invalid if include_list_headers is blank - is invalid if receive_encrypted_only is blank - is expected to respond to #receive_signed_only - is expected to respond to #log_level - is invalid if bounces_drop_on_headers contains special characters - is invalid if include_list_headers is nil - is invalid if receive_signed_only is nil - is invalid if include_openpgp_header is nil - is invalid when fingerprint is blank - is invalid if subject_prefix_out contains a linebreak - is invalid if receive_authenticated_only is blank - is expected to respond to #include_openpgp_header - is expected to respond to #subject_prefix - is invalid if include_list_headers is nil - is invalid if munge_from is blank - is invalid if logfiles_to_keep is 0 - is invalid if deliver_selfsent is nil - is invalid when fingerprint is nil - has a valid factory - is expected to respond to #logfiles_to_keep - is expected to respond to #headers_to_meta - is invalid if keywords_admin_notify contains special characters - is expected to respond to #key_auto_import_from_email - is invalid if receive_admin_only is nil - is invalid if receive_authenticated_only is nil - is invalid when fingerprint contains invalid characters - is valid if headers_to_meta does not contain special characters - is invalid if language is jp - is invalid if bounces_notify_admins is blank - is invalid when email does not contain an @ - is invalid if subject_prefix_in contains a linebreak - is invalid if forward_all_incoming_to_admins is blank - is invalid if send_encrypted_only is blank - is invalid if receive_encrypted_only is nil - is invalid if bounces_drop_all is nil - is invalid if include_openpgp_header is blank - is invalid if bounces_notify_admins is nil - is invalid if deliver_selfsent is blank - is expected to respond to #receive_admin_only - is invalid if headers_to_meta contains special characters - is invalid if log_level is foobar - is invalid if receive_signed_only is blank - is expected to respond to #send_encrypted_only - is expected to respond to #set_reply_to_to_sender - is expected to respond to #bounces_drop_all - is expected to respond to #public_footer - is expected to respond to #deliver_selfsent - is invalid if subject_prefix contains a linebreak - is invalid when email is blank - is expected to respond to #receive_from_subscribed_emailaddresses_only - is expected to respond to #include_list_headers - is invalid if munge_from is nil - is invalid if keep_msgid is nil - is expected to respond to #bounces_drop_on_headers - is expected to respond to #openpgp_header_preference - is expected to respond to #keywords_admin_only - is expected to respond to #max_message_size_kb - is expected to respond to #fingerprint - is valid if keywords_admin_notify does not contain special characters - is expected to respond to #keep_msgid - is invalid if openpgp_header_preference is foobar - is invalid if forward_all_incoming_to_admins is nil - is invalid when email is nil - is invalid if set_reply_to_to_sender is nil - is expected to respond to #subscriptions - is invalid if keep_msgid is blank - is valid if subject_prefix_out is nil - is expected to respond to #subject_prefix_out - is valid if subject_prefix_in is nil - is invalid if receive_from_subscribed_emailaddresses_only is blank - is expected to respond to #bounces_notify_admins - is expected to respond to #receive_encrypted_only - exports the key with the given fingerprint - is expected to respond to #language - is expected to respond to #receive_authenticated_only - is expected to respond to #internal_footer - is valid if subject_prefix is nil - is expected to respond to #forward_all_incoming_to_admins - is expected to respond to #subject_prefix_in - is invalid if set_reply_to_to_sender is blank - is invalid if receive_from_subscribed_emailaddresses_only is nil - is expected to respond to #munge_from - is invalid if bounces_drop_all is blank - is invalid if send_encrypted_only is nil - is invalid when email contains a space - is valid if keywords_admin_only does not contain special characters - is invalid if public_footer includes a non-printable character - is invalid if include_list_headers is blank - is expected to respond to #keywords_admin_notify - is expected to respond to #email - is invalid if keywords_admin_only contains special characters - is invalid if internal_footer includes a non-printable character - #logger - calls the ListLogger - #refresh_keys - reports errors from refreshing keys - updates keys from the keyserver - does not import non-self-signatures - #export_key - exports the key with the fingerprint of the list if no argument is given - #import_key - imports a given key - #admins - returns subscriptions of admin users - #secret_key - returns the secret key with the fingerprint of the list - #set_reply_to_to_sender - prefers reply_to of the sender over from when existing - is disabled by default - sets reply-to to senders from-address when enabled - does not set reply_to mail address when disabled - .configurable_attributes - does not contain the attributes email and fingerprint - returns an array that contains the configurable attributes - #gpg - returns an instance of GPGME::Ctx - sets the GNUPGHOME environment variable to the listdir - #fetch_keys - fetches one key by email address - fetches one key by fingerprint - does not import non-self-signatures - fetches one key by URL - #keys - 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 - returns an array with the keys matching the given bracketed email address - #fingerprint - removes whitespaces and 0x from the fingerprint - transforms the fingerprint to upper case - #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 - returns the key with the fingerprint of the list - send_list_key_to_subscriptions - sends its key to all subscriptions - .by_recipient - returns the list for a given address - #munge_from - does not munge from address when disabled - is disabled by default - sets from to munged version when enabled - #subscribe - subscribes and sets the fingerprint from key material that contains exactly one key - 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 does not set the fingerprint from key material containing no keys - #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 - #check_keys - 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 disabled - adds a message if a key is revoked - #bounce_address - adds the bounce keyword to the email address - #logfile - returns the logfile path - #owner_address - adds the owner keyword to the email address - #request_address - adds the request keyword to the email address - #send_to_subscriptions - 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 true 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 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 - 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 - #to_s - returns the email +Schleuder::Runner + #run + does not throw an error on emails with broken utf-8 + delivers a signed error message if a subscription's key is not available 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 with large first mime-part + delivers a signed error message if a subscription's key is expired on a encrypted-only list + injects pseudoheaders appropriately into an unsigned thunderbird-multipart/alternative-message + does not throw an error on encrypted but unsigned emails that contain a forwarded encrypted email + 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 + 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 a passphrase and returns DecryptionFailed error + handles a mail which was encrypted to an absent key and returns DecryptionFailed error + handles a mail containing PGP-garbage and returns DecryptionFailed error + Quoted-Printable encoding + is handled properly in cleartext emails + is handled properly in encrypted 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 a plain text message + 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 + has the correct headerlines + does not include the public_footer + delivers the incoming message + includes the internal_footer + 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 deliver content if send_encrypted_only is set to true + contains the open pgp header if include_openpgp_header is set to true + contains the specified pseudoheaders in the correct order + doesn't have unwanted headerlines from the original message + after keyword parsing + falling back works also with non-ascii content + falls back to default charset per RFC if none is set -Finished in 4 minutes 39.6 seconds (files took 2.15 seconds to load) +Finished in 5 minutes 34 seconds (files took 3.49 seconds to load) 583 examples, 0 failures -Randomized with seed 19765 +Randomized with seed 51898 ┌──────────────────────────────────────────────────────────────────────────────┐ @@ -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-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 + 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 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,26 @@ 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/3757064/tmp/hooks/B01_cleanup starting +I: user script /srv/workspace/pbuilder/3757064/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 +W: Stray processes left from build: +* system-pbuilder-build-schleuder_5.0.1\x2d2-3757064.slice - Slice /system/pbuilder/build/schleuder_5.0.1-2/3757064 + Loaded: loaded + Active: active since Mon 2026-08-03 04:34:43 +14; 7min ago + Tasks: 1 + Memory: 348.7M + CPU: 3min 47.677s + CGroup: /system.slice/system-pbuilder.slice/system-pbuilder-build.slice/system-pbuilder-build-schleuder_5.0.1\x2d2.slice/system-pbuilder-build-schleuder_5.0.1\x2d2-3757064.slice + `-run-r6e1f30fcf9ee49f18090ac4485bc94c4.scope + `-3968621 gpg-agent --homedir /tmp/d20260802-3807193-us6c0s --use-standard-socket --daemon + +Aug 03 04:34:43 codethink03-arm64 systemd[1]: Created slice system-pbuilder-build-schleuder_5.0.1\x2d2-3757064.slice - Slice /system/pbuilder/build/schleuder_5.0.1-2/3757064. I: cleaning the build env -I: removing directory /srv/workspace/pbuilder/121862 and its subdirectories -I: Current time: Sun Jun 29 20:11:33 -12 2025 -I: pbuilder-time-stamp: 1751271093 +I: removing directory /srv/workspace/pbuilder/3757064 and its subdirectories +I: Current time: Mon Aug 3 04:42:01 +14 2026 +I: pbuilder-time-stamp: 1785681721