credit Blair and Tim with MacPorts and Homebrew maintainer status
[fwknop.git] / perl / legacy / fwknop / config_vars.pl
1 #!/usr/bin/perl -w
2 #
3 ############################################################################
4 #
5 # File: config_vars.pl
6 #
7 # Purpose: To provide basic usage validation for cipherdyne.org project
8 #          variables.
9 #
10 ############################################################################
11 #
12 # $Id: config_vars.pl 571 2006-10-16 02:41:41Z mbr $
13 #
14
15 use strict;
16
17 my $config_file = 'config_vars.conf';
18
19 open C, "< $config_file" or die $!;
20 my @lines = <C>;
21 close C;
22
23 my %config = ();
24 for my $line (@lines) {
25     next unless $line;
26     next if $line =~ /^\s*#/;
27     if ($line =~ /^\s*(\S+)\s+(\S+)/) {
28         $config{$1}{$2} = '';
29     }
30 }
31
32 PROG: for my $prog (keys %config) {
33     unless (-e $prog) {
34         print "[-] program: $prog does not exist in current directory.\n";
35         next PROG;
36     }
37     open F, "< $prog" or die "[*] Could not open $prog: $!";
38     my @prog_lines = <F>;
39     close F;
40     my %config_vars = ();
41     my %used_vars   = ();
42     CONF: for my $config (keys %{$config{$prog}}) {
43         unless (-e $config) {
44             print "[-] config: $config for program: $prog does not exist.\n";
45             next CONF;
46         }
47         open F, "< $config" or die "[*] Could not open $config: $!";
48         my @config_lines = <F>;
49         close F;
50         for my $line (@config_lines) {
51             next unless $line;
52             next unless $line =~ /\S/;
53             next if $line =~ /^\s*#/;
54             if ($line =~ /^\s*(\S+)\s/) {
55                 $config_vars{$1} = '';
56             }
57         }
58     }
59     my $line_num = 1;
60     ### see if the program is using an undefined configuration
61     ### variable
62     for my $line (@prog_lines) {
63         if ($prog =~ /\.c/) {  ### C code file
64             if ($line =~ m|\"(\w+)\s+\"|) {
65                 my $var = $1;
66                 unless (defined $config_vars{$var}) {
67                     print "[-] Config var: $var (line $line_num) ",
68                         "is not defined in config files for program: $prog\n";
69                 }
70                 $used_vars{$var} = '';
71             }
72         } else {
73             my $var1 = '';
74             my $var2 = '';
75             if ($line =~ m|\$config\{\'(\S+)\'\}|) {
76                 $var1 = $1;
77             }
78             if ($line =~ m|\$cmds\{\'(\S+)\'\}|) {
79                 $var2 = "$1Cmd";
80             }
81             if ($var1) {
82                 unless (defined $config_vars{$var1}) {
83                     print "[-] Config var: $var1 (line $line_num) ",
84                         "is not defined in config files for program: $prog\n";
85                 }
86                 $used_vars{$var1} = '';
87             }
88             if ($var2) {
89                 unless (defined $config_vars{$var2}) {
90                     print "[-] Config var: $var2 (line $line_num) ",
91                         "is not defined in config files for program: $prog\n";
92                 }
93                 $used_vars{$var2} = '';
94             }
95         }
96         $line_num++;
97     }
98
99     ### see if the config files define a configuration variable
100     ### that is not used by the program
101     for my $var (sort keys %config_vars) {
102         unless (defined $used_vars{$var}) {
103             print "[-] $var is defined in config files, ",
104                 "but not used in $prog\n";
105         }
106     }
107 }
108
109 exit 0;