schleuder 2.2.4 → 3.2.2
Sign up to get free protection for your applications and to get access to all the features.
- 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
@@ -1,75 +0,0 @@
|
|
1
|
-
# the schleuder config class - a simple container
|
2
|
-
module Schleuder
|
3
|
-
# Provides schleuder.conf as object, contains default values for most settings
|
4
|
-
class SchleuderConfig < Storage
|
5
|
-
|
6
|
-
# Options and their defaults
|
7
|
-
# If you want to change them edit the global config file.
|
8
|
-
# Usually in /etc/schleuder/schleuder.conf
|
9
|
-
|
10
|
-
# Outgoing SMTP server address
|
11
|
-
schleuder_attr :smtp_host, 'localhost'
|
12
|
-
|
13
|
-
# Outgoing SMTP server port
|
14
|
-
schleuder_attr :smtp_port, 25
|
15
|
-
|
16
|
-
# Used as sender-address ans for determining the own gpg-key
|
17
|
-
schleuder_attr :myaddr, 'schleuder@localhost'
|
18
|
-
|
19
|
-
# The address to which SchleuderLogger#fatal messages (and possibly also
|
20
|
-
# SchleuderLogger#error messages) are reported
|
21
|
-
schleuder_attr :superadminaddr, 'root@localhost'
|
22
|
-
|
23
|
-
# Location of the global log-file.
|
24
|
-
schleuder_attr :log_file, '/var/log/schleuder/schleuder.log'
|
25
|
-
|
26
|
-
# Global log_level: (ERROR || WARN || INFO || DEBUG)
|
27
|
-
schleuder_attr :log_level, 'ERROR'
|
28
|
-
|
29
|
-
# Directory which holds plugin-files
|
30
|
-
schleuder_attr :plugins_dir, File.join(File.expand_path(File.dirname(__FILE__) + '/../..'),'plugins')
|
31
|
-
|
32
|
-
# Directory which holds one subdirectory for each list
|
33
|
-
schleuder_attr :lists_dir, '/var/schleuderlists'
|
34
|
-
|
35
|
-
# Name of the list-specific file that holds the list configuration (YAML-formatted)
|
36
|
-
schleuder_attr :lists_configfile, 'list.conf'
|
37
|
-
|
38
|
-
# Name of the file that holds the members (YAML-formatted)
|
39
|
-
schleuder_attr :lists_memberfile, 'members.conf'
|
40
|
-
|
41
|
-
# Name of the file that holds default settings for all lists (YAML-formatted)
|
42
|
-
schleuder_attr :lists_default_conf do
|
43
|
-
File.join(@conf_dir,'default-list.conf')
|
44
|
-
end
|
45
|
-
|
46
|
-
# GPG-Key type.
|
47
|
-
schleuder_attr :gpg_key_type, 'RSA'
|
48
|
-
|
49
|
-
# GPG-Key length.
|
50
|
-
schleuder_attr :gpg_key_length, 4096
|
51
|
-
|
52
|
-
# GPG-Sub-Key type.
|
53
|
-
schleuder_attr :gpg_subkey_type, 'RSA'
|
54
|
-
|
55
|
-
# GPG-Sub-Key length.
|
56
|
-
schleuder_attr :gpg_subkey_length, 4096
|
57
|
-
|
58
|
-
### END OF CONFIG OPTIONS
|
59
|
-
|
60
|
-
def initialize(config=nil)
|
61
|
-
if config && config.is_a?(String)
|
62
|
-
@conf_dir = File.dirname(config)
|
63
|
-
elsif config.nil?
|
64
|
-
@conf_dir = '/etc/schleuder'
|
65
|
-
config = File.join(@conf_dir,'schleuder.conf')
|
66
|
-
end
|
67
|
-
|
68
|
-
# overload with config
|
69
|
-
super(config)
|
70
|
-
|
71
|
-
# turn @plugins_dir into an array if needed
|
72
|
-
@plugins_dir = [@plugins_dir] unless @plugins_dir.class == Array
|
73
|
-
end
|
74
|
-
end
|
75
|
-
end
|
data/lib/schleuder/storage.rb
DELETED
@@ -1,84 +0,0 @@
|
|
1
|
-
require 'yaml'
|
2
|
-
|
3
|
-
module Schleuder
|
4
|
-
# Abstract class to provide loading of files and overloading of values.
|
5
|
-
# Note: don't use Schleuder.log in here, is might be not yet available, and
|
6
|
-
# you will produce loops.
|
7
|
-
class Storage
|
8
|
-
|
9
|
-
class << self
|
10
|
-
def schleuder_attr(attr_name, default_value=nil,&block)
|
11
|
-
attr_name = attr_name.to_s unless attr_name.is_a?(String)
|
12
|
-
default_schleuder_attributes[attr_name] = block_given? ? block : Proc.new{ default_value }
|
13
|
-
|
14
|
-
class_eval <<-EOE
|
15
|
-
def #{attr_name}
|
16
|
-
if schleuder_attributes['#{attr_name}'].nil?
|
17
|
-
schleuder_attributes['#{attr_name}'] = self.instance_eval(&self.class.default_schleuder_attributes['#{attr_name}'])
|
18
|
-
end
|
19
|
-
schleuder_attributes['#{attr_name}']
|
20
|
-
end
|
21
|
-
def #{attr_name}=(value)
|
22
|
-
schleuder_attributes['#{attr_name}'] = value
|
23
|
-
end
|
24
|
-
EOE
|
25
|
-
end
|
26
|
-
|
27
|
-
def default_schleuder_attributes
|
28
|
-
@default_schleuder_attributes ||= {}
|
29
|
-
end
|
30
|
-
end
|
31
|
-
|
32
|
-
def schleuder_attributes
|
33
|
-
@schleuder_attributes ||= {}
|
34
|
-
end
|
35
|
-
|
36
|
-
# If +input+ is String, we read the file at the given path.
|
37
|
-
# If +input+ is Hash, it will be used to fill instance variables.
|
38
|
-
def initialize(input=nil)
|
39
|
-
if input.kind_of?(Hash)
|
40
|
-
overload_from_hash!(input)
|
41
|
-
elsif input.kind_of?(String)
|
42
|
-
overload_from_file!(input)
|
43
|
-
elsif !input.nil?
|
44
|
-
raise "Unknown input: #{input.class}"
|
45
|
-
end
|
46
|
-
end
|
47
|
-
|
48
|
-
def to_hash
|
49
|
-
self.class.default_schleuder_attributes.keys.inject({}) do |res, key|
|
50
|
-
val = send(key)
|
51
|
-
res[key] = if val.is_a?(Array)
|
52
|
-
val.collect { |e| e.respond_to?(:to_hash) ? e.to_hash : e }
|
53
|
-
elsif val.respond_to?(:to_hash)
|
54
|
-
val.to_hash
|
55
|
-
else
|
56
|
-
val
|
57
|
-
end
|
58
|
-
res
|
59
|
-
end
|
60
|
-
end
|
61
|
-
|
62
|
-
private
|
63
|
-
|
64
|
-
# Load content from +filename+ and overwrite existing instance variables of
|
65
|
-
# self
|
66
|
-
def overload_from_file!(filename)
|
67
|
-
h = YAML.load_file(filename) || Hash.new # yaml returns nil if the Hash is empty
|
68
|
-
overload_from_hash!(h)
|
69
|
-
end
|
70
|
-
|
71
|
-
# Load content from +h+ into self (if allowed so according to
|
72
|
-
# attr_reader/writer/accessor)
|
73
|
-
def overload_from_hash!(h)
|
74
|
-
h.each_pair do |k,v|
|
75
|
-
k = k.to_s unless k.is_a?(String)
|
76
|
-
if self.class.default_schleuder_attributes.keys.include?(k)
|
77
|
-
schleuder_attributes[k] = v
|
78
|
-
else
|
79
|
-
Schleuder.log.warn "Attempt to set illegal attribute: #{k} => #{v}"
|
80
|
-
end
|
81
|
-
end
|
82
|
-
end
|
83
|
-
end
|
84
|
-
end
|
data/lib/schleuder/utils.rb
DELETED
@@ -1,80 +0,0 @@
|
|
1
|
-
module Schleuder
|
2
|
-
|
3
|
-
class Utils
|
4
|
-
def self.random_password(size = 32)
|
5
|
-
chars = (('a'..'z').to_a + ('A'..'Z').to_a + ('0'..'9').to_a) + "+*%/()=?![]{}-_.,;:<>".split(//)
|
6
|
-
Utils.generate_random_str(size,chars)
|
7
|
-
end
|
8
|
-
def self.generate_random_str(size=32,chars = nil)
|
9
|
-
chars = (('a'..'z').to_a + ('A'..'Z').to_a + ('0'..'9').to_a) if chars.nil?
|
10
|
-
(1..size).collect{|a| chars[rand(chars.size)] }.join.to_s
|
11
|
-
end
|
12
|
-
|
13
|
-
def self.verify_addr(name, address)
|
14
|
-
unless Utils.emailaddress?(address)
|
15
|
-
raise "Invalid #{name}: #{address}"
|
16
|
-
end
|
17
|
-
end
|
18
|
-
|
19
|
-
def self.emailaddress?(address)
|
20
|
-
begin
|
21
|
-
address == TMail::Address.parse(address).address
|
22
|
-
rescue TMail::SyntaxError, TypeError => e
|
23
|
-
false
|
24
|
-
end
|
25
|
-
end
|
26
|
-
|
27
|
-
def self.get_pretty_fingerprint(key)
|
28
|
-
"Wrong input, need GPGME::Key!" unless key.kind_of?(GPGME::Key)
|
29
|
-
key.subkeys.first.fingerprint.gsub(/(.{4})/, "\\1 ").strip
|
30
|
-
end
|
31
|
-
|
32
|
-
def self.generate_message_id(listid='')
|
33
|
-
listid = listid + '-' unless listid.empty?
|
34
|
-
'<'+Utils.generate_random_str+"@#{listid}schleuder>"
|
35
|
-
end
|
36
|
-
|
37
|
-
def self.schleuder_id?(message_id,listid='')
|
38
|
-
return false unless message_id
|
39
|
-
listid = listid + '-' unless listid.empty?
|
40
|
-
/<\w*@#{Regexp.quote(listid)}schleuder>/ === message_id
|
41
|
-
end
|
42
|
-
|
43
|
-
def self.compress_fingerprint(fpr)
|
44
|
-
fpr =~ / / ? fpr.gsub(/ /,'') : fpr
|
45
|
-
end
|
46
|
-
end
|
47
|
-
end
|
48
|
-
|
49
|
-
class Symbol
|
50
|
-
include Comparable
|
51
|
-
|
52
|
-
def <=>(other)
|
53
|
-
self.to_s <=> other.to_s
|
54
|
-
end
|
55
|
-
end
|
56
|
-
|
57
|
-
class Hash
|
58
|
-
# Replacing the to_yaml function so it'll serialize hashes sorted (by their keys)
|
59
|
-
#
|
60
|
-
# Original function is in /usr/lib/ruby/1.8/yaml/rubytypes.rb
|
61
|
-
def to_yaml( opts = {} )
|
62
|
-
YAML::quick_emit( object_id, opts ) do |out|
|
63
|
-
out.map( taguri, to_yaml_style ) do |map|
|
64
|
-
sort.each do |k, v| # <-- here's my addition (the 'sort')
|
65
|
-
map.add( k, v )
|
66
|
-
end
|
67
|
-
end
|
68
|
-
end
|
69
|
-
end
|
70
|
-
end
|
71
|
-
|
72
|
-
class String
|
73
|
-
def fmt(linewidth=nil)
|
74
|
-
if linewidth.nil?
|
75
|
-
require 'highline/system_extensions'
|
76
|
-
linewidth = HighLine::SystemExtensions.terminal_size.first || 76
|
77
|
-
end
|
78
|
-
gsub(/(.{1,#{linewidth}})(\s+|$)/, "\\1\n")
|
79
|
-
end
|
80
|
-
end
|
data/man/schleuder-newlist.8
DELETED
@@ -1,174 +0,0 @@
|
|
1
|
-
.\" generated with Ronn/v0.7.3
|
2
|
-
.\" http://github.com/rtomayko/ronn/tree/0.7.3
|
3
|
-
.
|
4
|
-
.TH "SCHLEUDER\-NEWLIST" "8" "June 2012" "" ""
|
5
|
-
.
|
6
|
-
.SH "NAME"
|
7
|
-
\fBschleuder\-newlist\fR \- create new Schleuder mailing list
|
8
|
-
.
|
9
|
-
.SH "SYNOPSIS"
|
10
|
-
\fBschleuder\-newlist\fR [\-c \fIbaseconfig\fR] \fInewlist@example\.net\fR
|
11
|
-
.
|
12
|
-
.br
|
13
|
-
\~\~\~\~\~\~\~\~\~\~\~\~\~\~\~\~\~\~[\-realname "\fIFoo List\fR"]
|
14
|
-
.
|
15
|
-
.br
|
16
|
-
\~\~\~\~\~\~\~\~\~\~\~\~\~\~\~\~\~\~[\-adminaddress \fIlistadmin@example\.net\fR]
|
17
|
-
.
|
18
|
-
.br
|
19
|
-
\~\~\~\~\~\~\~\~\~\~\~\~\~\~\~\~\~\~[\-initmember \fImember1@example\.net\fR
|
20
|
-
.
|
21
|
-
.br
|
22
|
-
\~\~\~\~\~\~\~\~\~\~\~\~\~\~\~\~\~\~\~\-initmemberkey \fIpath\-to\-initmember\-publickey\fR]
|
23
|
-
.
|
24
|
-
.br
|
25
|
-
\~\~\~\~\~\~\~\~\~\~\~\~\~\~\~\~\~\~[\-privatekeyfile \fIpath\-to\-privatekey\fR
|
26
|
-
.
|
27
|
-
.br
|
28
|
-
\~\~\~\~\~\~\~\~\~\~\~\~\~\~\~\~\~\~\~\-publickeyfile \fIpath\-to\-publickey\fR
|
29
|
-
.
|
30
|
-
.br
|
31
|
-
\~\~\~\~\~\~\~\~\~\~\~\~\~\~\~\~\~\~\~\-passphrase "\fIkey passphrase\fR"]
|
32
|
-
.
|
33
|
-
.br
|
34
|
-
\~\~\~\~\~\~\~\~\~\~\~\~\~\~\~\~\~\~[\-mailuser \fIschleuder\fR]
|
35
|
-
.
|
36
|
-
.br
|
37
|
-
\~\~\~\~\~\~\~\~\~\~\~\~\~\~\~\~\~\~[\-mailgroup \fIschleuder\fR]
|
38
|
-
.
|
39
|
-
.br
|
40
|
-
\~\~\~\~\~\~\~\~\~\~\~\~\~\~\~\~\~\~[\-nointeractive]
|
41
|
-
.
|
42
|
-
.SH "DESCRIPTION"
|
43
|
-
\fBschleuder\-newlist\fR automates the creation of new Schleuder mailing lists\. For more information on Schleuder, please look at \fBschleuder\fR(8)\.
|
44
|
-
.
|
45
|
-
.P
|
46
|
-
\fBschleuder\-newlist\fR does various input validation, and can generate a key or import one\. It will give you as well an easy interface to build new lists in a scripted manner\.
|
47
|
-
.
|
48
|
-
.P
|
49
|
-
It also supports an interactive mode, with which the user will be prompted for missing mandatory options\. The interactive mode can be disabled, using the \fB\-nointercative\fR flag; it is automatically disabled if the script isn\'t run within a valid tty\.
|
50
|
-
.
|
51
|
-
.P
|
52
|
-
If no \fB\-privatekeyfile\fR, \fB\-publickeyfile\fR and \fB\-passphrase\fR are provided, the list will create a new keypair with a random password\. The type and length of the generated keypair is specified in \fB/etc/schleuder/schleuder\.conf\fR\.
|
53
|
-
.
|
54
|
-
.SH "OPTIONS"
|
55
|
-
.
|
56
|
-
.TP
|
57
|
-
\fB\-c\fR \fIpath\-to\-schleuder\-configuration\fR:
|
58
|
-
.
|
59
|
-
.IP
|
60
|
-
Specify an alternate configuration directory than the default \fB/etc/schleuder\fR\.
|
61
|
-
.
|
62
|
-
.TP
|
63
|
-
\fB\-realname\fR "\fIFoo List\fR"
|
64
|
-
Specify the name of the mailing list\.
|
65
|
-
.
|
66
|
-
.TP
|
67
|
-
\fB\-adminaddress\fR \fIlistadmin@example\.net\fR
|
68
|
-
Specify the email address of a list administrator\. This address will be notified of errors, and depending on configuration may also be allowed to send restricted email commands\.
|
69
|
-
.
|
70
|
-
.TP
|
71
|
-
\fB\-initmember\fR \fImember1@example\.net\fR
|
72
|
-
Specify the first subscribed list member address\. Can be the same as the administrator address\. This option must be accompanied by \fB\-initmemberkey\fR\.
|
73
|
-
.
|
74
|
-
.TP
|
75
|
-
\fB\-initmemberkey\fR \fIpath\-to\-initmember\-publickey\fR
|
76
|
-
Specify the path to first subscribed list member public key\. \fB\-initmember\fR must also be specified\.
|
77
|
-
.
|
78
|
-
.TP
|
79
|
-
\fB\-privatekeyfile\fR \fIpath\-to\-privatekey\fR
|
80
|
-
Specify the path to a previously\-generated private key for the list\. This option must be accompanied by \fB\-publickeyfile\fR and \fB\-passphrase\fR\.
|
81
|
-
.
|
82
|
-
.TP
|
83
|
-
\fB\-publickeyfile\fR \fIpath\-to\-publickey\fR
|
84
|
-
Specify the path to a previously\-generated public key for the list\. This option must be accompanied by \fB\-privatekeyfile\fR and \fB\-passphrase\fR\.
|
85
|
-
.
|
86
|
-
.TP
|
87
|
-
\fB\-passphrase\fR "\fIkey passphrase\fR"
|
88
|
-
Specify the passphrase needed to access the private key specified in \fB\-privatekeyfile\fR\. This option must be accompanied by \fB\-publickeyfile\fR as well\.
|
89
|
-
.
|
90
|
-
.TP
|
91
|
-
\fB\-mailuser\fR \fIschleuder\fR
|
92
|
-
Specify the system user account under which \fBschleuder\fR(8) will be executed (when run as root, this defaults to \fBschleuder\fR)\.
|
93
|
-
.
|
94
|
-
.TP
|
95
|
-
\fB\-mailgroup\fR \fIschleuder\fR
|
96
|
-
Specify the system group under which \fBschleuder\fR(8) will be executed (when run as root, this defaults to \fBschleuder\fR)\.
|
97
|
-
.
|
98
|
-
.TP
|
99
|
-
\fB\-nointeractive\fR
|
100
|
-
When specified, no questions will be asked to complete missing information\.
|
101
|
-
.
|
102
|
-
.SH "EXAMPLES"
|
103
|
-
This creates a new list called \fBtest1\fR with the initial member \fBfoo@bar\.ch\fR\. A new keypair will be generated for the list\.
|
104
|
-
.
|
105
|
-
.IP "" 4
|
106
|
-
.
|
107
|
-
.nf
|
108
|
-
|
109
|
-
schleuder\-newlist foobar@example\.org \e
|
110
|
-
\-realname "bal jak" \e
|
111
|
-
\-adminaddress admin@example\.org \e
|
112
|
-
\-initmember foo@example\.com \-initmemberkey /tmp/foo\.pub
|
113
|
-
.
|
114
|
-
.fi
|
115
|
-
.
|
116
|
-
.IP "" 0
|
117
|
-
.
|
118
|
-
.P
|
119
|
-
The list test2 will be created, a keypair from the following files with the passphrase \fBtest\fR will be imported\.
|
120
|
-
.
|
121
|
-
.IP "" 4
|
122
|
-
.
|
123
|
-
.nf
|
124
|
-
|
125
|
-
schleuder\-newlist test2@example\.com \e
|
126
|
-
\-realname "bal jak" \e
|
127
|
-
\-adminaddress foobar@example\.org \e
|
128
|
-
\-privatekeyfile ~/tmp/test2\.priv \e
|
129
|
-
\-publickeyfile /tmp/test2\.pub \e
|
130
|
-
\-passphrase test
|
131
|
-
.
|
132
|
-
.fi
|
133
|
-
.
|
134
|
-
.IP "" 0
|
135
|
-
.
|
136
|
-
.SH "FILES"
|
137
|
-
.
|
138
|
-
.TP
|
139
|
-
\fB/etc/schleuder/schleuder\.conf\fR
|
140
|
-
global Schleuder configuration
|
141
|
-
.
|
142
|
-
.TP
|
143
|
-
\fB/etc/schleuder/default\-list\.conf\fR
|
144
|
-
default list settings
|
145
|
-
.
|
146
|
-
.TP
|
147
|
-
\fB/var/schleuderlists/\fR\fIHOSTNAME\fR\fB/\fR\fILISTNAME\fR
|
148
|
-
list internal data
|
149
|
-
.
|
150
|
-
.TP
|
151
|
-
\fB/var/schleuderlists/\fR\fIHOSTNAME\fR\fB/\fR\fILISTNAME\fR\fB/list\.conf\fR
|
152
|
-
list settings
|
153
|
-
.
|
154
|
-
.TP
|
155
|
-
\fB/var/schleuderlists/\fR\fIHOSTNAME\fR\fB/\fR\fILISTNAME\fR\fB/members\.conf\fR
|
156
|
-
list susbcribers
|
157
|
-
.
|
158
|
-
.P
|
159
|
-
All configuration files are formatted as YAML\. See \fIhttp://www\.yaml\.org/\fR for more details\.
|
160
|
-
.
|
161
|
-
.SH "BUGS"
|
162
|
-
Known bugs are listed on the Schleuder website\.
|
163
|
-
.
|
164
|
-
.SH "SEE ALSO"
|
165
|
-
\fBschleuder\fR(8), \fBaliases\fR(5), \fBgnupg\fR(7)\.
|
166
|
-
.
|
167
|
-
.TP
|
168
|
-
Schleuder website
|
169
|
-
\fIhttp://schleuder\.nadir\.org/\fR
|
170
|
-
.
|
171
|
-
.TP
|
172
|
-
YAML website
|
173
|
-
\fIhttp://www\.yaml\.org/\fR
|
174
|
-
|
data/man/schleuder.8
DELETED
@@ -1,416 +0,0 @@
|
|
1
|
-
.\" generated with Ronn/v0.7.3
|
2
|
-
.\" http://github.com/rtomayko/ronn/tree/0.7.3
|
3
|
-
.
|
4
|
-
.TH "SCHLEUDER" "8" "June 2012" "" ""
|
5
|
-
.
|
6
|
-
.SH "NAME"
|
7
|
-
\fBschleuder\fR \- a groups email gateway
|
8
|
-
.
|
9
|
-
.SH "SYNOPSIS"
|
10
|
-
\fBschleuder\fR [\-c \fIbaseconfig\fR] \fIlistaddress\fR < \fIemail\fR
|
11
|
-
.
|
12
|
-
.br
|
13
|
-
\fBschleuder\fR [\-c \fIbaseconfig\fR] \-test [\fIlistaddress\fR]
|
14
|
-
.
|
15
|
-
.SH "DESCRIPTION"
|
16
|
-
Schleuder is a groups email gateway: subscribers can communicate encrypted (and pseudonymously) among themselves, receive emails from non\-subscribers and send emails to non\-subscribers via the list\.
|
17
|
-
.
|
18
|
-
.P
|
19
|
-
Schleuder takes care of all decryption and encryption, stripping of headers, format conversions, etc\. Schleuder can also send out its own public key upon request and process administrative commands received by email\.
|
20
|
-
.
|
21
|
-
.P
|
22
|
-
Email cryptography is handled by using GnuPG\. Schleuder understands all common encapsulation formats: \fBinline\fR, \fBmultipart/encrypted\fR and \fBmultipart/signed\fR\.
|
23
|
-
.
|
24
|
-
.P
|
25
|
-
schleuder(8) is usually called in delivery mode by a \fIMail Transport Agent\fR with an incoming email piped to its standard input\. For more informations on how to integrate Schleuder with your existing mail setup, please look at the Schleuder website: \fIhttp://schleuder\.nadir\.org/\fR
|
26
|
-
.
|
27
|
-
.P
|
28
|
-
schleuder\-newlist(8) automates the creation of new mailing lists\.
|
29
|
-
.
|
30
|
-
.SH "AUTOMATIC SENDING OF LIST PUBLIC KEY"
|
31
|
-
To receive the public key of the mailing list anybody can send an email to the special list address which includes \fB\-sendkey\fR as a postfix:
|
32
|
-
.
|
33
|
-
.IP "" 4
|
34
|
-
.
|
35
|
-
.nf
|
36
|
-
|
37
|
-
listname\-sendkey@example\.org
|
38
|
-
.
|
39
|
-
.fi
|
40
|
-
.
|
41
|
-
.IP "" 0
|
42
|
-
.
|
43
|
-
.P
|
44
|
-
Schleuder will reply with the public key of the list without forwarding the request to the list\-members\.
|
45
|
-
.
|
46
|
-
.SH "EMAIL COMMANDS"
|
47
|
-
Schleuder provides some special commands for advanced features to be used by list\-members\. Generally they are called by keywords written into the first non\-blank line of an email\. Schleuder scans for those keywords in every incoming email that is encrypted and validly signed by a list\-admin or \(em if allowed by the list\'s configuration \(em a list\-member\.
|
48
|
-
.
|
49
|
-
.P
|
50
|
-
Administrative commands (membership and key management) must be sent to the request\-address or the list, which includes \fB\-request\fR as a postfix:
|
51
|
-
.
|
52
|
-
.IP "" 4
|
53
|
-
.
|
54
|
-
.nf
|
55
|
-
|
56
|
-
listname\-request@example\.org
|
57
|
-
.
|
58
|
-
.fi
|
59
|
-
.
|
60
|
-
.IP "" 0
|
61
|
-
.
|
62
|
-
.P
|
63
|
-
Communicative commands (resending) must be sent to the normal list\-address\.
|
64
|
-
.
|
65
|
-
.SS "Membership management"
|
66
|
-
Resending is a list\-command, that means it is only allowed in emails sent over the mailing list\.
|
67
|
-
.
|
68
|
-
.TP
|
69
|
-
To receive the list of members send:
|
70
|
-
.
|
71
|
-
.IP "" 4
|
72
|
-
.
|
73
|
-
.nf
|
74
|
-
|
75
|
-
X\-LIST\-MEMBERS
|
76
|
-
.
|
77
|
-
.fi
|
78
|
-
.
|
79
|
-
.IP "" 0
|
80
|
-
.
|
81
|
-
.IP
|
82
|
-
You will receive a list of list\-admins and list\-members, and their public keys (or the lack thereof)\.
|
83
|
-
.
|
84
|
-
.TP
|
85
|
-
To see details on one list\-member, including his/her public key:
|
86
|
-
.
|
87
|
-
.IP "" 4
|
88
|
-
.
|
89
|
-
.nf
|
90
|
-
|
91
|
-
X\-GET\-MEMBER: you@example\.net
|
92
|
-
.
|
93
|
-
.fi
|
94
|
-
.
|
95
|
-
.IP "" 0
|
96
|
-
|
97
|
-
.
|
98
|
-
.TP
|
99
|
-
To unsubscribe from the mailing\-list:
|
100
|
-
.
|
101
|
-
.IP "" 4
|
102
|
-
.
|
103
|
-
.nf
|
104
|
-
|
105
|
-
X\-UNSUBSCRIBE
|
106
|
-
.
|
107
|
-
.fi
|
108
|
-
.
|
109
|
-
.IP "" 0
|
110
|
-
.
|
111
|
-
.IP
|
112
|
-
This will remove the member associated with the sender\'s signing key\.
|
113
|
-
.
|
114
|
-
.TP
|
115
|
-
To add a member:
|
116
|
-
.
|
117
|
-
.IP "" 4
|
118
|
-
.
|
119
|
-
.nf
|
120
|
-
|
121
|
-
X\-ADD\-MEMBER: you@example\.net mime
|
122
|
-
\-\-\-\-\-BEGIN PGP PUBLIC KEY BLOCK\-\-\-\-\-
|
123
|
-
Version: GnuPG v1\.4\.9 (GNU/Linux)
|
124
|
-
|
125
|
-
mQGiBEjVO7oRBADQvT6wtD2IzzIiK0NbrcilCKCp4MWb8cYXTXguwPQI6y0Nerz4
|
126
|
-
dsK6J0X1Vgeo02tqA4xd3EDK8rdqL2yZfl/2egH8+85R3gDk+kqkfEp4pwCgp6VO
|
127
|
-
[\.\.\.]
|
128
|
-
pNlF/qkaWwRb048h+iMrW21EkouLKTDPFkdFbapV2X5KJZIcfhO1zEbwc1ZKF3Ju
|
129
|
-
Q9X5GRmY62hz9SCZnsC0jeYAni8OUQV9NXfXlS/vePBUnOL08NQB
|
130
|
-
=xTv3
|
131
|
-
\-\-\-\-\-END PGP PUBLIC KEY BLOCK\-\-\-\-\-
|
132
|
-
.
|
133
|
-
.fi
|
134
|
-
.
|
135
|
-
.IP "" 0
|
136
|
-
.
|
137
|
-
.IP
|
138
|
-
\fBmime\fR could also be \fBplain\fR (for receiving \fBinline\fR\-encapsulated messages) or be skipped (then the list\'s default setting is used)\.
|
139
|
-
.
|
140
|
-
.IP
|
141
|
-
The public key block is also optional\.
|
142
|
-
.
|
143
|
-
.TP
|
144
|
-
To delete a member from the list:
|
145
|
-
.
|
146
|
-
.IP "" 4
|
147
|
-
.
|
148
|
-
.nf
|
149
|
-
|
150
|
-
X\-DELETE\-MEMBER: you@example\.net
|
151
|
-
.
|
152
|
-
.fi
|
153
|
-
.
|
154
|
-
.IP "" 0
|
155
|
-
.
|
156
|
-
.IP
|
157
|
-
Please note that this doesn\'t delete any public keys\.
|
158
|
-
.
|
159
|
-
.SS "Key management"
|
160
|
-
.
|
161
|
-
.TP
|
162
|
-
To receive the list of public keys known to the list:
|
163
|
-
.
|
164
|
-
.IP "" 4
|
165
|
-
.
|
166
|
-
.nf
|
167
|
-
|
168
|
-
X\-LIST\-KEYS
|
169
|
-
.
|
170
|
-
.fi
|
171
|
-
.
|
172
|
-
.IP "" 0
|
173
|
-
|
174
|
-
.
|
175
|
-
.TP
|
176
|
-
To receive a certain public key known to the list:
|
177
|
-
.
|
178
|
-
.IP "" 4
|
179
|
-
.
|
180
|
-
.nf
|
181
|
-
|
182
|
-
X\-GET\-KEY: foobar@example\.com
|
183
|
-
.
|
184
|
-
.fi
|
185
|
-
.
|
186
|
-
.IP "" 0
|
187
|
-
.
|
188
|
-
.IP
|
189
|
-
You can also specify a KeyID, or parts of it, as long as it identifies the key distinctly\.
|
190
|
-
.
|
191
|
-
.TP
|
192
|
-
To add a public key to the list:
|
193
|
-
.
|
194
|
-
.IP "" 4
|
195
|
-
.
|
196
|
-
.nf
|
197
|
-
|
198
|
-
X\-ADD\-KEY:
|
199
|
-
\-\-\-\-\-BEGIN PGP PUBLIC KEY BLOCK\-\-\-\-\-
|
200
|
-
Version: GnuPG v1\.4\.9 (GNU/Linux)
|
201
|
-
|
202
|
-
mQGiBEjVO7oRBADQvT6wtD2IzzIiK0NbrcilCKCp4MWb8cYXTXguwPQI6y0Nerz4
|
203
|
-
dsK6J0X1Vgeo02tqA4xd3EDK8rdqL2yZfl/2egH8+85R3gDk+kqkfEp4pwCgp6VO
|
204
|
-
[\.\.\.]
|
205
|
-
pNlF/qkaWwRb048h+iMrW21EkouLKTDPFkdFbapV2X5KJZIcfhO1zEbwc1ZKF3Ju
|
206
|
-
Q9X5GRmY62hz9SCZnsC0jeYAni8OUQV9NXfXlS/vePBUnOL08NQB
|
207
|
-
=xTv3
|
208
|
-
\-\-\-\-\-END PGP PUBLIC KEY BLOCK\-\-\-\-\-
|
209
|
-
.
|
210
|
-
.fi
|
211
|
-
.
|
212
|
-
.IP "" 0
|
213
|
-
|
214
|
-
.
|
215
|
-
.TP
|
216
|
-
To delete a key from the list\'s keyring:
|
217
|
-
.
|
218
|
-
.IP "" 4
|
219
|
-
.
|
220
|
-
.nf
|
221
|
-
|
222
|
-
X\-DELETE\-KEY: 0xDEADBEEF
|
223
|
-
.
|
224
|
-
.fi
|
225
|
-
.
|
226
|
-
.IP "" 0
|
227
|
-
.
|
228
|
-
.IP
|
229
|
-
You can also specify an email address, as long as it identifies the key distinctly\.
|
230
|
-
.
|
231
|
-
.SS "Resending"
|
232
|
-
Resending is a list\-command, that means it is only allowed in emails sent over the mailing list\.
|
233
|
-
.
|
234
|
-
.TP
|
235
|
-
To send out an email to an external recipient (encrypted if possible, otherwise in the clear):
|
236
|
-
.
|
237
|
-
.IP "" 4
|
238
|
-
.
|
239
|
-
.nf
|
240
|
-
|
241
|
-
X\-RESEND: emailaddress@example\.net
|
242
|
-
.
|
243
|
-
.fi
|
244
|
-
.
|
245
|
-
.IP "" 0
|
246
|
-
|
247
|
-
.
|
248
|
-
.TP
|
249
|
-
Or to send it only if encryption is available:
|
250
|
-
.
|
251
|
-
.IP "" 4
|
252
|
-
.
|
253
|
-
.nf
|
254
|
-
|
255
|
-
X\-RESEND\-ENCRYPTED\-ONLY: emailaddress@example\.net
|
256
|
-
.
|
257
|
-
.fi
|
258
|
-
.
|
259
|
-
.IP "" 0
|
260
|
-
|
261
|
-
.
|
262
|
-
.TP
|
263
|
-
To specify multiple recipients separate the addresses with spaces or specify the command multiple times:
|
264
|
-
.
|
265
|
-
.IP "" 4
|
266
|
-
.
|
267
|
-
.nf
|
268
|
-
|
269
|
-
X\-RESEND: you@example\.net me@example\.net
|
270
|
-
.
|
271
|
-
.fi
|
272
|
-
.
|
273
|
-
.IP "" 0
|
274
|
-
.
|
275
|
-
.IP
|
276
|
-
or
|
277
|
-
.
|
278
|
-
.IP "" 4
|
279
|
-
.
|
280
|
-
.nf
|
281
|
-
|
282
|
-
X\-RESEND: you@example\.net
|
283
|
-
X\-RESEND: me@example\.net
|
284
|
-
.
|
285
|
-
.fi
|
286
|
-
.
|
287
|
-
.IP "" 0
|
288
|
-
.
|
289
|
-
.IP
|
290
|
-
With the first format don\'t let your Mail User Agent break long lines!
|
291
|
-
.
|
292
|
-
.SS "Misc\."
|
293
|
-
.
|
294
|
-
.IP "\(bu" 4
|
295
|
-
To know which version of Schleuder is installed: X\-GET\-VERSION
|
296
|
-
.
|
297
|
-
.IP "" 0
|
298
|
-
.
|
299
|
-
.SH "OPTIONS"
|
300
|
-
.
|
301
|
-
.TP
|
302
|
-
\fB\-c\fR \fIpath\-to\-schleuder\-configuration\fR
|
303
|
-
Specify an alternate configuration directory than the default \fB/etc/schleuder\fR\.
|
304
|
-
.
|
305
|
-
.TP
|
306
|
-
\fB\-test\fR
|
307
|
-
Instead of processing an incoming email, specifying this flag will make Schleuder verify that the setup and basic settings are in a workable state\.
|
308
|
-
.
|
309
|
-
.TP
|
310
|
-
\fB\-h\fR
|
311
|
-
Display usage and exit\.
|
312
|
-
.
|
313
|
-
.SH "EXIT STATUS"
|
314
|
-
.
|
315
|
-
.TP
|
316
|
-
0
|
317
|
-
Incoming email was processed without errors\.
|
318
|
-
.
|
319
|
-
.IP
|
320
|
-
Configuration is correct in test mode\.
|
321
|
-
.
|
322
|
-
.TP
|
323
|
-
1
|
324
|
-
Internal failure in incoming email processing\.
|
325
|
-
.
|
326
|
-
.IP
|
327
|
-
Bad configuration in test mode\.
|
328
|
-
.
|
329
|
-
.TP
|
330
|
-
100
|
331
|
-
Unable to decrypt the received message\.
|
332
|
-
.
|
333
|
-
.IP
|
334
|
-
Unable to verify the signature when configured to only accept signed messages\.
|
335
|
-
.
|
336
|
-
.IP
|
337
|
-
Message is cleartext when only encrypted messages are allowed\.
|
338
|
-
.
|
339
|
-
.IP
|
340
|
-
Message is not authenticated as coming from a list\-member when authentication is required\.
|
341
|
-
.
|
342
|
-
.SH "FILES"
|
343
|
-
.
|
344
|
-
.IP "\(bu" 4
|
345
|
-
\fB/etc/schleuder/schleuder\.conf\fR: global Schleuder configuration
|
346
|
-
.
|
347
|
-
.IP "\(bu" 4
|
348
|
-
\fB/etc/schleuder/default\-list\.conf\fR: default list settings
|
349
|
-
.
|
350
|
-
.IP "\(bu" 4
|
351
|
-
\fB/var/schleuderlists/\fR\fILISTNAME\fR\fB/list\.conf\fR: list settings
|
352
|
-
.
|
353
|
-
.IP "\(bu" 4
|
354
|
-
\fB/var/schleuderlists/\fR\fILISTNAME\fR\fB/members\.conf\fR: list susbcribers\.
|
355
|
-
.
|
356
|
-
.IP
|
357
|
-
Each member must have the email\-attribute set\. All other attributes are optional\.
|
358
|
-
.
|
359
|
-
.IP
|
360
|
-
The following attributes are available:
|
361
|
-
.
|
362
|
-
.IP "\(bu" 4
|
363
|
-
\fBmime\fR: defines the \'pgp\-variant\' to send to the member, possible values are \fBMIME\fR (for pgp/mime\-formatted mail according to RFC 3156), and \fBPLAIN\fR (for inline\-pgp)\. The fallback\-default for this is defined in the \fBlist\.conf\fR\.
|
364
|
-
.
|
365
|
-
.IP "\(bu" 4
|
366
|
-
\fBencrypted_only\fR: schleuder tries to encrypt every outgoing email\. If that is not possible under some conditions it sends the email unecrypted\. If this attribute is set the member will never receive unencrypted emails; the member will be skipped if encrypting is not possible\.
|
367
|
-
.
|
368
|
-
.IP "" 0
|
369
|
-
.
|
370
|
-
.IP
|
371
|
-
Example:
|
372
|
-
.
|
373
|
-
.IP "" 4
|
374
|
-
.
|
375
|
-
.nf
|
376
|
-
|
377
|
-
\- email: you@example\.net
|
378
|
-
\- email: me@example\.org
|
379
|
-
mime: PLAIN
|
380
|
-
\- email: them@example\.com
|
381
|
-
encrypted_only: true
|
382
|
-
.
|
383
|
-
.fi
|
384
|
-
.
|
385
|
-
.IP "" 0
|
386
|
-
|
387
|
-
.
|
388
|
-
.IP "\(bu" 4
|
389
|
-
\fB/var/schleuderlists/\fR\fIHOSTNAME\fR\fB/\fR\fILISTNAME\fR: list internal data
|
390
|
-
.
|
391
|
-
.IP "\(bu" 4
|
392
|
-
\fB/var/log/schleuder\fR: Schleuder logs directory
|
393
|
-
.
|
394
|
-
.IP "" 0
|
395
|
-
.
|
396
|
-
.P
|
397
|
-
All configuration files are formatted as YAML\. See \fIhttp://www\.yaml\.org/\fR for more details\.
|
398
|
-
.
|
399
|
-
.SH "BUGS"
|
400
|
-
Known bugs are listed on the Schleuder bugtracker at \fIhttps://git\.codecoop\.org/projects/schleuder\fR
|
401
|
-
.
|
402
|
-
.SH "SEE ALSO"
|
403
|
-
\fBschleuder\-newlist\fR(8), \fBgnupg\fR(7)\.
|
404
|
-
.
|
405
|
-
.TP
|
406
|
-
Schleuder website
|
407
|
-
\fIhttp://schleuder\.nadir\.org/\fR
|
408
|
-
.
|
409
|
-
.TP
|
410
|
-
Webschleuder website
|
411
|
-
\fIhttp://webschleuder\.nadir\.org/\fR (web interface to schleuder)
|
412
|
-
.
|
413
|
-
.TP
|
414
|
-
YAML website
|
415
|
-
\fIhttp://www\.yaml\.org/\fR
|
416
|
-
|