added sho_version() to assist in troubleshooting.

This commit is contained in:
dataking 2017-06-28 23:41:15 -07:00
parent 04fd843b87
commit 1482b1a420

View File

@ -12,7 +12,7 @@ use Getopt::Long qw( :config no_ignore_case bundling );
use Data::Dumper; use Data::Dumper;
use Module::Load::Conditional qw( can_load check_install requires ); use Module::Load::Conditional qw( can_load check_install requires );
my ($help,$verbose,$excel,$output,$pdf,$debug,$json,$quiet,$xml); my ($help,$verbose,$excel,$output,$pdf,$debug,$json,$quiet,$xml,$showversion);
GetOptions( GetOptions(
'h|help' => \$help, 'h|help' => \$help,
'v|verbose+' => \$verbose, 'v|verbose+' => \$verbose,
@ -23,10 +23,11 @@ GetOptions(
'j|json' => \$json, 'j|json' => \$json,
'x|xml' => \$xml, 'x|xml' => \$xml,
'q|quiet' => \$quiet, 'q|quiet' => \$quiet,
'V|version' => \$showversion,
); );
&usage if ($help); &usage if ($help);
&usage if ((!$output) and (!$json)); &usage if ((!$output) and (!$json) and (!$showversion));
#if ($verbose) { use warnings; } #if ($verbose) { use warnings; }
@ -190,6 +191,10 @@ if (exists($lynis_report_data{'tests_executed'})) {
delete($lynis_report_data{'tests_executed'}); delete($lynis_report_data{'tests_executed'});
} }
if ($showversion) {
&show_version;
}
if ($debug) { if ($debug) {
print colored("In debug mode. Dumping data hash.\n", "yellow"); print colored("In debug mode. Dumping data hash.\n", "yellow");
print color('yellow'); print color('yellow');
@ -2342,7 +2347,7 @@ if ($verbose) {
############################################################################### ###############################################################################
sub usage { sub usage {
if (!$output) { if ((!$output) and (!$showversion)) {
print colored("You must specify an output file.\n", "yellow"); print colored("You must specify an output file.\n", "yellow");
} }
@ -2364,6 +2369,25 @@ END
exit 0; exit 0;
} }
# show script version and gather some relevant data for troubleshooting
sub show_version {
my $uname_a = `uname -a`;
chomp($uname_a);
my $perl_v = `perl --version`;
chomp($perl_v);
print <<EOS;
UNAME: $uname_a
OS FullName: $lynis_report_data{'os_fullname'}
OS Version: $lynis_report_data{'os_version'}
Perl Version:
$perl_v
EOS
exit 0;
}
# determine if a number is prime
sub is_prime { sub is_prime {
my $num = shift(@_); my $num = shift(@_);
my $sqrt = sqrt($num); my $sqrt = sqrt($num);
@ -2375,6 +2399,7 @@ sub is_prime {
} }
} }
# deduplicate elements in an array
sub dedup_array { sub dedup_array {
my $aryref = shift; my $aryref = shift;
my %hash; my %hash;
@ -2383,6 +2408,7 @@ sub dedup_array {
return sort keys(%hash); return sort keys(%hash);
} }
# calculate the binary "score" for password complexity based off the lynis script findings
sub calc_password_complexity_score { sub calc_password_complexity_score {
my ($lc,$uc,$n,$o); my ($lc,$uc,$n,$o);
if ($lynis_report_data{'password_max_l_credit'}) { $lc = 0b0001; } else { $lc = 0b0000; } if ($lynis_report_data{'password_max_l_credit'}) { $lc = 0b0001; } else { $lc = 0b0000; }
@ -2395,6 +2421,9 @@ sub calc_password_complexity_score {
return $score; return $score;
} }
# give inconsistent keys a value
# some keys may be inconsistent because of OS/Distro version differences
# some keys mey be inconsistent because of the use of plugins
sub pop_inconsistent_keys { sub pop_inconsistent_keys {
my $fmt = shift; my $fmt = shift;
my $lrd_hash_ref = shift; my $lrd_hash_ref = shift;
@ -2418,6 +2447,8 @@ sub pop_inconsistent_keys {
# should operate on the main \%lynis_report_data hash, so we shouldn't need to return anything. Maybe success/fail? # should operate on the main \%lynis_report_data hash, so we shouldn't need to return anything. Maybe success/fail?
} }
# flatten an array
# dedupe it and remove arbitrary elements if legitimate ones exist.
sub flatten { sub flatten {
my @ary = shift; my @ary = shift;
# check if there's more than one element # check if there's more than one element