summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorfukachan <fukachan>2002-04-25 04:46:08 +0000
committerfukachan <fukachan>2002-04-25 04:46:08 +0000
commitf3547e27fee7bfe2369152ec4c3321bdf31c39cd (patch)
treed2d8c52141806f0dbfe3d95b31b53345fdbf68bb
parent1b804136c4004bea7bb07cdf8b86ef2f7e51364c (diff)
downloadfml8-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.in3
-rw-r--r--fml/bin/fmlalias17
-rw-r--r--fml/bin/fmlalias.in17
-rw-r--r--fml/lib/FML/Process/Alias.pm258
-rw-r--r--fml/lib/FML/Process/Switch.pm13
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';
}