diff options
| author | fukachan <fukachan> | 2004-03-16 12:58:20 +0000 |
|---|---|---|
| committer | fukachan <fukachan> | 2004-03-16 12:58:20 +0000 |
| commit | 04754dbac1da4f0d8877e56398033e6c62eb0e91 (patch) | |
| tree | 6f43dc98056e0b4ced68b01437dd13becf5215c8 /fml | |
| parent | d7308cc59ef1f6806001dd1fba4d2c94da7730d1 (diff) | |
| download | fml8-snap-20040316.tar.gz fml8-snap-20040316.tar.bz2 fml8-snap-20040316.zip | |
import basic implementation of config file merging system from fml4 to fml8.snap-20040316
Diffstat (limited to 'fml')
| -rw-r--r-- | fml/lib/FML/Merge.pm | 238 | ||||
| -rw-r--r-- | fml/lib/FML/Merge/FML4/Config.pm | 266 | ||||
| -rw-r--r-- | fml/lib/FML/Merge/FML4/List.pm | 188 | ||||
| -rw-r--r-- | fml/lib/FML/Merge/FML4/config.txt | 2826 | ||||
| -rw-r--r-- | fml/lib/FML/Merge/FML4/config_ph.pm | 61 | ||||
| -rw-r--r-- | fml/lib/FML/Merge/Utils.pm | 61 |
6 files changed, 3640 insertions, 0 deletions
diff --git a/fml/lib/FML/Merge.pm b/fml/lib/FML/Merge.pm new file mode 100644 index 00000000..dcc8d649 --- /dev/null +++ b/fml/lib/FML/Merge.pm @@ -0,0 +1,238 @@ +#-*- perl -*- +# +# Copyright (C) 2004 Ken'ichi Fukamachi +# All rights reserved. This program is free software; you can +# redistribute it and/or modify it under the same terms as Perl itself. +# +# $FML: @template.pm,v 1.8 2004/01/01 07:29:27 fukachan Exp $ +# + +package FML::Merge; +use strict; +use vars qw(@ISA @EXPORT @EXPORT_OK $AUTOLOAD); +use Carp; + +use FML::Merge::Utils; +push(@INC, qw(FML::Merge::Utils)); + + +=head1 NAME + +FML::Merge - merge other system configurations to fml8 ones. + +=head1 SYNOPSIS + +=head1 DESCRIPTION + +=cut + + + +# Descriptions: constructor. +# Arguments: OBJ($self) OBJ($curproc) HASH_REF($params) +# Side Effects: none +# Return Value: OBJ +sub new +{ + my ($self, $curproc, $params) = @_; + my ($type) = ref($self) || $self; + my $me = { + _curproc => $curproc, + _params => $params, + }; + + # import variables: ml_* ... + for my $x (keys %$params) { + $me->{ "_$x" } = $params->{ $x } if defined $params->{ $x }; + }; + + # back up to $ml_home_dir/.fml4rc/ directory. + use File::Spec; + my $ml_home_dir = $params->{ ml_home_dir } || ''; + if ($ml_home_dir) { + my $x_dir = File::Spec->catfile($ml_home_dir, ".fml4rc"); + $me->{ _backup_dir } = $x_dir; + $curproc->mkdir($x_dir, "mode=private") unless -d $x_dir; + } + else { + croak("specify \$ml_home_dir"); + } + + return bless $me, $type; +} + + +# Descriptions: specify target system. +# Arguments: OBJ($self) STR($system) +# Side Effects: none +# Return Value: none +sub set_target_system +{ + my ($self, $system) = @_; + + # dummy yet. +} + + +=head1 BACK UP CONFIGURATION FILES + +=cut + + +# Descriptions: back up old configuration files. +# Arguments: OBJ($self) +# Side Effects: move or copy files. +# Return Value: none +sub backup_old_config_files +{ + my ($self) = @_; + + use FML::Merge::FML4::Config; + my $config = new FML::Merge::FML4::Config; + my $files = $config->get_old_config_files(); + for my $f (@$files) { + my $mode = $self->_need_copy() ? "copy" : $config->backup_mode($f); + my $src = $self->old_file_path($f); + my $dst = $self->backup_file_path($f); + + if ($mode eq 'move') { + printf STDERR "mv %-30s %-30s\n", $src, $dst; + } + elsif ($mode eq 'copy') { + printf STDERR "cp %-30s %-30s\n", $src, $dst; + } + else { + print STDERR "unknown mode (DO NOTHING).\n"; + } + } +} + + +# Descriptions: check if we always need copy files to back up dir. +# Arguments: OBJ($self) +# Side Effects: none +# Return Value: NUM(1 or 0) +sub _need_copy +{ + my ($self) = @_; + my $old_home_dir = $self->{ _src_dir }; + my $ml_home_dir = $self->{ _ml_home_dir }; + + if ($old_home_dir ne $ml_home_dir) { + return 1; + } + else { + return 0; + } +} + + +=head1 DISABLE INCLUDE FILES + +To cause temporary failure, disable old include* files by changing it +to "exit 75". + +Code 75 depends on the value of EX_TEMPFAIL of your system. See +/usr/include/sysexit.h for more details. + +For example, the value of NetBSD follows. + + EX_TEMPFAIL -- temporary failure, indicating something that + is not really an error. In sendmail, this means + that a mailer (e.g.) could not create a connection, + and the request should be reattempted later. + +=cut + + +sub disable_include_files +{ + my ($self) = @_; + + use FML::Merge::FML4::Config; + my $config = new FML::Merge::FML4::Config; + my $files = $config->get_old_include_files(); + + for my $f (@$files) { + my $file = $self->old_file_path($f); + print STDERR "disable $file\n"; + } +} + + +=head1 + +=cut + + +sub convert_list_files +{ + my ($self) = @_; + my $curproc = $self->{ _curproc }; + my $params = $self->{ _params } || {}; + + use FML::Merge::FML4::List; + my $list = new FML::Merge::FML4::List $curproc, $params; + $list->convert(); +} + + +=head1 UTILITIES + +=cut + + +sub old_file_path +{ + my ($self, $file) = @_; + my $old_home_dir = $self->{ _src_dir }; + + use File::Spec; + return File::Spec->catfile($old_home_dir, $file); +} + + +sub new_file_path +{ + my ($self, $file) = @_; + my $ml_home_dir = $self->{ _ml_home_dir }; + + use File::Spec; + return File::Spec->catfile($ml_home_dir, $file); +} + + +sub backup_file_path +{ + my ($self, $file) = @_; + my $back_up_dir = $self->{ _backup_dir }; + + use File::Spec; + return File::Spec->catfile($back_up_dir, $file); +} + + +=head1 CODING STYLE + +See C<http://www.fml.org/software/FNF/> on fml coding style guide. + +=head1 AUTHOR + +Ken'ichi Fukamachi + +=head1 COPYRIGHT + +Copyright (C) 2004 Ken'ichi Fukamachi + +All rights reserved. This program is free software; you can +redistribute it and/or modify it under the same terms as Perl itself. + +=head1 HISTORY + +FML::Merge appeared in fml8 mailing list driver package. +See C<http://www.fml.org/> for more details. + +=cut + + +1; diff --git a/fml/lib/FML/Merge/FML4/Config.pm b/fml/lib/FML/Merge/FML4/Config.pm new file mode 100644 index 00000000..0ccaaf70 --- /dev/null +++ b/fml/lib/FML/Merge/FML4/Config.pm @@ -0,0 +1,266 @@ +#-*- perl -*- +# +# Copyright (C) 2004 Ken'ichi Fukamachi +# All rights reserved. This program is free software; you can +# redistribute it and/or modify it under the same terms as Perl itself. +# +# $FML: @template.pm,v 1.8 2004/01/01 07:29:27 fukachan Exp $ +# + +package FML::Merge::FML4::Config; +use strict; +use vars qw(@ISA @EXPORT @EXPORT_OK $AUTOLOAD); +use Carp; + + +=head1 NAME + +FML::Merge::FML4::Config - what files we need to merge + +=head1 SYNOPSIS + +=head1 DESCRIPTION + +=head1 METHODS + +=head2 C<new()> + +=cut + + +# Descriptions: constructor. +# Arguments: OBJ($self) OBJ($curproc) HASH_REF($config) +# Side Effects: none +# Return Value: OBJ +sub new +{ + my ($self, $curproc, $config) = @_; + my ($type) = ref($self) || $self; + my $me = {}; + return bless $me, $type; +} + + +# target files to back up. +my $ml_home_dir_backup_target_files = { + + # + # main configuration files + # + 'cf' => { + 'backup_mode' => 'move', + }, + + 'config.ph' => { + 'backup_mode' => 'copy', + }, + + + # + # system + # + 'aliases' => { + 'backup_mode' => 'move', + }, + + 'crontab' => { + 'backup_mode' => 'move', + }, + + 'fmlwrapper.c' => { + 'backup_mode' => 'move', + }, + + 'fmlwrapper.h' => { + 'backup_mode' => 'move', + }, + + + # + # message files + # + 'confirm' => { + 'backup_mode' => 'move', + }, + + 'deny' => { + 'backup_mode' => 'move', + }, + + 'guide' => { + 'backup_mode' => 'copy', + }, + + 'help' => { + 'backup_mode' => 'move', + }, + + 'help-admin' => { + 'backup_mode' => 'move', + }, + + 'objective' => { + 'backup_mode' => 'move', + }, + + 'welcome' => { + 'backup_mode' => 'move', + }, + + + # + # include* + # + 'include' => { + 'backup_mode' => 'copy', + 'type' => 'include', + }, + + 'include-ctl' => { + 'backup_mode' => 'copy', + 'type' => 'include', + }, + + 'include-mead' => { + 'backup_mode' => 'copy', + 'type' => 'include', + }, + + + # + # list files + # + + # member list files + 'actives' => { + 'backup_mode' => 'move', + 'type' => 'list', + }, + + 'members' => { + 'backup_mode' => 'copy', + 'type' => 'list', + }, + + # admin member list files + 'members-admin' => { + 'backup_mode' => 'copy', + 'type' => 'list', + }, + + # moderators + 'moderators' => { + 'backup_mode' => 'copy', + 'type' => 'list', + }, + + + # + # password files + # + 'etc/passwd' => { + 'backup_mode' => 'move', + 'type' => 'list', + }, + + + # + # misc + # + 'Makefile' => { + 'backup_mode' => 'move', + }, +}; + + +# Descriptions: return files to back up. +# Arguments: OBJ($self) +# Side Effects: none +# Return Value: ARRAY_REF +sub get_old_config_files +{ + my ($self) = @_; + + my (@files) = keys %$ml_home_dir_backup_target_files; + return \@files +} + + +# Descriptions: return list of include* files. +# Arguments: OBJ($self) +# Side Effects: none +# Return Value: ARRAY_REF +sub get_old_include_files +{ + my ($self) = @_; + my (@files) = (); + + for my $f (keys %$ml_home_dir_backup_target_files) { + my $type = $ml_home_dir_backup_target_files->{ $f }->{ type } || ''; + if ($type eq 'include') { + push(@files, $f); + } + } + + return \@files +} + + +# Descriptions: return list of list* files. +# Arguments: OBJ($self) +# Side Effects: none +# Return Value: ARRAY_REF +sub get_old_list_files +{ + my ($self) = @_; + my (@files) = (); + + for my $f (keys %$ml_home_dir_backup_target_files) { + my $type = $ml_home_dir_backup_target_files->{ $f }->{ type } || ''; + if ($type eq 'list') { + push(@files, $f); + } + } + + return \@files +} + + +sub backup_mode +{ + my ($self, $file) = @_; + + if (defined $ml_home_dir_backup_target_files->{$file}->{backup_mode}) { + my $mode = $ml_home_dir_backup_target_files->{$file}->{backup_mode}; + return $mode; + } + else { + return 'unknown'; + } +} + + +=head1 CODING STYLE + +See C<http://www.fml.org/software/FNF/> on fml coding style guide. + +=head1 AUTHOR + +Ken'ichi Fukamachi + +=head1 COPYRIGHT + +Copyright (C) 2004 Ken'ichi Fukamachi + +All rights reserved. This program is free software; you can +redistribute it and/or modify it under the same terms as Perl itself. + +=head1 HISTORY + +FML::Merge::FML4::Config appeared in fml8 mailing list driver package. +See C<http://www.fml.org/> for more details. + +=cut + + +1; diff --git a/fml/lib/FML/Merge/FML4/List.pm b/fml/lib/FML/Merge/FML4/List.pm new file mode 100644 index 00000000..52f59b09 --- /dev/null +++ b/fml/lib/FML/Merge/FML4/List.pm @@ -0,0 +1,188 @@ +#-*- perl -*- +# +# Copyright (C) 2004 Ken'ichi Fukamachi +# All rights reserved. This program is free software; you can +# redistribute it and/or modify it under the same terms as Perl itself. +# +# $FML: @template.pm,v 1.8 2004/01/01 07:29:27 fukachan Exp $ +# + +package FML::Merge::FML4::List; +use strict; +use vars qw(@ISA @EXPORT @EXPORT_OK $AUTOLOAD); +use Carp; + +=head1 NAME + +FML::Merge::FML4::List - convert member list files. + +=head1 SYNOPSIS + +=head1 DESCRIPTION + +=head1 METHODS + +=head2 C<new()> + +=cut + + +sub new +{ + my ($self, $curproc, $params) = @_; + my ($type) = ref($self) || $self; + my $me = { + _curproc => $curproc, + _params => $params, + }; + + return bless $me, $type; +} + + +sub convert +{ + my ($self) = @_; + my $curproc = $self->{ _curproc }; + my $params = $self->{ _params } || {}; + + use FML::Merge; + my $merge = new FML::Merge $curproc, $params; + + use FML::Merge::FML4::Config; + my $config = new FML::Merge::FML4::Config; + my $files = $config->get_old_list_files(); + my $fp; + + for my $file (@$files) { + $fp = "_convert_$file"; + $fp =~ s/-/_/g; + $fp =~ s@/@_@g; + if ($self->can($fp)) { + $self->$fp($merge); + } + else { + croak("cannot convert $file"); + } + } +} + + +sub _convert_actives +{ + my ($self, $merge) = @_; + my $src = $merge->backup_file_path('actives'); + my $dst = $merge->new_file_path('recipients'); + + $self->_write_without_comment($src, $dst); +} + + +sub _convert_members +{ + my ($self, $merge) = @_; + my $src = $merge->backup_file_path('members'); + my $dst = $merge->new_file_path('members'); + + $self->_write_without_comment($src, $dst); +} + + +sub _convert_members_admin +{ + my ($self, $merge) = @_; + my $src = $merge->backup_file_path('members-admin'); + my $dst = $merge->new_file_path('members-admin'); + + $self->_write_without_comment($src, $dst); + + $dst = $merge->new_file_path('recipients-admin'); + $self->_write_without_comment($src, $dst); +} + + +sub _convert_moderators +{ + my ($self, $merge) = @_; + my $src = $merge->backup_file_path('moderators'); + my $dst = $merge->new_file_path('members-moderator'); + + $self->_write_without_comment($src, $dst); + + $dst = $merge->new_file_path('recipients-moderator'); + $self->_write_without_comment($src, $dst); +} + + +sub _convert_etc_passwd +{ + my ($self, $merge) = @_; + my $src = $merge->backup_file_path('etc/passwd'); + my $dst = $merge->new_file_path('etc/passwd-admin'); + + print STDERR "warning: etc/passwrd conversion not yet implemented\n"; +} + + +sub _write_without_comment +{ + my ($self, $src, $dst) = @_; + my $tmp = sprintf("%s.new.%s", $dst, $$); + + unless (-f $src) { + print STDERR "ignore $src -> $dst\n"; + return; + } + + print STDERR "cat $src > $dst\n"; + return; + + use FileHandle; + my $rh = new FileHandle $src; + my $wh = new FileHandle "> $tmp"; + if (defined $rh && defined $wh) { + my $buf; + + LINE: + while ($buf = <$rh>) { + next LINE if $buf =~ /^\#/o; + print $wh $buf; + } + $wh->close(); + $rh->close(); + + unless (rename($tmp, $dst)) { + croak("cannot rename $tmp $dst"); + } + } + else { + croak("cannot open $src") unless defined $rh; + croak("cannot open $tmp") unless defined $wh; + } +} + + +=head1 CODING STYLE + +See C<http://www.fml.org/software/FNF/> on fml coding style guide. + +=head1 AUTHOR + +Ken'ichi Fukamachi + +=head1 COPYRIGHT + +Copyright (C) 2004 Ken'ichi Fukamachi + +All rights reserved. This program is free software; you can +redistribute it and/or modify it under the same terms as Perl itself. + +=head1 HISTORY + +FML::Merge::FML4::List appeared in fml8 mailing list driver package. +See C<http://www.fml.org/> for more details. + +=cut + + +1; diff --git a/fml/lib/FML/Merge/FML4/config.txt b/fml/lib/FML/Merge/FML4/config.txt new file mode 100644 index 00000000..27248096 --- /dev/null +++ b/fml/lib/FML/Merge/FML4/config.txt @@ -0,0 +1,2826 @@ +# +# $FML$ +# BASED ON fml/cf/MANIFEST 1.104 +# +# .use そのまま使う +# .auto fml8 で自動設定される値を使う +# .convert よろしく変換して頑張る +# .fml8_default fml8 のデフォルトと同じ、気にするな +# .not_yet_implemented まだ、実装されてない +# .not_yet_configurable まだ、設定変更できない +# .unavailable 対応するものがない、実装予定もない +# .ignore 実装方式が違うので、変換が無意味 +# + + +######################################################################### +##### Section: Fundamental Configuration (CF Version, debug, Language) ## +# # config.ph configuration version +# # define 5.0 for fml 3.0. +# # define 6.0 for fml 3.0 + fukui-newconfig. +# CFVersion: 6.1 +.if CFVersion + .unavailable + + +# # global debug option. if non-nil, debug mode. +# # In debug mode, fml does not distribute posted articles. +# # value: 1/0 +# debug: 0 + + +# # fml 3.0 generates template files, $DIR/{help,welcome} in $LANGUAGE +# # in "makefml newml". You define this variable in installation. +# # The value is controlled by /usr/local/fml/.fml/system. +# # value: Japanese/English +# LANGUAGE: Japanese +.if LANGUAGE == Japanese + + language_preference_order = ja en + +.if LANGUAGE == English + + language_preference_order = en ja + + +# # Error message language fml returns. +# # If $MESSAGE_LANGUAGE is not defined, fml 3.0 uses $LANGUAGE. +# # &Mesg() tries to translate the given message to this language. +# # value: Japanese/English +# MESSAGE_LANGUAGE: +.if MESSAGE_LANGUAGE == Japanese + + language_preference_order = ja en + +.if MESSAGE_LANGUAGE == English + + language_preference_order = en ja + + +# # ## Sub Section: DNS ## +# # fml automatically set up DNS for this host, but check it again by yourself. +# # +# # DOMAINNAME the domain name e.g. fml.org +# # FQDN Fully Qualified Domain Name e.g. beth.fml.org +# # +# # value: string +# DOMAINNAME: &fix:dn phys.titech.ac.jp +.if DOMAINNAME + .auto + + +# FQDN: &fix:fqdn axion.phys.titech.ac.jp +.if FQDN + .auto + + +######################################################################### +##### Section: Mailing List Policy (for Post, Commands), Maintainer ### +# # +# # $MAIL_LIST is the address for post. For example 'elena@fml.org'. +# # +# # $PERMIT_POST_FROM is one of "anyone", "members_only" and "moderator". +# # It defines who can post to this ML. +# # When post from not a member is rejected, +# # fml calls $REJECT_POST_HANDLER. +# # $REJECT_POST_HANDLER is one of "reject", "auto_subscribe" and "ignore". +# # HISTORY: you can use "auto_regist" used in fml 2.x. +# # +# # value: string +# MAIL_LIST: +# PERMIT_POST_FROM: members_only +# REJECT_POST_HANDLER: reject + +.if MAIL_LIST + + .convert (article_post_address = MAIL_LIST) + + +.if PERMIT_POST_FROM == anyone + + article_post_restrictions = reject_system_special_accounts permit_anyone + +.if PERMIT_POST_FROM == members_only + + .if REJECT_POST_HANDLER == reject + + article_post_restrictions = reject_system_special_accounts permit_member_maps reject + + .if REJECT_POST_HANDLER == auto_subscribe + .unavailable + + .if REJECT_POST_HANDLER == ignore + .unavailable + +.if PERMIT_POST_FROM == moderator + .not_yet_implemented + + + +# # $CONTROL_ADDRESS is the address you send a command request to. +# # For example 'elena-ctl@fml.org'. +# # +# # $PERMIT_COMMAND_FROM is one of "anyone", "members_only" and "moderator". +# # It defines who can post to this ML. +# # When command request from not a member is rejected, +# # fml calls $REJECT_COMMAND_HANDLER. +# # +# # $REJECT_COMMAND_HANDLER is one of "reject", "auto_subscribe" and "ignore". +# # HISTORY: you can use "auto_regist" used in fml 2.x. +# # +# # Typical Configuration is +# # +# # (default) +# # $PERMIT_COMMAND_FROM = "members_only"; +# # $REJECT_COMMAND_HANDLER = "reject"; +# # +# # (automatic subscribe: fml automatically handles subscribe request) +# # $PERMIT_COMMAND_FROM = "members_only"; +# # $REJECT_COMMAND_HANDLER = "auto_subscribe"; +# # +# # value: string +# CONTROL_ADDRESS: +# PERMIT_COMMAND_FROM: members_only +# REJECT_COMMAND_HANDLER: reject + +.if CONTROL_ADDRESS + + .convert (command_mail_address = CONTROL_ADDRESS) + + +.if PERMIT_COMMAND_FROM == anyone + + command_mail_restrictions = reject_system_special_accounts permit_anyone + + +.if PERMIT_COMMAND_FROM == members_only + + .if REJECT_COMMAND_HANDLER == reject + .not_yet_implemented + + .if REJECT_COMMAND_HANDLER == auto_subscribe + .fml8_default + + .if REJECT_COMMAND_HANDLER == ignore + .not_yet_implemented + + +.if PERMIT_COMMAND_FROM == moderator + .not_yet_implemented + + + +# # obsolete (though you can use it) +# # When $MAIL_LIST_ACCEPT_COMMAND = 1, +# # both $MAIL_LIST and $CONTROL_ADDRESS accept commands +# # which format is "# command". +# # value: 1/0 +# MAIL_LIST_ACCEPT_COMMAND: +.if MAIL_LIST_ACCEPT_COMMAND + .unavailable + + +# # ## Sub Section: Maintainer ## +# # mailing list maintainer/administrator address e.g. 'elena-admin@fml.org'. +# # $MAINTAINER != $MAIL_LIST IS REQUIRED AGAINST MAIL LOOP! +# # value: string +# MAINTAINER: +.if MAINTAINER + + .convert (maintainer = MAINTAINER) + + +# MAINTAINER_SIGNATURE: +.if MAINTAINER_SIGNATURE + .unavailable + + +# # ## Sub Section: ML_FN ## +# # obsolete +# # +# # You can enforce To: field of posted article by rewriting it. +# # To: $MAIL_LIST $ML_FN => To: Elena@fml.org (Elena Lolabrigita ML) +# # +# # value: string +# ML_FN: +.if ML_FN + .unavailable + + + +######################################################################### +## ### Section: Directory ### +## $*DIR variable is relative under $DIR (defined in fml initialization phase). +## $FP*DIR is fully pathed directory name for each $*DIR variable. + +# # article spool +# # value: directory string +# SPOOL_DIR: spool +.if SPOOL_DIR == spool + + spool_dir = SPOOL_DIR + + +# # tmp, after chdir, under DIR +# # value: directory string +# TMP_DIR: tmp +.if TMP_DIR == tmp + .auto + + +# # multi-purpose log, temporary, transient, and spool files (4.4BSD style) +# # $LOGFILE and $SPOOL_DIR is exceptional but others is under var/. +# # value: directory string +# VAR_DIR: var +.if VAR_DIR == var + .auto + + +# VARLOG_DIR: var/log +.if VARLOG_DIR == var/log + .ignore + + +# VARRUN_DIR: var/run +.if VARRUN_DIR == var/run + .ignore + + +# VARDB_DIR: var/db +.if VARDB_DIR == var/db + .auto + + + +######################################################################### +##### Section: Manual Registration ### +# # +# # Term "Manual Registration" may be ambiguous but it implies +# # ML maintainer needs to do some action to add a new member. +# # When the maintainer receives subscribe request, he/she +# # 1. remote login to the fml host and edit actives/members +# # 2. remote login to the fml host and run "makefml add ML address" +# # 3. send a command to add an address e.g. "admin add address". +# # You need to enable remote administration function to do it. +# # See "remote administration" section for more details. +# # +# # On contrary, "automatic registration" is fml does everything +# # to add a new member except for some error cases. +# # +# # only support 'confirmation' or 'forward_to_admin' +# # In "confirmation", fml confirms the subscribe request is valid to +# # avoid a tricky attack. +# # If "forward_to_admin" is selected, subscribe request is forwarded +# # to $MAINTAINER without further check. +# # +# # value: confirmation/forward_to_admin +# MANUAL_REGISTRATION_TYPE: confirmation +.if MANUAL_REGISTRATION_TYPE == confirmation + .not_yet_implemented + +.if MANUAL_REGISTRATION_TYPE == forward_to_admin + .not_yet_implemented + + +# # value: directory string +# MANUAL_REGISTRATION_CONFIRMATION_FILE: $DIR/confirm.msub +.if MANUAL_REGISTRATION_CONFIRMATION_FILE == $DIR/confirm.msub + .not_yet_implemented + + +######################################################################### +##### Section: Automatic Registration ### +# # +# # When REJECT_{POST,COMMAND}_HANDLER is "auto_subscribe" or +# # "auto_regist", fml does everything to add a new member except for some +# # error cases. The subscription request type is as follows. +# +# # value: confirmation/subject/body/no-keyword +# AUTO_REGISTRATION_TYPE: confirmation +.if AUTO_REGISTRATION_TYPE == confirmation + .fml8_default + +.if AUTO_REGISTRATION_TYPE == subject + .not_yet_implemented + +.if AUTO_REGISTRATION_TYPE == body + .not_yet_implemented + +.if AUTO_REGISTRATION_TYPE == no-keyword + .not_yet_implemented + + +# # keyword of subscribe request +# # $REQUIRE_SUBSCRIBE (CFVersion 2) => $AUTO_REGISTRATION_KEYWORD +# # value: string +# AUTO_REGISTRATION_KEYWORD: subscribe +.if AUTO_REGISTRATION_KEYWORD == subscribe + .fml8_default + +.if AUTO_REGISTRATION_KEYWORD != subscribe + .unavailable + + +# # when automatic registration, +# # we apply $AUTO_REGISTRATION_DEFAULT_MODE e.g. "m=3mp s=1" to the address. +# # Please see "file operation" in doc/tutorial for more details. +# # value: string +# AUTO_REGISTRATION_DEFAULT_MODE: +.if AUTO_REGISTRATION_DEFAULT_MODE + .ignore + + +# # "confirmation" (default) mode configurations +# # please see doc/tutorial for the detail of "confirmation" +# # value: string +# CONFIRMATION_ADDRESS: +.if CONFIRMATION_ADDRESS == CONTROL_ADDRESS + .fml8_default + +.if CONFIRMATION_ADDRESS != CONTROL_ADDRESS + .unavailable + + +# CONFIRMATION_SUBSCRIBE: subscribe +.if CONFIRMATION_SUBSCRIBE == subscribe + .fml8_default + +.if CONFIRMATION_SUBSCRIBE != subscribe + .unavailable + + +# CONFIRMATION_KEYWORD: confirm +.if CONFIRMATION_KEYWORD == confirm + .fml8_default + +.if CONFIRMATION_KEYWORD != confirm + .unavailable + + +# CONFIRMATION_WELCOME_STATEMENT: +.if CONFIRMATION_WELCOME_STATEMENT + .unavailable + + +# # "subscribe" needs no YOUR NAME. +# # value: 1/0 +# CONFIRMATION_SUBSCRIBE_NEED_YOUR_NAME: 1 +.if CONFIRMATION_SUBSCRIBE_NEED_YOUR_NAME + .unavailable + + +# # file to send back "what is confirmation?" with "confirmation request" +# # reply mail in "confirmation" mode. +# # value: filename string +# CONFIRMATION_FILE: $DIR/confirm +.if CONFIRMATION_FILE + .unavailable + + +# # Expire of request queue. The unit is "hour". (default, 168 == 7*24) +# # value: number +# CONFIRMATION_EXPIRE: 168 +.if CONFIRMATION_EXPIRE == 168 + .not_yet_configurable + + +# # confirmation request queue (you should not manually edit it) +# # value: filename string +# CONFIRMATION_LIST: +.if CONFIRMATION_LIST + .auto + + +# # In fact, obsolete. +# # default keyword for trap +# # value: string +# DEFAULT_SUBSCRIBE: subscribe +.if DEFAULT_SUBSCRIBE == subscribe + .fml8_default + +.if DEFAULT_SUBSCRIBE != subscribe + .unavailable + + +# # In adding a new member, fml sends $WELCOME_FILE to him/her. +# # ML maintainer should set up this file as a guide of mailing list. +# # This function works in automatic registration. +# # value: filename string +# WELCOME_FILE: $DIR/welcome +.if WELCOME_FILE + .unavailable + + +# # subject of mail ($WELCOME_FILE) sent to a new member +# # value: string +# WELCOME_STATEMENT:Welcome to our $ML_FN\n You are added automatically +.if WELCOME_STATEMENT == Welcome to our $ML_FN\n You are added automatically + .unavailable + + +# # Enforce file to add a new member address for some purposes. +# # In default fml adds it to both $ACTIVE_LIST and $MEMBER_LIST. +# # value: filename string +# FILE_TO_REGIST: +.if FILE_TO_REGIST + + primary_member_map = FILE_TO_REGIST + + primary_recipient_map = FILE_TO_REGIST + + +# # obsolete in fact. +# # +# # In default if body lines > $AUTO_REGISTRATION_LINES_LIMIT, +# # we forward this mail to $MAIL_LIST. If $AUTO_REGISTERED_UNDELIVER_P is set, +# # we ALWAYS DO NOT Forward it to $MAIL_LIST. +# # value: 1/0 +# AUTO_REGISTERED_UNDELIVER_P: 1 +.if AUTO_REGISTERED_UNDELIVER_P == 1 + .unavailable + +.if AUTO_REGISTERED_UNDELIVER_P == 0 + .unavailable + + +# AUTO_REGISTRATION_LINES_LIMIT: 0 +.if AUTO_REGISTRATION_LINES_LIMIT == 0 + .unavailable + +.if AUTO_REGISTRATION_LINES_LIMIT > 0 + .unavailable + + + +######################################################################### +##### Section: Confirmd ### +# # confirmd +# # value: filename string +# CONFIRMD_ACK_REQ_FILE: $DIR/confirmd.ackreq +.if CONFIRMD_ACK_REQ_FILE == $DIR/confirmd.ackreq + .not_yet_implemented + +# CONFIRMD_ACK_LOGFILE: $VARLOG_DIR/confirmd.ack +.if CONFIRMD_ACK_LOGFILE == $VARLOG_DIR/confirmd.ack + .not_yet_implemented + + +# # value: number / ( number + month/week/day ) +# CONFIRMD_ACK_EXPIRE_UNIT: 1month +.if CONFIRMD_ACK_EXPIRE_UNIT == 1month + .not_yet_implemented + + +# CONFIRMD_ACK_WAIT_UNIT: 2weeks +.if CONFIRMD_ACK_WAIT_UNIT == 2weeks + .not_yet_implemented + + + +######################################################################### +##### Section: Remote Administration ### +# # +# # For security, I do not recommend you use remote control of fml. +# # If $REMOTE_ADMINISTRATION is set, you can control FML by sending +# # a command mail from remote host. +# # Another choice from remote host is CGI interface but fml 3.0 does not +# # provide it. CGI development is underway. +# # +# # value: 1/0 +# REMOTE_ADMINISTRATION: 0 +.if REMOTE_ADMINISTRATION == 0 + + use_admin_command_mail_fucntion = no + +.if REMOTE_ADMINISTRATION == 1 + + use_admin_command_mail_fucntion = yes + + + +# # Of course, the remote control requires some kind of authentication. +# # The choice of authentication is $REMOTE_ADMINISTRATION_AUTH_TYPE, +# # which is one of +# # address From: field +# # crypt From: field + password (e.g. "#admin pass PASSWORD") +# # md5 From: field + password (e.g. "#admin pass PASSWORD") +# # pgp PGP(Pretty Good Privacy) signature +# # +# # The difference of "crypt" and "md5" is $PASSWD_FILE format. +# # HISTORY: $REMOTE_ADMINISTRATION_REQUIRE_PASSWORD <=> "crypt" +# # +# # value: crypt/address/md5/pgp/pgp2/pgp5/gpgp +# REMOTE_ADMINISTRATION_AUTH_TYPE: crypt +.if REMOTE_ADMINISTRATION_AUTH_TYPE == crypt + .fml8_default + (admin_command_mail_restrictions += check_admin_member_password) + +.if REMOTE_ADMINISTRATION_AUTH_TYPE == address + .not_yet_implemented + +.if REMOTE_ADMINISTRATION_AUTH_TYPE == md5 + .not_yet_implemented + +.if REMOTE_ADMINISTRATION_AUTH_TYPE == pgp + .not_yet_implemented + +.if REMOTE_ADMINISTRATION_AUTH_TYPE == pgp2 + .not_yet_implemented + +.if REMOTE_ADMINISTRATION_AUTH_TYPE == pgp5 + .not_yet_implemented + +.if REMOTE_ADMINISTRATION_AUTH_TYPE == gpg + .not_yet_implemented + + +# # address list of members who can send a command mail from remote +# # value: filename string +# ADMIN_MEMBER_LIST: $DIR/members-admin +.if ADMIN_MEMBER_LIST + .convert + + +# # help file of admin commands +# # value: filename string +# ADMIN_HELP_FILE: $DIR/help-admin +.if ADMIN_HELP_FILE + .unavailable + + +# # password file to authenticate members +# # The format is "address encrypted-password" and uses one line for one address. +# # value: filename string +# PASSWD_FILE: $DIR/etc/passwd +.if PASSWD_FILE + .convert + + +# # "admin add" to add an address to a member list. If it succeeds, fml +# # sends back $WELCOME_FILE if this variable is defined. In default fml +# # does not do it, so the maintainer needs to send the success of subscribe +# # and guide to the new member. +# # value: 1/0 +# ADMIN_ADD_SEND_WELCOME_FILE: 0 +.if ADMIN_ADD_SEND_WELCOME_FILE == 0 + .fml8_default + +.if ADMIN_ADD_SEND_WELCOME_FILE == 1 + .not_yet_implemented + + +# # N, the number of lines, of "tail -N $LOGFILE". +# # "admin log" is "tail -100 log" in default to avoid too big mail. +# # value: number +# ADMIN_LOG_DEFAULT_LINE_LIMIT: 100 +.if ADMIN_LOG_DEFAULT_LINE_LIMIT + + $log_command_tail_starting_location = ADMIN_LOG_DEFAULT_LINE_LIMIT + + +# # PGP directory path (obsolete in fml 4.0) +# # value: filename string +# PGP_PATH: $DIR/etc/pgp +.if PGP_PATH == $DIR/etc/pgp + .not_yet_implemented + + +# # If you enforce the following *KEYRING_DIR in $CFVersion < 6.1, +# # set this variable on. +# # value: 1/0 +# USE_FML40_PGP_PATH: 1 +.if USE_FML40_PGP_PATH == 1 + .not_yet_implemented + + +# # fml 4.0 +# # value: directory string +# DIST_AUTH_KEYRING_DIR: $DIR/etc/dist-auth +.if DIST_AUTH_KEYRING_DIR == $DIR/etc/dist-auth + .not_yet_implemented + + +# DIST_ENCRYPT_KEYRING_DIR: $DIR/etc/dist-encrypt +.if DIST_ENCRYPT_KEYRING_DIR == $DIR/etc/dist-encrypt + .not_yet_implemented + + +# ADMIN_AUTH_KEYRING_DIR: $DIR/etc/admin-auth +.if ADMIN_AUTH_KEYRING_DIR == $DIR/etc/admin-auth + .not_yet_implemented + + +# ADMIN_ENCRYPT_KEYRING_DIR: $DIR/etc/admin-encrypt +.if ADMIN_ENCRYPT_KEYRING_DIR == $DIR/etc/admin-encrypt + .not_yet_implemented + + + +######################################################################### +##### Section: Moderations; moderators check posted articles ### + +# # "moderator" certification type +# # value: 1/2/3 +# MODERATOR_FORWARD_TYPE: 2 +.if MODERATOR_FORWARD_TYPE == 2 + .not_yet_implemented + + +# # member list who receives submitted article. +# # If this file does not exist, it is forwarded to only $MAINTAINER. +# # A moderator who certificate submitted articles and permit the post +# # to mailing list. +# # +# # fml does not check moderator's addresses. fml check only "moderators +# # knows passwords or identifiers (one time password)". +# # +# # value: filename string +# MODERATOR_MEMBER_LIST: $DIR/moderators +.if MODERATOR_MEMBER_LIST + .not_yet_implemented + + +# # expire old submitted but not certified articles +# # default: 2 weeks +# # value: number +# MODERATOR_EXPIRE_LIMIT: 14 +.if MODERATOR_EXPIRE_LIMIT == 14 + .not_yet_implemented + + + +######################################################################### +##### Section: Security ### + +# # We reject $REJECT_ADDR@ARBITRARY.DOM.AIN since these are clearly NOT +# # individuals. It also may be effective to avoid mail loop since +# # some error or automatic reply comes from not individual addresses. +# # This restriction is stronger than $PERMIT_*_FROM variable. +# # For example, if $PERMIT_POST_FROM is "anyone", fml does not permit +# # post from root@some.domain. If you permit it, please define $REJECT_ADDR. +# # +# # XXX This variable name is ambiguous. It should be $REJECT_ACCOUNT? +# # +# # value: regexp string +# REJECT_ADDR: root|postmaster|MAILER-DAEMON|msgs|nobody|news|majordomo|listserv|listproc|\S+\-help|\S+\-subscribe|\S+\-unsubscribe +.if REJECT_ADDR + .convert + + +# # list of addresses fml should reject. fml checks From: field for this but +# # it may be ineffective since SMTP has no general authentication method. +# # value: filename string +# REJECT_ADDR_LIST: $DIR/spamlist +.if REJECT_ADDR_LIST + .not_yet_implemented + + +# # check UNIX from to avoid mail loop. check in default. +# # value: 1/0 +# NOT_USE_UNIX_FROM_LOOP_CHECK: 0 +.if NOT_USE_UNIX_FROM_LOOP_CHECK == 0 + .unavailable + + +.if NOT_USE_UNIX_FROM_LOOP_CHECK == 1 + .unavailable + + +# # check Message-Id: duplication to avoid mail loop +# # value: 1/0 +# CHECK_MESSAGE_ID: 1 +.if CHECK_MESSAGE_ID == 1 + .fml8_default + +.if CHECK_MESSAGE_ID == 0 + + incoming_mail_header_loop_check_rules -= check_message_id + + +# # check mail body content md5 checksum to avoid mail loop +# # do not check it in default. +# # value: 1/0 +# CHECK_MAILBODY_CKSUM: 0 +.if CHECK_MAILBODY_CKSUM + .not_yet_implemented + + +# # obsolete today +# # Logs the getpeername() +# # value: 1/0 +# LOG_CONNECTION: 0 +.if LOG_CONNECTION + .unavailable + + +# # address check levels, which level is the tree depth from the root. +# # For example +# # fukachan@phys.titech.ac.jp +# # fukachan@axion.phys.titech.ac.jp +# # +# # fml checks $ADDR_CHECK_MAX level from the name space root. That is +# # compare "jp" -> compare "ac" -> titech -> phys -> axion ... +# # +# # When $ADDR_CHECK_MAX = 3, fml regards these two are the same. +# # When $ADDR_CHECK_MAX = 4, fml regards these two are the same. +# # When $ADDR_CHECK_MAX = 5, fml regards these two are DIFFERENT! +# # +# # value: number +# ADDR_CHECK_MAX: 3 +.if ADDR_CHECK_MAX == 3 + .fml8_default + +.if ADDR_CHECK_MAX != 3 + .not_yet_configurable + + +# # fml reject too big mail. +# # In-coming mail size > $INCOMING_MAIL_SIZE_LIMIT, fml discards it +# # and send a warning only to the maintainer. +# # 0 (default) implies infinite (no limit) +# # value: number +# INCOMING_MAIL_SIZE_LIMIT: +.if INCOMING_MAIL_SIZE_LIMIT == 0 + .unavailable + +.if INCOMING_MAIL_SIZE_LIMIT != 0 + .auto + + +# # When fml reject too big mail, +# # if $NOTIFY_MAIL_SIZE_OVERFLOW is set, notify the rejection to the sender. +# # value: 1/0 +# NOTIFY_MAIL_SIZE_OVERFLOW: 1 +.if NOTIFY_MAIL_SIZE_OVERFLOW == 1 + .fml8_default + +.if NOTIFY_MAIL_SIZE_OVERFLOW == 0 + .not_yet_configurable + + +# # When fml reject too big mail, +# # if $ANNOUNCE_MAIL_SIZE_OVERFLOW is set, announce "too big mail from someone" +# # to mailing list (SARASHIMONO:-). +# # value: 1/0 +# ANNOUNCE_MAIL_SIZE_OVERFLOW: 0 +.if ANNOUNCE_MAIL_SIZE_OVERFLOW == 0 + .not_yet_implemented + +.if ANNOUNCE_MAIL_SIZE_OVERFLOW == 1 + .not_yet_implemented + + + +# # Resource Limit (useful for ISP ?): (default 0 == not check this limit) +# # the maximum of ML delivery members when auto registration routine works. +# # +# # If member > $MAX_MEMBER_LIMIT, auto registration rejects the request. +# # We check actives to permit aliases of post-able addresses. +# # We check @ACTIVE_LIST effective members, not @MEMBER_LIST. +# # value: number +# MAX_MEMBER_LIMIT: +.if MAX_MEMBER_LIMIT + .not_yet_implemented + + +# # Filter of posted article. +# # &EnvelopeFilter is called in the top of &Distribute if you set +# # $USE_DISTRIBUTE_FILTER = 1; +# # value: 1/0 +# USE_DISTRIBUTE_FILTER: +.if USE_DISTRIBUTE_FILTER == 1 + + use_article_filter = yes + +.if USE_DISTRIBUTE_FILTER == 0 + + use_article_filter = no + + +# # Filter of posted article. +# # You can use $DISTRIBUTE_FILTER_HOOK for advanced customizes. +# # value: string +# DISTRIBUTE_FILTER_HOOK: +.if DISTRIBUTE_FILTER_HOOK + .ignore + + +# # $FILTER_NOTIFY_REJECTION enables fml.pl notifies the rejection to +# # the sender. +# # value: 1/0 +# FILTER_NOTIFY_REJECTION: +.if FILTER_NOTIFY_REJECTION == 1 + .fml8_default + +.if FILTER_NOTIFY_REJECTION == 0 + .not_yet_configurable + + + +# # Attribute of filter of posted article +# # value: 1/0 +# FILTER_ATTR_REJECT_NULL_BODY: 1 +.if FILTER_ATTR_REJECT_NULL_BODY == 1 + + article_text_plain_filter_rules += reject_null_mail_body + +.if FILTER_ATTR_REJECT_NULL_BODY == 0 + + article_text_plain_filter_rules -= reject_null_mail_body + + + +# # Attribute of filter of posted article +# # When $FILTER_ATTR_REJECT_COMMAND is 1 under distribution mode, +# # rejects "# command" syntax just before distribution (&Distribute;) +# # value: 1/0 +# FILTER_ATTR_REJECT_COMMAND: +.if FILTER_ATTR_REJECT_COMMAND == 1 + + article_text_plain_filter_rules += reject_old_fml_command_syntax + +.if FILTER_ATTR_REJECT_COMMAND == 0 + + article_text_plain_filter_rules -= reject_old_fml_command_syntax + + + +# # Attribute of filter of posted article +# # reject Japanese "2byes English words" +# # value: 1/0 +# FILTER_ATTR_REJECT_2BYTES_COMMAND: +.if FILTER_ATTR_REJECT_2BYTES_COMMAND == 1 + + article_text_plain_filter_rules += reject_japanese_command_syntax + +.if FILTER_ATTR_REJECT_2BYTES_COMMAND == 0 + + article_text_plain_filter_rules -= reject_japanese_command_syntax + + + + +# # Attribute of filter of posted article +# # reject command mail sent to the address for posting. +# # value: 1/0 +# FILTER_ATTR_REJECT_INVALID_COMMAND: 1 +.if FILTER_ATTR_REJECT_INVALID_COMMAND == 1 + + article_text_plain_filter_rules += reject_invalid_fml_command_syntax + +.if FILTER_ATTR_REJECT_INVALID_COMMAND == 0 + + article_text_plain_filter_rules -= reject_invalid_fml_command_syntax + + +# # Attribute of filter of posted article +# # reject a mail with "one line" mail body (must be invalid command mail) +# # one line means the input mail has one line in the first paragraph +# # except for signature (last paragraph). +# # Even if it has one line, the paragraph ends with period '.' +# # it must be an effective paragraph. So we should not reject it. +# # value: 1/0 +# FILTER_ATTR_REJECT_ONE_LINE_BODY: 1 +.if FILTER_ATTR_REJECT_ONE_LINE_BODY == 1 + + article_text_plain_filter_rules += reject_one_line_message + + +.if FILTER_ATTR_REJECT_ONE_LINE_BODY == 0 + + article_text_plain_filter_rules -= reject_one_line_message + + +# # Attribute of filter of posted article +# # reject MIME/multipart mails with Microsoft GUID within it, +# # We intend to reject "Melissa virus" family by it. +# # value: 1/0 +# FILTER_ATTR_REJECT_MS_GUID: 1 +.if FILTER_ATTR_REJECT_MS_GUID == 1 + + article_text_plain_filter_rules += reject_ms_guid + +.if FILTER_ATTR_REJECT_MS_GUID == 0 + + article_text_plain_filter_rules -= reject_ms_guid + + +# # reject not ascii nor ISO-2022-JP +# # value: 1/0 +# FILTER_ATTR_REJECT_INVALID_JAPANESE: 0 +.if FILTER_ATTR_REJECT_INVALID_JAPANESE == 0 + + article_text_plain_filter_rules -= reject_not_iso2022jp_japanese_string + +.if FILTER_ATTR_REJECT_INVALID_JAPANESE == 1 + + article_text_plain_filter_rules += reject_not_iso2022jp_japanese_string + + +# # cutoff empty message. +# # value: 1/0 +# CONTENT_HANDLER_CUTOFF_EMPTY_MESSAGE: 0 +.if CONTENT_HANDLER_CUTOFF_EMPTY_MESSAGE + .use_other_file + + +# # reject empty message after cut off process. +# # value: 1/0 +# CONTENT_HANDLER_REJECT_EMPTY_MESSAGE: 0 +.if CONTENT_HANDLER_REJECT_EMPTY_MESSAGE + .use_other_file + + +# # try to convert Japanese HANKAKU chars in the mail body to ZENAKKU +# # value: 1/0 +# USE_HANKAKU_CONVERTER: 0 +.if USE_HANKAKU_CONVERTER == 0 + .not_yet_implemented + +.if USE_HANKAKU_CONVERTER == 1 + .not_yet_implemented + + +# # reject HTML mails that the same content exist in the form of both +# # plain and html. e.g. some versions of M$ outlook, netscape mail +# # "AGAINST_HTML_MAIL: 1/0" is old style, which works for compatibility though. +# # NULL (default) is "pass through a html mail". +# # value: "strip" / "reject" / "" +# HTML_MAIL_DEFAULT_HANDLER: +.if HTML_MAIL_DEFAULT_HANDLER + .use_other_file + + +# # Traffic Monitoring Mechanism within fml +# # Mail Traffic Information: internal traffic monitor +# # value: 1/0 +# USE_MTI: +.if USE_MTI + .not_yet_implemented + + +# # MIT warning (mail bomb report) negative cache interval +# # to avoid mail bomb of "mail bomb attack report" itself. +# # value: number +# MTI_WARN_INTERVAL: 3600 +.if MTI_WARN_INTERVAL + .not_yet_implemented + + +# # value: filename string +# MTI_WARN_LASTLOG: +.if MTI_WARN_LASTLOG + .not_yet_implemented + + +# # garbage collection +# # how old data (cache) to remove in clean up +# # value: number +# MTI_EXPIRE_UNIT: 3600 +.if MTI_EXPIRE_UNIT + + + +# # low water mark +# # value: number +# MTI_BURST_SOFT_LIMIT: 1 +.if MTI_BURST_SOFT_LIMIT + .not_yet_implemented + + +# # high water mark +# # value: number +# MTI_BURST_HARD_LIMIT: 2 +.if MTI_BURST_HARD_LIMIT + .not_yet_implemented + + +# # function name to evaluate the current traffic load +# # value: funtion string +# MTI_COST_EVAL_FUNCTION: MTISimpleBomberP +.if MTI_COST_EVAL_FUNCTION + .not_yet_implemented + + +# # cache of spammer candidates +# # value: filename string +# MTI_MAIL_FROM_HINT_LIST: $DIR/mti_mailfrom.hints +.if MTI_MAIL_FROM_HINT_LIST + .not_yet_implemented + + +# # how to announce the new comer if $AUTO_REGISTERED_UNDELIVER_P is 0. +# # value: raw / prepend_info +# SUBSCRIBE_ANNOUNCE_FORWARD_TYPE: prepend_info +.if SUBSCRIBE_ANNOUNCE_FORWARD_TYPE == prepend_info + .not_yet_implemented + +.if SUBSCRIBE_ANNOUNCE_FORWARD_TYPE == raw + .not_yet_implemented + + + +# # Optional. If UNSUBSCRIBE_AUTH_TYPE is 'confirmation', fml sends back +# # confirmation against a fake. In default, FML does not do confirmation. +# # available type is "confirmation" only. +# # value: confirmation +# UNSUBSCRIBE_AUTH_TYPE: +.if UNSUBSCRIBE_AUTH_TYPE == confirmation + .fml8_default + +.if UNSUBSCRIBE_AUTH_TYPE != confirmation + .not_yet_implemented + + +# # chaddr checks confirmation +# # value: confirmation / "" +# CHADDR_AUTH_TYPE: +.if CHADDR_AUTH_TYPE == confirmation + .fml8_default + +.if CHADDR_AUTH_TYPE != confirmation + .not_yet_implemented + + +# # LOGGING THE LATEST IN-COMING MAILS +# # Logs an in-coming mail to $LOG_MAIL_DIR/$id +# # where ($id = `cat $LOG_MAIL_SEQ`; $id = $id % $NUM_LOG_MAIL; $id++). +# # Latest $NUM_LOG_MAIL files are stored in $LOG_MAIL_DIR and +# # the message size of each file except for the header +# # is limited up to $LOG_MAIL_FILE_SIZE_MAX bytes to save disk. +# # value: 1/0 +# USE_LOG_MAIL: 0 +.if USE_LOG_MAIL == 0 + + use_incoming_mail_cache = no + +.if USE_LOG_MAIL == 1 + + use_incoming_mail_cache = yes + + +# # value: filename string +# LOG_MAIL_DIR: $VAR_DIR/Mail +.if LOG_MAIL_DIR + .auto + +# LOG_MAIL_SEQ: $LOG_MAIL_DIR/.seq +.if LOG_MAIL_SEQ + .auto + + +# # value: number +# NUM_LOG_MAIL: 100 +.if NUM_LOG_MAIL + .not_yet_configurable + +# LOG_MAIL_FILE_SIZE_MAX: 2048 +.if LOG_MAIL_FILE_SIZE_MAX + .not_yet_configurable + + +# # PGP Encrypted ML +# # value: 1/0 +# USE_ENCRYPTED_DISTRIBUTION: +.if USE_ENCRYPTED_DISTRIBUTION + .not_yet_implemented + + +# # value: pgp / pgp2 / pgp5 / gpgp +# ENCRYPTED_DISTRIBUTION_TYPE: pgp2 +.if ENCRYPTED_DISTRIBUTION_TYPE == pgp2 + .not_yet_implemented + + +# # obosolete in fml 4.0 +# # value: 2/5/6 +# # PGP_VERSION: 2 + + +######################################################################### +##### Section: Header Customization ### +# # In general, you can control fields in header in the following: +# # +# # @HdrFieldsOrder Fields Order In Header +# # +# # &DEFINE_FIELD_ORIGINAL('field'); Conserve Original +# # &DEFINE_FIELD_FORCED('field', "contents"); Overwrite +# # +# # In default, we discard fields not shown in @HdrFieldsOrder. + +# # Date: definition ("makefml config" can control this) +# # 1 original-date Date: +# # * Date: == when distribute() works +# # 2 distribute-date+posted Date: + Posted: +# # 3 distribute-date+x-posted Date: + X-Posted: +# # 4 distribute-date+x-original-date Date: + X-Original-Date: +# # * Date: == when fml.pl receives or is kicked off. +# # 5 received-date+posted Date: + Posted: +# # 6 received-date+x-posted Date: + X-Posted: +# # 7 received-date+x-original-date Date: + X-Original-Date: +# # value: original-date/distribute-date+posted/distribute-date+x-posted +# # /distribute-date+x-original-date/received-date+posted +# # /received-date+x-posted/received-date+x-original-date +# DATE_TYPE: original-date +.if DATE_TYPE == original-date + .fml8_default + +.if DATE_TYPE != original-date + .not_yet_implemented + + +# # In article header, fml adds following header fields. +# # +# # $XMLNAME +# # $XMLCOUNT: sequence-number +# # +# # e.g. +# # X-ML-Name: Elena +# # X-Mail-Count: 00007 +# # +# # value: string +# XMLNAME: X-ML-Name: Elena +.if XMLNAME == X-ML-Name: Elena + .convert + +# XMLCOUNT: X-Mail-Count +.if XMLCOUNT == X-Mail-Count + + article_header_rewrite_rules += add_fml_traditional_article_id + +.if XMLCOUNT != X-Mail-Count + .not_yet_configurable + + +# # In default subject tag does not exist to show more and more effective +# # subject and body. Client Interface SHOULD CONTROL subject descriptions. +# # +# # The available type is [:] [,] [ ] (:) (,) ( ). +# # e.g. [:] => [Elena:00100] format (here $BRACKET is "Elena"). +# # But you can customize SUBJECT_FREE_* series variables. +# # Please see doc/tutorial for the detail +# # +# # value: (:) / [:] / () / [] / (,) / [,] / () / [] / (ID) / [ID] / "" +# SUBJECT_TAG_TYPE: +.if SUBJECT_TAG_TYPE + .convert + + +# # BRACKET of "Subject: [BRACKET:ID] ..." form +# # value: string +# BRACKET: Elena +.if BRACKET == Elena + .convert + + +# # obsolete +# # We strip off e.g. [ML:fukachan] form in Subject +# # but this operations depends on special forms, so not functional. +# # You do not expect a lot on this option. +# STRIP_BRACKETS: 0 +.if STRIP_BRACKETS == 0 + .ignore + + +# # You can customize your own bracket by these variables. +# # See doc/tutorial and libtagdef.pl on examples. +# # value: regexp string +# BRACKET_SEPARATOR: +.if BRACKET_SEPARATOR + .convert + + +# SUBJECT_FREE_FORM: +.if SUBJECT_FREE_FORM + .convert + + +# SUBJECT_FREE_FORM_REGEXP: +.if SUBJECT_FREE_FORM_REGEXP + .convert + + +# SUBJECT_FORM_LONG_ID: +.if SUBJECT_FORM_LONG_ID + .convert + + +# # obsolete based on RFC1123 +# # value: 1/0 +# USE_ERRORS_TO: +.if USE_ERRORS_TO == 1 + + article_header_rewrite_rules += rewrite_errors_to + +.if USE_ERRORS_TO == 0 + + article_header_rewrite_rules -= rewrite_errors_to + + +# # obsolete based on RFC1123 +# # value: string +# ERRORS_TO: +.if ERRORS_TO + .not_yet_configurable + + +# # Message-Id: use original Message-Id or Server Defined Message-Id ? +# # if 1, original and +# # if 0, fml generates a message-id like $day.FMLAAA.$pid.$MAIL_LIST +# # value: 1/0 +# USE_ORIGINAL_MESSAGE_ID: 1 +.if USE_ORIGINAL_MESSAGE_ID == 1 + .fml8_default + +.if USE_ORIGINAL_MESSAGE_ID == 0 + .not_yet_implemented + + +# # Precedence: field; +# # value: string +# PRECEDENCE: bulk +.if PRECEDENCE == bulk + .not_yet_implemented + +.if PRECEDENCE != bulk + .not_yet_implemented + + +# # append STARTREK stardate :-) in article. +# # Stardate calculation algorithm is ambiguous. +# # X-Stardate: field +# # value: 1/0 +# APPEND_STARDATE: +.if APPEND_STARDATE == 1 + .not_yet_implemented + +.if APPEND_STARDATE == 0 + .not_yet_implemented + + +# # RFC2369 e.g. list-post: .. +# # value: 1/0 +# USE_RFC2369: 1 +.if USE_RFC2369 == 1 + + article_header_rewrite_rules += add_rfc2369 + +.if USE_RFC2369 == 0 + + article_header_rewrite_rules -= add_rfc2369 + + +# # List-* +# LIST_SOFTWARE: +.if LIST_SOFTWARE + .not_yet_configurable + +# LIST_POST: +.if LIST_POST + .not_yet_configurable + +# LIST_OWNER: +.if LIST_OWNER + .not_yet_configurable + +# LIST_HELP: +.if LIST_HELP + .not_yet_configurable + +# LIST_SUBSCRIBE: +.if LIST_SUBSCRIBE + .not_yet_configurable + +# LIST_UNSUBSCRIBE: +.if LIST_UNSUBSCRIBE + .not_yet_configurable + +# LIST_ID: +.if LIST_ID + .not_yet_configurable + + + +# # obsolete in fml 3.0 +# # We should force "To: $MAIL_LIST" form "For Eye" or NOT? +# # default is "NO". +# # +# # 0 Pass the original field To: +# # 1 We rewrite "To: $MAIL_LIST, original-to-fields". +# # 2 Force "To: $MAIL_LIST". +# +# # REWRITE_TO = 1 if NOT_REWRITE_TO == 0 (2.1 Release) +# # value: 0/1/2 +# REWRITE_TO: +.if REWRITE_TO == 2 + .not_yet_implemented + +.if REWRITE_TO == 1 + .not_yet_implemented + +.if REWRITE_TO == 0 + .fml8_default + + +# # Default values if no value (no field) is given. +# # value: string +# Subject: +.if Subject + .ignore + +# From_address: not.found +.if From_address == not.found + .ignore + +# User: not.found +.if User == not.found + .ignore + +# Date: not.found +.if Date == not.found + .ignore + + +# # TIME ZONE; +0900 is RFC822 syntax (I like JST but ... ;-) +# # value: +\d{4} / -\d{4} +# TZone: +0900 +.if TZone == +0900 + .auto + + +# # time zone within summer time if you use summer time. +# # thank HIROSHIMA Naoki <naoki@bcrossing.com> on this idea +# TZONE_DST: +.if TZONE_DST + .auto + + +# # ## Sub Section: Pass All Header ? ## +# # In some cases you need to pass only defined fields of the header +# # which is defined in @HdrFieldsOrder (see "sub SetDefaults" in fml.pl). +# # All files except $SKIP_FIELDS is passed through +# # when $PASS_ALL_FIELDS_IN_HEADER is set. +# # The old variable name is $SUPERFLUOUS_HEADERS. +# # value: 1/0 +# PASS_ALL_FIELDS_IN_HEADER: 1 +.if PASS_ALL_FIELDS_IN_HEADER == 1 + .fml8_default + + +# # ignore header field irrespective of @HdrFieldsOrder and +# # $PASS_ALL_FIELDS_IN_HEADER setting +# # value: regexp string +# SKIP_FIELDS: Return-Receipt-To +.if SKIP_FIELDS == Return-Receipt-To + + unsafe_header_fields = SKIP_FIELDS + + +# # correct a wrong input +# # value: 1/0 +# ALLOW_WRONG_LINES_IN_HEADER: 1 +.if ALLOW_WRONG_LINES_IN_HEADER == 1 + .ignore + + + +######################################################################### +##### Section: Commands, Command Traps, File Operations (e.g. mget) ### + +# # obsolete +# # COMMAND format is "#help" == "# help" if $COMMAND_SYNTAX_EXTENSION is set. +# # value: 1/0 +# COMMAND_SYNTAX_EXTENSION: 1 +.if COMMAND_SYNTAX_EXTENSION == 1 + .ignore + + +# # "Subject: # commands" is available? +# # value: 1/0 +# USE_SUBJECT_AS_COMMANDS: 0 +.if USE_SUBJECT_AS_COMMANDS == 0 + .ignore + + +# # obsolete +# # If NOT "# command" syntax commands is given, ignore or warn to the user? +# # Our default is not, since most such cases are "signature". +# # value: 1/0 +# USE_WARNING: 0 +.if USE_WARNING == 0 + .fml8_default + +.if USE_WARNING == 1 + .ignore + + +# # obsolete: since this is the same as --ctladdr. +# # value: 1/0 +# COMMAND_ONLY_SERVER: 0 +.if COMMAND_ONLY_SERVER == 0 + .ignore + + +# # **ATTENTION** +# # $PROHIBIT_COMMAND_FOR_STRANGER is obsoletes since +# # $PROHIBIT_COMMAND_FOR_STRANGER equals $PERMIT_COMMAND_FROM = "anyone"; + +# # ## Sub Section: traps ## +# # obsolete +# # when $MAIL_LIST == $CONTROL_ADDRESS, +# # the first $COMMAND_CHECK_LIMIT lines is checked for commands mail or not? +# # $GUIDE_CHECK_LIMIT is the same kind of variable but for "# guide" trap. +# # $GUIDE_KEYWORD determines "guide" of "$ guide" trap. +# # value: number +# COMMAND_CHECK_LIMIT: 3 +.if COMMAND_CHECK_LIMIT == 3 + .ignore + + +# # obsolete +# # value: number +# GUIDE_CHECK_LIMIT: 3 +.if GUIDE_CHECK_LIMIT == 3 + .ignore + + +# # obsolete +# # value: string +# GUIDE_KEYWORD: guide +.if GUIDE_KEYWORD == guide + .ignore + + + +# # The maximum length for each command. 128 bytes by default. +# # value: number +# MAXLEN_COMMAND_INPUT: 128 +.if MAXLEN_COMMAND_INPUT == 128 + + command_mail_line_length_limit = MAXLEN_COMMAND_INPUT + + +# # The maximum number of commands in one command mail. +# # The variable \$MAXNUM_COMMAND_INPUT controls this. +# # If the value is 3, fml permits 3 commands in one command mail. +# # 0 or NULL implies infinite (default). +# # value: number +# MAXNUM_COMMAND_INPUT: +.if MAXNUM_COMMAND_INPUT + + command_mail_valid_command_limit = MAXNUM_COMMAND_INPUT + + +# # "# chaddr" command name aliases +# # value: regexp string +# CHADDR_KEYWORD: chaddr|change\-address|change +.if CHADDR_KEYWORD == chaddr|change\-address|change + .auto + + +# # choise of addresses to return for "chaddr" command reply +# # value: newaddr curaddr maintainer +# CHADDR_REPLY_TO: newaddr curaddr +.if CHADDR_REPLY_TO == newaddr curaddr + .not_yet_configurable + + +# # choise of addresses to return for "admin chaddr" command reply +# # value: newaddr curaddr maintainer +# ADMIN_CHADDR_REPLY_TO: newaddr curaddr +.if ADMIN_CHADDR_REPLY_TO == newaddr curaddr + .not_yet_configurable + + +# # ## Sub Section: mget ## +# # The default mode of "mget" without mode (default is "tar.gz" form). +# # $MGET_TEXT_MODE_DEFAULT is used by &SendFileBySplit +# # value: mode string +# MGET_MODE_DEFAULT: +.if MGET_MODE_DEFAULT + .ignore + + +# MGET_TEXT_MODE_DEFAULT: +.if MGET_TEXT_MODE_DEFAULT + .ignore + + +# # The reply for "mget" commands sends long reply mails as splitten mails +# # by the unit $MAIL_LENGTH_LIMIT lines once at $SLEEPTIME secs.. +# # value: number +# MAIL_LENGTH_LIMIT: 1000 +.if MAIL_LENGTH_LIMIT == 1000 + .not_yet_implemented + + +# SLEEPTIME: 60 +.if SLEEPTIME == 60 + .ignore + + +# # almost obsolete +# # special case of "mget" routine uses these variables. +# # It is not user defined variable. +# # See doc/tutorial and libfop.pl for the detail. +# # You change MIME/Multipart default. +# # value: string +# MIME_VERSION: +.if MIME_VERSION + .ignore + +# MIME_CONTENT_TYPE: +.if MIME_CONTENT_TYPE + .ignore + +# MIME_MULTIPART_BOUNDARY: +.if MIME_MULTIPART_BOUNDARY + .ignore + +# MIME_MULTIPART_CLOSE_DELIMITER: +.if MIME_MULTIPART_CLOSE_DELIMITER + .ignore + +# MIME_MULTIPART_DELIMITER: +.if MIME_MULTIPART_DELIMITER + .ignore + +# MIME_MULTIPART_PREAMBLE: +.if MIME_MULTIPART_PREAMBLE + .ignore + +# MIME_MULTIPART_TRAILER: +.if MIME_MULTIPART_TRAILER + .ignore + + +# # Japanese specific +# # sjis conversion in "mget ish" mode. +# # value: 1/0 +# USE_SJIS_IN_ISH: +.if USE_SJIS_IN_ISH + .ignore + + +# # RFC1153 configurations; see doc/tutorial for the detail +# # value: number +# RFC1153_ISSUE: +.if RFC1153_ISSUE + .ignore + + +# # value: number / string +# RFC1153_VOL: +.if RFC1153_VOL + .ignore + + +# # value: filename string +# RFC1153_SEQUENCE_FILE: +.if RFC1153_SEQUENCE_FILE + .ignore + + +# # ## Sub Section: MTA specific ## +# # qmail specific extension +# # To send "get 1" to ml-ctl@domain is equivalent to that +# # send anything to ml-get-1@domain if this variable is defined. +# # value: 1/0 +# USE_DOT_QMAIL_EXT: 0 +.if USE_DOT_QMAIL_EXT == 0 + .not_yet_implemented + + +# # ## Sub Section: Headers of reply from FML ## +# # obsolete +# # For the reply for commands from fml, +# # we force Reply-To: $FORCE_COMMAND_REPLY_TO ?(default is $CONTROL_ADDRESS) +# # value: string +# FORCE_COMMAND_REPLY_TO: +.if FORCE_COMMAND_REPLY_TO + .not_yet_implemented + + +# # Subject template in "mget" reply. +# # automatic substitute is done before send the reply; For example, +# # Subject: result for mget [last:3 tar + gzip] (1/1) (Elena Lolabrigita ML) +# # +# # _DOC_MODE_ <=> [last:10 tar + gzip] +# # _PART_ <=> (1/4) +# # _ML_FN_ <=> $ML_FN (here is "(Elena Lolabrigita ML)") +# # +# # $NOT_SHOW_DOCMODE is obsolete, it equals you discard _PART_. +# # +# # value: string +# MGET_SUBJECT_TEMPLATE: result for mget _DOC_MODE_ _PART_ _ML_FN_ +.if MGET_SUBJECT_TEMPLATE == result for mget _DOC_MODE_ _PART_ _ML_FN_ + .not_yet_implemented + + +# # send error message to Reply-To: ? or From: ? +# # (Of course From: if Reply-To: is not defined). +# # If $MESSAGE_RETURN_ADDR_POLICY is null, +# # it implies we prefer Reply-To: (by default). +# # value: from / reply-to +# MESSAGE_RETURN_ADDR_POLICY: reply-to +.if MESSAGE_RETURN_ADDR_POLICY == reply-to + .not_yet_implemented + + +######################################################################### +##### Section: Digest/Matome Okuri Configurations ### +# # +# # $MSEND_MODE_DEFAULT is the default of msend (when e.g. m=3) +# # and the format is the same as $MGET_MODE_DEFAULT. +# # which is "tar.gz" format. + +# # Subject template in Digest/matome okuri. +# # automatic substitute is done before send the reply; For example, +# # Digest -Matome Okuri- Article 768 [last:10 tar + gzip] (1/1) (Elena ML) +# # +# # _ARTICLE_RANGE_ <=> Article 768 +# # _DOC_MODE_ <=> [last:10 tar + gzip] +# # _PART_ <=> (1/4) +# # _ML_FN_ <=> $ML_FN (here is "(Elena ML)") +# # +# # $NOT_SHOW_DOCMODE is obsolete, it equals you discard _PART_. +# # +# # value: string +# MSEND_SUBJECT_TEMPLATE: Digest _ARTICLE_RANGE_ _PART_ _ML_FN_ +.if MSEND_SUBJECT_TEMPLATE == Digest _ARTICLE_RANGE_ _PART_ _ML_FN_ + .not_yet_implemented + + +# # Digest/Matome Okuri rc file +# # value: filename string +# MSEND_RC: $VARLOG_DIR/msendrc +.if MSEND_RC == $VARLOG_DIR/msendrc + .convert + + +# # rfc1153 or rfc934 +# # obsoletes $USE_RFC1153, $USE_RFC1153_DIGEST, $USE_RFC934 +# # value: mode string +# MSEND_MODE_DEFAULT: +.if MSEND_MODE_DEFAULT + .ignore + + +# # Subject: +# # value: string +# MSEND_DEFAULT_SUBJECT: +.if MSEND_DEFAULT_SUBJECT + .ignore + + +# # If no articles to send, we send "no traffic" to the member of $MAIL_LIST +# # with the subject $MSEND_NOTIFICATION_SUBJECT if $MSEND_NOTIFICATION is set. +# # value: 1/0 +# MSEND_NOTIFICATION: +.if MSEND_NOTIFICATION + .not_yet_implemented + + +# # value: string +# MSEND_NOTIFICATION_SUBJECT: +.if MSEND_NOTIFICATION_SUBJECT + .not_yet_implemented + + +# # not require X-ML-Info: in the "mget"; +# # value: 1/0 +# MSEND_NOT_USE_X_ML_INFO: +.if MSEND_NOT_USE_X_ML_INFO + .not_yet_implemented + + +# # not do newsyslog in the Sundays morning. $NOT_USE_NEWSYSLOG (CFVersion 2) +# # value: 1/0 +# MSEND_NOT_USE_NEWSYSLOG: +.if MSEND_NOT_USE_NEWSYSLOG + .not_yet_implemented + + + +######################################################################### +##### Section: Other Files for Configurations and Logs ### + +# # cache file of Message-ID: loop check +# # value: filename string +# LOG_MESSAGE_ID: $VARRUN_DIR/msgidcache +.if LOG_MESSAGE_ID == $VARRUN_DIR/msgidcache + .auto + + +# # cache size of Message-ID: negative cache +# # value: number +# MESSAGE_ID_CACHE_BUFSIZE: 6000 +.if MESSAGE_ID_CACHE_BUFSIZE == 6000 + .auto + + +# # cache file of mailbody cksum mail loop check +# # value: filename string +# LOG_MAILBODY_CKSUM: $VARRUN_DIR/bodycksumcache +.if LOG_MAILBODY_CKSUM == $VARRUN_DIR/bodycksumcache + .auto + + +# # $MEMBER_LIST member who can post and use commands +# # $ACTIVE_LIST delivery list +# # value: filename string +# MEMBER_LIST: $DIR/members +.if MEMBER_LIST == $DIR/members + .convert + + +# ACTIVE_LIST: $DIR/actives +.if ACTIVE_LIST == $DIR/actives + .convert + + + +# # ATTENTION: only "guide" is also send to strangers +# # +# # $GUIDE_FILE sent by "# guide" command, +# # $OBJECTIVE_FILE sent by "# objective" command +# # $HELP_FILE sent by "# help" command +# # value: filename string +# GUIDE_FILE: $DIR/guide +.if GUIDE_FILE == $DIR/guide + .convert + + +# OBJECTIVE_FILE: $DIR/objective +.if OBJECTIVE_FILE == $DIR/objective + .convert + + +# HELP_FILE: $DIR/help +.if HELP_FILE == $DIR/help + .ignore + + +# # When fml rejects mail from someone, fml sends back this file to the sender. +# # value: filename string +# DENY_FILE: $DIR/deny +.if DENY_FILE == $DIR/deny + .ignore + + +# # $LOGFILE log file +# # $MGET_LOGFILE log file for mget routine, $LOGFILE in default. +# # value: filename string +# LOGFILE: $DIR/log +.if LOGFILE == $DIR/log + .use + + +# MGET_LOGFILE: $DIR/log +.if MGET_LOGFILE == $DIR/log + .ignore + + +# # suffix extension if defined. For example log.2000 +# # For example $LOGFILE_SUFFIX = ".%C%y", file name is "log.2000". +# # See UNIX manual "strftime(3)" for more details on format. +# # value: srtings +# LOGFILE_SUFFIX: +.if LOGFILE_SUFFIX + .ignore + + +# # when -d2 ($debug = 2), logs this file for convenience. +# # value: filename string +# DEBUG_LOGFILE: $DIR/log.debug +.if DEBUG_LOGFILE == $DIR/log.debug + .ignore + + +# # article summary file +# # value: filename string +# SUMMARY_FILE: $DIR/summary +.if SUMMARY_FILE == $DIR/summary + .use + + +# # sequence number file +# # value: filename string +# SEQUENCE_FILE: $DIR/seq +.if SEQUENCE_FILE == $DIR/seq + .use + + +# # rename(2) lock (liblock.pl) +# # value: filename string +# LOCK_FILE: $VARRUN_DIR/lockfile.v7 +.if LOCK_FILE == $VARRUN_DIR/lockfile.v7 + .ignore + + + +######################################################################### +##### Section: SMTP and Delivery ### +# # +# # fml sends mail via SMTP to mail server $HOST:$PORT/tcp. +# # The default host is one fml runs on itself. +# # $HOST is an arbitrary host (if you can access it) which runs MTA +# # (e.g. sendmail). If the Mailing List Server machine is week, +# # you can use the sendmail of another powerful host(host). + +# # always try IPv6 connection by default +# # value: 1/0 +# USE_INET6: 1 +.if USE_INET6 == 1 + .fml8_default + +.if USE_INET6 == 0 + .unavailable + + +# # value: string +# HOST: localhost +.if HOST == localhost + .convert + + +# # value: number +# PORT: 25 +.if PORT == 25 + .convert + + +# # enforce MAIL FROM:<$SMTP_SENDER> if defined +# # value: address +# SMTP_SENDER: +.if SMTP_SENDER + ? + + +# # IF $NOT_TRACE_SMTP IS 1 (default 0), we log the SMTP session to $SMTP_LOG +# # value: filename string +# SMTP_LOG: $VARLOG_DIR/_smtplog +.if SMTP_LOG == $VARLOG_DIR/_smtplog + .auto + + +# # rotate use of var/log/_smtplog.$i (where $i is the number) +# # value: 1/0 +# USE_SMTP_LOG_ROTATE: 1 +.if USE_SMTP_LOG_ROTATE == 1 + .auto + + +# # expire how old _smtplog.$date +# # value: number +# SMTP_LOG_ROTATE_EXPIRE_LIMIT: 90 +.if SMTP_LOG_ROTATE_EXPIRE_LIMIT == 90 + .auto + + +# # the number of var/log/_smtplog.$i files. This is the value of modulus. +# # value: number +# NUM_SMTP_LOG_ROTATE: 8 +.if NUM_SMTP_LOG_ROTATE == 8 + .auto + + +# # type of suffix for _smtplog +# # value: number / day +# SMTP_LOG_ROTATE_TYPE: number +.if SMTP_LOG_ROTATE_TYPE == number + .auto + + + +# # IF $NOT_TRACE_SMTP IS 1 (default 0), we log the SMTP session to $SMTP_LOG +# # IF $TRACE_SMTP_DELAY IS 1, we log the delay of response between SMTP server. +# # value: 1/0 +# NOT_TRACE_SMTP: 0 +.if NOT_TRACE_SMTP == 0 + .fml8_default + +.if NOT_TRACE_SMTP == 1 + .unavailable + + +# TRACE_SMTP_DELAY: +.if TRACE_SMTP_DELAY + .unavailable + + +# # smtp profile for debug +# # value: 1/0 +# USE_SMTP_PROFILE: 0 +.if USE_SMTP_PROFILE == 0 + .unavailable + + +# # You can use plural MTA for parallel delivery. +# # $MCI_SMTP_HOSTS is the number of hosts you use. +# # @HOSTS is the array of hosts you use. +# # value: number +# MCI_SMTP_HOSTS: +.if MCI_SMTP_HOSTS + .auto + + +# # obsolete today +# # value: string +# DEFAULT_RELAY_SERVER: +.if DEFAULT_RELAY_SERVER + .unavailable + + +# # obsolete today +# # CF (by motonori@wide.ad.jp) base relay control if $RELEY_HACK is on. +# # with %RELAY_GW, %RELAY_NGW, %RELAY_NGW_DOM (set in librelayhack.pl) +# # $CF_DEF is CF's configuration files; +# # **ATTENTION**; we do not use sendmail.cf but CF's configuration. +# # value: 1/0 +# RELAY_HACK: +.if RELAY_HACK + .unavailable + + +# # obsolete today +# # value: filename string +# CF_DEF: +.if CF_DEF + .unavailable + + +# # list-outgoing@domain is a real distribution address. Fml does not +# # sends article to all recipient list to MTA but only this address. +# # MTA expands address list and distribute article. +# # In default fml does not use this but effective for poor machine like +# # 486 16M ;-) +# # +# # fml -> list-outgoing -> expanded and distributed to $ACTIVE_LIST members +# # +# # XXX dedicated to minmin sama:D +# # +# # value: 1/0 +# USE_OUTGOING_ADDRESS: +.if USE_OUTGOING_ADDRESS + .not_yet_implemented + + +# # list-outgoing@domain is a real distribution address. Fml does not +# # sends article to all recipient list to MTA but only this address. +# # MTA expands address list and distribute article. +# # In default fml does not use this but effective for poor machine like +# # 486 16M ;-) +# # +# # fml -> list-outgoing -> expanded and distributed to $ACTIVE_LIST members +# # +# # value: string +# OUTGOING_ADDRESS: +.if OUTGOING_ADDRESS + .not_yet_implemented + + +# # VERPs: Variable Envelope Return Paths. See qmail documents for more details. +# # XXX you need additional configuration so that MTA receives VERPs addresses. +# # +# # value: 1/0 +# USE_VERP: +.if USE_VERP + .not_yet_implemented + + +# # postfix $verp_delimiters +# # value: string +# POSTFIX_VERP_DELIMITERS: += +.if POSTFIX_VERP_DELIMITERS == += + + postfix_verp_delimiters = POSTFIX_VERP_DELIMITERS + + +# # try VERPs once a day for efficient delivery. +# # value: 1/0 +# TRY_VERP_PER_DAY: +.if TRY_VERP_PER_DAY + .not_yet_implemented + + +# # we use ESMTP pipelining mechanism by default. +# # value: 1/0 +# NOT_USE_ESMTP_PIPELINING: 0 +.if NOT_USE_ESMTP_PIPELINING == 0 + .not_yet_implemented + + +# # smtpfeed special option which provides VERPs like error track trick. +# # value: 1/0 +# USE_SMTPFEED_F_OPTION: +.if USE_SMTPFEED_F_OPTION + .not_yet_implemented + + +######################################################################### +##### Section: MISC ### + +# # ## Sub Section: MIME ## +# # Mime Decode On if $USE_MIME for ISO-2022-JP statements. +# # e.g. Decode $SUMMARY_FILE subject and so on. +# # default 1 from 2.1C#13 +# # value: 1/0 +# USE_MIME: 1 +.if USE_MIME == 1 + .fml8_default + +.if USE_MIME == 0 + .unavailable + + +# # special hack to treat broken MIME ending (e.g. by MacOS X) +# # value: 1/0 +# MIME_BROKEN_ENCODING_FIXUP: 0 +.if MIME_BROKEN_ENCODING_FIXUP == 0 + .not_yet_implemented + + +# # obsolete and Japanese specific +# # NOT RECOMMENDED OPTION: +# # articles in the spool are MIME-DECODED for poor environment users. +# # These articles may be insane in strict MIME oriented mail interfaces. +# # value: 1/0 +# MIME_DECODED_ARTICLE: +.if MIME_DECODED_ARTICLE + .unavailable + + + +# # ## Sub Section: Preamble and Trailer for Mail Body ## +# # FOR COMMAND RESULT MAIL, +# # you always append some message in the command reply mail body. +# # For example, the mail body becomes +# # +# # $PREAMBLE_MAILBODY +# # original body +# # $TRAILER_MAILBODY +# # +# # If you use the article distributed in ML, you must use some hooks. +# # For example, append this in the last of config.ph (but before 1;) +# # $SMTP_OPEN_HOOK = q +# # $e{'Body'} = $PREAMBLE_MAILBODY. $e{'Body'} .$TRAILER_MAILBODY; +# # #; +# # Please see doc/tutorial for our policy behind this. +# # +# # value: string +# PREAMBLE_MAILBODY: +.if PREAMBLE_MAILBODY + .ignore + +# TRAILER_MAILBODY: +.if TRAILER_MAILBODY + .ignore + + + +# # ## Sub Section: Reply Configurations ## +# # In the last of e.g. "command status report", we add +# # "$GOOD_BYE_PHRASE $FACE_MARK" :-) in the last of the reply. +# # So the standard form is +# # +# # message +# # FYI message generated by the function $PROC_GEN_INFO. +# # $GOOD_BYE_PHRASE $FACE_MARK +# # for example, " --$MAIL_LIST, Be Seeing You!" +# # +# # value: string +# GOOD_BYE_PHRASE: +.if GOOD_BYE_PHRASE + .not_yet_implemented + +# FACE_MARK: +.if FACE_MARK + .not_yet_implemented + + +# # value: function name string +# PROC_GEN_INFO: GenInfo +.if PROC_GEN_INFO + .not_yet_implemented + + + +# # ## Sub Section: Lock Algorithm ## +# # use flock for lock algorithm if $USE_FLOCK is on. +# # see flock(2), alarm(3). If not, we rename(2) base lock. +# # The timeout of rename(2) lock is rand(3) * $MAX_TIMEOUT secs. +# # value: 1/0 +# USE_FLOCK: 1 +.if USE_FLOCK == 1 + .fml8_default + +.if USE_FLOCK == 0 + .unavailable + + +# # In rename(2) base lock case, +# # the timeout of rename(2) lock is rand(3) * $MAX_TIMEOUT secs. +# # value: number +# MAX_TIMEOUT: 200 +.if MAX_TIMEOUT == 200 + .unavailable + + + +# # ## Sub Section: misc ## +# # Not spooling of articles (default is "spooling") +# # It may be used for some secret ML, ML on diskless machihe;-), ISP services +# # value: 1/0 +# NOT_USE_SPOOL: +.if NOT_USE_SPOOL == 1 + + use_spool = no + +.if NOT_USE_SPOOL == 0 + + use_spool = yes + + +# # "$CFVersion < 2" equals "$COMPAT_FML15 = 1;" +# # value: 1/0 +# COMPAT_FML15: 0 +.if COMPAT_FML15 == 0 + .unavailable + + +# # newsyslog library maximum number. default is 4. +# # log.4 is removed and +# # log.3 -> log.4, log.2 -> log.3, log.1 -> log.2, log.0 -> log.1, log -> log.0 +# # value: number +# NEWSYSLOG_MAX: 4 +.if NEWSYSLOG_MAX == 4 + .not_yet_implemented + + +# # not used generally. This is "cron of fml package" configuration. +# # $CRONTAB configuratoin file +# # $CRON_PIDFILE pid file +# # value: filename string +# CRONTAB: etc/crontab +.if CRONTAB == etc/crontab + .unavailable + +# CRON_PIDFILE: var/run/cron.pid +.if CRON_PIDFILE == var/run/cron.pid + .unavailable + + +# # not used generally. This is "cron of fml package" configuration. +# # cron notifies what is done to $MAINTAINER. +# # value: 1/0 +# CRON_NOTIFY: 1 +.if CRON_NOTIFY == 1 + .unavailable + + +# # cross operations +# # value: 1/0 +# USE_CROSSPOST: +.if USE_CROSSPOST + .unavailable + + +# # Under $USE_MEMBER_NAME is set, commands on member lists +# # are with Gecos Fields which are extracted from From: field +# # in the time of auto registration. +# # Author: Masayuki FUKUI <fukui@sonic.nm.fujitsu.co.jp> +# # value: 1/0 +# USE_MEMBER_NAME: +.if USE_MEMBER_NAME + .not_yet_implemented + + + +######################################################################### +##### Section: Expire and Archive ### + +# # If $USE_EXPIRE is set, we do expire articles in $SPOOL_DIR. +# # The default is "no". You need to remove articles if you do so. +# +# # Expiration limit is $EXPIRE_LIMIT, which syntax is +# # e.g. 7days(days) or 100 (articles left in spool) +# # If you re-generate $SUMMARY_FILE, set $EXPIRE_SUMMARY +# # +# # value: 1/0 +# USE_EXPIRE: 0 +.if USE_EXPIRE == 0 + .not_yet_implemented + + +# # expire summary file when $USE_EXPIRE is enabled. +# # value: 1/0 +# EXPIRE_SUMMARY: +.if EXPIRE_SUMMARY + .not_yet_implemented + + +# # expire how old articles +# # value: number / ( number + day/week/month ) +# EXPIRE_LIMIT: 7days +.if EXPIRE_LIMIT == 7days + .not_yet_implemented + + +# # If $USE_ARCHIVE is on, we do automatically archive, which is +# # spool/articles is aggregated to e.g. "$ARCHIVE_DIR/100.tar.gz" +# # by the unit $ARCHIVE_UNIT. +# # +# # the location of store (when $USE_ARCHIVE on): $ARCHIVE_DIR +# # the search path order : $ARCHIVE_DIR @ARCHIVE_DIR +# # +# # If @ARCHIVE_DIR is set and $ARCHIVE_DIR is not set, +# # we use $ARCHIVE_DIR[0] as the $ARCHIVE_DIR. +# # +# # value: 1/0 +# USE_ARCHIVE: 0 +.if USE_ARCHIVE == 0 + .unavailable + + +# # spool/articles is aggregated to "$ARCHIVE_DIR/100.tar.gz" +# # by the unit $ARCHIVE_UNIT. +# # value: number +# ARCHIVE_UNIT: 100 +.if ARCHIVE_UNIT == 100 + .unavailable + + +# DEFAULT_ARCHIVE_UNIT: 100 +.if DEFAULT_ARCHIVE_UNIT == 100 + .unavailable + + +# # spool/articles is aggregated to "$ARCHIVE_DIR/100.tar.gz" +# # value: directory string +# ARCHIVE_DIR: var/archive +.if ARCHIVE_DIR == var/archive + .unavailable + + +# # "index" command +# # In default we scan spool and archives and reports, but +# # send back $INDEX_FILE if $INDEX_FILE exists. +# # value: filename string +# INDEX_FILE: $DIR/index +.if INDEX_FILE == $DIR/index + .unavailable + + +# # show directory name in "index" command result? default is "no". +# # value: 1/0 +# INDEX_SHOW_DIRNAME: 0 +.if INDEX_SHOW_DIRNAME == 0 + .unavailable + + + +##### Section: Library Commands ### +# # +# # "library" command is a small mailing list within mailing list. +# # It is useful to exchange some files. +# # You can put and get files by "library" commands. +# # +# # In default, @DenyProcedure = ('library'); So 'library' command is disabled; +# # Set @DenyProcedure = ('') in LOCAL CONFIG part (the last of config.ph). +# # +# # value: directory string +# LIBRARY_DIR: var/library +.if LIBRARY_DIR == var/library + .unavailable + + +# LIBRARY_ARCHIVE_DIR: archive +.if LIBRARY_ARCHIVE_DIR == archive + .unavailable + + +# # ## Sub Section: newsyslog(8) ## +# # to turn over \$DIR/log +# # value: number +# LOGFILE_NEWSYSLOG_LIMIT: +.if LOGFILE_NEWSYSLOG_LIMIT + .not_yet_implemented + + +# # to turn over $ACTIVE_LIST and $MEMBER_LIST if the file size over this value, +# # default 150K = 30*5000 +# # value: number / (number + K/M) +# AMLIST_NEWSYSLOG_LIMIT: 150K +.if AMLIST_NEWSYSLOG_LIMIT == 150K + .ignore + + + +##### Section: Html Configurations ### +# # +# # HTML article generator: Please see doc/tutorial for the details. +# # AUTO_HTML_GEN == AUTOmatic HTML GENeration +# # if $AUTO_HTML_GEN, we generate html'ed articles in $DIR/$HTML_DIR +# # value: 1/0 +# AUTO_HTML_GEN: +.if AUTO_HTML_GEN == 1 + + use_html_archive = yes + +.if AUTO_HTML_GEN == 0 + + use_html_archive = no + + +# # use Mail::HTML::Lite in fml-devel (fml next generation). +# # value: 1/0 +# USE_NEW_HTML_GEN: +.if USE_NEW_HTML_GEN == 1 + + use_html_archive = yes + +.if USE_NEW_HTML_GEN == 0 + + use_html_archive = no + + +# # value: 1/0 +# HTML_THREAD: 1 +.if HTML_THREAD == 1 + .fml8_default + +.if HTML_THREAD == 0 + .not_yet_configurable + + +# # value: 1/0 +# HTML_INDEX_REVERSE_ORDER: 1 +.if HTML_INDEX_REVERSE_ORDER == 1 + .fml8_default + +.if HTML_INDEX_REVERSE_ORDER == 0 + .not_yet_configurable + + +# # generate html articles under htdocs/ +# # value: directory string +# HTML_DIR: htdocs +.if HTML_DIR == htdocs + .ignore + + +# # expire old html articles if non-zero value is defined. +# # not expire in default since the value is 0 or NULL. +# # options: Please see doc/tutorial for the details. +# # value: number +# HTML_EXPIRE_LIMIT: +.if HTML_EXPIRE_LIMIT + .not_yet_configurable + + +# # title of index.html +# # value: string +# HTML_INDEX_TITLE: +.if HTML_INDEX_TITLE + .not_yet_configurable + + +# # cache file +# # value: filename string +# HTML_DATA_CACHE: +.if HTML_DATA_CACHE + .not_yet_configurable + + +# HTML_DATA_THREAD: +.if HTML_DATA_THREAD + .not_yet_configurable + + +# # filter in generate html file +# # value: filename string +# HTML_OUTPUT_FILTER: +.if HTML_OUTPUT_FILTER + .not_yet_configurable + + +# # stylesheet file name (see HTML 4.0) +# # "fml.css" is default. +# # value: filename string +# HTML_STYLESHEET_BASENAME: +.if HTML_STYLESHEET_BASENAME + .not_yet_configurable + + +# # threading algorithm type +# # value: default / prefer-in-reply-to +# HTML_THREAD_REF_TYPE: prefer-in-reply-to +.if HTML_THREAD_REF_TYPE == prefer-in-reply-to + .fml8_default + +.if HTML_THREAD_REF_TYPE == default + .not_yet_configurable + + +# # sort type for entries of thread.html +# # default is "time" from past to latest, +# # "reverse-number" is from latest to past. +# # value: "" / reverse-number +# HTML_THREAD_SORT_TYPE: +.if HTML_THREAD_SORT_TYPE == reverse-number + .fml8_default + +.if HTML_THREAD_SORT_TYPE == NULL + .not_yet_configurable + + +# # $subdir type of htdocs/$subdir/ +# # value: number / day / week / month / infinite +# HTML_INDEX_UNIT: day +.if HTML_INDEX_UNIT + .not_yet_configurable + + +# # threading type +# # value: "" / UL +# HTML_INDENT_STYLE: UL +.if HTML_INDENT_STYLE + .not_yet_configurable + + +# # image file embedding style +# # value: A / IMAGE +# HTML_MULTIPART_IMAGE_REF_TYPE: +.if HTML_MULTIPART_IMAGE_REF_TYPE + .not_yet_configurable + + +# # html file umask +# # value: "" / umask +# HTML_DEFAULT_UMASK: +.if HTML_DEFAULT_UMASK + .not_yet_configurable + + +# HTML_WRITE_UMASK: +.if HTML_WRITE_UMASK + .not_yet_configurable + + + +##### Section: Interface to DataBase Management System ### + +# # value: 1/0 +# USE_DATABASE: +.if USE_DATABASE + .fml8_default + + +# # value: +# DATABASE_METHOD: +.if DATABASE_METHOD + .ignore + + +# # value: +# DATABASE_CACHE_FILE_SUFFIX: +.if DATABASE_CACHE_FILE_SUFFIX + .ignore + + +# # value: filename +# DATABASE_DRIVER: toymodel.pl +.if DATABASE_DRIVER == toymodel.pl + .ignore + + +# # attributes to inform database drivers +# # value: +# DATABASE_DRIVER_ATTRIBUTES: always_lower_domain +.if DATABASE_DRIVER_ATTRIBUTES == always_lower_domain + .ignore + + +# # ## Sub Section: RDBMS + +# # value: string +# SQL_SERVER_HOST: +.if SQL_SERVER_HOST + .ignore + + +# # value: number +# SQL_SERVER_PORT: +.if SQL_SERVER_PORT + .ignore + + +# # value: string +# SQL_SERVER_USER: +.if SQL_SERVER_USER + .ignore + + +# # value: string +# SQL_DATABASE_NAME: +.if SQL_DATABASE_NAME + .ignore + + +# # value: string +# SQL_SERVER_PASSWORD: +.if SQL_SERVER_PASSWORD + .ignore + + +# # value: string +# SQL_DATABASE_NAME: +.if SQL_DATABASE_NAME + .ignore + + + +# # ## Sub Section: LDAP + +# # value: string +# LDAP_SERVER_HOST: +.if LDAP_SERVER_HOST + .ignore + + +# LDAP_SERVER_PASSWORD: +.if LDAP_SERVER_PASSWORD + .ignore + + +# LDAP_SEARCH_BASE: +.if LDAP_SEARCH_BASE + .ignore + + +# LDAP_SERVER_BIND: +.if LDAP_SERVER_BIND + .ignore + + +# LDAP_QUERY_FILTER: +.if LDAP_QUERY_FILTER + .ignore + + + + +##### Section: Interface to other Services (http,ftp,gopher,www) ### + +# # "whois": default is search of local database file +# # If "whois -h host" syntax is given, we connects "host" whois server. +# # If $USE_WHOIS set, you can use local database $WHOIS_DB. +# # If you have local whois server (inetd), you can also use it. +# # If "whois help" is given, send back $WHOIS_HELP_FILE if it exists. +# # +# # value: 1/0 +# USE_WHOIS: +.if USE_WHOIS + .unavailable + + +# # value: string +# DEFAULT_WHOIS_SERVER: +.if DEFAULT_WHOIS_SERVER + .unavailable + + +# # value: filename string +# WHOIS_DB: $VARDB_DIR/whoisdb +.if WHOIS_DB == $VARDB_DIR/whoisdb + .unavailable + + +# WHOIS_HELP_FILE: +.if WHOIS_HELP_FILE + .unavailable + + +# # do Japanese conversion or not? for the result from whois server +# # value: 1/0 +# WHOIS_JCODE_P: 1 +.if WHOIS_JCODE_P == 1 + .unavailable + + + +######################################################################### +##### Section: Architecture Dependence ### + +# # cpu-type manufacturer operating-system by GNU config.guess ("makefml") +# # value: string +# CPU_TYPE_MANUFACTURER_OS: +.if CPU_TYPE_MANUFACTURER_OS + .auto + + +# # struct sockaddr +# # It is system dependent. +# # value: string +# STRUCT_SOCKADDR: S n a4 x8 +.if STRUCT_SOCKADDR + .auto + + +# # flock(2) system call; please see "/usr/include/sys/file.h" +# # value: number +# LOCK_SH: 1 +.if LOCK_SH + .auto + + +# LOCK_EX: 2 +.if LOCK_EX + .auto + + +# LOCK_NB: 4 +.if LOCK_NB + .auto + + +# LOCK_UN: 8 +.if LOCK_UN + .auto + + +# # enforce solaris 2 compatible +# # value: 1/0 +# COMPAT_SOLARIS2: +.if COMPAT_SOLARIS2 + .auto + + +# # used in cron of fml package +# # we can emulate daemon(3) ? +# # value: 1/0 +# NOT_USE_TIOCNOTTY: +.if NOT_USE_TIOCNOTTY + .auto + + +# # On Unix, always yes set 1 in &SetDefaults; +# # value: 1/0 +# HAS_GETPWUID: &is_unix +.if HAS_GETPWUID + .auto + + +# # On Unix, always yes set 1 in &SetDefaults; +# # value: 1/0 +# HAS_GETPWGID: &is_unix +.if HAS_GETPWGID + .auto + + +# # On Unix, always yes set 1 in &SetDefaults; +# # value: 1/0 +# HAS_ALARM: &is_unix +.if HAS_ALARM + .auto + + +# # On Unix, always yes set 1 in &SetDefaults; +# # value: 1/0 +# UNISTD: &is_unix +.if UNISTD + .auto + + + +# # program paths fml uses +# # Usually "makefml newml" checks and expands this value. +# # value: filename string +# SENDMAIL: &path(sendmail) +.if SENDMAIL + .auto + + +# TAR: &path(tar) cf - +.if TAR + .auto + + +# UUENCODE: &path(uuencode) +.if UUENCODE + .auto + + +# COMPRESS: &path(gzip) -c +.if COMPRESS + .auto + + +# ZCAT: &path(gzcat:zcat:gzip\s-cd) +.if ZCAT + .auto + + +# LHA: &path(lha) +.if LHA + .auto + + +# ISH: &path(ish) +.if ISH + .auto + + +# ZIP: &path(zip) +.if ZIP + .auto + + +# BZIP2: &path(bzip2) +.if BZIP2 + .auto + + +# PGP: &path(pgp) +.if PGP + .auto + + +# PGP5: &path(pgp5) +.if PGP5 + .auto + + +# PGPE: &path(pgpe) +.if PGPE + .auto + + +# PGPK: &path(pgpk) +.if PGPK + .auto + + +# PGPS: &path(pgps) +.if PGPS + .auto + + +# PGPV: &path(pgpv) +.if PGPV + .auto + + +# GPG: &path(gpg) +.if GPG + .auto + + +# RCS: &path(rcs) +.if RCS + .auto + + +# CI: &path(ci) +.if CI + .auto + + + +# BASE64_DECODE: +.if BASE64_DECODE + .auto + + + +# BASE64_ENCODE: +.if BASE64_ENCODE + .auto + + +# MD5: &path(md5:md5sum) +.if MD5 + .auto + + + +# LOCAL_CONFIG: +# # ## Sub Section: Available Hooks ## +# # You can set customized hooks here. See doc/tutorial's chapter "HOOKS". +# # For example available hooks are +# # $START_HOOK, $DISTRIBUTE_START_HOOK, $SMTP_OPEN_HOOK +# # $HEADER_ADD_HOOK, $DISTRIBUTE_CLOSE_HOOK, $DISTRIBUTE_END_HOOK +# # $ADMIN_COMMAND_HOOK, $RFC1153_CUSTOM_HOOK, $MSEND_OPT_HOOK +# # $FML_EXIT_HOOK, $FML_EXIT_PROG, $MSEND_START_HOOK +# # $REPORT_HEADER_CONFIG_HOOK, $AUTO_REGISTRATION_HOOK, $MSEND_HEADER_HOOK +# # $SMTP_CLOSE_HOOK, $MODE_BIFURCATE_HOOK. $HTML_TITLE_HOOK +# # $PROCEDURE_CONFIG_HOOK, $ADMIN_PROCEDURE_CONFIG_HOOK, $COMMAND_HOOK +# # +# # ## Sub Section: Available Arrays and Assoc-Arrays ## +# # Also you can set here arrays and association arrays: +# # +# # @MEMBER_LIST, @ACTIVE_LIST, @CROSSPOST_CF +# # @HOST, @HOSTS, @MAIL_LIST_ALIASES, @HdrFieldsOrder +# # +# # value: perl statement diff --git a/fml/lib/FML/Merge/FML4/config_ph.pm b/fml/lib/FML/Merge/FML4/config_ph.pm new file mode 100644 index 00000000..d3d32986 --- /dev/null +++ b/fml/lib/FML/Merge/FML4/config_ph.pm @@ -0,0 +1,61 @@ +#-*- perl -*- +# +# Copyright (C) 2004 Ken'ichi Fukamachi +# All rights reserved. This program is free software; you can +# redistribute it and/or modify it under the same terms as Perl itself. +# +# $FML: @template.pm,v 1.8 2004/01/01 07:29:27 fukachan Exp $ +# + +package FML::Merge::FML4::config_ph; +use strict; +use vars qw(@ISA @EXPORT @EXPORT_OK $AUTOLOAD); +use Carp; + +=head1 NAME + +FML::Merge::FML4::config_ph - what is this + +=head1 SYNOPSIS + +=head1 DESCRIPTION + +=head1 METHODS + +=head2 C<new()> + +=cut + +sub new +{ + my ($self) = @_; + my ($type) = ref($self) || $self; + my $me = {}; + return bless $me, $type; +} + + +=head1 CODING STYLE + +See C<http://www.fml.org/software/FNF/> on fml coding style guide. + +=head1 AUTHOR + +Ken'ichi Fukamachi + +=head1 COPYRIGHT + +Copyright (C) 2004 Ken'ichi Fukamachi + +All rights reserved. This program is free software; you can +redistribute it and/or modify it under the same terms as Perl itself. + +=head1 HISTORY + +FML::Merge::FML4::config_ph appeared in fml8 mailing list driver package. +See C<http://www.fml.org/> for more details. + +=cut + + +1; diff --git a/fml/lib/FML/Merge/Utils.pm b/fml/lib/FML/Merge/Utils.pm new file mode 100644 index 00000000..4c887a43 --- /dev/null +++ b/fml/lib/FML/Merge/Utils.pm @@ -0,0 +1,61 @@ +#-*- perl -*- +# +# Copyright (C) 2004 Ken'ichi Fukamachi +# All rights reserved. This program is free software; you can +# redistribute it and/or modify it under the same terms as Perl itself. +# +# $FML: @template.pm,v 1.8 2004/01/01 07:29:27 fukachan Exp $ +# + +package FML::Merge::Utils; +use strict; +use vars qw(@ISA @EXPORT @EXPORT_OK $AUTOLOAD); +use Carp; + +=head1 NAME + +FML::Merge::Utils - what is this + +=head1 SYNOPSIS + +=head1 DESCRIPTION + +=head1 METHODS + +=head2 C<new()> + +=cut + +sub new +{ + my ($self) = @_; + my ($type) = ref($self) || $self; + my $me = {}; + return bless $me, $type; +} + + +=head1 CODING STYLE + +See C<http://www.fml.org/software/FNF/> on fml coding style guide. + +=head1 AUTHOR + +Ken'ichi Fukamachi + +=head1 COPYRIGHT + +Copyright (C) 2004 Ken'ichi Fukamachi + +All rights reserved. This program is free software; you can +redistribute it and/or modify it under the same terms as Perl itself. + +=head1 HISTORY + +FML::Merge::Utils appeared in fml8 mailing list driver package. +See C<http://www.fml.org/> for more details. + +=cut + + +1; |
