summaryrefslogtreecommitdiffstats
path: root/perl-install/security/msec.pm
diff options
context:
space:
mode:
Diffstat (limited to 'perl-install/security/msec.pm')
-rw-r--r--perl-install/security/msec.pm122
1 files changed, 57 insertions, 65 deletions
diff --git a/perl-install/security/msec.pm b/perl-install/security/msec.pm
index dba674932..4258653ef 100644
--- a/perl-install/security/msec.pm
+++ b/perl-install/security/msec.pm
@@ -1,22 +1,10 @@
package security::msec;
use strict;
-use MDK::Common::File;
use MDK::Common;
#-------------------------------------------------------------
-# msec files
-
-my $check_file = "$::prefix/etc/security/msec/security.conf";
-my $curr_sec_file = "$::prefix/var/lib/msec/security.conf";
-my $options_file = "$::prefix/etc/security/msec/level.local";
-
-
-my $num_level;
-
-
-#-------------------------------------------------------------
# msec options managment methods
@@ -24,24 +12,13 @@ my $num_level;
# option defaults
sub load_defaults {
- my ($category) = @_;
- my $default_file;
- my $num_level = 0;
-
- if ($category eq 'functions') {
- require security::level;
- $num_level ||= security::level::get();
- $default_file = "$::prefix/usr/share/msec/level.".$num_level;
- }
- elsif ($category eq 'checks') { $default_file = $curr_sec_file }
-
- my $separator = $category eq 'functions' ? ' ' : $category eq 'checks' ? '=' : undef;
- do { print "BACKTRACE:\n", backtrace(), "\n"; die 'wrong category' } unless $separator;
+ my ($msec, $category) = @_;
+ my $separator = $msec->{$category}{def_separator};
map {
- my ($opt, $val) = split /$separator/;
+ my ($opt, $val) = split(/$separator/, $_, 2);
chop $val;
if_($opt ne 'set_security_conf', $opt => $val);
- } cat_($default_file);
+ } cat_($msec->{$category}{defaults_file}), if_($category eq "checks", 'MAIL_USER');
}
@@ -64,50 +41,48 @@ sub get_function_default {
# option values
sub load_values {
- my ($category) = @_;
- my $item_file =
- $category eq 'functions' ? $options_file :
- $category eq 'checks' ? $check_file : '';
-
- my $separator = $category eq 'functions' ? '\(' : $category eq 'checks' ? '=' : undef;
- do { print "BACKTRACE:\n", backtrace(), "\n"; die 'wrong category' } unless $separator;
+ my ($msec, $category) = @_;
+ my $separator = $msec->{$category}{val_separator};
map {
my ($opt, $val) = split /$separator/;
chop $val;
$val =~ s/[()]//g;
chop $opt if $separator eq '\('; # $opt =~ s/ //g if $separator eq '\(';
- $opt => $val;
- } cat_($item_file);
+ if_(defined($val), $opt => $val);
+ } cat_($msec->{$category}{values_file});
}
-# get_XXX_value(function) -
+# get_XXX_value(check|function) -
# return the value of the function|check passed in argument.
# If no value is set, return "default".
sub get_function_value {
my ($msec, $function) = @_;
- $msec->{functions}{value}{$function} || "default";
+ exists $msec->{functions}{value}{$function} ? $msec->{functions}{value}{$function} : "default";
}
sub get_check_value {
my ($msec, $check) = @_;
-# print "value for '$check' is '$msec->{checks}{value}{$check}'\n";
$msec->{checks}{value}{$check} || "default";
}
-
#-------------------------------------------------------------
-# get list of functions
+# get list of check|functions
# list_(functions|checks) -
# return a list of functions|checks handled by level.local|security.conf
+sub raw_checks_list {
+ my ($msec) = @_;
+ keys %{$msec->{checks}{default}};
+}
+
sub list_checks {
my ($msec) = @_;
- map { if_(!member($_, qw(MAIL_WARN MAIL_USER)), $_) } keys %{$msec->{checks}{default}};
+ difference2([ $msec->raw_checks_list ], [ qw(MAIL_WARN MAIL_USER) ]);
}
sub list_functions {
@@ -122,7 +97,7 @@ sub list_functions {
enable_dns_spoofing_protection enable_ip_spoofing_protection
enable_log_strange_packets enable_promisc_check no_password_aging_for)],
'system' => [qw(allow_autologin allow_issues allow_reboot allow_remote_root_login
- allow_root_login allow_user_list allow_x_connections allow_xserver_to_listen
+ allow_root_login allow_user_list allow_xauth_from_root allow_x_connections allow_xserver_to_listen
authorize_services enable_at_crontab enable_console_log
enable_msec_cron enable_pam_wheel_for_su enable_password enable_security_check
enable_sulogin password_aging password_history password_length set_root_umask
@@ -130,7 +105,7 @@ sub list_functions {
# get all function names; filter out those which are in the ignore
# list, return what lefts.
- map { if_(!member($_, @ignore_list) && member($_, @{$options{$category}}), $_) } keys %{$msec->{functions}{default}};
+ grep { !member($_, @ignore_list) && member($_, @{$options{$category}}) } keys %{$msec->{functions}{default}};
}
@@ -156,40 +131,57 @@ sub set_check {
sub apply_functions {
my ($msec) = @_;
- my @list = ($msec->list_functions('system'), $msec->list_functions('network'));
+ my @list = sort($msec->list_functions('system'), $msec->list_functions('network'));
+ touch($msec->{functions}{values_file}) if !-e $msec->{functions}{values_file};
substInFile {
foreach my $function (@list) { s/^$function.*\n// }
if (eof) {
- print "\n", join("\n", map {
+ $_ .= join("\n", if_(!$_, ''), (map {
my $value = $msec->get_function_value($_);
if_($value ne 'default', "$_ ($value)");
- } @list);
+ } @list), "");
}
- } $options_file;
+ } $msec->{functions}{values_file};
}
sub apply_checks {
my ($msec) = @_;
- my @list = $msec->list_checks;
- substInFile {
- foreach my $check (@list) { s/^$check.*\n// }
- if (eof) {
- print "\n", join("\n", map {
- my $value = $msec->get_check_value($_);
- if_($value ne 'default', $_ . '=' . $value);
- } @list), "\n";
- }
- } $check_file;
+ my @list = sort $msec->raw_checks_list;
+ setVarsInSh($msec->{checks}{values_file},
+ {
+ map {
+ my $value = $msec->get_check_value($_);
+ if_($value ne 'default', $_ => $value);
+ } @list
+ }
+ );
+}
+
+sub reload {
+ my ($msec) = @_;
+ require security::level;
+ my $num_level = security::level::get();
+ $msec->{functions}{defaults_file} = "$::prefix/usr/share/msec/level.$num_level";
+ $msec->{functions}{default} = { $msec->load_defaults('functions') };
}
sub new {
- my $type = shift;
- my $thing = {};
- $thing->{checks}{default} = { load_defaults('checks') };
- $thing->{functions}{default} = { load_defaults('functions') };
- $thing->{functions}{value} = { load_values('functions') };
- $thing->{checks}{value} = { load_values('checks') };
- bless $thing, $type;
+ my ($type) = @_;
+ my $msec = bless {}, $type;
+
+ $msec->{functions}{values_file} = "$::prefix/etc/security/msec/level.local";
+ $msec->{checks}{values_file} = "$::prefix/etc/security/msec/security.conf";
+ $msec->{checks}{defaults_file} = "$::prefix/var/lib/msec/security.conf";
+ $msec->{checks}{val_separator} = '=';
+ $msec->{functions}{val_separator} = '\(';
+ $msec->{checks}{def_separator} = '=';
+ $msec->{functions}{def_separator} = ' ';
+ $msec->reload;
+
+ $msec->{checks}{default} = { $msec->load_defaults('checks') };
+ $msec->{functions}{value} = { $msec->load_values('functions') };
+ $msec->{checks}{value} = { $msec->load_values('checks') };
+ $msec;
}
1;