Factor scanning loop out of directory_keyrings
authorJacob Bachmeyer <jcb@gnu.org>
Fri, 28 Oct 2022 03:59:19 +0000 (22:59 -0500)
committerJacob Bachmeyer <jcb@gnu.org>
Fri, 28 Oct 2022 03:59:19 +0000 (22:59 -0500)
This allows the same loop to be used to support other per-directory items.

gatekeeper.pl

index f5007f8bfcd779829bfe2f095fb417776fe763ca..471685f40634c92f7470f90337a51a7a999acc3b 100755 (executable)
@@ -873,31 +873,43 @@ sub verify_clearsigned_message {
 # - Package configuration access
 #
 
-=item @keyrings = directory_keyrings ( $directory )
+=item @files = directory_configuration_files ( $file, $directory )
 
-Return list of keyrings present in package configuration and applicable to
-DIRECTORY, which is a relative name beginning with the appropriate package.
+Return list of FILEs applicable to DIRECTORY.  The rule used is that each
+FILE applies to its own directory and is inherited by all subdirectories.
 
 =cut
 
-sub directory_keyrings {
+sub directory_configuration_files {
+  my $file = shift;
   my $directory = shift;
 
-  my @keyrings;
   my @candidates;
 
   for (my @directory = File::Spec::Unix->splitdir($directory);
        @directory;
        pop @directory)
     { push @candidates, File::Spec->catfile
-       ($package_config_base, @directory, 'pubring.gpg') }
-  push @candidates, File::Spec->catfile($package_config_base, 'pubring.gpg');
+       ($package_config_base, @directory, $file) }
+  push @candidates, File::Spec->catfile($package_config_base, $file);
 
-  foreach my $keyring (@candidates) {
-    if (-f $keyring) {
-      ftp_syslog('debug', "DEBUG: found keyring $keyring") if DEBUG;
-      push @keyrings, $keyring;
-    }
+  return grep -f $_ && -r _ && -s _, @candidates;
+}
+
+=item @keyrings = directory_keyrings ( $directory )
+
+Return list of keyrings present in package configuration and applicable to
+DIRECTORY, which is a relative name beginning with the appropriate package.
+
+=cut
+
+sub directory_keyrings {
+  my $directory = shift;
+
+  my @keyrings = directory_configuration_files('pubring.gpg', $directory);
+
+  if (DEBUG) {
+    ftp_syslog('debug', "DEBUG: found keyring $_") for @keyrings;
   }
 
   return @keyrings;