schleuder 2.2.4 → 3.2.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (141) hide show
  1. checksums.yaml +5 -5
  2. data/README.md +138 -0
  3. data/Rakefile +136 -0
  4. data/bin/pinentry-clearpassphrase +72 -0
  5. data/bin/schleuder +9 -89
  6. data/bin/schleuder-api-daemon +4 -0
  7. data/db/migrate/20140501103532_create_lists.rb +39 -0
  8. data/db/migrate/20140501112859_create_subscriptions.rb +21 -0
  9. data/db/migrate/201508092100_add_language_to_lists.rb +11 -0
  10. data/db/migrate/20150812165700_change_keywords_admin_only_defaults.rb +8 -0
  11. data/db/migrate/20150813235800_add_forward_all_incoming_to_admins.rb +11 -0
  12. data/db/migrate/201508141727_change_send_encrypted_only_default.rb +8 -0
  13. data/db/migrate/201508222143_add_logfiles_to_keep_to_lists.rb +11 -0
  14. data/db/migrate/201508261723_rename_delivery_disabled_to_delivery_enabled_and_change_default.rb +14 -0
  15. data/db/migrate/201508261815_strip_gpg_passphrase.rb +11 -0
  16. data/db/migrate/201508261827_remove_default_mime.rb +9 -0
  17. data/db/migrate/20160501172700_fix_headers_to_meta_defaults.rb +8 -0
  18. data/db/migrate/20170713215059_add_internal_footer_to_list.rb +11 -0
  19. data/db/schema.rb +62 -0
  20. data/etc/init.d/schleuder-api-daemon +87 -0
  21. data/etc/list-defaults.yml +123 -0
  22. data/etc/postfix/schleuder_sqlite.cf +28 -0
  23. data/etc/schleuder-api-daemon.service +10 -0
  24. data/etc/schleuder.cron.weekly +6 -0
  25. data/etc/schleuder.yml +61 -0
  26. data/lib/schleuder-api-daemon.rb +420 -0
  27. data/lib/schleuder.rb +81 -47
  28. data/lib/schleuder/cli.rb +334 -0
  29. data/lib/schleuder/cli/cert.rb +24 -0
  30. data/lib/schleuder/cli/schleuder_cert_manager.rb +84 -0
  31. data/lib/schleuder/cli/subcommand_fix.rb +11 -0
  32. data/lib/schleuder/conf.rb +131 -0
  33. data/lib/schleuder/errors/active_model_error.rb +15 -0
  34. data/lib/schleuder/errors/base.rb +17 -0
  35. data/lib/schleuder/errors/decryption_failed.rb +16 -0
  36. data/lib/schleuder/errors/fatal_error.rb +13 -0
  37. data/lib/schleuder/errors/file_not_found.rb +14 -0
  38. data/lib/schleuder/errors/invalid_listname.rb +13 -0
  39. data/lib/schleuder/errors/key_adduid_failed.rb +13 -0
  40. data/lib/schleuder/errors/key_generation_failed.rb +16 -0
  41. data/lib/schleuder/errors/keyword_admin_only.rb +13 -0
  42. data/lib/schleuder/errors/list_exists.rb +13 -0
  43. data/lib/schleuder/errors/list_not_found.rb +14 -0
  44. data/lib/schleuder/errors/list_property_missing.rb +14 -0
  45. data/lib/schleuder/errors/listdir_problem.rb +16 -0
  46. data/lib/schleuder/errors/loading_list_settings_failed.rb +14 -0
  47. data/lib/schleuder/errors/message_empty.rb +14 -0
  48. data/lib/schleuder/errors/message_not_from_admin.rb +13 -0
  49. data/lib/schleuder/errors/message_sender_not_subscribed.rb +13 -0
  50. data/lib/schleuder/errors/message_too_big.rb +14 -0
  51. data/lib/schleuder/errors/message_unauthenticated.rb +13 -0
  52. data/lib/schleuder/errors/message_unencrypted.rb +13 -0
  53. data/lib/schleuder/errors/message_unsigned.rb +13 -0
  54. data/lib/schleuder/errors/standard_error.rb +5 -0
  55. data/lib/schleuder/errors/too_many_keys.rb +17 -0
  56. data/lib/schleuder/errors/unknown_list_option.rb +14 -0
  57. data/lib/schleuder/filters/auth_filter.rb +39 -0
  58. data/lib/schleuder/filters/bounces_filter.rb +12 -0
  59. data/lib/schleuder/filters/forward_filter.rb +17 -0
  60. data/lib/schleuder/filters/forward_incoming.rb +13 -0
  61. data/lib/schleuder/filters/hotmail_message_filter.rb +25 -0
  62. data/lib/schleuder/filters/max_message_size.rb +14 -0
  63. data/lib/schleuder/filters/request_filter.rb +26 -0
  64. data/lib/schleuder/filters/send_key_filter.rb +20 -0
  65. data/lib/schleuder/filters/strip_alternative_filter.rb +21 -0
  66. data/lib/schleuder/filters_runner.rb +83 -0
  67. data/lib/schleuder/gpgme/ctx.rb +274 -0
  68. data/lib/schleuder/gpgme/import_status.rb +27 -0
  69. data/lib/schleuder/gpgme/key.rb +212 -0
  70. data/lib/schleuder/gpgme/sub_key.rb +13 -0
  71. data/lib/schleuder/gpgme/user_id.rb +22 -0
  72. data/lib/schleuder/list.rb +318 -127
  73. data/lib/schleuder/list_builder.rb +139 -0
  74. data/lib/schleuder/listlogger.rb +31 -0
  75. data/lib/schleuder/logger.rb +23 -0
  76. data/lib/schleuder/logger_notifications.rb +69 -0
  77. data/lib/schleuder/mail/message.rb +482 -0
  78. data/lib/schleuder/mail/parts_list.rb +9 -0
  79. data/lib/schleuder/plugin_runners/base.rb +91 -0
  80. data/lib/schleuder/plugin_runners/list_plugins_runner.rb +24 -0
  81. data/lib/schleuder/plugin_runners/request_plugins_runner.rb +27 -0
  82. data/lib/schleuder/plugins/attach_listkey.rb +17 -0
  83. data/lib/schleuder/plugins/get_version.rb +7 -0
  84. data/lib/schleuder/plugins/key_management.rb +113 -0
  85. data/lib/schleuder/plugins/list_management.rb +15 -0
  86. data/lib/schleuder/plugins/resend.rb +196 -0
  87. data/lib/schleuder/plugins/sign_this.rb +46 -0
  88. data/lib/schleuder/plugins/subscription_management.rb +140 -0
  89. data/lib/schleuder/runner.rb +130 -0
  90. data/lib/schleuder/subscription.rb +98 -0
  91. data/lib/schleuder/validators/boolean_validator.rb +7 -0
  92. data/lib/schleuder/validators/email_validator.rb +7 -0
  93. data/lib/schleuder/validators/fingerprint_validator.rb +7 -0
  94. data/lib/schleuder/validators/greater_than_zero_validator.rb +7 -0
  95. data/lib/schleuder/validators/no_line_breaks_validator.rb +7 -0
  96. data/lib/schleuder/version.rb +1 -1
  97. data/locales/de.yml +179 -0
  98. data/locales/en.yml +179 -0
  99. metadata +305 -108
  100. checksums.yaml.gz.sig +0 -3
  101. data.tar.gz.sig +0 -2
  102. data/LICENSE +0 -339
  103. data/README +0 -32
  104. data/bin/schleuder-fix-gem-dependencies +0 -37
  105. data/bin/schleuder-init-setup +0 -37
  106. data/bin/schleuder-migrate-v2.1-to-v2.2 +0 -225
  107. data/bin/schleuder-newlist +0 -413
  108. data/contrib/check-expired-keys.rb +0 -60
  109. data/contrib/mutt-schleuder-colors.rc +0 -10
  110. data/contrib/mutt-schleuder-resend.vim +0 -24
  111. data/contrib/smtpserver.rb +0 -76
  112. data/ext/default-list.conf +0 -149
  113. data/ext/default-members.conf +0 -7
  114. data/ext/list.conf.example +0 -14
  115. data/ext/schleuder.conf +0 -64
  116. data/lib/schleuder/archiver.rb +0 -46
  117. data/lib/schleuder/crypt.rb +0 -210
  118. data/lib/schleuder/errors.rb +0 -5
  119. data/lib/schleuder/list_config.rb +0 -146
  120. data/lib/schleuder/log/listlogger.rb +0 -57
  121. data/lib/schleuder/log/outputter/emailoutputter.rb +0 -120
  122. data/lib/schleuder/log/outputter/metaemailoutputter.rb +0 -50
  123. data/lib/schleuder/log/schleuderlogger.rb +0 -34
  124. data/lib/schleuder/mail.rb +0 -873
  125. data/lib/schleuder/mailer.rb +0 -26
  126. data/lib/schleuder/member.rb +0 -69
  127. data/lib/schleuder/plugin.rb +0 -54
  128. data/lib/schleuder/processor.rb +0 -363
  129. data/lib/schleuder/schleuder_config.rb +0 -75
  130. data/lib/schleuder/storage.rb +0 -84
  131. data/lib/schleuder/utils.rb +0 -80
  132. data/man/schleuder-newlist.8 +0 -174
  133. data/man/schleuder.8 +0 -416
  134. data/plugins/README +0 -20
  135. data/plugins/manage_keys_plugin.rb +0 -113
  136. data/plugins/manage_members_plugin.rb +0 -156
  137. data/plugins/manage_self_plugin.rb +0 -26
  138. data/plugins/resend_plugin.rb +0 -35
  139. data/plugins/sign_this_plugin.rb +0 -14
  140. data/plugins/version_plugin.rb +0 -12
  141. metadata.gz.sig +0 -0
@@ -0,0 +1,4 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require_relative '../lib/schleuder-api-daemon'
4
+ SchleuderApiDaemon.run!
@@ -0,0 +1,39 @@
1
+ class CreateLists < ActiveRecord::Migration
2
+ def up
3
+ if ! table_exists?(:lists)
4
+ create_table :lists do |t|
5
+ t.timestamps
6
+ t.string :email
7
+ t.string :fingerprint
8
+ t.string :gpg_passphrase
9
+ t.string :log_level, default: 'warn'
10
+ t.string :default_mime, default: 'mime'
11
+ t.string :subject_prefix, default: ''
12
+ t.string :subject_prefix_in, default: ''
13
+ t.string :subject_prefix_out, default: ''
14
+ t.string :openpgp_header_preference, default: 'signencrypt'
15
+ t.text :public_footer, default: ''
16
+ t.text :headers_to_meta, default: '["from","to","date",":cc"]'
17
+ t.text :bounces_drop_on_headers, default: '{"x-spam-flag":"yes"}'
18
+ t.text :keywords_admin_only, default: '["unsubscribe", "unsubscribe", "delete-key"]'
19
+ t.text :keywords_admin_notify, default: '["add-key"]'
20
+ t.boolean :send_encrypted_only, default: false
21
+ t.boolean :receive_encrypted_only, default: false
22
+ t.boolean :receive_signed_only, default: false
23
+ t.boolean :receive_authenticated_only, default: false
24
+ t.boolean :receive_from_subscribed_emailaddresses_only, default: false
25
+ t.boolean :receive_admin_only, default: false
26
+ t.boolean :keep_msgid, default: true
27
+ t.boolean :bounces_drop_all, default: false
28
+ t.boolean :bounces_notify_admins, default: true
29
+ t.boolean :include_list_headers, default: true
30
+ t.boolean :include_openpgp_header, default: true
31
+ t.integer :max_message_size_kb, default: 10240
32
+ end
33
+ end
34
+
35
+ def down
36
+ drop_table(:lists)
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,21 @@
1
+ class CreateSubscriptions < ActiveRecord::Migration
2
+ def up
3
+ if ! table_exists?(:subscriptions)
4
+ create_table :subscriptions do |t|
5
+ t.integer :list_id
6
+ t.string :email
7
+ t.string :fingerprint
8
+ t.boolean :admin, default: false
9
+ t.boolean :delivery_disabled, default: false
10
+ t.timestamps
11
+ end
12
+
13
+ add_index :subscriptions, :list_id
14
+ add_index :subscriptions, [:email, :list_id], unique: true
15
+ end
16
+ end
17
+
18
+ def down
19
+ drop_table(:subscriptions)
20
+ end
21
+ end
@@ -0,0 +1,11 @@
1
+ class AddLanguageToLists < ActiveRecord::Migration
2
+ def up
3
+ if ! column_exists?(:lists, :language)
4
+ add_column :lists, :language, :string, default: 'en'
5
+ end
6
+ end
7
+
8
+ def down
9
+ remove_column(:lists, :language)
10
+ end
11
+ end
@@ -0,0 +1,8 @@
1
+ class ChangeKeywordsAdminOnlyDefaults < ActiveRecord::Migration
2
+ def up
3
+ change_column_default :lists, :keywords_admin_only, "[\"subscribe\", \"unsubscribe\", \"delete-key\"]"
4
+ end
5
+ def down
6
+ change_column_default :lists, :keywords_admin_only, "[\"unsubscribe\", \"unsubscribe\", \"delete-key\"]"
7
+ end
8
+ end
@@ -0,0 +1,11 @@
1
+ class AddForwardAllIncomingToAdmins < ActiveRecord::Migration
2
+ def up
3
+ if ! column_exists?(:lists, :forward_all_incoming_to_admins)
4
+ add_column :lists, :forward_all_incoming_to_admins, :boolean, default: false
5
+ end
6
+ end
7
+
8
+ def down
9
+ remove_column(:lists, :forward_all_incoming_to_admins)
10
+ end
11
+ end
@@ -0,0 +1,8 @@
1
+ class ChangeSendEncryptedOnlyDefault < ActiveRecord::Migration
2
+ def up
3
+ change_column_default :lists, :send_encrypted_only, true
4
+ end
5
+ def down
6
+ change_column_default :lists, :send_encrypted_only, false
7
+ end
8
+ end
@@ -0,0 +1,11 @@
1
+ class AddLogfilesToKeepToLists < ActiveRecord::Migration
2
+ def up
3
+ if ! column_exists?(:lists, :logfiles_to_keep)
4
+ add_column :lists, :logfiles_to_keep, :integer, default: 2
5
+ end
6
+ end
7
+
8
+ def down
9
+ remove_column(:lists, :logfiles_to_keep)
10
+ end
11
+ end
@@ -0,0 +1,14 @@
1
+ class RenameDeliveryDisabledToDeliveryEnabledAndChangeDefault < ActiveRecord::Migration
2
+ def up
3
+ if column_exists?(:subscriptions, :delivery_disabled)
4
+ rename_column :subscriptions, :delivery_disabled, :delivery_enabled
5
+ change_column_default :subscriptions, :delivery_enabled, true
6
+ end
7
+ end
8
+
9
+ def down
10
+ rename_column :subscriptions, :delivery_enabled, :delivery_disabled
11
+ change_column_default :subscriptions, :delivery_disabled, false
12
+ end
13
+ end
14
+
@@ -0,0 +1,11 @@
1
+ class StripGpgPassphrase < ActiveRecord::Migration
2
+ def up
3
+ if column_exists?(:lists, :gpg_passphrase)
4
+ remove_column :lists, :gpg_passphrase
5
+ end
6
+ end
7
+
8
+ def down
9
+ add_column :lists, :gpg_passphrase, :string
10
+ end
11
+ end
@@ -0,0 +1,9 @@
1
+ class RemoveDefaultMime < ActiveRecord::Migration
2
+ def up
3
+ remove_column :lists, :default_mime
4
+ end
5
+
6
+ def down
7
+ add_column :lists, :default_mime, :string, default: 'mime'
8
+ end
9
+ end
@@ -0,0 +1,8 @@
1
+ class FixHeadersToMetaDefaults < ActiveRecord::Migration
2
+ def up
3
+ change_column_default :lists, :headers_to_meta, '["from", "to", "date", "cc"]'
4
+ end
5
+
6
+ def down
7
+ end
8
+ end
@@ -0,0 +1,11 @@
1
+ class AddInternalFooterToList < ActiveRecord::Migration
2
+ def up
3
+ if ! column_exists?(:lists, :internal_footer)
4
+ add_column :lists, :internal_footer, :text, default: ''
5
+ end
6
+ end
7
+
8
+ def down
9
+ remove_column(:lists, :internal_footer)
10
+ end
11
+ end
@@ -0,0 +1,62 @@
1
+ # encoding: UTF-8
2
+ # This file is auto-generated from the current state of the database. Instead
3
+ # of editing this file, please use the migrations feature of Active Record to
4
+ # incrementally modify your database, and then regenerate this schema definition.
5
+ #
6
+ # Note that this schema.rb definition is the authoritative source for your
7
+ # database schema. If you need to create the application database on another
8
+ # system, you should be using db:schema:load, not running all the migrations
9
+ # from scratch. The latter is a flawed and unsustainable approach (the more migrations
10
+ # you'll amass, the slower it'll run and the greater likelihood for issues).
11
+ #
12
+ # It's strongly recommended that you check this file into your version control system.
13
+
14
+ ActiveRecord::Schema.define(version: 20170713215059) do
15
+
16
+ create_table "lists", force: :cascade do |t|
17
+ t.datetime "created_at"
18
+ t.datetime "updated_at"
19
+ t.string "email", limit: 255
20
+ t.string "fingerprint", limit: 255
21
+ t.string "log_level", limit: 255, default: "warn"
22
+ t.string "subject_prefix", limit: 255, default: ""
23
+ t.string "subject_prefix_in", limit: 255, default: ""
24
+ t.string "subject_prefix_out", limit: 255, default: ""
25
+ t.string "openpgp_header_preference", limit: 255, default: "signencrypt"
26
+ t.text "public_footer", default: ""
27
+ t.text "headers_to_meta", default: "[\"from\", \"to\", \"date\", \"cc\"]"
28
+ t.text "bounces_drop_on_headers", default: "{\"x-spam-flag\":\"yes\"}"
29
+ t.text "keywords_admin_only", default: "[\"subscribe\", \"unsubscribe\", \"delete-key\"]"
30
+ t.text "keywords_admin_notify", default: "[\"add-key\"]"
31
+ t.boolean "send_encrypted_only", default: true
32
+ t.boolean "receive_encrypted_only", default: false
33
+ t.boolean "receive_signed_only", default: false
34
+ t.boolean "receive_authenticated_only", default: false
35
+ t.boolean "receive_from_subscribed_emailaddresses_only", default: false
36
+ t.boolean "receive_admin_only", default: false
37
+ t.boolean "keep_msgid", default: true
38
+ t.boolean "bounces_drop_all", default: false
39
+ t.boolean "bounces_notify_admins", default: true
40
+ t.boolean "include_list_headers", default: true
41
+ t.boolean "include_openpgp_header", default: true
42
+ t.integer "max_message_size_kb", default: 10240
43
+ t.string "language", limit: 255, default: "en"
44
+ t.boolean "forward_all_incoming_to_admins", default: false
45
+ t.integer "logfiles_to_keep", default: 2
46
+ t.text "internal_footer", default: ""
47
+ end
48
+
49
+ create_table "subscriptions", force: :cascade do |t|
50
+ t.integer "list_id"
51
+ t.string "email", limit: 255
52
+ t.string "fingerprint", limit: 255
53
+ t.boolean "admin", default: false
54
+ t.boolean "delivery_enabled", default: true
55
+ t.datetime "created_at"
56
+ t.datetime "updated_at"
57
+ end
58
+
59
+ add_index "subscriptions", ["email", "list_id"], name: "index_subscriptions_on_email_and_list_id", unique: true
60
+ add_index "subscriptions", ["list_id"], name: "index_subscriptions_on_list_id"
61
+
62
+ end
@@ -0,0 +1,87 @@
1
+ #!/bin/sh
2
+
3
+ ### BEGIN INIT INFO
4
+ # Provides: schleuder-api-daemon
5
+ # Required-Start: $local_fs $remote_fs $network $syslog
6
+ # Required-Stop: $local_fs $remote_fs $network $syslog
7
+ # Default-Start: 2 3 4 5
8
+ # Default-Stop: 0 1 6
9
+ # Short-Description: Schleuder API daemon
10
+ # Description: Schleuder API daemon — provides access for schleuder-cli and schleuder-web
11
+ ### END INIT INFO
12
+
13
+ PATH=/sbin:/usr/sbin:/bin:/usr/bin
14
+
15
+ . /lib/init/vars.sh
16
+
17
+ . /lib/lsb/init-functions
18
+
19
+ NAME=schleuder-api-daemon
20
+ DAEMON=/usr/local/bin/schleuder-api-daemon
21
+ DESC="Schleuder API daemon"
22
+ PIDFILE=/var/run/$NAME.pid
23
+ USER=schleuder
24
+ GROUP=schleuder
25
+
26
+ test -x $DAEMON || exit 5
27
+
28
+ start_schleuder_api_daemon() {
29
+ if [ -f "$PIDFILE" ]; then
30
+ echo ""
31
+ log_failure_msg "$DESC is running already, please stop it first"
32
+ exit 1
33
+ fi
34
+
35
+ if ! id $USER >/dev/null 2>&1; then
36
+ log_failure_msg "User \"$USER\" does not exist"
37
+ exit 1
38
+ fi
39
+
40
+ if ! getent group $GROUP >/dev/null 2>&1; then
41
+ log_failure_msg "Group \"$GROUP\" does not exist"
42
+ exit 1
43
+ fi
44
+
45
+ start-stop-daemon --chuid "$USER":"$GROUP" --start --pidfile $PIDFILE --make-pidfile --background --startas $DAEMON -- $NAME
46
+ }
47
+
48
+ stop_schleuder_api_daemon() {
49
+ if [ -f "$PIDFILE" ]; then
50
+ start-stop-daemon --stop --retry TERM/10/KILL/5 --pidfile $PIDFILE --quiet --oknodo --pidfile "$PIDFILE"
51
+ rm -f $PIDFILE
52
+ fi
53
+ }
54
+
55
+ status_schleuder_api_daemon() {
56
+ if [ ! -e $PIDFILE ]; then
57
+ status_of_proc "${DAEMON}" "${DESC}"
58
+ else
59
+ status_of_proc -p "${PIDFILE}" "${DAEMON}" "${DESC}"
60
+ fi
61
+ }
62
+
63
+ case "$1" in
64
+ start)
65
+ log_begin_msg "Starting $DESC"
66
+ start_schleuder_api_daemon
67
+ log_end_msg $?
68
+ ;;
69
+ stop)
70
+ log_begin_msg "Stopping $DESC"
71
+ stop_schleuder_api_daemon
72
+ log_end_msg $?
73
+ ;;
74
+ status)
75
+ status_schleuder_api_daemon
76
+ ;;
77
+ restart|reload|force-reload)
78
+ log_begin_msg "Restarting $DESC"
79
+ stop_schleuder_api_daemon
80
+ start_schleuder_api_daemon
81
+ log_end_msg $?
82
+ ;;
83
+ *)
84
+ echo "Usage: $0 {start|stop|status|restart|reload|force-reload}"
85
+ exit 1
86
+ ;;
87
+ esac
@@ -0,0 +1,123 @@
1
+ # Setting default values for newly generated lists. Once a list is created it
2
+ # is not affected by these settings but has its own set of options in the
3
+ # database.
4
+ #
5
+ # The configuration format is yaml (http://www.yaml.org).
6
+ #
7
+ # Options are listed with the behaviour encoded in the database schema.
8
+
9
+ # Only send out enrypted emails to subscriptions?
10
+ # (This setting does not affect resend-messages.)
11
+ send_encrypted_only: true
12
+
13
+ # Allow only encrypted emails? If true, any other email will be bounced.
14
+ receive_encrypted_only: false
15
+
16
+ # Allow only emails that are validly signed? If true, any other email will be
17
+ # bounced.
18
+ receive_signed_only: false
19
+
20
+ # Allow only emails that are validly signed by a subscriber's key? If true,
21
+ # any other email will be bounced.
22
+ receive_authenticated_only: false
23
+
24
+ # Allow only emails being sent from subscribed addresses? If true, any other
25
+ # email will be bounced.
26
+ # NOTE: This is a very weak restriction mechanism on which you should not rely,
27
+ # as sending addresses can easily be faked! We recommend you to rather
28
+ # rely on the `receive_authenticated_only` option. Setting the
29
+ # `receive_authenticated_only` option to true, will authenticated senders
30
+ # based on the signature on the mail, which is the strongest
31
+ # authentication mechanism you can get.
32
+ # This option could be useful, if you would like to have a closed
33
+ # mailinglist, but could not yet get all subscribers to properly use GPG.
34
+ receive_from_subscribed_emailaddresses_only: false
35
+
36
+ # Allow only emails that are validly signed by a list-admin's key.
37
+ # This is useful for newsletters, announce or notification lists
38
+ receive_admin_only: false
39
+
40
+ # Which headers to include from the original mail.
41
+ headers_to_meta:
42
+ - from
43
+ - to
44
+ - cc
45
+ - date
46
+
47
+ # Preserve the Message-IDs (In-Reply-To, References) from the incoming email.
48
+ # This setting can lead to information leakage, as replies are connectable
49
+ # and a thread of (encrypted) messages can be built by an eavesdropper.
50
+ keep_msgid: true
51
+
52
+ # Which keywords ("email-commands") should be restricted to list-admins?
53
+ keywords_admin_only:
54
+ - subscribe
55
+ - unsubscribe
56
+ - delete-key
57
+
58
+ # For which keywords should the list-admins receive a notice whenever it
59
+ # triggers a command.
60
+ keywords_admin_notify:
61
+ - add-key
62
+
63
+ # Footer to append to each email that is sent to a subscribed address. Will not
64
+ # be included in messages to non-subscribed addresses.
65
+ internal_footer:
66
+
67
+ # Footer to append to each email that is sent to non-subscribed addresses. Will
68
+ # not be included in messages to subscribed addresses.
69
+ public_footer:
70
+
71
+ # Prefix to be inserted into the subject of every email that is validly signed
72
+ # by a subscribed address.
73
+ subject_prefix:
74
+
75
+ # Prefix to be inserted into the subject of every email that is *not* validly
76
+ # signed by a subscribed address.
77
+ subject_prefix_in:
78
+
79
+ # Prefix to be inserted into the subject of every email that has been
80
+ # resent to a non-subscribed address.
81
+ subject_prefix_out:
82
+
83
+ # Drop any bounces (incoming emails not passing the receive_*_only-rules)?
84
+ bounces_drop_all: false
85
+
86
+ # Drop bounces if they match one of these headers. Must be a hash, keys
87
+ # and values are case insensitive.
88
+ bounces_drop_on_headers:
89
+ x-spam-flag: yes
90
+
91
+ # Send a notice to the list-admins whenever an email is bounced or dropped?
92
+ bounces_notify_admins: true
93
+
94
+ # Include RFC-compliant List-* Headers into emails?
95
+ include_list_headers: true
96
+
97
+ # Include OpenPGP-Header into emails?
98
+ include_openpgp_header: true
99
+
100
+ # Prefered way to receive emails to note in OpenPGP-Header
101
+ # ('sign'|'encrypt'|'signencrypt'|'unprotected'|'none')
102
+ openpgp_header_preference: signencrypt
103
+
104
+ # Maximum size of emails allowed on the list, in kilobyte. All others will be
105
+ # bounced.
106
+ max_message_size_kb: 10240
107
+
108
+ # How verbose to log on the list-level (Notifications will be sent to
109
+ # list-admins)? Error, warn, info, or debug.
110
+ log_level: warn
111
+
112
+ # How many logfiles to keep, including the current one.
113
+ # Logfiles are rotated daily, so 2 means: delete logfiles older than
114
+ # yesterday. Values lower than 1 are ignored.
115
+ logfiles_to_keep: 2
116
+
117
+ # Which language to use for automated replies, error-messages, etc.
118
+ # Available: en, de.
119
+ language: en
120
+
121
+ # Forward a raw copy of all incoming emails to the list-admins?
122
+ # Mainly useful for debugging.
123
+ forward_all_incoming_to_admins: false