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.
- checksums.yaml +5 -5
- data/README.md +138 -0
- data/Rakefile +136 -0
- data/bin/pinentry-clearpassphrase +72 -0
- data/bin/schleuder +9 -89
- data/bin/schleuder-api-daemon +4 -0
- data/db/migrate/20140501103532_create_lists.rb +39 -0
- data/db/migrate/20140501112859_create_subscriptions.rb +21 -0
- data/db/migrate/201508092100_add_language_to_lists.rb +11 -0
- data/db/migrate/20150812165700_change_keywords_admin_only_defaults.rb +8 -0
- data/db/migrate/20150813235800_add_forward_all_incoming_to_admins.rb +11 -0
- data/db/migrate/201508141727_change_send_encrypted_only_default.rb +8 -0
- data/db/migrate/201508222143_add_logfiles_to_keep_to_lists.rb +11 -0
- data/db/migrate/201508261723_rename_delivery_disabled_to_delivery_enabled_and_change_default.rb +14 -0
- data/db/migrate/201508261815_strip_gpg_passphrase.rb +11 -0
- data/db/migrate/201508261827_remove_default_mime.rb +9 -0
- data/db/migrate/20160501172700_fix_headers_to_meta_defaults.rb +8 -0
- data/db/migrate/20170713215059_add_internal_footer_to_list.rb +11 -0
- data/db/schema.rb +62 -0
- data/etc/init.d/schleuder-api-daemon +87 -0
- data/etc/list-defaults.yml +123 -0
- data/etc/postfix/schleuder_sqlite.cf +28 -0
- data/etc/schleuder-api-daemon.service +10 -0
- data/etc/schleuder.cron.weekly +6 -0
- data/etc/schleuder.yml +61 -0
- data/lib/schleuder-api-daemon.rb +420 -0
- data/lib/schleuder.rb +81 -47
- data/lib/schleuder/cli.rb +334 -0
- data/lib/schleuder/cli/cert.rb +24 -0
- data/lib/schleuder/cli/schleuder_cert_manager.rb +84 -0
- data/lib/schleuder/cli/subcommand_fix.rb +11 -0
- data/lib/schleuder/conf.rb +131 -0
- data/lib/schleuder/errors/active_model_error.rb +15 -0
- data/lib/schleuder/errors/base.rb +17 -0
- data/lib/schleuder/errors/decryption_failed.rb +16 -0
- data/lib/schleuder/errors/fatal_error.rb +13 -0
- data/lib/schleuder/errors/file_not_found.rb +14 -0
- data/lib/schleuder/errors/invalid_listname.rb +13 -0
- data/lib/schleuder/errors/key_adduid_failed.rb +13 -0
- data/lib/schleuder/errors/key_generation_failed.rb +16 -0
- data/lib/schleuder/errors/keyword_admin_only.rb +13 -0
- data/lib/schleuder/errors/list_exists.rb +13 -0
- data/lib/schleuder/errors/list_not_found.rb +14 -0
- data/lib/schleuder/errors/list_property_missing.rb +14 -0
- data/lib/schleuder/errors/listdir_problem.rb +16 -0
- data/lib/schleuder/errors/loading_list_settings_failed.rb +14 -0
- data/lib/schleuder/errors/message_empty.rb +14 -0
- data/lib/schleuder/errors/message_not_from_admin.rb +13 -0
- data/lib/schleuder/errors/message_sender_not_subscribed.rb +13 -0
- data/lib/schleuder/errors/message_too_big.rb +14 -0
- data/lib/schleuder/errors/message_unauthenticated.rb +13 -0
- data/lib/schleuder/errors/message_unencrypted.rb +13 -0
- data/lib/schleuder/errors/message_unsigned.rb +13 -0
- data/lib/schleuder/errors/standard_error.rb +5 -0
- data/lib/schleuder/errors/too_many_keys.rb +17 -0
- data/lib/schleuder/errors/unknown_list_option.rb +14 -0
- data/lib/schleuder/filters/auth_filter.rb +39 -0
- data/lib/schleuder/filters/bounces_filter.rb +12 -0
- data/lib/schleuder/filters/forward_filter.rb +17 -0
- data/lib/schleuder/filters/forward_incoming.rb +13 -0
- data/lib/schleuder/filters/hotmail_message_filter.rb +25 -0
- data/lib/schleuder/filters/max_message_size.rb +14 -0
- data/lib/schleuder/filters/request_filter.rb +26 -0
- data/lib/schleuder/filters/send_key_filter.rb +20 -0
- data/lib/schleuder/filters/strip_alternative_filter.rb +21 -0
- data/lib/schleuder/filters_runner.rb +83 -0
- data/lib/schleuder/gpgme/ctx.rb +274 -0
- data/lib/schleuder/gpgme/import_status.rb +27 -0
- data/lib/schleuder/gpgme/key.rb +212 -0
- data/lib/schleuder/gpgme/sub_key.rb +13 -0
- data/lib/schleuder/gpgme/user_id.rb +22 -0
- data/lib/schleuder/list.rb +318 -127
- data/lib/schleuder/list_builder.rb +139 -0
- data/lib/schleuder/listlogger.rb +31 -0
- data/lib/schleuder/logger.rb +23 -0
- data/lib/schleuder/logger_notifications.rb +69 -0
- data/lib/schleuder/mail/message.rb +482 -0
- data/lib/schleuder/mail/parts_list.rb +9 -0
- data/lib/schleuder/plugin_runners/base.rb +91 -0
- data/lib/schleuder/plugin_runners/list_plugins_runner.rb +24 -0
- data/lib/schleuder/plugin_runners/request_plugins_runner.rb +27 -0
- data/lib/schleuder/plugins/attach_listkey.rb +17 -0
- data/lib/schleuder/plugins/get_version.rb +7 -0
- data/lib/schleuder/plugins/key_management.rb +113 -0
- data/lib/schleuder/plugins/list_management.rb +15 -0
- data/lib/schleuder/plugins/resend.rb +196 -0
- data/lib/schleuder/plugins/sign_this.rb +46 -0
- data/lib/schleuder/plugins/subscription_management.rb +140 -0
- data/lib/schleuder/runner.rb +130 -0
- data/lib/schleuder/subscription.rb +98 -0
- data/lib/schleuder/validators/boolean_validator.rb +7 -0
- data/lib/schleuder/validators/email_validator.rb +7 -0
- data/lib/schleuder/validators/fingerprint_validator.rb +7 -0
- data/lib/schleuder/validators/greater_than_zero_validator.rb +7 -0
- data/lib/schleuder/validators/no_line_breaks_validator.rb +7 -0
- data/lib/schleuder/version.rb +1 -1
- data/locales/de.yml +179 -0
- data/locales/en.yml +179 -0
- metadata +305 -108
- checksums.yaml.gz.sig +0 -3
- data.tar.gz.sig +0 -2
- data/LICENSE +0 -339
- data/README +0 -32
- data/bin/schleuder-fix-gem-dependencies +0 -37
- data/bin/schleuder-init-setup +0 -37
- data/bin/schleuder-migrate-v2.1-to-v2.2 +0 -225
- data/bin/schleuder-newlist +0 -413
- data/contrib/check-expired-keys.rb +0 -60
- data/contrib/mutt-schleuder-colors.rc +0 -10
- data/contrib/mutt-schleuder-resend.vim +0 -24
- data/contrib/smtpserver.rb +0 -76
- data/ext/default-list.conf +0 -149
- data/ext/default-members.conf +0 -7
- data/ext/list.conf.example +0 -14
- data/ext/schleuder.conf +0 -64
- data/lib/schleuder/archiver.rb +0 -46
- data/lib/schleuder/crypt.rb +0 -210
- data/lib/schleuder/errors.rb +0 -5
- data/lib/schleuder/list_config.rb +0 -146
- data/lib/schleuder/log/listlogger.rb +0 -57
- data/lib/schleuder/log/outputter/emailoutputter.rb +0 -120
- data/lib/schleuder/log/outputter/metaemailoutputter.rb +0 -50
- data/lib/schleuder/log/schleuderlogger.rb +0 -34
- data/lib/schleuder/mail.rb +0 -873
- data/lib/schleuder/mailer.rb +0 -26
- data/lib/schleuder/member.rb +0 -69
- data/lib/schleuder/plugin.rb +0 -54
- data/lib/schleuder/processor.rb +0 -363
- data/lib/schleuder/schleuder_config.rb +0 -75
- data/lib/schleuder/storage.rb +0 -84
- data/lib/schleuder/utils.rb +0 -80
- data/man/schleuder-newlist.8 +0 -174
- data/man/schleuder.8 +0 -416
- data/plugins/README +0 -20
- data/plugins/manage_keys_plugin.rb +0 -113
- data/plugins/manage_members_plugin.rb +0 -156
- data/plugins/manage_self_plugin.rb +0 -26
- data/plugins/resend_plugin.rb +0 -35
- data/plugins/sign_this_plugin.rb +0 -14
- data/plugins/version_plugin.rb +0 -12
- metadata.gz.sig +0 -0
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
|
-
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
2
|
+
SHA256:
|
|
3
|
+
metadata.gz: edc9a5383dea2704c0ea9cfaa947e657221b89a83ff693cc221c5649026711f5
|
|
4
|
+
data.tar.gz: 8c4117d91098a20ccb9d4f12146524eb8e7d701f60d9a77ce0573510b1dbeb42
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 25adeec03329d06994b3ebada2d8b0dd9f9e50ee8c83e5349496decacf9877e8388f2122656f984516f3b1d8f3872748d8b91366131cd6f21b4c2eef5caa915f
|
|
7
|
+
data.tar.gz: 83b6170572c99168c6b49471d2a34823b49e878f6d1c03ea5f65f7c9a7d999f80996c92813892942e1940822615ba17c4b8da9c864cc59c46b88f8730d5ebfed
|
data/README.md
ADDED
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
Schleuder, version 3
|
|
2
|
+
======================================
|
|
3
|
+
|
|
4
|
+
Schleuder is a gpg-enabled mailing list manager with resending-capabilities. Subscribers can communicate encrypted (and pseudonymously) among themselves, receive emails from non-subscribers and send emails to non-subscribers via the list.
|
|
5
|
+
|
|
6
|
+
Version 3 of schleuder is a complete rewrite, which aims to be more robust, flexible, and internationalized. It
|
|
7
|
+
also provides an API for the optional web interface called [schleuder-web](https://0xacab.org/schleuder/schleuder-web).
|
|
8
|
+
|
|
9
|
+
For more details see <https://schleuder.nadir.org/docs/>.
|
|
10
|
+
|
|
11
|
+
Requirements
|
|
12
|
+
------------
|
|
13
|
+
* ruby >=2.1
|
|
14
|
+
* gnupg 2.0.x, or >=2.1.16
|
|
15
|
+
* gpgme
|
|
16
|
+
* sqlite3
|
|
17
|
+
* openssl
|
|
18
|
+
|
|
19
|
+
*If you use Debian stretch or CentOS 7, please have a look at the [installation docs](https://schleuder.nadir.org/docs/#installation). We do provide packages for those platforms, which simplify the installation a lot.*
|
|
20
|
+
|
|
21
|
+
*🛈 A note regarding Ubuntu: All released Ubuntu versions (including 17.10) don't meet the requirements with their packaged versions of gnupg! To run Schleuder on Ubuntu you currently have to install a more recent version of gnupg manually. A sufficient version of gnupg is included in "bionic-proposed", which might make 18.04 a usable Ubuntu release.*
|
|
22
|
+
|
|
23
|
+
On systems that base on Debian 9 ("stretch"), install the dependencies via
|
|
24
|
+
|
|
25
|
+
apt-get install ruby-dev gnupg2 libgpgme-dev libsqlite3-dev libssl-dev build-essential
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
We **recommend** to also run a random number generator like [haveged](http://www.issihosts.com/haveged/). This ensures Schleuder won't be blocked by lacking entropy, which otherwise might happen especially during key generation.
|
|
29
|
+
|
|
30
|
+
On Debian based systems, install it via
|
|
31
|
+
|
|
32
|
+
apt-get install haveged
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
Additionally these **rubygems** are required (will be installed automatically unless present):
|
|
36
|
+
|
|
37
|
+
* rake
|
|
38
|
+
* active_record
|
|
39
|
+
* sqlite3
|
|
40
|
+
* thor
|
|
41
|
+
* thin
|
|
42
|
+
* mail-gpg
|
|
43
|
+
* sinatra
|
|
44
|
+
* sinatra-contrib
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
Installing Schleuder
|
|
48
|
+
------------
|
|
49
|
+
|
|
50
|
+
1. Download [the gem](https://schleuder.nadir.org/downloads/schleuder-3.2.2.gem) and [the OpenPGP-signature](https://schleuder.nadir.org/downloads/schleuder-3.2.2.gem.sig) and verify:
|
|
51
|
+
```
|
|
52
|
+
gpg --recv-key 0xB3D190D5235C74E1907EACFE898F2C91E2E6E1F3
|
|
53
|
+
gpg --verify schleuder-3.2.2.gem.sig
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
2. If all went well install the gem:
|
|
57
|
+
```
|
|
58
|
+
gem install schleuder-3.2.2.gem
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
3. Set up schleuder:
|
|
62
|
+
```
|
|
63
|
+
schleuder install
|
|
64
|
+
```
|
|
65
|
+
This creates neccessary directories, copies example configs, etc. If you see errors about missing write permissions please follow the advice given.
|
|
66
|
+
|
|
67
|
+
|
|
68
|
+
For further information on setup and configuration please read <https://schleuder.nadir.org/docs/#setup>.
|
|
69
|
+
|
|
70
|
+
|
|
71
|
+
Command line usage
|
|
72
|
+
-----------------
|
|
73
|
+
|
|
74
|
+
See `schleuder help`.
|
|
75
|
+
|
|
76
|
+
E.g.:
|
|
77
|
+
|
|
78
|
+
Commands:
|
|
79
|
+
schleuder check_keys # Check all lists for unusable or expiring keys and send the results to the list-admins. (This is supposed...
|
|
80
|
+
schleuder help [COMMAND] # Describe available commands or one specific command
|
|
81
|
+
schleuder install # Set up Schleuder initially. Create folders, copy files, fill the database, etc.
|
|
82
|
+
schleuder version # Show version of schleuder
|
|
83
|
+
schleuder work list@hostname < message # Run a message through a list.
|
|
84
|
+
|
|
85
|
+
List administration
|
|
86
|
+
-------------------
|
|
87
|
+
|
|
88
|
+
Please use
|
|
89
|
+
[schleuder-cli](https://0xacab.org/schleuder/schleuder-cli) to create and
|
|
90
|
+
manage lists from the command line.
|
|
91
|
+
|
|
92
|
+
Optionally consider installing
|
|
93
|
+
[schleuder-web](https://0xacab.org/schleuder/schleuder-web), the web
|
|
94
|
+
interface for schleuder. It enables list-admins to manage their lists through
|
|
95
|
+
the web instead of using [request-keywords](https://schleuder.nadir.org/docs/#subscription-and-key-management).
|
|
96
|
+
|
|
97
|
+
|
|
98
|
+
|
|
99
|
+
Todo
|
|
100
|
+
----
|
|
101
|
+
|
|
102
|
+
See <https://0xacab.org/schleuder/schleuder/issues>.
|
|
103
|
+
|
|
104
|
+
Testing
|
|
105
|
+
-------
|
|
106
|
+
We use rspec to test our code. To setup the test environment run:
|
|
107
|
+
|
|
108
|
+
|
|
109
|
+
SCHLEUDER_ENV=test SCHLEUDER_CONFIG=spec/schleuder.yml bundle exec rake db:init
|
|
110
|
+
|
|
111
|
+
To execute the test suite run:
|
|
112
|
+
|
|
113
|
+
bundle exec rspec
|
|
114
|
+
|
|
115
|
+
We are working on extendig the test coverage.
|
|
116
|
+
|
|
117
|
+
Contributing
|
|
118
|
+
------------
|
|
119
|
+
|
|
120
|
+
Please see [CONTRIBUTING.md](CONTRIBUTING.md).
|
|
121
|
+
|
|
122
|
+
|
|
123
|
+
Code of Conduct
|
|
124
|
+
---------------
|
|
125
|
+
|
|
126
|
+
We adopted a code of conduct. Please read [CODE_OF_CONDUCT.md](CODE_OF_CONDUCT.md).
|
|
127
|
+
|
|
128
|
+
|
|
129
|
+
License
|
|
130
|
+
-------
|
|
131
|
+
|
|
132
|
+
GNU GPL 3.0. Please see [LICENSE.txt](LICENSE.txt).
|
|
133
|
+
|
|
134
|
+
|
|
135
|
+
Alternative Download
|
|
136
|
+
--------------------
|
|
137
|
+
|
|
138
|
+
Alternatively to the gem-files you can download the latest release as [a tarball](https://schleuder.nadir.org/downloads/schleuder-3.2.2.tar.gz) and [its OpenPGP-signature](https://schleuder.nadir.org/downloads/schleuder-3.2.2.tar.gz.sig).
|
data/Rakefile
ADDED
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
project = 'schleuder'
|
|
2
|
+
require_relative "lib/#{project}.rb"
|
|
3
|
+
|
|
4
|
+
@version = Schleuder::VERSION
|
|
5
|
+
@tagname = "#{project}-#{@version}"
|
|
6
|
+
@gpguid = 'schleuder@nadir.org'
|
|
7
|
+
@filename_gem = "#{@tagname}.gem"
|
|
8
|
+
@filename_tarball = "#{@tagname}.tar.gz"
|
|
9
|
+
|
|
10
|
+
load "active_record/railties/databases.rake"
|
|
11
|
+
|
|
12
|
+
# Configure ActiveRecord
|
|
13
|
+
ActiveRecord::Tasks::DatabaseTasks.tap do |config|
|
|
14
|
+
config.root = File.dirname(__FILE__)
|
|
15
|
+
config.db_dir = 'db'
|
|
16
|
+
config.migrations_paths = ['db/migrate']
|
|
17
|
+
config.env = ENV['SCHLEUDER_ENV']
|
|
18
|
+
config.database_configuration = Schleuder::Conf.databases
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
# ActiveRecord requires this task to be present
|
|
22
|
+
Rake::Task.define_task("db:environment")
|
|
23
|
+
|
|
24
|
+
namespace :db do
|
|
25
|
+
# A shortcut.
|
|
26
|
+
task init: ['db:create', 'db:schema:load']
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
def edit_and_add_file(filename)
|
|
30
|
+
puts "Please edit #{filename} to refer to version #{@version}"
|
|
31
|
+
if system("gvim -f #{filename}.md")
|
|
32
|
+
`git add #{filename}.md`
|
|
33
|
+
else
|
|
34
|
+
exit 1
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
task :console do
|
|
39
|
+
exec "irb -r #{File.dirname(__FILE__)}/lib/schleuder.rb"
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
task :publish_gem => :website
|
|
43
|
+
task :git_tag => :check_version
|
|
44
|
+
|
|
45
|
+
desc "Build new version: git-tag and gem-file"
|
|
46
|
+
task :new_version => [
|
|
47
|
+
:check_version,
|
|
48
|
+
:edit_readme, :edit_changelog,
|
|
49
|
+
:git_add_version,
|
|
50
|
+
:git_commit,
|
|
51
|
+
:build_gem,
|
|
52
|
+
:sign_gem,
|
|
53
|
+
:build_tarball,
|
|
54
|
+
:sign_tarball,
|
|
55
|
+
:git_tag
|
|
56
|
+
] do
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
desc "Edit CHANGELOG.md"
|
|
60
|
+
task :edit_changelog do
|
|
61
|
+
edit_and_add_file('CHANGELOG')
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
desc "Edit README"
|
|
65
|
+
task :edit_readme do
|
|
66
|
+
edit_and_add_file('README')
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
desc 'git-tag HEAD as new version'
|
|
70
|
+
task :git_tag do
|
|
71
|
+
`git tag -u #{@gpguid} -s -m "Version #{@version}" #{@tagname}`
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
desc "Add changed version to git-index"
|
|
75
|
+
task :git_add_version do
|
|
76
|
+
`git add lib/#{project}/version.rb`
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
desc "Commit changes as new version"
|
|
80
|
+
task :git_commit do
|
|
81
|
+
`git commit -m "Version #{@version} (README, gems, ...)"`
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
desc 'Build, sign and commit a gem-file.'
|
|
85
|
+
task :build_gem do
|
|
86
|
+
`gem build #{project}.gemspec`
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
desc 'OpenPGP-sign gem and tarball'
|
|
90
|
+
task :sign_tarball do
|
|
91
|
+
`gpg -u #{@gpguid} -b #{@filename_gem}`
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
desc 'OpenPGP-sign gem'
|
|
95
|
+
task :sign_gem do
|
|
96
|
+
`gpg -u #{@gpguid} -b #{@filename_tarball}`
|
|
97
|
+
end
|
|
98
|
+
|
|
99
|
+
desc 'Publish gem-file to rubygems.org'
|
|
100
|
+
task :publish_gem do
|
|
101
|
+
puts "Really push #{@filename_gem} to rubygems.org? [yN]"
|
|
102
|
+
if gets.match(/^y/i)
|
|
103
|
+
puts "Pushing..."
|
|
104
|
+
`gem push #{@filename_gem}`
|
|
105
|
+
else
|
|
106
|
+
puts "Not pushed."
|
|
107
|
+
end
|
|
108
|
+
end
|
|
109
|
+
|
|
110
|
+
desc 'Build and sign a tarball'
|
|
111
|
+
task :build_tarball do
|
|
112
|
+
`git archive --format tar.gz --prefix "#{@tagname}/" -o #{@filename_tarball} master`
|
|
113
|
+
end
|
|
114
|
+
|
|
115
|
+
desc 'Describe manual release-tasks'
|
|
116
|
+
task :website do
|
|
117
|
+
puts "Please update the website:
|
|
118
|
+
* Update changelog.
|
|
119
|
+
* Publish release-announcement.
|
|
120
|
+
"
|
|
121
|
+
end
|
|
122
|
+
|
|
123
|
+
desc 'Check if version-tag already exists'
|
|
124
|
+
task :check_version do
|
|
125
|
+
# Check if Schleuder::VERSION has been updated since last release
|
|
126
|
+
if `git tag`.match?(/^#{@tagname}$/)
|
|
127
|
+
$stderr.puts "Warning: Tag '#{@tagname}' already exists. Did you forget to update #{project}/version.rb?"
|
|
128
|
+
$stderr.print "Delete tag to continue? [yN] "
|
|
129
|
+
if $stdin.gets.match(/^y/i)
|
|
130
|
+
`git tag -d #{@tagname}`
|
|
131
|
+
else
|
|
132
|
+
exit 1
|
|
133
|
+
end
|
|
134
|
+
end
|
|
135
|
+
end
|
|
136
|
+
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
#!/usr/bin/env ruby
|
|
2
|
+
|
|
3
|
+
# This file can be deleted once we cease to support gnupg 2.0.
|
|
4
|
+
|
|
5
|
+
require 'fileutils'
|
|
6
|
+
require 'cgi'
|
|
7
|
+
require 'openssl'
|
|
8
|
+
|
|
9
|
+
def respond(msg, flush=true)
|
|
10
|
+
$stdout.puts msg
|
|
11
|
+
if flush
|
|
12
|
+
$stdout.flush
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def send_ok(flush=true)
|
|
17
|
+
respond 'OK', flush
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def send_password
|
|
21
|
+
if File.exist?(OLDPWDSENTFILE)
|
|
22
|
+
pwd = ''
|
|
23
|
+
if File.exist?(EMPTYPWDSENTFILE1)
|
|
24
|
+
FileUtils.touch(EMPTYPWDSENTFILE2)
|
|
25
|
+
else
|
|
26
|
+
FileUtils.touch(EMPTYPWDSENTFILE1)
|
|
27
|
+
end
|
|
28
|
+
else
|
|
29
|
+
pwd = OLDPASSWD
|
|
30
|
+
FileUtils.touch(OLDPWDSENTFILE)
|
|
31
|
+
end
|
|
32
|
+
respond "D #{pwd}"
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
def do_exit
|
|
36
|
+
if File.exist?(EMPTYPWDSENTFILE2)
|
|
37
|
+
FileUtils.rm_rf(TMPDIR)
|
|
38
|
+
end
|
|
39
|
+
exit 0
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
OLDPASSWD = CGI.escape(ENV['PINENTRY_USER_DATA'].to_s)
|
|
43
|
+
if OLDPASSWD.empty?
|
|
44
|
+
respond "Fatal error: passed PINENTRY_USER_DATA was empty, cannot continue"
|
|
45
|
+
exit 1
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
# We need a static directory name to maintain the state across invocations of
|
|
49
|
+
# this file.
|
|
50
|
+
TMPDIR = File.join(ENV['GNUPGHOME'], '.tmp-pinentry-clearpassphrase')
|
|
51
|
+
OLDPWDSENTFILE = File.join(TMPDIR, '1')
|
|
52
|
+
EMPTYPWDSENTFILE1 = File.join(TMPDIR, '2')
|
|
53
|
+
EMPTYPWDSENTFILE2 = File.join(TMPDIR, '3')
|
|
54
|
+
if ! Dir.exist?(TMPDIR)
|
|
55
|
+
Dir.mkdir(TMPDIR)
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
respond "OK - what's up?"
|
|
59
|
+
|
|
60
|
+
while line = $stdin.gets do
|
|
61
|
+
case line
|
|
62
|
+
when /^GETPIN/
|
|
63
|
+
send_password
|
|
64
|
+
send_ok
|
|
65
|
+
when /^BYE/
|
|
66
|
+
send_ok false
|
|
67
|
+
do_exit
|
|
68
|
+
else
|
|
69
|
+
send_ok
|
|
70
|
+
end
|
|
71
|
+
end
|
|
72
|
+
|
data/bin/schleuder
CHANGED
|
@@ -1,96 +1,16 @@
|
|
|
1
1
|
#!/usr/bin/env ruby
|
|
2
2
|
|
|
3
|
-
# Don't
|
|
4
|
-
|
|
3
|
+
# Don't emit any warnings, they would be sent back to the email-sender as an
|
|
4
|
+
# error-message.
|
|
5
|
+
$VERBOSE=nil
|
|
5
6
|
|
|
6
|
-
|
|
7
|
-
# - make code comments rdoc-compatible.
|
|
8
|
-
# - check sanity of listconfig-value like 'myaddr', 'default_mime' etc.
|
|
9
|
-
# We need them to be properly set to process properly.
|
|
10
|
-
# - primary setup-check / is there a valid list-config?/admin?/
|
|
11
|
-
# admin-key?
|
|
7
|
+
trap("INT") { exit 1 }
|
|
12
8
|
|
|
13
|
-
def usage
|
|
14
|
-
puts "Usage:
|
|
15
|
-
#{File.basename($0)} [-c baseconfig] listname < email
|
|
16
|
-
#{File.basename($0)} [-c baseconfig] -test [listname]"
|
|
17
|
-
exit 1
|
|
18
|
-
end
|
|
19
|
-
|
|
20
|
-
def process_test(arg)
|
|
21
|
-
usage unless STDIN.tty?
|
|
22
|
-
listname = ARGV.shift
|
|
23
|
-
if listname
|
|
24
|
-
Schleuder.log.debug "Calling Processor.test(#{listname})"
|
|
25
|
-
Schleuder::Processor.test listname
|
|
26
|
-
else
|
|
27
|
-
Schleuder.log.debug "Calling Processor.test"
|
|
28
|
-
Schleuder::Processor.test
|
|
29
|
-
end
|
|
30
|
-
end
|
|
31
9
|
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
Schleuder.
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
msg = STDIN.read
|
|
38
|
-
Schleuder.log.debug 'Handing over to Processor.run'
|
|
39
|
-
Schleuder::Processor.run listname, msg
|
|
40
|
-
end
|
|
41
|
-
|
|
42
|
-
$:.unshift File.dirname(__FILE__) + '/../lib'
|
|
43
|
-
require 'schleuder'
|
|
44
|
-
begin
|
|
45
|
-
arg = ARGV.shift
|
|
46
|
-
if arg == '-c'
|
|
47
|
-
Schleuder.config(ARGV.shift)
|
|
48
|
-
arg = ARGV.shift
|
|
49
|
-
end
|
|
50
|
-
Schleuder.log.debug "I've been called, starting up..."
|
|
51
|
-
case arg
|
|
52
|
-
when '-test'
|
|
53
|
-
process_test(ARGV)
|
|
54
|
-
when /(-h|--help)/
|
|
55
|
-
usage
|
|
56
|
-
when /[A-Za-z0-9]+/
|
|
57
|
-
process_list(arg.gsub(/-(sendkey|bounces|request|owner)(@|$)/, '\2'))
|
|
58
|
-
else
|
|
59
|
-
usage
|
|
60
|
-
end
|
|
61
|
-
rescue SystemExit => e
|
|
62
|
-
exit e.status
|
|
63
|
-
rescue Errno::EACCES => e
|
|
64
|
-
msg = [e.message, e.backtrace].flatten.join("\n")
|
|
65
|
-
$stderr.puts "File permission error: %s" % msg
|
|
66
|
-
begin
|
|
67
|
-
Schleuder.log.fatal e
|
|
68
|
-
rescue
|
|
69
|
-
begin
|
|
70
|
-
Log4r::Logger['log4r'].error e
|
|
71
|
-
rescue
|
|
72
|
-
end
|
|
73
|
-
end
|
|
74
|
-
exit 1
|
|
75
|
-
rescue Exception => e
|
|
76
|
-
begin
|
|
77
|
-
# Log4r mutes all outputters on first exception so if this rescues from a
|
|
78
|
-
# Log4r-error we can't expect the raise of a second exception here.
|
|
79
|
-
# Unfortunately there's no direct way to identify exceptions from Log4r
|
|
80
|
-
# because it throws StandardErrors and we're subclassing.
|
|
81
|
-
callerfile = e.backtrace.first.split(':').first.split('/').last rescue ''
|
|
82
|
-
if e.class == StandardError &&
|
|
83
|
-
['listlogger.rb', 'schleuderlogger.rb'].include?(callerfile)
|
|
84
|
-
raise e
|
|
85
|
-
else
|
|
86
|
-
Schleuder.log.fatal e
|
|
87
|
-
end
|
|
88
|
-
rescue => f
|
|
89
|
-
msg1 = "Logger exception: #{f}\n#{f.backtrace.join("\n")}"
|
|
90
|
-
msg2 = "...while trying to log this exception: #{e}\n#{f.backtrace.join("\n")}"
|
|
91
|
-
Log4r::Logger['log4r'].error { "#{msg1}\n\n#{msg2}" }
|
|
92
|
-
$stderr.puts(f.message) if $stderr.tty?
|
|
93
|
-
end
|
|
94
|
-
$stderr.puts "A serious error occurred, please notify the administrators of this list or server!"
|
|
10
|
+
begin
|
|
11
|
+
require_relative '../lib/schleuder/cli'
|
|
12
|
+
Schleuder::Cli.start
|
|
13
|
+
rescue => exc
|
|
14
|
+
$stderr.puts "Technical Error: #{exc}\n#{exc.backtrace.first}"
|
|
95
15
|
exit 1
|
|
96
16
|
end
|