summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorfukachan <fukachan>2004-04-28 04:10:35 +0000
committerfukachan <fukachan>2004-04-28 04:10:35 +0000
commit8cf3342dc0773e309f80a73057d77cfd1bbd1569 (patch)
tree91729d6396ceb89d3ae31dcf477f175f833e7c72
parent483bef87b2fbaef948d041c103d3d502564265ce (diff)
downloadfml8-8cf3342dc0773e309f80a73057d77cfd1bbd1569.tar.gz
fml8-8cf3342dc0773e309f80a73057d77cfd1bbd1569.tar.bz2
fml8-8cf3342dc0773e309f80a73057d77cfd1bbd1569.zip
implement verify_syntax() using FML::Command::Syntax
-rw-r--r--fml/lib/FML/Command/Admin/addadmin.pm16
-rw-r--r--fml/lib/FML/Command/Admin/addmoderator.pm16
-rw-r--r--fml/lib/FML/Command/Admin/chaddr.pm48
-rw-r--r--fml/lib/FML/Command/Admin/changepassword.pm34
-rw-r--r--fml/lib/FML/Command/Admin/deladmin.pm16
-rw-r--r--fml/lib/FML/Command/Admin/delmoderator.pm16
-rw-r--r--fml/lib/FML/Command/Admin/digest.pm16
-rw-r--r--fml/lib/FML/Command/Admin/digestoff.pm16
-rw-r--r--fml/lib/FML/Command/Admin/digeston.pm16
-rw-r--r--fml/lib/FML/Command/Admin/off.pm16
-rw-r--r--fml/lib/FML/Command/Admin/on.pm16
-rw-r--r--fml/lib/FML/Command/Admin/subscribe.pm16
-rw-r--r--fml/lib/FML/Command/Admin/unsubscribe.pm16
-rw-r--r--fml/lib/FML/Command/Syntax.pm101
14 files changed, 346 insertions, 13 deletions
diff --git a/fml/lib/FML/Command/Admin/addadmin.pm b/fml/lib/FML/Command/Admin/addadmin.pm
index 411329b8..215bf78a 100644
--- a/fml/lib/FML/Command/Admin/addadmin.pm
+++ b/fml/lib/FML/Command/Admin/addadmin.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: addadmin.pm,v 1.17 2004/01/02 14:45:03 fukachan Exp $
+# $FML: addadmin.pm,v 1.18 2004/02/15 04:38:27 fukachan Exp $
#
package FML::Command::Admin::addadmin;
@@ -59,6 +59,20 @@ sub need_lock { 1;}
sub lock_channel { return 'command_serialize';}
+# Descriptions: verify the syntax command string.
+# Arguments: OBJ($self) OBJ($curproc) HASH_REF($command_args)
+# Side Effects: none
+# Return Value: NUM(1 or 0)
+sub verify_syntax
+{
+ my ($self, $curproc, $command_args) = @_;
+
+ use FML::Command::Syntax;
+ push(@ISA, qw(FML::Command::Syntax));
+ $self->check_syntax_address_handler($curproc, $command_args);
+}
+
+
# Descriptions: addadmin a new user
# Arguments: OBJ($self) OBJ($curproc) HASH_REF($command_args)
# Side Effects: update $member_map $recipient_map
diff --git a/fml/lib/FML/Command/Admin/addmoderator.pm b/fml/lib/FML/Command/Admin/addmoderator.pm
index c2c5695b..f7d4c0d9 100644
--- a/fml/lib/FML/Command/Admin/addmoderator.pm
+++ b/fml/lib/FML/Command/Admin/addmoderator.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: addmoderator.pm,v 1.12 2004/01/02 14:45:03 fukachan Exp $
+# $FML: addmoderator.pm,v 1.13 2004/02/15 04:38:27 fukachan Exp $
#
package FML::Command::Admin::addmoderator;
@@ -59,6 +59,20 @@ sub need_lock { 1;}
sub lock_channel { return 'command_serialize';}
+# Descriptions: verify the syntax command string.
+# Arguments: OBJ($self) OBJ($curproc) HASH_REF($command_args)
+# Side Effects: none
+# Return Value: NUM(1 or 0)
+sub verify_syntax
+{
+ my ($self, $curproc, $command_args) = @_;
+
+ use FML::Command::Syntax;
+ push(@ISA, qw(FML::Command::Syntax));
+ $self->check_syntax_address_handler($curproc, $command_args);
+}
+
+
# Descriptions: add a new moderator.
# Arguments: OBJ($self) OBJ($curproc) HASH_REF($command_args)
# Side Effects: update $member_map and $recipient_map maps.
diff --git a/fml/lib/FML/Command/Admin/chaddr.pm b/fml/lib/FML/Command/Admin/chaddr.pm
index dbfa4508..e56ba3f5 100644
--- a/fml/lib/FML/Command/Admin/chaddr.pm
+++ b/fml/lib/FML/Command/Admin/chaddr.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: chaddr.pm,v 1.24 2004/02/15 04:38:27 fukachan Exp $
+# $FML: chaddr.pm,v 1.25 2004/04/23 04:10:28 fukachan Exp $
#
package FML::Command::Admin::chaddr;
@@ -61,6 +61,52 @@ sub need_lock { 1;}
sub lock_channel { return 'command_serialize';}
+# Descriptions: verify the syntax command string.
+# Arguments: OBJ($self) OBJ($curproc) HASH_REF($command_args)
+# Side Effects: none
+# Return Value: NUM(1 or 0)
+sub verify_syntax
+{
+ my ($self, $curproc, $command_args) = @_;
+ my $comname = $command_args->{ comname } || '';
+ my $comsubname = $command_args->{ comsubname } || '';
+ my $options = $command_args->{ options } || [];
+ my @test = ($comname);
+ my $command = $options->[ 0 ] || '';
+ my $oldaddr = $options->[ 1 ] || '';
+ my $newaddr = $options->[ 2 ] || '';
+ push(@test, $command);
+
+ my $ok = 0;
+
+ use FML::Restriction::Base;
+ my $dispatch = new FML::Restriction::Base;
+ if ($dispatch->regexp_match('address', $oldaddr)) {
+ $ok++;
+ }
+ else {
+ $curproc->logerror("insecure address: <$oldaddr>");
+ return 0;
+ }
+
+ if ($dispatch->regexp_match('address', $newaddr)) {
+ $ok++;
+ }
+ else {
+ $curproc->logerror("insecure address: <$newaddr>");
+ return 0;
+ }
+
+ use FML::Command;
+ $dispatch = new FML::Command;
+ if ($dispatch->safe_regexp_match($curproc, $command_args, \@test)) {
+ $ok++;
+ }
+
+ return( $ok == 3 ? 1 : 0 );
+}
+
+
# Descriptions: change address from old one to new one.
# Arguments: OBJ($self) OBJ($curproc) HASH_REF($command_args)
# Side Effects: update $member_map $recipient_map
diff --git a/fml/lib/FML/Command/Admin/changepassword.pm b/fml/lib/FML/Command/Admin/changepassword.pm
index 8755fca1..8326b386 100644
--- a/fml/lib/FML/Command/Admin/changepassword.pm
+++ b/fml/lib/FML/Command/Admin/changepassword.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: changepassword.pm,v 1.11 2004/02/15 04:38:28 fukachan Exp $
+# $FML: changepassword.pm,v 1.12 2004/04/23 04:10:29 fukachan Exp $
#
package FML::Command::Admin::changepassword;
@@ -61,6 +61,38 @@ sub need_lock { 1;}
sub lock_channel { return 'command_serialize';}
+# Descriptions: verify the syntax command string.
+# Arguments: OBJ($self) OBJ($curproc) HASH_REF($command_args)
+# Side Effects: none
+# Return Value: NUM(1 or 0)
+sub verify_syntax
+{
+ my ($self, $curproc, $command_args) = @_;
+ my $comname = $command_args->{ comname } || '';
+ my $comsubname = $command_args->{ comsubname } || '';
+ my $options = $command_args->{ options } || [];
+ my @test = ($comname);
+ my $command = $options->[ 0 ] || '';
+ my $address = $options->[ 1 ] || '';
+ my $passwd = $options->[ 2 ] || '';
+ push(@test, $command);
+
+ # 1. check address syntax
+ if ($address) {
+ use FML::Restriction::Base;
+ my $dispatch = new FML::Restriction::Base;
+ unless ($dispatch->regexp_match('address', $address)) {
+ $curproc->logerror("insecure address: <$address>");
+ return 0;
+ }
+ }
+
+ use FML::Command;
+ my $dispatch = new FML::Command;
+ return $dispatch->safe_regexp_match($curproc, $command_args, \@test);
+}
+
+
# Descriptions: change the admin password.
# Arguments: OBJ($self) OBJ($curproc) HASH_REF($command_args)
# Side Effects: update $member_map $recipient_map
diff --git a/fml/lib/FML/Command/Admin/deladmin.pm b/fml/lib/FML/Command/Admin/deladmin.pm
index 247155e2..1f8ec128 100644
--- a/fml/lib/FML/Command/Admin/deladmin.pm
+++ b/fml/lib/FML/Command/Admin/deladmin.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: deladmin.pm,v 1.16 2004/01/02 14:45:04 fukachan Exp $
+# $FML: deladmin.pm,v 1.17 2004/02/15 04:38:28 fukachan Exp $
#
package FML::Command::Admin::deladmin;
@@ -59,6 +59,20 @@ sub need_lock { 1;}
sub lock_channel { return 'command_serialize';}
+# Descriptions: verify the syntax command string.
+# Arguments: OBJ($self) OBJ($curproc) HASH_REF($command_args)
+# Side Effects: none
+# Return Value: NUM(1 or 0)
+sub verify_syntax
+{
+ my ($self, $curproc, $command_args) = @_;
+
+ use FML::Command::Syntax;
+ push(@ISA, qw(FML::Command::Syntax));
+ $self->check_syntax_address_handler($curproc, $command_args);
+}
+
+
# Descriptions: remove the specified remote administrator.
# Arguments: OBJ($self) OBJ($curproc) HASH_REF($command_args)
# Side Effects: update $member_map $recipient_map
diff --git a/fml/lib/FML/Command/Admin/delmoderator.pm b/fml/lib/FML/Command/Admin/delmoderator.pm
index 2319548c..0bfe24be 100644
--- a/fml/lib/FML/Command/Admin/delmoderator.pm
+++ b/fml/lib/FML/Command/Admin/delmoderator.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: delmoderator.pm,v 1.15 2004/01/02 14:45:04 fukachan Exp $
+# $FML: delmoderator.pm,v 1.16 2004/02/15 04:38:28 fukachan Exp $
#
package FML::Command::Admin::delmoderator;
@@ -59,6 +59,20 @@ sub need_lock { 1;}
sub lock_channel { return 'command_serialize';}
+# Descriptions: verify the syntax command string.
+# Arguments: OBJ($self) OBJ($curproc) HASH_REF($command_args)
+# Side Effects: none
+# Return Value: NUM(1 or 0)
+sub verify_syntax
+{
+ my ($self, $curproc, $command_args) = @_;
+
+ use FML::Command::Syntax;
+ push(@ISA, qw(FML::Command::Syntax));
+ $self->check_syntax_address_handler($curproc, $command_args);
+}
+
+
# Descriptions: remove the specified moderator.
# Arguments: OBJ($self) OBJ($curproc) HASH_REF($command_args)
# Side Effects: update $member_map $recipient_map
diff --git a/fml/lib/FML/Command/Admin/digest.pm b/fml/lib/FML/Command/Admin/digest.pm
index b09c04d4..ba8647ba 100644
--- a/fml/lib/FML/Command/Admin/digest.pm
+++ b/fml/lib/FML/Command/Admin/digest.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: digest.pm,v 1.17 2004/02/01 14:40:02 fukachan Exp $
+# $FML: digest.pm,v 1.18 2004/02/15 04:38:28 fukachan Exp $
#
package FML::Command::Admin::digest;
@@ -64,6 +64,20 @@ sub need_lock { 1;}
sub lock_channel { return 'command_serialize';}
+# Descriptions: verify the syntax command string.
+# Arguments: OBJ($self) OBJ($curproc) HASH_REF($command_args)
+# Side Effects: none
+# Return Value: NUM(1 or 0)
+sub verify_syntax
+{
+ my ($self, $curproc, $command_args) = @_;
+
+ use FML::Command::Syntax;
+ push(@ISA, qw(FML::Command::Syntax));
+ $self->check_syntax_address_handler($curproc, $command_args);
+}
+
+
# Descriptions: toggle delivery mode between real time and digest.
# Arguments: OBJ($self) OBJ($curproc) HASH_REF($command_args)
# Side Effects: update $recipient_map,$digest_recipient_maps
diff --git a/fml/lib/FML/Command/Admin/digestoff.pm b/fml/lib/FML/Command/Admin/digestoff.pm
index aad73ae0..981a4530 100644
--- a/fml/lib/FML/Command/Admin/digestoff.pm
+++ b/fml/lib/FML/Command/Admin/digestoff.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: digestoff.pm,v 1.9 2004/01/01 23:52:11 fukachan Exp $
+# $FML: digestoff.pm,v 1.10 2004/02/15 04:38:29 fukachan Exp $
#
package FML::Command::Admin::digestoff;
@@ -60,6 +60,20 @@ sub need_lock { 1;}
sub lock_channel { return 'command_serialize';}
+# Descriptions: verify the syntax command string.
+# Arguments: OBJ($self) OBJ($curproc) HASH_REF($command_args)
+# Side Effects: none
+# Return Value: NUM(1 or 0)
+sub verify_syntax
+{
+ my ($self, $curproc, $command_args) = @_;
+
+ use FML::Command::Syntax;
+ push(@ISA, qw(FML::Command::Syntax));
+ $self->check_syntax_address_handler($curproc, $command_args);
+}
+
+
# Descriptions: disable digest mode for the specified user.
# changed from digest to real delivery mode.
# Arguments: OBJ($self) OBJ($curproc) HASH_REF($command_args)
diff --git a/fml/lib/FML/Command/Admin/digeston.pm b/fml/lib/FML/Command/Admin/digeston.pm
index aeca3688..e2185d66 100644
--- a/fml/lib/FML/Command/Admin/digeston.pm
+++ b/fml/lib/FML/Command/Admin/digeston.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: digeston.pm,v 1.9 2004/01/01 23:52:12 fukachan Exp $
+# $FML: digeston.pm,v 1.10 2004/02/15 04:38:29 fukachan Exp $
#
package FML::Command::Admin::digeston;
@@ -60,6 +60,20 @@ sub need_lock { 1;}
sub lock_channel { return 'command_serialize';}
+# Descriptions: verify the syntax command string.
+# Arguments: OBJ($self) OBJ($curproc) HASH_REF($command_args)
+# Side Effects: none
+# Return Value: NUM(1 or 0)
+sub verify_syntax
+{
+ my ($self, $curproc, $command_args) = @_;
+
+ use FML::Command::Syntax;
+ push(@ISA, qw(FML::Command::Syntax));
+ $self->check_syntax_address_handler($curproc, $command_args);
+}
+
+
# Descriptions: digest mode off/on for the specified user.
# change delivery mode to this address from real to digest one.
# Arguments: OBJ($self) OBJ($curproc) HASH_REF($command_args)
diff --git a/fml/lib/FML/Command/Admin/off.pm b/fml/lib/FML/Command/Admin/off.pm
index 5e59a706..aa87e34e 100644
--- a/fml/lib/FML/Command/Admin/off.pm
+++ b/fml/lib/FML/Command/Admin/off.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: off.pm,v 1.16 2004/01/02 14:45:04 fukachan Exp $
+# $FML: off.pm,v 1.17 2004/02/15 04:38:29 fukachan Exp $
#
package FML::Command::Admin::off;
@@ -59,6 +59,20 @@ sub need_lock { 1;}
sub lock_channel { return 'command_serialize';}
+# Descriptions: verify the syntax command string.
+# Arguments: OBJ($self) OBJ($curproc) HASH_REF($command_args)
+# Side Effects: none
+# Return Value: NUM(1 or 0)
+sub verify_syntax
+{
+ my ($self, $curproc, $command_args) = @_;
+
+ use FML::Command::Syntax;
+ push(@ISA, qw(FML::Command::Syntax));
+ $self->check_syntax_address_handler($curproc, $command_args);
+}
+
+
# Descriptions: change delivery mode from real time to digest.
# Arguments: OBJ($self) OBJ($curproc) HASH_REF($command_args)
# Side Effects: update $recipient_map
diff --git a/fml/lib/FML/Command/Admin/on.pm b/fml/lib/FML/Command/Admin/on.pm
index 50cb392d..d5c43072 100644
--- a/fml/lib/FML/Command/Admin/on.pm
+++ b/fml/lib/FML/Command/Admin/on.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: on.pm,v 1.16 2004/01/02 14:45:04 fukachan Exp $
+# $FML: on.pm,v 1.17 2004/02/15 04:38:29 fukachan Exp $
#
package FML::Command::Admin::on;
@@ -59,6 +59,20 @@ sub need_lock { 1;}
sub lock_channel { return 'command_serialize';}
+# Descriptions: verify the syntax command string.
+# Arguments: OBJ($self) OBJ($curproc) HASH_REF($command_args)
+# Side Effects: none
+# Return Value: NUM(1 or 0)
+sub verify_syntax
+{
+ my ($self, $curproc, $command_args) = @_;
+
+ use FML::Command::Syntax;
+ push(@ISA, qw(FML::Command::Syntax));
+ $self->check_syntax_address_handler($curproc, $command_args);
+}
+
+
# Descriptions: change delivery mode from digest to real time.
# Arguments: OBJ($self) OBJ($curproc) HASH_REF($command_args)
# Side Effects: update $recipient_map
diff --git a/fml/lib/FML/Command/Admin/subscribe.pm b/fml/lib/FML/Command/Admin/subscribe.pm
index 27ee28bb..d6ed81f3 100644
--- a/fml/lib/FML/Command/Admin/subscribe.pm
+++ b/fml/lib/FML/Command/Admin/subscribe.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: subscribe.pm,v 1.29 2004/02/01 14:40:02 fukachan Exp $
+# $FML: subscribe.pm,v 1.30 2004/02/15 04:38:29 fukachan Exp $
#
package FML::Command::Admin::subscribe;
@@ -61,6 +61,20 @@ sub need_lock { 1;}
sub lock_channel { return 'command_serialize';}
+# Descriptions: verify the syntax command string.
+# Arguments: OBJ($self) OBJ($curproc) HASH_REF($command_args)
+# Side Effects: none
+# Return Value: NUM(1 or 0)
+sub verify_syntax
+{
+ my ($self, $curproc, $command_args) = @_;
+
+ use FML::Command::Syntax;
+ push(@ISA, qw(FML::Command::Syntax));
+ $self->check_syntax_address_handler($curproc, $command_args);
+}
+
+
# Descriptions: subscribe a new user.
# Arguments: OBJ($self) OBJ($curproc) HASH_REF($command_args)
# Side Effects: update $member_map $recipient_map
diff --git a/fml/lib/FML/Command/Admin/unsubscribe.pm b/fml/lib/FML/Command/Admin/unsubscribe.pm
index 8b3f717d..e89f606a 100644
--- a/fml/lib/FML/Command/Admin/unsubscribe.pm
+++ b/fml/lib/FML/Command/Admin/unsubscribe.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: unsubscribe.pm,v 1.30 2004/01/02 14:45:05 fukachan Exp $
+# $FML: unsubscribe.pm,v 1.31 2004/02/15 04:38:30 fukachan Exp $
#
package FML::Command::Admin::unsubscribe;
@@ -61,6 +61,20 @@ sub need_lock { 1;}
sub lock_channel { return 'command_serialize';}
+# Descriptions: verify the syntax command string.
+# Arguments: OBJ($self) OBJ($curproc) HASH_REF($command_args)
+# Side Effects: none
+# Return Value: NUM(1 or 0)
+sub verify_syntax
+{
+ my ($self, $curproc, $command_args) = @_;
+
+ use FML::Command::Syntax;
+ push(@ISA, qw(FML::Command::Syntax));
+ $self->check_syntax_address_handler($curproc, $command_args);
+}
+
+
# Descriptions: remove the specified user.
# Arguments: OBJ($self) OBJ($curproc) HASH_REF($command_args)
# Side Effects: update $member_map $recipient_map
diff --git a/fml/lib/FML/Command/Syntax.pm b/fml/lib/FML/Command/Syntax.pm
new file mode 100644
index 00000000..2aea9bcd
--- /dev/null
+++ b/fml/lib/FML/Command/Syntax.pm
@@ -0,0 +1,101 @@
+#-*- 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::Command::Syntax;
+use strict;
+use vars qw(@ISA @EXPORT @EXPORT_OK $AUTOLOAD);
+use Carp;
+
+=head1 NAME
+
+FML::Command::Syntax - shared command syntax checker
+
+=head1 SYNOPSIS
+
+=head1 DESCRIPTION
+
+=head1 METHODS
+
+=head2 check_syntax_address_handler($curproc, $command_args)
+
+verify the syntax command string.
+return 0 if it looks insecure.
+
+=cut
+
+
+# Descriptions: verify the syntax command string.
+# Arguments: OBJ($self) OBJ($curproc) HASH_REF($command_args)
+# Side Effects: none
+# Return Value: NUM(1 or 0)
+sub check_syntax_address_handler
+{
+ my ($self, $curproc, $command_args) = @_;
+ my $comname = $command_args->{ comname } || '';
+ my $comsubname = $command_args->{ comsubname } || '';
+ my $options = $command_args->{ options } || [];
+ my @test = ($comname);
+ my $ok = 0;
+
+ # XXX Let original_command be "admin subscribe ADDRESS".
+ # XXX options = [ 'subscribe', ADDRESS ] (not shifted yet here).
+ my $command = $options->[ 0 ] || '';
+ my $address = $options->[ 1 ] || '';
+ push(@test, $command);
+
+ # 1. check address syntax
+ if ($address) {
+ use FML::Restriction::Base;
+ my $dispatch = new FML::Restriction::Base;
+ if ($dispatch->regexp_match('address', $address)) {
+ $ok++;
+ }
+ else {
+ $curproc->logerror("insecure address: <$address>");
+ }
+ }
+
+ # 2. check other comonents
+ use FML::Command;
+ my $dispatch = new FML::Command;
+ if ($dispatch->safe_regexp_match($curproc, $command_args, \@test)) {
+ $ok++;
+ }
+ else {
+ $curproc->logerror("insecure syntax");
+ }
+
+ return( $ok == 2 ? 1 : 0 );
+}
+
+
+=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::Command::Syntax appeared in fml8 mailing list driver package.
+See C<http://www.fml.org/> for more details.
+
+=cut
+
+
+1;