Check timestamps while scanning directory in scan_incoming
authorJacob Bachmeyer <jcb@gnu.org>
Sat, 15 Oct 2022 03:11:22 +0000 (22:11 -0500)
committerJacob Bachmeyer <jcb@gnu.org>
Sat, 15 Oct 2022 03:11:22 +0000 (22:11 -0500)
Recent files are now filtered out very early, before checking if they
are open; the testsuite is adjusted accordingly.

gatekeeper.pl
testsuite/gatekeeper.all/00_idle.exp

index 74eea2e9855f82bdb25420fb10c2ba6f0e6c0f96..7ef1d535bfd934e70fa491550e78717ae08953db 100755 (executable)
@@ -859,6 +859,7 @@ sub scan_incoming {
 
   local *_;
 
+  my $time_bar = time - 120;
   my @trash;
   my %possible;
   # Get list of all possible files from incoming dir.
@@ -879,6 +880,18 @@ sub scan_incoming {
     my $ent = $1;      # if we get here, $RE_filename_here matched above
     # $_ remains tainted, but $ent is an untainted (and safe) copy
 
+    # Do not consider files that have been modified in the last 2 minutes.
+    # This is an extra safety check to avoid trying to process files that
+    # are still being uploaded.
+    if (TSTAMPCHECK) {
+      if ((stat($ent))[9] >= $time_bar) {
+       ftp_syslog('debug', "DEBUG: "
+                  ."$ent has been modified in the last 2 minutes, skipping")
+         if DEBUG;
+       next ENT
+      }
+    }
+
     ftp_syslog('debug', "DEBUG: uploaded file to check: $ent") if DEBUG;
     $possible{$ent} = 1;
   }
@@ -931,22 +944,6 @@ sub scan_incoming {
       or ftp_die("FATAL: cannot exec lsof: $!");
   }
 
-  # Do not consider files that have been modified in the last 2 minutes
-  # This is an extra safety check to avoid trying to process files that are
-  # still being uploaded.
-  if (TSTAMPCHECK) {
-    for my $ent (keys %possible) {
-      my @stat = stat($ent);
-      if ($stat[9] >= time - 120) {
-       ftp_syslog('debug', "DEBUG: "
-                  ."$ent has been modified in the last 2 minutes, skipping")
-         if DEBUG;
-       delete ($possible{$ent});
-       next;
-      }
-    }
-  }
-
   my @ret;
 
   # For each remaining possibility, do some more checks
index 3b4df0c787f78024d88e741e14b0fe94b2c8f4de..8f23bf615e60f9fc19f32d1540590aaa6a4f3a91 100644 (file)
@@ -84,7 +84,8 @@ analyze_log $tenv "idle processing: bogus files" {
 
     scan,bogus1 "scan found file: bogus1"
     scan,bogus2 "scan found file: bogus2"
-    scan,bogus3 "scan found file: bogus3"
+
+    recent,bogus3 "skipped recent file: bogus3"
 
     scan,_bogus  "scan found file: _bogus"
     scan,+bogus  "scan found file: +bogus"
@@ -104,8 +105,6 @@ analyze_log $tenv "idle processing: bogus files" {
     !scan,x?x          "ignored file: x?x"
     !scan,;xax         "ignored file: ;xax"
 
-    recent,bogus3 "skipped recent file: bogus3"
-
     consider,bogus1 "considered file: bogus1"
     consider,bogus2 "considered file: bogus2"
 }
@@ -282,10 +281,6 @@ proc check_recent_upload { recent_directive recent_main recent_signature } {
     set msglist {
        start "ftp-upload start message"
        nowork "ftp-upload 'nothing to do' message"
-
-       scan,recent.bin "scan found main file"
-       scan,recent.bin.sig "scan found signature file"
-       scan,recent.bin.directive.asc "scan found directive file"
     }
 
     set testcase {
@@ -301,6 +296,8 @@ proc check_recent_upload { recent_directive recent_main recent_signature } {
        lappend msglist recent,recent.bin.directive.asc \
            "skipped recent directive file"
     } else {
+       lappend msglist scan,recent.bin.directive.asc \
+           "scan found directive file"
        lappend msglist consider,recent.bin.directive.asc \
            "considered directive file"
     }
@@ -308,12 +305,14 @@ proc check_recent_upload { recent_directive recent_main recent_signature } {
        lappend testcase file-mtime "15 seconds ago"
        lappend msglist recent,recent.bin "skipped recent main file"
     } else {
+       lappend msglist scan,recent.bin "scan found main file"
        lappend msglist consider,recent.bin "considered main file"
     }
     if { $recent_signature } {
        lappend testcase fsig-mtime "15 seconds ago"
        lappend msglist recent,recent.bin.sig "skipped recent signature file"
     } else {
+       lappend msglist scan,recent.bin.sig "scan found signature file"
        lappend msglist consider,recent.bin.sig "considered signature file"
     }