schleuder 2.2.4 → 3.2.2

Sign up to get free protection for your applications and to get access to all the features.
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