diff options
| author | fukachan <fukachan> | 2002-04-25 04:46:08 +0000 |
|---|---|---|
| committer | fukachan <fukachan> | 2002-04-25 04:46:08 +0000 |
| commit | f3547e27fee7bfe2369152ec4c3321bdf31c39cd (patch) | |
| tree | d2d8c52141806f0dbfe3d95b31b53345fdbf68bb | |
| parent | 1b804136c4004bea7bb07cdf8b86ef2f7e51364c (diff) | |
| download | fml8-f3547e27fee7bfe2369152ec4c3321bdf31c39cd.tar.gz fml8-f3547e27fee7bfe2369152ec4c3321bdf31c39cd.tar.bz2 fml8-f3547e27fee7bfe2369152ec4c3321bdf31c39cd.zip | |
new utility: fmlalias e.g. shows not only fml but all alias entries
| -rw-r--r-- | configure.in | 3 | ||||
| -rw-r--r-- | fml/bin/fmlalias | 17 | ||||
| -rw-r--r-- | fml/bin/fmlalias.in | 17 | ||||
| -rw-r--r-- | fml/lib/FML/Process/Alias.pm | 258 | ||||
| -rw-r--r-- | fml/lib/FML/Process/Switch.pm | 13 |
5 files changed, 305 insertions, 3 deletions
diff --git a/configure.in b/configure.in index 46e61d80..98e37836 100644 --- a/configure.in +++ b/configure.in @@ -1,5 +1,5 @@ dnl -dnl $FML: configure.in,v 1.19 2002/04/23 09:09:05 fukachan Exp $ +dnl $FML: configure.in,v 1.20 2002/04/24 03:14:06 fukachan Exp $ dnl AC_REVISION($Revision$) @@ -106,6 +106,7 @@ AC_OUTPUT(\ fml/etc/default_config.cf.ja \ fml/etc/site_default_config.cf \ fml/libexec/loader \ + fml/bin/fmlalias \ fml/bin/fmlconf \ fml/bin/fmldoc \ fml/bin/fmlhtmlify \ diff --git a/fml/bin/fmlalias b/fml/bin/fmlalias new file mode 100644 index 00000000..c2bc471f --- /dev/null +++ b/fml/bin/fmlalias @@ -0,0 +1,17 @@ +#! /bin/sh +# +# Copyright (C) 2001 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: fmlalias.in,v 1.3 2002/04/01 23:40:53 fukachan Exp $ +# + +prefix=/usr/local +exec_prefix=${prefix} +libexec_dir=${exec_prefix}/libexec/fml + +exec $libexec_dir/fmlalias $* + +echo 'not reach here' +exit 0; diff --git a/fml/bin/fmlalias.in b/fml/bin/fmlalias.in new file mode 100644 index 00000000..1a592faa --- /dev/null +++ b/fml/bin/fmlalias.in @@ -0,0 +1,17 @@ +#! @SHELL@ +# +# Copyright (C) 2001 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: fmlalias.in,v 1.3 2002/04/01 23:40:53 fukachan Exp $ +# + +prefix=@prefix@ +exec_prefix=@exec_prefix@ +libexec_dir=@libexecdir@/fml + +exec $libexec_dir/fmlalias $* + +echo 'not reach here' +exit 0; diff --git a/fml/lib/FML/Process/Alias.pm b/fml/lib/FML/Process/Alias.pm new file mode 100644 index 00000000..106ee54f --- /dev/null +++ b/fml/lib/FML/Process/Alias.pm @@ -0,0 +1,258 @@ +#-*- perl -*- +# +# Copyright (C) 2001,2002 Ken'ichi Fukamachi +# All rights reserved. +# +# $FML: Configure.pm,v 1.39 2002/04/20 05:40:02 fukachan Exp $ +# + +package FML::Process::Alias; + +use vars qw($debug @ISA @EXPORT @EXPORT_OK); +use strict; +use Carp; + +use FML::Log qw(Log LogWarn LogError); +use FML::Config; +use FML::Process::Kernel; +@ISA = qw(FML::Process::Kernel); + + +=head1 NAME + +FML::Process::Alias -- fmlalias main functions + +=head1 SYNOPSIS + + use FML::Process::Alias; + $curproc = new FML::Process::Alias; + $curproc->run(); + +=head1 DESCRIPTION + +FML::Process::Alias provides the main function for C<fmlalias>. + +See C<FML::Process::Flow> for the flow detail. + +=head1 METHODS + +=head2 C<new($args)> + +constructor. +It make a C<FML::Process::Kernel> object and return it. + +=head2 C<prepare($args)> + +dummy. + +=cut + + +# Descriptions: ordinary constructor +# Arguments: OBJ($self) HASH_REF($args) +# Side Effects: none +# Return Value: OBJ +sub new +{ + my ($self, $args) = @_; + my $type = ref($self) || $self; + my $curproc = new FML::Process::Kernel $args; + return bless $curproc, $type; +} + + +# Descriptions: dummy +# Arguments: OBJ($curproc) HASH_REF($args) +# Side Effects: none +# Return Value: none +sub prepare +{ + my ($curproc, $args) = @_; + my $config = $curproc->{ config }; + + my $eval = $config->get_hook( 'fmlalias_prepare_start_hook' ); + if ($eval) { eval qq{ $eval; }; LogWarn($@) if $@; } + + $eval = $config->get_hook( 'fmlalias_prepare_end_hook' ); + if ($eval) { eval qq{ $eval; }; LogWarn($@) if $@; } +} + + +# Descriptions: check @ARGV, call help() if needed. +# Arguments: OBJ($curproc) HASH_REF($args) +# Side Effects: exit ASAP. +# longjmp() to help() if appropriate +# Return Value: none +sub verify_request +{ + my ($curproc, $args) = @_; + my $argv = $curproc->command_line_argv(); + my $len = $#$argv + 1; + my $config = $curproc->{ config }; + + my $eval = $config->get_hook( 'fmlalias_verify_request_start_hook' ); + if ($eval) { eval qq{ $eval; }; LogWarn($@) if $@; } + + if (0) { + print STDERR "Error: missing argument(s)\n"; + $curproc->help(); + exit(0); + } + + $eval = $config->get_hook( 'fmlalias_verify_request_end_hook' ); + if ($eval) { eval qq{ $eval; }; LogWarn($@) if $@; } +} + + +=head2 C<run($args)> + +the top level dispatcher for C<fmlconf> and C<fmlalias>. + +It kicks off internal function +C<_fmlconf($args)> for C<fmlconf> + and +C<_fmlalias($args)> for fmlalias. + +NOTE: +C<$args> is passed from parrent libexec/loader. +See <FML::Process::Switch()> on C<$args> for more details. + +=cut + + +# Descriptions: just a switch, call _fmlalias(). +# Arguments: OBJ($curproc) HASH_REF($args) +# Side Effects: none +# Return Value: none +sub run +{ + my ($curproc, $args) = @_; + my $config = $curproc->{ config }; + my $myname = $curproc->myname(); + my $argv = $curproc->command_line_argv(); + + $curproc->_fmlalias($args); +} + + +# Descriptions: dummy +# Arguments: OBJ($curproc) HASH_REF($args) +# Side Effects: none +# Return Value: none +sub finish +{ + my ($curproc, $args) = @_; + my $config = $curproc->{ config }; + + my $eval = $config->get_hook( 'fmlalias_finish_start_hook' ); + if ($eval) { eval qq{ $eval; }; LogWarn($@) if $@; } + + $eval = $config->get_hook( 'fmlalias_finish_end_hook' ); + if ($eval) { eval qq{ $eval; }; LogWarn($@) if $@; } +} + + +=head2 help() + +show help. + +=cut + + +# Descriptions: show help +# Arguments: none +# Side Effects: none +# Return Value: none +sub help +{ + my $name = $0; + eval { + use File::Basename; + $name = basename($0); + }; + +print <<"_EOF_"; + +Usage: $name \$command \$ml_name [options] + +$name help \$ml_name show this help + +$name list + +_EOF_ +} + + +=head2 C<_fmlalias($args)> (INTERNAL USE) + +switch of C<fmlalias> command. +It kicks off <FML::Command::$command> corrsponding with +C<@$argv> ( $argv = $args->{ ARGV } ). + +C<Caution:> +C<$args> is passed from parrent libexec/loader. +We construct a new struct C<$command_args> here to pass parameters +to child objects. +C<FML::Command::$command> object takes them as arguments not pure +C<$args>. It is a little mess. Pay attention. + +See <FML::Process::Switch()> on C<$args> for more details. + +=cut + + +# Descriptions: fmlalias top level dispacher +# Arguments: OBJ($curproc) HASH_REF($args) +# Side Effects: load FML::Command::command module and execute it. +# Return Value: none +sub _fmlalias +{ + my ($curproc, $args) = @_; + my $config = $curproc->{ config }; + my $myname = $curproc->myname(); + my $argv = $curproc->command_line_argv(); + + my ($method, $ml_name, @options) = @$argv; + + my $eval = $config->get_hook( 'fmlalias_run_start_hook' ); + if ($eval) { eval qq{ $eval; }; LogWarn($@) if $@; } + + # -n + my $mode = $args->{ options }->{ n } ? 'fmlonly' : 'all'; + + use FML::MTAControl; + my $mta = new FML::MTAControl; + my $aliases = $mta->get_aliases_as_hash_ref($curproc, { + mta_type => 'postfix', + mode => $mode, + }); + + for my $k (sort keys %$aliases) { + printf "%-25s => %s\n", $k, $aliases->{ $k }; + } + + $eval = $config->get_hook( 'fmlalias_run_end_hook' ); + if ($eval) { eval qq{ $eval; }; LogWarn($@) if $@; } +} + + +=head1 AUTHOR + +Ken'ichi Fukamachi + +=head1 COPYRIGHT + +Copyright (C) 2001,2002 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::Process::Alias appeared in fml5 mailing list driver package. +See C<http://www.fml.org/> for more details. + +=cut + + +1; diff --git a/fml/lib/FML/Process/Switch.pm b/fml/lib/FML/Process/Switch.pm index 02cc674e..5a4af3fa 100644 --- a/fml/lib/FML/Process/Switch.pm +++ b/fml/lib/FML/Process/Switch.pm @@ -4,7 +4,7 @@ # All rights reserved. This program is free software; you can # redistribute it and/or modify it under the same terms as Perl itself. # -# $FML: Switch.pm,v 1.65 2002/04/16 04:04:44 fukachan Exp $ +# $FML: Switch.pm,v 1.66 2002/04/19 13:34:19 fukachan Exp $ # package FML::Process::Switch; @@ -299,7 +299,7 @@ sub _makefml_parse_argv @cf = ($cf); } else { - warn("\$ml_name not specified"); + warn("\$ml_name not specified") if $debug; } return \@cf; @@ -417,6 +417,9 @@ sub _module_specific_options elsif ($myname eq 'makefml') { return qw(debug! help! force! params=s -c=s); } + elsif ($myname eq 'fmlalias') { + return qw(debug! help! -c=s n!); + } elsif ($myname eq 'config.cgi' || $myname eq 'menu.cgi') { return (); } @@ -455,6 +458,9 @@ sub _ml_name_is_required elsif ($myname eq 'makefml') { return 0; } + elsif ($myname eq 'fmlalias') { + return 0; + } elsif ($myname eq 'menu.cgi' || $myname eq 'config.cgi' || $myname eq 'thread.cgi') { @@ -496,6 +502,9 @@ sub _module_we_use elsif ($name eq 'makefml') { $pkg = 'FML::Process::Configure'; } + elsif ($name eq 'fmlalias') { + $pkg = 'FML::Process::Alias'; + } elsif ($name eq 'fmlthread') { $pkg = 'FML::Process::ThreadTrack'; } |
