chiark / gitweb /
Split nameIsInList into nameIsInListRegexp (for most things) and nameIsInListExactly...
authorIan Jackson <ijackson@chiark.greenend.org.uk>
Wed, 5 Jan 2011 18:24:22 +0000 (18:24 +0000)
committerIan Jackson <ijackson@chiark.greenend.org.uk>
Wed, 5 Jan 2011 18:24:22 +0000 (18:24 +0000)
stump/bin/needAck
stump/bin/processNoack.pl
stump/bin/processPreapproved
stump/bin/robomod.pl
stump/bin/submission.pl

index 9b464d3..3a0b663 100755 (executable)
@@ -9,7 +9,7 @@ require "$MNG_ROOT/bin/robomod.pl";
 # checks if poster needs ack
 sub checkAck {
 
-  $needAck = ! &nameIsInList( $From, "noack.list" );
+  $needAck = ! &nameIsInListExactly( $From, "noack.list" );
 
 }
 
index 33f3d04..521e36f 100755 (executable)
@@ -27,7 +27,7 @@ if( $From =~ m/([\w-\.]*)\@([\w-\.]+)/ ) {
   exit 0;
 }
 
-if( !&nameIsInList( $From, "noack.list" ) ) { # need to preapprove
+if( !&nameIsInListExactly( $From, "noack.list" ) ) { # need to preapprove
   print STDERR "Adding $From to the noack list...\n";
   open( NOACK, ">>$NoAckFile" ) or die $!;
     print NOACK "$From\n" or die $!;
index 5933a2b..d866490 100755 (executable)
@@ -39,7 +39,7 @@ if( $From =~ m/([\w-\.]*)\@([\w-\.]+)/ ) {
   exit 0;
 }
 
-if( !&nameIsInList( $From, "good.guys.list" ) ) { # need to preapprove
+if( !&nameIsInListExactly( $From, "good.guys.list" ) ) { # need to preapprove
   &logAction( "Action: processPreapproved $From\n" );
   open( GOOD_GUYS, ">>$GoodGuys" ) or die $!;
     print GOOD_GUYS "$From\n" or die $!;
index 3534c5a..09888a1 100755 (executable)
@@ -7,7 +7,7 @@ $MNG_ROOT = $ENV{'MNG_ROOT'} || die "Root dir for moderation not specified";
 
 ###################################################################### checkAck
 # checks if poster needs ack
-sub nameIsInList {
+sub nameIsInListRegexp {
   local( $listName ) = pop( @_ );
   local( $address ) = pop( @_ );
 
@@ -23,7 +23,33 @@ sub nameIsInList {
 
     next if $item =~ /^ *$/;
 
-    if( eval { $address =~ /$item/i; } || "\L$address" eq "\L$item" ) {
+    if( eval { $address =~ /$item/i; } ) {
+      $Result = $item;
+    }
+  }
+
+  close( LIST );
+
+  return $Result;
+}
+
+sub nameIsInListExactly {
+  local( $listName ) = pop( @_ );
+  local( $address ) = pop( @_ );
+
+  local( $item );
+
+  $Result = 0;
+
+  open( LIST, "$MNG_ROOT/data/$listName" );
+
+  while( $item = <LIST> ) {
+
+    chop $item;
+
+    next if $item =~ /^ *$/;
+
+    if( "\L$address" eq "\L$item" ) {
       $Result = $item;
     }
   }
index 8a7331a..f319617 100755 (executable)
@@ -133,7 +133,7 @@ print STDERR "Too many newsgroups\n";
 # checks if poster needs acknowledgment of receipt
 #
 sub checkAck {
-  if( &nameIsInList( $From, "noack.list" ) ) {
+  if( &nameIsInListExactly( $From, "noack.list" ) ) {
     $needAck = "no";
   } else {
     $needAck = "yes";
@@ -163,8 +163,8 @@ print STDERR "FromSig = $FromSig, good = $good\n" if $FromSig;
     return "$Command_Reject signature Your PGP signature does NOT match, or is not in our keyring";
   }
 
-  if( &nameIsInList( $From, $PGPMustList ) ||
-      ($PGPCheckPreapproved && &nameIsInList($From, $goodGuys) ) ) {
+  if( &nameIsInListRegexp( $From, $PGPMustList ) ||
+      ($PGPCheckPreapproved && &nameIsInListExactly($From, $goodGuys) ) ) {
     if( $FromSig eq "" ) {
       return "$Command_Reject signature You are REQUIRED to sign your posts.";
     } 
@@ -214,7 +214,7 @@ sub Filter {
     }
   }
 
-  if( &nameIsInList( $From, $badGuys ) ) {
+  if( &nameIsInListRegexp( $From, $badGuys ) ) {
     return "$Command_Reject blocklist";
   }
 
@@ -223,7 +223,7 @@ sub Filter {
   # "suspicious" and will be forwarded to a humen mod for review.
   # As an example of a bad word may be "MAKE MONEY FAST - IT REALLY WORKS!!!"
   #
-  if( $badWord = &nameIsInList( $Body, $badWords ) ) {
+  if( $badWord = &nameIsInListRegexp( $Body, $badWords ) ) {
 print STDERR "BAD WORD $badWord FOUND!!!\n";
     return $Command_Suspicious; # messages from approved guys MAY be 
                          # suspicious if they write about
@@ -237,7 +237,7 @@ print STDERR "BAD WORD $badWord FOUND!!!\n";
   }
 
   # Checking preapproved list
-  if( &nameIsInList( $From, $goodGuys ) ) {
+  if( &nameIsInListExactly( $From, $goodGuys ) ) {
   local( $from ) = $From; $from =~ s/^From: //i;
 print STDERR "$from is a PREAPPROVED person\n";
     return $Command_Approve;