lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Date:   Tue, 31 Oct 2017 09:46:12 -0500
From:   Tom Saeger <tom.saeger@...cle.com>
To:     Joe Perches <joe@...ches.com>
Cc:     Tom Saeger <tom.saeger@...cle.com>,
        Andrew Morton <akpm@...ux-foundation.org>,
        Greg Kroah-Hartman <gregkh@...uxfoundation.org>,
        linux-kernel@...r.kernel.org
Subject: [RFC PATCH 1/2] scripts: warn about invalid MAINTAINER patterns


Add get_maintainer.pl option to warn about invalid
"F" and "X" patterns found in MAINTAINERS file(s).

Signed-off-by: Tom Saeger <tom.saeger@...cle.com>
---
 scripts/get_maintainer.pl | 65 +++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 65 insertions(+)

diff --git a/scripts/get_maintainer.pl b/scripts/get_maintainer.pl
index bc443201d3ef..e01041325ea0 100755
--- a/scripts/get_maintainer.pl
+++ b/scripts/get_maintainer.pl
@@ -19,6 +19,7 @@ my $V = '0.26';
 use Getopt::Long qw(:config no_auto_abbrev);
 use Cwd;
 use File::Find;
+use File::Basename;
 
 my $cur_path = fastgetcwd() . '/';
 my $lk_path = "./";
@@ -57,6 +58,7 @@ my $sections = 0;
 my $file_emails = 0;
 my $from_filename = 0;
 my $pattern_depth = 0;
+my $xchecks = 0;
 my $version = 0;
 my $help = 0;
 my $find_maintainer_files = 0;
@@ -138,6 +140,7 @@ my %VCS_cmds_git = (
     "subject_pattern" => "^GitSubject: (.*)",
     "stat_pattern" => "^(\\d+)\\t(\\d+)\\t\$file\$",
     "file_exists_cmd" => "git ls-files \$file",
+    "list_files_cmd" => "git ls-files \$file",
 );
 
 my %VCS_cmds_hg = (
@@ -167,6 +170,7 @@ my %VCS_cmds_hg = (
     "subject_pattern" => "^HgSubject: (.*)",
     "stat_pattern" => "^(\\d+)\t(\\d+)\t\$file\$",
     "file_exists_cmd" => "hg files \$file",
+    "list_files_cmd" => "hg files \$file",
 );
 
 my $conf = which_conf(".get_maintainer.conf");
@@ -252,6 +256,7 @@ if (!GetOptions(
 		'fe|file-emails!' => \$file_emails,
 		'f|file' => \$from_filename,
 		'find-maintainer-files' => \$find_maintainer_files,
+		'x|checks' => \$xchecks,
 		'v|version' => \$version,
 		'h|help|usage' => \$help,
 		)) {
@@ -311,12 +316,14 @@ if (!top_of_kernel_tree($lk_path)) {
 my @typevalue = ();
 my %keyword_hash;
 my @mfiles = ();
+my @patternchecks = ();
 
 sub read_maintainer_file {
     my ($file) = @_;
 
     open (my $maint, '<', "$file")
 	or die "$P: Can't open MAINTAINERS file '$file': $!\n";
+    my $i = 1;
     while (<$maint>) {
 	my $line = $_;
 
@@ -333,6 +340,9 @@ sub read_maintainer_file {
 		if ((-d $value)) {
 		    $value =~ s@([^/])$@$1/@;
 		}
+		if ($xchecks) {
+			push(@patternchecks, {file=>$file, line=>$line, linenr=>$i, pat=>$value});
+		}
 	    } elsif ($type eq "K") {
 		$keyword_hash{@...evalue} = $value;
 	    }
@@ -341,6 +351,7 @@ sub read_maintainer_file {
 	    $line =~ s/\n$//g;
 	    push(@typevalue, $line);
 	}
+	$i++;
     }
     close($maint);
 }
@@ -543,6 +554,11 @@ foreach my $file (@ARGV) {
     }
 }
 
+if ($xchecks) {
+    check_maintainer_patterns();
+    exit 0;
+}
+
 @file_emails = uniq(@file_emails);
 
 my %email_hash_name;
@@ -584,6 +600,37 @@ if ($web) {
     output(@web);
 }
 
+sub has_valid_matches {
+    my ($value, $files) = @_;
+    foreach my $file (@{$files}) {
+        if (file_match_pattern($file, $value)) {
+            return 1;
+        }
+    }
+    return 0;
+}
+
+sub check_maintainer_patterns {
+    my @lsfiles = ();
+
+    @lsfiles = vcs_list_files($lk_path);
+
+    # add directories too
+    my @dirs = ();
+    foreach my $f (@lsfiles) {
+        push(@dirs, dirname($f));
+    }
+    push(@lsfiles, uniq(@dirs));
+
+    for my $x (@patternchecks) {
+        if (!has_valid_matches($x->{pat}, \@lsfiles)) {
+            my $line = $x->{line};
+            chomp($line);
+            print("$x->{file}:$x->{linenr}\twarning: no matches\t$x->{pat}\t$line\n");
+        }
+    }
+}
+
 exit($exit);
 
 sub ignore_email_address {
@@ -863,6 +910,7 @@ Other options:
   --sections => print all of the subsystem sections with pattern matches
   --letters => print all matching 'letter' types from all matching sections
   --mailmap => use .mailmap file (default: $email_use_mailmap)
+  --checks => check for "F" and "X" pattern warnings
   --version => show version
   --help => show this help information
 
@@ -2192,6 +2240,23 @@ sub vcs_file_exists {
     return $exists;
 }
 
+sub vcs_list_files {
+    my ($file) = @_;
+
+    my @lsfiles = ();
+
+    my $vcs_used = vcs_exists();
+    return 0 if (!$vcs_used);
+
+    my $cmd = $VCS_cmds{"list_files_cmd"};
+    $cmd =~ s/(\$\w+)/$1/eeg;   # interpolate $cmd
+    @lsfiles = &{$VCS_cmds{"execute_cmd"}}($cmd);
+
+    return () if ($? != 0);
+
+    return @lsfiles;
+}
+
 sub uniq {
     my (@parms) = @_;
 
-- 
2.14.3

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ