[interchange-cvs] interchange - jon modified lib/Vend/Parse.pm

interchange-core@interchange.redhat.com interchange-core@interchange.redhat.com
Mon Mar 4 18:46:00 2002


User:      jon
Date:      2002-03-04 23:45:17 GMT
Modified:  lib/Vend Parse.pm
Log:
* Disable reparse for restrict tag to prevent infinite loops.
  (The NoReparse setting got lost in the Great Tag Breakout.)

* Add new log option to restrict tag. Possible values are 'all', 'once',
  and 'none'. Default remains 'all'.

* Remove space after occurrences of 'variable=' in logfile output to
  simplify parsing of $Vend::restricted string.

Revision  Changes    Path
2.15      +23 -14    interchange/lib/Vend/Parse.pm


rev 2.15, prev_rev 2.14
Index: Parse.pm
===================================================================
RCS file: /var/cvs/interchange/lib/Vend/Parse.pm,v
retrieving revision 2.14
retrieving revision 2.15
diff -u -u -r2.14 -r2.15
--- Parse.pm	18 Feb 2002 02:07:03 -0000	2.14
+++ Parse.pm	4 Mar 2002 23:45:17 -0000	2.15
@@ -1,6 +1,6 @@
 # Vend::Parse - Parse Interchange tags
 # 
-# $Id: Parse.pm,v 2.14 2002/02/18 02:07:03 mheins Exp $
+# $Id: Parse.pm,v 2.15 2002/03/04 23:45:17 jon Exp $
 #
 # Copyright (C) 1996-2001 Red Hat, Inc. <interchange@redhat.com>
 #
@@ -35,7 +35,7 @@
 
 @ISA = qw(Exporter Vend::Parser);
 
-$VERSION = substr(q$Revision: 2.14 $, 10);
+$VERSION = substr(q$Revision: 2.15 $, 10);
 
 @EXPORT = ();
 @EXPORT_OK = qw(find_matching_end);
@@ -78,8 +78,8 @@
 my %hasEndTag = (
 
 				qw(
-                        if              1
-                        unless          1
+					if              1
+					unless          1
 					restrict		1
 				)
 			);
@@ -175,6 +175,8 @@
 
 	my $save_restrict = $Vend::restricted;
 
+	$opt->{log} ||= 'all';
+
 	my $default;
 	if("\L$opt->{policy}" eq 'allow') {
 		# Accept all, deny only ones defined in disable
@@ -194,7 +196,6 @@
 		tr/-/_/;
 	}
 
-
 	my %restrict;
 	for(keys %Routine) {
 		$restrict{$_} = $default;
@@ -206,9 +207,10 @@
 
 	$Vend::Cfg->{AdminSub} = \%restrict;
 	$Vend::restricted = join " ",
-			'default=', $opt->{policy},
-			'enable=', join(",", @enable),
-			'disable=', join(",", @disable),
+			'default=' . $opt->{policy},
+			'enable=' . join(",", @enable),
+			'disable=' . join(",", @disable),
+			'log=' . $opt->{log},
 			;
 	my $out;
 	eval {
@@ -267,6 +269,7 @@
 			);
 
 my %NoReparse = ( qw/
+					restrict		1
 				/ );
 
 my %Gobble = ( qw/
@@ -327,7 +330,7 @@
 	my $tag = shift;
 #::logDebug("Parse-do_tag: tag=$tag caller=" . caller() . " args=" . ::uneval_it(\@_) );
 	if (defined $Vend::Cfg->{AdminSub}{$tag}) { 
-	
+
 		if($Vend::restricted) {
 			die errmsg(
 					"Tag '%s' in execution-restricted area: %s",
@@ -516,13 +519,19 @@
 
 	my($tmpbuf);
 	if (defined $Vend::Cfg->{AdminSub}{$tag}) { 
-	
+
 		if($Vend::restricted) {
-			::logError(
-				"Restricted tag (%s) attempted during restriction '%s'",
-				$origtext,
-				$Vend::restricted,
+			my $log = 'all';
+			$Vend::restricted =~ /\blog=(\w+)/ and $log = lc $1;
+			undef $log if $log eq 'none' or
+				($log eq 'once' and $Vend::restricted_err{$origtext}++);
+			if ($log) {
+				::logError(
+					"Restricted tag (%s) attempted during restriction '%s'",
+					$origtext,
+					$Vend::restricted,
 				);
+			}
 			$self->{OUT} .= $origtext;
 			return 1;
 		}