diff --git a/Anvil/Tools.pm b/Anvil/Tools.pm index a5670f61..af33f164 100644 --- a/Anvil/Tools.pm +++ b/Anvil/Tools.pm @@ -906,6 +906,11 @@ sub _set_defaults privacy => { strong => 0, }, + ram_limits => { + striker => 3221225472, # 3 GiB + node => 1073741824, # 1 GiB + dr => 2147483648, # 2 GiB + }, # On actual RHEL systems, this will be used to ensure that given repos are enabled on given # machines types. Obviously, this requires that the host has been subscribed. rhel => { diff --git a/Anvil/Tools/System.pm b/Anvil/Tools/System.pm index 43e33125..1841a339 100644 --- a/Anvil/Tools/System.pm +++ b/Anvil/Tools/System.pm @@ -684,12 +684,33 @@ sub check_ram_use $anvil->Log->entry({source => $THIS_FILE, line => __LINE__, level => $debug, key => "log_0125", variables => { method => "System->check_ram_use()" }}); my $program = defined $parameter->{program} ? $parameter->{program} : ""; - my $max_ram = defined $parameter->{max_ram} ? $parameter->{max_ram} : 1073741824; + my $max_ram = defined $parameter->{max_ram} ? $parameter->{max_ram} : 0; $anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => $debug, list => { program => $program, max_ram => $max_ram, }}); + # If we weren't told what the max RAM is, set it from defaults + if (not $max_ram) + { + my $host_type = $anvil->Get->host_type({debug => $debug}); + $anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => $debug, list => { host_type => $host_type }}); + + # We'll set '1073741824' (1 GiB) as max default. Then adjust if we have a device type. + $max_ram = 1073741824; + $anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => $debug, list => { + max_ram => $anvil->Convert->add_commas({number => $max_ram})." (".$anvil->Convert->bytes_to_human_readable({'bytes' => $max_ram}).")", + }}); + + if (exists $anvil->data->{sys}{ram_limits}{$host_type}) + { + $max_ram = $anvil->data->{sys}{ram_limits}{$host_type}; + $anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => $debug, list => { + max_ram => $anvil->Convert->add_commas({number => $max_ram})." (".$anvil->Convert->bytes_to_human_readable({'bytes' => $max_ram}).")", + }}); + } + } + # Find the PID(s) of the program. my $problem = 0; my $ram_used = 0; diff --git a/share/words.xml b/share/words.xml index 9d9b7661..605aa918 100644 --- a/share/words.xml +++ b/share/words.xml @@ -534,18 +534,25 @@ The definition data passed in was: [ Error ] - The '--type' must be 'host' or 'dr'. Was given: [#!variable!type!#]. [ Error ] - The UUID: [#!variable!uuid!#] is not a valid UUID. [ Error ] - Neither '--host-ip-address' or '--target' were used to define who we are trying to connect to. - [ Error ] - The UUID: [#!variable!uuid!#] passed in by the switch: [#!variable!switch!#] appears to be invalid. - [ Error ] - The domain or IP: [#!variable!name!#] passed in by the switch: [#!variable!switch!#] appears to be invalid. - [ Error ] - The alert level: [#!variable!level!#] passed in by the switch: [#!variable!switch!#] appears to be invalid. Valid values are '1', '2', '3' or '4'. These represent; -1 = "critical" alerts only -2 = "warning" and critical alerts -3 = "notice", warning and critical alerts -4 = "info"; All alerts. This generates almost constant alerts! - - [ Error ] - The TCP port: [#!variable!port!#] passed in by the switch: [#!variable!switch!#] appears to be invalid. TCP ports must be integers between 1 and 65535. + [ Error ] - The UUID: [#!variable!uuid!#] passed in by the switch: [--#!variable!switch!#] appears to be invalid. + [ Error ] - The domain or IP: [#!variable!name!#] passed in by the switch: [--#!variable!switch!#] appears to be invalid. + [ Error ] - The alert level: [#!variable!level!#] passed in by the switch: [--#!variable!switch!#] appears to be invalid. Valid values are '0', '1', '2', '3' or '4'. These represent; + * 1 = "critical" alerts only + * 2 = "warning" and critical alerts + * 3 = "notice", warning and critical alerts + * 4 = "info"; All alerts. This generates almost constant alerts! + [ Error ] - The TCP port: [#!variable!port!#] passed in by the switch: [--#!variable!switch!#] appears to be invalid. TCP ports must be integers between 1 and 65535. [ Error ] - The mail server security: [#!variable!security!#] appears to be invalid. Valid options are 'none', 'starttls' or 'tls-ssl'. - [ Error ] - The mail server authentication: [#!variable!auth!#] appears to be invalid. Valid options are 'none', 'plain-text', or 'encrypted'. + [ Error ] - The mail server authentication: [#!variable!auth!#] appears to be invalid. Valid options are: + * none = Normal Password + * encrypted = Encrypted Password + * kerberos = Kerberos GSSAPI + * ntlm = NTLM + * tls = TLS + * oauth2 = oauth2 [ Error ] - The email address: [#!variable!email!#] appears to be invalid. + [ Error ] - The switch: [--#!variable!switch!#] is required, but not provided. + [ Error ] - The mail server UUID: [#!variable!uuid!#] was not found. @@ -2689,6 +2696,71 @@ Available options; # configuration option. It will be removed in a future release. # Please consider disabling it now. Migration Network + Are you sure you want to create the new mail server: +* Address: ...... [#!variable!new_address!#] +* TCP port: ..... [#!variable!new_port!#] +* User name: .... [#!variable!new_username!#] +* Password: ..... [#!variable!new_password!#] +* Authentication: [#!variable!new_authentication!#] +* Security: ..... [#!variable!new_security!#] +* HELO domain: .. [#!variable!new_helo_domain!#] +Proceed? [y/N] + + Are you sure you want to change the mail server thusly: +* Address: ...... [#!variable!old_address!#] -> [#!variable!new_address!#] +* TCP port: ..... [#!variable!old_port!#] -> [#!variable!new_port!#] +* User name: .... [#!variable!old_username!#] -> [#!variable!new_username!#] +* Password: ..... [#!variable!old_password!#] -> [#!variable!new_password!#] +* Authentication: [#!variable!old_authentication!#] -> [#!variable!new_authentication!#] +* Security: ..... [#!variable!old_security!#] -> [#!variable!new_security!#] +* HELO domain: .. [#!variable!old_helo_domain!#] -> [#!variable!new_helo_domain!#] +Proceed? [y/N] + + Are you sure you want to delete the mail server: +* Address: ...... [#!variable!old_address!#] +* TCP port: ..... [#!variable!old_port!#] +* User name: .... [#!variable!old_username!#] +* Password: ..... [#!variable!old_password!#] +* Authentication: [#!variable!old_authentication!#] +* Security: ..... [#!variable!old_security!#] +* HELO domain: .. [#!variable!old_helo_domain!#] +Proceed? [y/N] + + The new mail server was created with the UUID: [#!variable!uuid!#]. + The mail server has been updated. + The mail server has been deleted. + Are you sure you want to create the alert recipient: +* Name: ... [#!variable!new_name!#] +* E-Mail: . [#!variable!new_email!#] +* Language: [#!variable!new_language!#] +* Level: .. [#!variable!new_level!#] +Proceed? [y/N] + + Are you sure you want to change the alert recipient thusly: +* Name: ... [#!variable!old_name!#] -> [#!variable!new_name!#] +* E-Mail: . [#!variable!old_email!#] -> [#!variable!new_email!#] +* Language: [#!variable!old_language!#] -> [#!variable!new_language!#] +* Level: .. [#!variable!old_level!#] -> [#!variable!new_level!#] +Proceed? [y/N] + + Are you sure you want to delete the alert recipient: +* Name: ... [#!variable!old_name!#] +* E-Mail: . [#!variable!old_email!#] +* Language: [#!variable!old_language!#] +* Level: .. [#!variable!old_level!#] +Proceed? [y/N] + + + + Normal Password + Enctrypted Password + Kerberos GSSAPI + NTLM + TLS Certificate + OAuth2 + None + STARTTLS + TLS/SSL Saved the mail server information successfully! diff --git a/tools/Makefile.am b/tools/Makefile.am index 5f85417e..6a9929cb 100644 --- a/tools/Makefile.am +++ b/tools/Makefile.am @@ -17,6 +17,7 @@ dist_sbin_SCRIPTS = \ anvil-get-server-screenshot \ anvil-join-anvil \ anvil-maintenance-mode \ + anvil-manage-alerts \ anvil-manage-dr \ anvil-manage-files \ anvil-manage-firewall \ @@ -25,6 +26,7 @@ dist_sbin_SCRIPTS = \ anvil-manage-power \ anvil-manage-server \ anvil-migrate-server \ + anvil-network-profiler \ anvil-parse-fence-agents \ anvil-provision-server \ anvil-rename-server \ @@ -70,3 +72,5 @@ dist_fence_SCRIPTS = \ sharedir = ${datarootdir}/anvil dist_share_DATA = striker-auto-initialize-all.example + +# -rwxr-xr-x. 1 digimer digimer 34K Feb 1 2020 tool-fio-tester diff --git a/tools/anvil-manage-alerts b/tools/anvil-manage-alerts index 657f181c..c675974e 100755 --- a/tools/anvil-manage-alerts +++ b/tools/anvil-manage-alerts @@ -42,6 +42,8 @@ $anvil->Get->switches({list => [ "recipient-email", "recipient-language", "recipient-level", + "y", + "yes", ]}); $anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => $anvil->data->{switches}}); @@ -60,16 +62,34 @@ if ($anvil->data->{switches}{"mail-servers"}) { handle_mail_servers($anvil); } -elsif ($anvil->data->{switches}{"notifications"}) -{ - handle_notifications($anvil); -} elsif ($anvil->data->{switches}{"recipients"}) { + $anvil->data->{sys}{show}{recipients} = 1; + $anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => { + 'sys::show::recipients' => $anvil->data->{sys}{show}{recipients}, + }}); handle_recipients($anvil); } +elsif ($anvil->data->{switches}{"notifications"}) +{ + $anvil->data->{sys}{show}{notifications} = 1; + $anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => { + 'sys::show::notifications' => $anvil->data->{sys}{show}{notifications}, + }}); + handle_notifications($anvil); +} else { + $anvil->data->{sys}{show}{mail_servers} = 1; + $anvil->data->{sys}{show}{recipients} = 1; + $anvil->data->{sys}{show}{notifications} = 1; + $anvil->data->{sys}{show}{systems} = 1; + $anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => { + 'sys::show::mail_servers' => $anvil->data->{sys}{show}{mail_servers}, + 'sys::show::recipients' => $anvil->data->{sys}{show}{recipients}, + 'sys::show::notifications' => $anvil->data->{sys}{show}{notifications}, + 'sys::show::systems' => $anvil->data->{sys}{show}{systems}, + }}); show_existing($anvil); } @@ -80,11 +100,199 @@ $anvil->nice_exit({exit_code => 0}); # Functions # ############################################################################################################# -sub recipients +sub handle_recipients { my ($anvil) = @_; + ### Are we adding, editing or deleting? + # If we're adding or editing, all fields are required. + my $confirm_needed = 0; + if (($anvil->data->{switches}{add}) or ($anvil->data->{switches}{edit}) or ($anvil->data->{switches}{'delete'})) + { + # Did the user confirm yet? + if ((not $anvil->data->{switches}{'y'}) and (not $anvil->data->{switches}{'yes'})) + { + $confirm_needed = 1; + $anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => { confirm_needed => $confirm_needed }}); + } + } + + if (($anvil->data->{switches}{add}) or ($anvil->data->{switches}{edit})) + { + # Do we have what we need? + my $problem = 0; + foreach my $switch ("recipient-name", "recipient-email", "recipient-language", "recipient-level") + { + $anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => { + switch => $switch, + "switches::$switch" => $anvil->data->{switches}{$switch}, + }}); + if (($anvil->data->{switches}{$switch} eq "") or ($anvil->data->{switches}{$switch} eq "#!SET!#")) + { + $anvil->Log->entry({source => $THIS_FILE, line => __LINE__, level => 0, 'print' => 1, key => "error_0387", variables => { switch => $switch }}); + $problem = 1; + $anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => { problem => $problem }}); + } + } + if ($problem) + { + $anvil->nice_exit({exit_code => 1}); + } + } + # If we're editing or deleting, make sure we have a valid UUID. + my $recipient_uuid = $anvil->data->{switches}{"recipient-uuid"}; + my $old_recipient_language = ""; + my $old_recipient_level = ""; + if (($anvil->data->{switches}{edit}) or ($anvil->data->{switches}{'delete'})) + { + if (not $recipient_uuid) + { + $anvil->Log->entry({source => $THIS_FILE, line => __LINE__, level => 0, 'print' => 1, key => "error_0387", variables => { switch => "recipient-uuid" }}); + $anvil->nice_exit({exit_code => 1}); + } + if (not exists $anvil->data->{recipients}{recipient_uuid}{$recipient_uuid}) + { + $anvil->Log->entry({source => $THIS_FILE, line => __LINE__, level => 0, 'print' => 1, key => "error_0388", variables => { uuid => $recipient_uuid }}); + $anvil->nice_exit({exit_code => 1}); + } + + $old_recipient_language = $anvil->data->{recipients}{recipient_uuid}{$recipient_uuid}{recipient_language}; + $old_recipient_level = $anvil->data->{recipients}{recipient_uuid}{$recipient_uuid}{recipient_level}; + $anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => { + old_recipient_language => $old_recipient_language, + old_recipient_level => $old_recipient_level, + }}); + + $anvil->data->{sys}{say_old_language} = $anvil->data->{sys}{languages}{$old_recipient_language}; + + # Get the translated log level name. + if ($old_recipient_level == 0) + { + # Ignore + $anvil->data->{sys}{say_old_level} = $anvil->Words->string({key => "unit_0023"}); + $anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => { + 'sys::say_old_level' => $anvil->data->{sys}{say_old_level}, + }}); + } + elsif ($old_recipient_level == 1) + { + # Critical + $anvil->data->{sys}{say_old_level} = $anvil->Words->string({key => "unit_0024"}); + $anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => { + 'sys::say_old_level' => $anvil->data->{sys}{say_old_level}, + }}); + } + elsif ($old_recipient_level == 2) + { + # Warning + $anvil->data->{sys}{say_old_level} = $anvil->Words->string({key => "unit_0025"}); + $anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => { + 'sys::say_old_level' => $anvil->data->{sys}{say_old_level}, + }}); + } + elsif ($old_recipient_level == 3) + { + # Notice + $anvil->data->{sys}{say_old_level} = $anvil->Words->string({key => "unit_0026"}); + $anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => { + 'sys::say_old_level' => $anvil->data->{sys}{say_old_level}, + }}); + } + elsif ($old_recipient_level == 4) + { + # Info + $anvil->data->{sys}{say_old_level} = $anvil->Words->string({key => "unit_0027"}); + $anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => { + 'sys::say_old_level' => $anvil->data->{sys}{say_old_level}, + }}); + } + } + + if ($confirm_needed) + { + my $key = ""; + if ($anvil->data->{switches}{add}) + { + $key = "message_0300"; + } + elsif ($anvil->data->{switches}{edit}) + { + $key = "message_0301"; + } + elsif ($anvil->data->{switches}{'delete'}) + { + $key = "message_0302"; + } + print $anvil->Words->string({key => $key, variables => { + new_name => $anvil->data->{switches}{"recipient-name"}, + new_email => $anvil->data->{switches}{"recipient-email"}, + new_language => $anvil->data->{sys}{say_new_language}, + new_level => $anvil->data->{sys}{say_new_level}, + old_name => $recipient_uuid ? $anvil->data->{recipients}{recipient_uuid}{$recipient_uuid}{recipient_name} : "", + old_email => $recipient_uuid ? $anvil->data->{recipients}{recipient_uuid}{$recipient_uuid}{recipient_email} : "", + old_language => $anvil->data->{sys}{say_old_language}, + old_level => $anvil->data->{sys}{say_old_level}, + }})."\n"; + my $answer = ; + chomp $answer; + $anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => { answer => $answer }}); + + if (lc($answer) !~ /^y/) + { + print $anvil->Words->string({key => "message_0022"})."\n"; + $anvil->nice_exit({exit_code => 0}); + } + } + + # Still alive? + if ($anvil->data->{switches}{add}) + { + # Create the new entry. + my ($mail_server_uuid) = $anvil->Database->insert_or_update_recipients({ + debug => 2, + recipient_name => $anvil->data->{switches}{"recipient-name"}, + recipient_email => $anvil->data->{switches}{"recipient-email"}, + recipient_language => $anvil->data->{switches}{"recipient-language"}, + recipient_level => $anvil->data->{switches}{"recipient-level"}, + }); + $anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => { mail_server_uuid => $mail_server_uuid }}); + print $anvil->Words->string({key => "message_0297", variables => { uuid => $mail_server_uuid }})."\n"; + $anvil->nice_exit({exit_code => 0}); + } + elsif ($anvil->data->{switches}{edit}) + { + my ($mail_server_uuid) = $anvil->Database->insert_or_update_recipients({ + debug => 2, + recipient_uuid => $anvil->data->{switches}{"recipient-uuid"}, + recipient_name => $anvil->data->{switches}{"recipient-name"}, + recipient_email => $anvil->data->{switches}{"recipient-email"}, + recipient_language => $anvil->data->{switches}{"recipient-language"}, + recipient_level => $anvil->data->{switches}{"recipient-level"}, + }); + $anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => { mail_server_uuid => $mail_server_uuid }}); + print $anvil->Words->string({key => "message_0298"})."\n"; + $anvil->nice_exit({exit_code => 0}); + } + elsif ($anvil->data->{switches}{'delete'}) + { + my ($mail_server_uuid) = $anvil->Database->insert_or_update_recipients({ + debug => 2, + 'delete' => 1, + recipient_uuid => $anvil->data->{switches}{"recipient-uuid"}, + }); + $anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => { mail_server_uuid => $mail_server_uuid }}); + print $anvil->Words->string({key => "message_0299"})."\n"; + $anvil->nice_exit({exit_code => 0}); + } + else + { + $anvil->data->{sys}{show}{mail_recipients} = 1; + $anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => { + 'sys::show::recipients' => $anvil->data->{sys}{show}{recipients}, + }}); + show_existing($anvil); + } return(0); } @@ -93,7 +301,155 @@ sub handle_mail_servers { my ($anvil) = @_; + ### Are we adding, editing or deleting? + # If we're adding or editing, all fields are required. + my $confirm_needed = 0; + if (($anvil->data->{switches}{add}) or ($anvil->data->{switches}{edit}) or ($anvil->data->{switches}{'delete'})) + { + # Did the user confirm yet? + if ((not $anvil->data->{switches}{'y'}) and (not $anvil->data->{switches}{'yes'})) + { + $confirm_needed = 1; + $anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => { confirm_needed => $confirm_needed }}); + } + } + + if (($anvil->data->{switches}{add}) or ($anvil->data->{switches}{edit})) + { + # Do we have what we need? + my $problem = 0; + foreach my $switch ("mail-server-address", "mail-server-port", "mail-server-username", "mail-server-password", "mail-server-security", "mail-server-authentication", "mail-server-helo-domain") + { + $anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => { + switch => $switch, + "switches::$switch" => $anvil->data->{switches}{$switch}, + }}); + if (not $anvil->data->{switches}{$switch}) + { + $anvil->Log->entry({source => $THIS_FILE, line => __LINE__, level => 0, 'print' => 1, key => "error_0387", variables => { switch => $switch }}); + $problem = 1; + $anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => { problem => $problem }}); + } + } + if ($problem) + { + $anvil->nice_exit({exit_code => 1}); + } + } + + # If we're editing or deleting, make sure we have a valid UUID. + my $mail_server_uuid = $anvil->data->{switches}{"mail-server-uuid"}; + if (($anvil->data->{switches}{edit}) or ($anvil->data->{switches}{'delete'})) + { + if (not $mail_server_uuid) + { + $anvil->Log->entry({source => $THIS_FILE, line => __LINE__, level => 0, 'print' => 1, key => "error_0387", variables => { switch => "mail-server-uuid" }}); + $anvil->nice_exit({exit_code => 1}); + } + if (not exists $anvil->data->{mail_servers}{mail_server}{$mail_server_uuid}) + { + $anvil->Log->entry({source => $THIS_FILE, line => __LINE__, level => 0, 'print' => 1, key => "error_0388", variables => { uuid => $mail_server_uuid }}); + $anvil->nice_exit({exit_code => 1}); + } + } + # Confirmed? + if ($confirm_needed) + { + my $key = ""; + if ($anvil->data->{switches}{add}) + { + $key = "message_0294"; + } + elsif ($anvil->data->{switches}{edit}) + { + $key = "message_0295"; + } + elsif ($anvil->data->{switches}{'delete'}) + { + $key = "message_0296"; + } + print $anvil->Words->string({key => $key, variables => { + new_address => $anvil->data->{switches}{"mail-server-address"}, + new_port => $anvil->data->{switches}{"mail-server-port"}, + new_username => $anvil->data->{switches}{"mail-server-username"}, + new_password => $anvil->data->{switches}{"mail-server-password"}, + new_authentication => $anvil->Words->string({key => $anvil->data->{sys}{say_new_auth}}), + new_security => $anvil->Words->string({key => $anvil->data->{sys}{say_new_security}}), + new_helo_domain => $anvil->data->{switches}{"mail-server-helo-domain"}, + old_address => $mail_server_uuid ? $anvil->data->{mail_servers}{mail_server}{$mail_server_uuid}{mail_server_address} : "", + old_port => $mail_server_uuid ? $anvil->data->{mail_servers}{mail_server}{$mail_server_uuid}{mail_server_port} : "", + old_username => $mail_server_uuid ? $anvil->data->{mail_servers}{mail_server}{$mail_server_uuid}{mail_server_username} : "", + old_password => $mail_server_uuid ? $anvil->data->{mail_servers}{mail_server}{$mail_server_uuid}{mail_server_password} : "", + old_authentication => $mail_server_uuid ? $anvil->Words->string({key => $anvil->data->{sys}{say_old_auth}}) : "", + old_security => $mail_server_uuid ? $anvil->Words->string({key => $anvil->data->{sys}{say_old_security}}) : "", + old_helo_domain => $mail_server_uuid ? $anvil->data->{mail_servers}{mail_server}{$mail_server_uuid}{mail_server_helo_domain} : "", + }})."\n"; + my $answer = ; + chomp $answer; + $anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => { answer => $answer }}); + + if (lc($answer) !~ /^y/) + { + print $anvil->Words->string({key => "message_0022"})."\n"; + $anvil->nice_exit({exit_code => 0}); + } + } + + # Still alive? + if ($anvil->data->{switches}{add}) + { + # Create the new entry. + my ($mail_server_uuid) = $anvil->Database->insert_or_update_mail_servers({ + debug => 2, + mail_server_address => $anvil->data->{switches}{"mail-server-address"}, + mail_server_port => $anvil->data->{switches}{"mail-server-port"}, + mail_server_username => $anvil->data->{switches}{"mail-server-username"}, + mail_server_password => $anvil->data->{switches}{"mail-server-password"}, + mail_server_authentication => $anvil->data->{switches}{"mail-server-authentication"}, + mail_server_security => $anvil->data->{switches}{"mail-server-security"}, + mail_server_helo_domain => $anvil->data->{switches}{"mail-server-helo-domain"}, + }); + $anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => { mail_server_uuid => $mail_server_uuid }}); + print $anvil->Words->string({key => "message_0297", variables => { uuid => $mail_server_uuid }})."\n"; + $anvil->nice_exit({exit_code => 0}); + } + elsif ($anvil->data->{switches}{edit}) + { + my ($mail_server_uuid) = $anvil->Database->insert_or_update_mail_servers({ + debug => 2, + mail_server_uuid => $anvil->data->{switches}{"mail-server-uuid"}, + mail_server_address => $anvil->data->{switches}{"mail-server-address"}, + mail_server_port => $anvil->data->{switches}{"mail-server-port"}, + mail_server_username => $anvil->data->{switches}{"mail-server-username"}, + mail_server_password => $anvil->data->{switches}{"mail-server-password"}, + mail_server_authentication => $anvil->data->{switches}{"mail-server-authentication"}, + mail_server_security => $anvil->data->{switches}{"mail-server-security"}, + mail_server_helo_domain => $anvil->data->{switches}{"mail-server-helo-domain"}, + }); + $anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => { mail_server_uuid => $mail_server_uuid }}); + print $anvil->Words->string({key => "message_0298"})."\n"; + $anvil->nice_exit({exit_code => 0}); + } + elsif ($anvil->data->{switches}{'delete'}) + { + my ($mail_server_uuid) = $anvil->Database->insert_or_update_mail_servers({ + debug => 2, + 'delete' => 1, + mail_server_uuid => $anvil->data->{switches}{"mail-server-uuid"}, + }); + $anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => { mail_server_uuid => $mail_server_uuid }}); + print $anvil->Words->string({key => "message_0299"})."\n"; + $anvil->nice_exit({exit_code => 0}); + } + else + { + $anvil->data->{sys}{show}{mail_servers} = 1; + $anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => { + 'sys::show::mail_servers' => $anvil->data->{sys}{show}{mail_servers}, + }}); + show_existing($anvil); + } return(0); } @@ -161,6 +517,9 @@ sub show_existing 's8:mail_server_helo_domain' => $mail_server_helo_domain, }}); + # mail_server_helo_domain is 'DELETED' if, well, deleted. + next if $mail_server_helo_domain eq "DELETED"; + if (length($mail_server_address) > $anvil->data->{longest}{mail_server_address}) { $anvil->data->{longest}{mail_server_address} = length($mail_server_address); @@ -291,7 +650,7 @@ sub show_existing my $recipient_email = $anvil->data->{recipients}{recipient_uuid}{$recipient_uuid}{recipient_email}; my $recipient_language = $anvil->data->{recipients}{recipient_uuid}{$recipient_uuid}{recipient_language}; my $say_language = $anvil->data->{sys}{languages}{$recipient_language}; - my $recipient_level = $anvil->data->{recipients}{recipient_uuid}{$recipient_uuid}{recipient_level}; + my $recipient_level = say_recipient_level($anvil, $anvil->data->{recipients}{recipient_uuid}{$recipient_uuid}{recipient_level}); $anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => { "s1:recipient_name" => $recipient_name, "s2:recipient_uuid" => $recipient_uuid, @@ -325,9 +684,9 @@ sub show_existing }}); } - if (length($anvil->data->{say_alert}{$recipient_level}) > $anvil->data->{longest}{recipient_alert_level}) + if (length($recipient_level) > $anvil->data->{longest}{recipient_alert_level}) { - $anvil->data->{longest}{recipient_alert_level} = length($anvil->data->{say_alert}{$recipient_level}); + $anvil->data->{longest}{recipient_alert_level} = length($recipient_level); $anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => { 'longest::recipient_alert_level' => $anvil->data->{longest}{recipient_alert_level}, }}); @@ -335,127 +694,183 @@ sub show_existing } # Now show the data. -# my $break_line = "+-".sprintf("%0${longest_anvil_name}d", 0); -# my $header_line = "| ".sprintf("%-${longest_anvil_name}s", $anvil_header)." "; -# my $blank_lead = "| ".sprintf("%-${longest_anvil_name}s", $anvil_header)." "; - print "-=] Mail Servers;\n"; - print "Address, Port, Login User, Password, Security, Authentication, HELO Domaon, Mail Server UUID\n"; - my $mail_servers = 0; - foreach my $mail_server_address (sort {$a cmp $b} keys %{$anvil->data->{mail_servers}{address_to_uuid}}) + if ($anvil->data->{sys}{show}{mail_servers}) { - my $mail_server_uuid = $anvil->data->{mail_servers}{address_to_uuid}{$mail_server_address}; - my $mail_server_port = $anvil->data->{mail_servers}{mail_server}{$mail_server_uuid}{mail_server_port}; - my $mail_server_username = $anvil->data->{mail_servers}{mail_server}{$mail_server_uuid}{mail_server_username}; - my $mail_server_password = $anvil->data->{mail_servers}{mail_server}{$mail_server_uuid}{mail_server_password}; - my $mail_server_security = $anvil->data->{mail_servers}{mail_server}{$mail_server_uuid}{mail_server_security}; - my $mail_server_authentication = $anvil->data->{mail_servers}{mail_server}{$mail_server_uuid}{mail_server_authentication}; - my $mail_server_helo_domain = $anvil->data->{mail_servers}{mail_server}{$mail_server_uuid}{mail_server_helo_domain}; - $anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => { - 's1:mail_server_address' => $mail_server_address, - 's2:mail_server_uuid' => $mail_server_uuid, - 's3:mail_server_port' => $mail_server_port, - 's4:mail_server_username' => $mail_server_username, - 's5:mail_server_password' => $anvil->Log->is_secure($mail_server_password), - 's6:mail_server_security' => $mail_server_security, - 's7:mail_server_authentication' => $mail_server_authentication, - 's8:mail_server_helo_domain' => $mail_server_helo_domain, - }}); - - print $mail_server_address.", ".$mail_server_port.", ".$mail_server_username.", ".$mail_server_password.", ".$mail_server_security.", ".$mail_server_authentication.", ".$mail_server_helo_domain.", ".$mail_server_uuid."\n"; - $mail_servers++; + # my $break_line = "+-".sprintf("%0${longest_anvil_name}d", 0); + # my $header_line = "| ".sprintf("%-${longest_anvil_name}s", $anvil_header)." "; + # my $blank_lead = "| ".sprintf("%-${longest_anvil_name}s", $anvil_header)." "; + print "-=] Mail Servers;\n"; + print "Address, Port, Login User, Password, Security, Authentication, HELO Domaon, Mail Server UUID\n"; + my $mail_servers = 0; + foreach my $mail_server_address (sort {$a cmp $b} keys %{$anvil->data->{mail_servers}{address_to_uuid}}) + { + my $mail_server_uuid = $anvil->data->{mail_servers}{address_to_uuid}{$mail_server_address}; + my $mail_server_port = $anvil->data->{mail_servers}{mail_server}{$mail_server_uuid}{mail_server_port}; + my $mail_server_username = $anvil->data->{mail_servers}{mail_server}{$mail_server_uuid}{mail_server_username}; + my $mail_server_password = $anvil->data->{mail_servers}{mail_server}{$mail_server_uuid}{mail_server_password}; + my $mail_server_security = $anvil->data->{mail_servers}{mail_server}{$mail_server_uuid}{mail_server_security}; + my $mail_server_authentication = $anvil->data->{mail_servers}{mail_server}{$mail_server_uuid}{mail_server_authentication}; + my $mail_server_helo_domain = $anvil->data->{mail_servers}{mail_server}{$mail_server_uuid}{mail_server_helo_domain}; + $anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => { + 's1:mail_server_address' => $mail_server_address, + 's2:mail_server_uuid' => $mail_server_uuid, + 's3:mail_server_port' => $mail_server_port, + 's4:mail_server_username' => $mail_server_username, + 's5:mail_server_password' => $anvil->Log->is_secure($mail_server_password), + 's6:mail_server_security' => $mail_server_security, + 's7:mail_server_authentication' => $mail_server_authentication, + 's8:mail_server_helo_domain' => $mail_server_helo_domain, + }}); + next if $mail_server_helo_domain eq "DELETED"; + + print $mail_server_address.", ".$mail_server_port.", ".$mail_server_username.", ".$mail_server_password.", ".$mail_server_security.", ".$mail_server_authentication.", ".$mail_server_helo_domain.", ".$mail_server_uuid."\n"; + $mail_servers++; + } + if (not $mail_servers) + { + print "# No mail servers configured yet!\n"; + } + print "\n"; } - if (not $mail_servers) + + if ($anvil->data->{sys}{show}{recipients}) { - print "No mail servers configured yet!\n"; + print "-=] Recipients;\n"; + print "Name, Email, Alert Level, Language, Recipient UUID\n"; + my $recipients = 0; + foreach my $recipient_name (sort {$a cmp $b} keys %{$anvil->data->{recipients}{name_to_uuid}}) + { + my $recipient_uuid = $anvil->data->{recipients}{name_to_uuid}{$recipient_name}; + my $recipient_email = $anvil->data->{recipients}{recipient_uuid}{$recipient_uuid}{recipient_email}; + my $recipient_language = $anvil->data->{recipients}{recipient_uuid}{$recipient_uuid}{recipient_language}; + my $say_language = $anvil->data->{sys}{languages}{$recipient_language}; + my $recipient_level = $anvil->data->{recipients}{recipient_uuid}{$recipient_uuid}{recipient_level}; + $anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => { + "s1:recipient_name" => $recipient_name, + "s2:recipient_uuid" => $recipient_uuid, + "s3:recipient_email" => $recipient_email, + "s4:recipient_language" => $recipient_language, + "s5:say_language" => $say_language, + "s6:recipient_level" => $recipient_level, + }}); + + # Get the translated log level name. + my $say_recipient_level = say_recipient_level($anvil, $recipient_level); + + print $recipient_name.", ".$recipient_email.", ".$say_recipient_level.", ".$say_language.", ".$recipient_uuid."\n"; + $recipients++; + } + if (not $recipients) + { + print "# No alert recipients added yet!\n"; + } + print "\n"; } - print "\n"; - print "-=] Recipients;\n"; - print "Name, Email, Alert Level, Language, Recipient UUID\n"; - my $recipients = 0; - foreach my $recipient_name (sort {$a cmp $b} keys %{$anvil->data->{recipients}{name_to_uuid}}) + + if ($anvil->data->{sys}{show}{notifications}) { - my $recipient_uuid = $anvil->data->{recipients}{name_to_uuid}{$recipient_name}; - my $recipient_email = $anvil->data->{recipients}{recipient_uuid}{$recipient_uuid}{recipient_email}; - my $recipient_language = $anvil->data->{recipients}{recipient_uuid}{$recipient_uuid}{recipient_language}; - my $say_language = $anvil->data->{sys}{languages}{$recipient_language}; - my $recipient_level = $anvil->data->{recipients}{recipient_uuid}{$recipient_uuid}{recipient_level}; - $anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => { - "s1:recipient_name" => $recipient_name, - "s2:recipient_uuid" => $recipient_uuid, - "s3:recipient_email" => $recipient_email, - "s4:recipient_language" => $recipient_language, - "s5:say_language" => $say_language, - "s6:recipient_level" => $recipient_level, - }}); - - print $recipient_name.", ".$recipient_email.", ".$anvil->data->{say_alert}{$recipient_level}.", ".$say_language.", ".$recipient_uuid."\n"; - $recipients++; + print "-=] Notification Over-rides;\n"; + print "Recipient, Host, Anvil!, Alert Level, Notification UUID\n"; + my $notifications = 0; + foreach my $recipient_name (sort {$a cmp $b} keys %{$anvil->data->{notifications}{name_to_uuid}}) + { + my $notification_uuid = $anvil->data->{notifications}{name_to_uuid}{$recipient_name}; + my $say_recipient = $anvil->data->{notifications}{notification_uuid}{$notification_uuid}{recipient_name}; + my $say_anvil_name = $anvil->data->{notifications}{notification_uuid}{$notification_uuid}{anvil_name}; + my $host_uuid = $anvil->data->{notifications}{notification_uuid}{$notification_uuid}{notification_host_uuid}; + my $short_host_name = $anvil->data->{hosts}{host_uuid}{$host_uuid}{short_host_name}; + my $alert_level = $anvil->data->{notifications}{notification_uuid}{$notification_uuid}{notification_alert_level}; + $anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => { + 's1:notification_uuid' => $notification_uuid, + 's2:say_recipient' => $say_recipient, + 's3:say_anvil_name' => $say_anvil_name, + 's4:alert_level' => $alert_level, + }}); + + print $say_recipient.", ".$short_host_name.", ".$say_anvil_name.", ".$anvil->data->{say_alert}{$alert_level}.", ".$notification_uuid."\n"; + $notifications++; + } + if (not $notifications) + { + print "# No notification over-rides found.\n"; + } + print "\n"; } - if (not $recipients) + + # Lastly, show machines. + if ($anvil->data->{sys}{show}{systems}) { - print "No alert recipients added yet!\n"; + print "-=] Striker Dashboards;\n"; + foreach my $host_name (sort {$a cmp $b} keys %{$anvil->data->{sys}{hosts}{by_name}}) + { + my $host_uuid = $anvil->data->{sys}{hosts}{by_name}{$host_name}; + my $host_type = $anvil->data->{hosts}{host_uuid}{$host_uuid}{host_type}; + next if $host_type ne "striker"; + $anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => { + 's1:host_name' => $host_name, + 's2:host_uuid' => $host_uuid, + }}); + + print "- ".$host_name.", UUID: [".$host_uuid."]\n"; + } + print "\n"; + print "-=] Anvil! Nodes;\n"; + foreach my $anvil_name (sort {$a cmp $b} keys %{$anvil->data->{anvils}{anvil_name}}) + { + my $anvil_uuid = $anvil->data->{anvils}{anvil_name}{$anvil_name}{anvil_uuid}; + my $anvil_description = $anvil->data->{anvils}{anvil_name}{$anvil_name}{anvil_description}; + my $anvil_node1_host_uuid = $anvil->data->{anvils}{anvil_name}{$anvil_name}{anvil_node1_host_uuid}; + my $anvil_node2_host_uuid = $anvil->data->{anvils}{anvil_name}{$anvil_name}{anvil_node2_host_uuid}; + my $anvil_dr1_host_uuid = $anvil->data->{anvils}{anvil_name}{$anvil_name}{anvil_dr1_host_uuid}; + my $say_dr1_name = $anvil_dr1_host_uuid ? $anvil->data->{hosts}{host_uuid}{$anvil_dr1_host_uuid}{short_host_name} : "--"; + my $say_dr1_uuid = $anvil_dr1_host_uuid ? $anvil_dr1_host_uuid : "--"; + print "- Name: [".$anvil_name."], UUID: [".$anvil_uuid."], Description: [".$anvil_uuid."]\n"; + print " - Node 1: .. [".$anvil->data->{hosts}{host_uuid}{$anvil_node1_host_uuid}{short_host_name}."], UUID: [".$anvil_node1_host_uuid."]\n"; + print " - Node 2: .. [".$anvil->data->{hosts}{host_uuid}{$anvil_node2_host_uuid}{short_host_name}."], UUID: [".$anvil_node2_host_uuid."]\n"; + print " - DR Host 1: [".$say_dr1_name."], UUID: [".$say_dr1_uuid."]\n"; + } } - print "\n"; - print "-=] Notification Over-rides;\n"; - print "Recipient, Host, Anvil!, Alert Level, Notification UUID\n"; - my $notifications = 0; - foreach my $recipient_name (sort {$a cmp $b} keys %{$anvil->data->{notifications}{name_to_uuid}}) + return(0); +} + +sub say_recipient_level +{ + my ($anvil, $recipient_level) = @_; + + my $say_recipient_level = $recipient_level; + if ($recipient_level == 0) { - my $notification_uuid = $anvil->data->{notifications}{name_to_uuid}{$recipient_name}; - my $say_recipient = $anvil->data->{notifications}{notification_uuid}{$notification_uuid}{recipient_name}; - my $say_anvil_name = $anvil->data->{notifications}{notification_uuid}{$notification_uuid}{anvil_name}; - my $host_uuid = $anvil->data->{notifications}{notification_uuid}{$notification_uuid}{notification_host_uuid}; - my $short_host_name = $anvil->data->{hosts}{host_uuid}{$host_uuid}{short_host_name}; - my $alert_level = $anvil->data->{notifications}{notification_uuid}{$notification_uuid}{notification_alert_level}; - $anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => { - 's1:notification_uuid' => $notification_uuid, - 's2:say_recipient' => $say_recipient, - 's3:say_anvil_name' => $say_anvil_name, - 's4:alert_level' => $alert_level, - }}); - - print $say_recipient.", ".$short_host_name.", ".$say_anvil_name.", ".$anvil->data->{say_alert}{$alert_level}.", ".$notification_uuid."\n"; - $notifications++; + # Ignore + $say_recipient_level .= " (".$anvil->Words->string({key => "unit_0023"}).")"; + $anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => { say_recipient_level => $say_recipient_level }}); } - if (not $notifications) + elsif ($recipient_level == 1) { - print "No notification over-rides found.\n"; + # Critical + $say_recipient_level .= " (".$anvil->Words->string({key => "unit_0024"}).")"; + $anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => { say_recipient_level => $say_recipient_level }}); } - - # Lastly, show machines. - print "\n"; - print "-=] Striker Dashboards;\n"; - foreach my $host_name (sort {$a cmp $b} keys %{$anvil->data->{sys}{hosts}{by_name}}) + elsif ($recipient_level == 2) { - my $host_uuid = $anvil->data->{sys}{hosts}{by_name}{$host_name}; - my $host_type = $anvil->data->{hosts}{host_uuid}{$host_uuid}{host_type}; - next if $host_type ne "striker"; - $anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => { - 's1:host_name' => $host_name, - 's2:host_uuid' => $host_uuid, - }}); - - print "- ".$host_name.", UUID: [".$host_uuid."]\n"; + # Warning + $say_recipient_level .= " (".$anvil->Words->string({key => "unit_0025"}).")"; + $anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => { say_recipient_level => $say_recipient_level }}); } - print "\n"; - print "-=] Anvil! Nodes;\n"; - foreach my $anvil_name (sort {$a cmp $b} keys %{$anvil->data->{anvils}{anvil_name}}) + elsif ($recipient_level == 3) { - my $anvil_uuid = $anvil->data->{anvils}{anvil_name}{$anvil_name}{anvil_uuid}; - my $anvil_description = $anvil->data->{anvils}{anvil_name}{$anvil_name}{anvil_description}; - my $anvil_node1_host_uuid = $anvil->data->{anvils}{anvil_name}{$anvil_name}{anvil_node1_host_uuid}; - my $anvil_node2_host_uuid = $anvil->data->{anvils}{anvil_name}{$anvil_name}{anvil_node2_host_uuid}; - my $anvil_dr1_host_uuid = $anvil->data->{anvils}{anvil_name}{$anvil_name}{anvil_dr1_host_uuid}; - my $say_dr1_name = $anvil_dr1_host_uuid ? $anvil->data->{hosts}{host_uuid}{$anvil_dr1_host_uuid}{short_host_name} : "--"; - my $say_dr1_uuid = $anvil_dr1_host_uuid ? $anvil_dr1_host_uuid : "--"; - print "- Name: [".$anvil_name."], UUID: [".$anvil_uuid."], Description: [".$anvil_uuid."]\n"; - print " - Node 1: .. [".$anvil->data->{hosts}{host_uuid}{$anvil_node1_host_uuid}{short_host_name}."], UUID: [".$anvil_node1_host_uuid."]\n"; - print " - Node 2: .. [".$anvil->data->{hosts}{host_uuid}{$anvil_node2_host_uuid}{short_host_name}."], UUID: [".$anvil_node2_host_uuid."]\n"; - print " - DR Host 1: [".$say_dr1_name."], UUID: [".$say_dr1_uuid."]\n"; + # Notice + $say_recipient_level .= " (".$anvil->Words->string({key => "unit_0026"}).")"; + $anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => { say_recipient_level => $say_recipient_level }}); + } + elsif ($recipient_level == 4) + { + # Info + $say_recipient_level .= " (".$anvil->Words->string({key => "unit_0027"}).")"; + $anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => { say_recipient_level => $say_recipient_level }}); } - return(0); + return($say_recipient_level); } # This sanity checks input switches. By necessity, this also loads data from the database. @@ -474,6 +889,14 @@ sub check_switches ### Now sanity check my $problem = 0; + # These will be used to limit the display of things, if/when appropriate + $anvil->data->{sys}{show}{mail_servers} = 0; + $anvil->data->{sys}{show}{recipients} = 0; + $anvil->data->{sys}{show}{notifications} = 0; + $anvil->data->{sys}{show}{systems} = 0; + $anvil->data->{sys}{say_old_security} = ""; + $anvil->data->{sys}{say_old_auth} = ""; + # Validate UUIDs. foreach my $switch ("mail-server-uuid", "notification-uuid", "recipient-uuid", "notification-recipient-uuid", "notification-host-uuid") { @@ -481,14 +904,98 @@ sub check_switches if (($anvil->data->{switches}{$switch}) && (not $anvil->Validate->uuid({uuid => $anvil->data->{switches}{$switch}}))) { # Invalid UUID. - $anvil->Log->entry({source => $THIS_FILE, line => __LINE__, level => 2, key => "error_0380", variables => { + $anvil->Log->entry({source => $THIS_FILE, line => __LINE__, level => 0, 'print' => 1, key => "error_0380", variables => { uuid => $anvil->data->{switches}{$switch}, - switch => "--".$switch, + switch => $switch, }}); $problem = 1; $anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => { problem => $problem }}); } + + # If it's a Security or Authentication UUID, translate the strings. + if ((not $problem) && ($switch eq "mail-server-uuid") && ($anvil->data->{switches}{$switch})) + { + my $mail_server_uuid = $anvil->data->{switches}{$switch}; + my $mail_server_security = $anvil->data->{mail_servers}{mail_server}{$mail_server_uuid}{mail_server_security}; + my $mail_server_authentication = $anvil->data->{mail_servers}{mail_server}{$mail_server_uuid}{mail_server_authentication}; + $anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => { + mail_server_uuid => $mail_server_uuid, + mail_server_security => $mail_server_security, + mail_server_authentication => $mail_server_authentication, + }}); + + if ($mail_server_security eq "none") + { + $anvil->data->{sys}{say_old_security} = "name_0007"; + $anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => { + "sys::say_old_security" => $anvil->data->{sys}{say_old_security}, + }}); + } + elsif ($mail_server_security eq "starttls") + { + $anvil->data->{sys}{say_old_security} = "name_0008"; + $anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => { + "sys::say_old_security" => $anvil->data->{sys}{say_old_security}, + }}); + } + elsif ($mail_server_security eq "ssl_tls") + { + $anvil->data->{sys}{say_old_security} = "name_0009"; + $anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => { + "sys::say_old_security" => $anvil->data->{sys}{say_old_security}, + }}); + } + + if ($mail_server_authentication eq "normal_password") + { + # normal_password + $anvil->data->{sys}{say_old_auth} = "name_0001"; + $anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => { + "sys::say_old_auth" => $anvil->data->{sys}{say_old_auth}, + }}); + } + elsif ($mail_server_authentication eq "encrypted_password") + { + # encrypted_password + $anvil->data->{sys}{say_old_auth} = "name_0002"; + $anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => { + "sys::say_old_auth" => $anvil->data->{sys}{say_old_auth}, + }}); + } + elsif ($mail_server_authentication eq "kerberos_gssapi") + { + # kerberos_gssapi + $anvil->data->{sys}{say_old_auth} = "name_0003"; + $anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => { + "sys::say_old_auth" => $anvil->data->{sys}{say_old_auth}, + }}); + } + elsif ($mail_server_authentication eq "ntlm") + { + # ntlm, no need to translate + $anvil->data->{sys}{say_old_auth} = "name_0004"; + $anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => { + "sys::say_old_auth" => $anvil->data->{sys}{say_old_auth}, + }}); + } + elsif ($mail_server_authentication eq "tls_certificate") + { + # tls_certificate + $anvil->data->{sys}{say_old_auth} = "name_0005"; + $anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => { + "sys::say_old_auth" => $anvil->data->{sys}{say_old_auth}, + }}); + } + elsif ($mail_server_authentication eq "oauth2") + { + # oauth2, no need to translate + $anvil->data->{sys}{say_old_auth} = "name_0006"; + $anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => { + "sys::say_old_auth" => $anvil->data->{sys}{say_old_auth}, + }}); + } + } } # Validate domain or IP data. @@ -500,9 +1007,9 @@ sub check_switches # Make sure it's a domain or IP address. if ((not $anvil->Validate->domain_name({name => $anvil->data->{switches}{$switch}})) && (not $anvil->Validate->ip({ip => $anvil->data->{switches}{$switch}}))) { - $anvil->Log->entry({source => $THIS_FILE, line => __LINE__, level => 2, key => "error_0381", variables => { + $anvil->Log->entry({source => $THIS_FILE, line => __LINE__, level => 0, 'print' => 1, key => "error_0381", variables => { name => $anvil->data->{switches}{$switch}, - switch => "--".$switch, + switch => $switch, }}); $problem = 1; @@ -515,13 +1022,19 @@ sub check_switches foreach my $switch ("notification-alert-level", "recipient-level") { $anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => { switch => $switch }}); - if ($anvil->data->{switches}{$switch}) + if ($anvil->data->{switches}{$switch} ne "") { # If they used a level name, convert it to a number. + # 0 = "ignore" # 1 = "critical" alerts only # 2 = "warning" and critical alerts # 3 = "notice", warning and critical alerts # 4 = "info"; All alerts. This generates almost constant alerts! + if ($anvil->data->{switches}{$switch} eq "ignore") + { + $anvil->data->{switches}{$switch} = 0; + $anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => { "switches::".$switch => $anvil->data->{switches}{$switch} }}); + } if ($anvil->data->{switches}{$switch} eq "critical") { $anvil->data->{switches}{$switch} = 1; @@ -544,12 +1057,12 @@ sub check_switches } if (($anvil->data->{switches}{$switch} =~ /\D/) or - ($anvil->data->{switches}{$switch} < 1) or + ($anvil->data->{switches}{$switch} < 0) or ($anvil->data->{switches}{$switch} > 4)) { - $anvil->Log->entry({source => $THIS_FILE, line => __LINE__, level => 2, key => "error_0382", variables => { + $anvil->Log->entry({source => $THIS_FILE, line => __LINE__, level => 0, 'print' => 1, key => "error_0382", variables => { level => $anvil->data->{switches}{$switch}, - switch => "--".$switch, + switch => $switch, }}); $problem = 1; @@ -566,7 +1079,7 @@ sub check_switches ($anvil->data->{switches}{"mail-server-port"} < 1) or ($anvil->data->{switches}{"mail-server-port"} > 65535)) { - $anvil->Log->entry({source => $THIS_FILE, line => __LINE__, level => 2, key => "error_0383", variables => { + $anvil->Log->entry({source => $THIS_FILE, line => __LINE__, level => 0, 'print' => 1, key => "error_0383", variables => { port => $anvil->data->{switches}{"mail-server-port"}, switch => "--mail-server-port", }}); @@ -577,14 +1090,37 @@ sub check_switches } # Make sure mail server security is correct. + $anvil->data->{sys}{say_new_security} = ""; if ($anvil->data->{switches}{"mail-server-security"}) { $anvil->data->{switches}{"mail-server-security"} = lc($anvil->data->{switches}{"mail-server-security"}); - if (($anvil->data->{switches}{"mail-server-security"} ne "none") && - ($anvil->data->{switches}{"mail-server-security"} ne "starttls") && - ($anvil->data->{switches}{"mail-server-security"} ne "tls-ssl")) + $anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => { + "switches::mail-server-security" => $anvil->data->{switches}{"mail-server-security"}, + }}); + if ($anvil->data->{switches}{"mail-server-security"} eq "none") { - $anvil->Log->entry({source => $THIS_FILE, line => __LINE__, level => 2, key => "error_0384", variables => { + $anvil->data->{sys}{say_new_security} = "name_0007"; + $anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => { + "sys::say_new_security" => $anvil->data->{sys}{say_new_security}, + }}); + } + elsif ($anvil->data->{switches}{"mail-server-security"} eq "starttls") + { + $anvil->data->{sys}{say_new_security} = "name_0008"; + $anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => { + "sys::say_new_security" => $anvil->data->{sys}{say_new_security}, + }}); + } + elsif ($anvil->data->{switches}{"mail-server-security"} eq "tls-ssl") + { + $anvil->data->{sys}{say_new_security} = "name_0009"; + $anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => { + "sys::say_new_security" => $anvil->data->{sys}{say_new_security}, + }}); + } + else + { + $anvil->Log->entry({source => $THIS_FILE, line => __LINE__, level => 0, 'print' => 1, key => "error_0384", variables => { security => $anvil->data->{switches}{"mail-server-security"}, }}); @@ -593,26 +1129,87 @@ sub check_switches } } + $anvil->data->{sys}{say_new_auth} = ""; if ($anvil->data->{switches}{"mail-server-authentication"}) { $anvil->data->{switches}{"mail-server-authentication"} = lc($anvil->data->{switches}{"mail-server-authentication"}); - if (($anvil->data->{switches}{"mail-server-authentication"} ne "none") && - ($anvil->data->{switches}{"mail-server-authentication"} ne "plain-text") && - ($anvil->data->{switches}{"mail-server-authentication"} ne "encrypted")) + $anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => { + "switches::mail-server-authentication" => $anvil->data->{switches}{"mail-server-authentication"}, + }}); + if ($anvil->data->{switches}{"mail-server-authentication"} eq "none") { - $anvil->Log->entry({source => $THIS_FILE, line => __LINE__, level => 2, key => "error_0385", variables => { - auth => $anvil->data->{switches}{"mail-server-authentication"}, + # normal_password + $anvil->data->{sys}{say_new_auth} = "name_0001"; + $anvil->data->{switches}{"mail-server-authentication"} = "normal_password"; + $anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => { + "sys::say_new_auth" => $anvil->data->{sys}{say_new_auth}, + "switches::mail-server-authentication" => $anvil->data->{switches}{"mail-server-authentication"}, }}); - + } + elsif ($anvil->data->{switches}{"mail-server-authentication"} eq "encrypted") + { + # encrypted_password + $anvil->data->{sys}{say_new_auth} = "name_0002"; + $anvil->data->{switches}{"mail-server-authentication"} = "encrypted_password"; + $anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => { + "sys::say_new_auth" => $anvil->data->{sys}{say_new_auth}, + "switches::mail-server-authentication" => $anvil->data->{switches}{"mail-server-authentication"}, + }}); + } + elsif ($anvil->data->{switches}{"mail-server-authentication"} eq "kerberos") + { + # kerberos_gssapi + $anvil->data->{sys}{say_new_auth} = "name_0003"; + $anvil->data->{switches}{"mail-server-authentication"} = "kerberos_gssapi"; + $anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => { + "sys::say_new_auth" => $anvil->data->{sys}{say_new_auth}, + "switches::mail-server-authentication" => $anvil->data->{switches}{"mail-server-authentication"}, + }}); + } + elsif ($anvil->data->{switches}{"mail-server-authentication"} eq "ntlm") + { + # ntlm, no need to translate + $anvil->data->{sys}{say_new_auth} = "name_0004"; + $anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => { + "sys::say_new_auth" => $anvil->data->{sys}{say_new_auth}, + }}); + } + elsif ($anvil->data->{switches}{"mail-server-authentication"} eq "tls") + { + # tls_certificate + $anvil->data->{sys}{say_new_auth} = "name_0005"; + $anvil->data->{switches}{"mail-server-authentication"} = "tls_certificate"; + $anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => { + "sys::say_new_auth" => $anvil->data->{sys}{say_new_auth}, + "switches::mail-server-authentication" => $anvil->data->{switches}{"mail-server-authentication"}, + }}); + } + elsif ($anvil->data->{switches}{"mail-server-authentication"} eq "oauth2") + { + # oauth2, no need to translate + $anvil->data->{sys}{say_new_auth} = "name_0006"; + $anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => { + "sys::say_new_auth" => $anvil->data->{sys}{say_new_auth}, + }}); + } + else + { + # Not valid $problem = 1; $anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => { problem => $problem }}); + $anvil->Log->entry({source => $THIS_FILE, line => __LINE__, level => 0, 'print' => 1, key => "error_0385", variables => { + auth => $anvil->data->{switches}{"mail-server-authentication"}, + }}); } } + + $anvil->data->{sys}{say_new_language} = ""; + $anvil->data->{sys}{say_new_level} = ""; if ($anvil->data->{switches}{"recipient-email"}) { if (not $anvil->Validate->email({email => $anvil->data->{switches}{"recipient-email"}})) { - $anvil->Log->entry({source => $THIS_FILE, line => __LINE__, level => 2, key => "error_0386", variables => { + $anvil->Log->entry({source => $THIS_FILE, line => __LINE__, level => 0, 'print' => 1, key => "error_0386", variables => { email => $anvil->data->{switches}{"recipient-email"}, }}); @@ -620,10 +1217,73 @@ sub check_switches $anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => { problem => $problem }}); } } - + if (($anvil->data->{switches}{"recipient-level"} ne "") and ($anvil->data->{switches}{"recipient-level"} ne "#!SET!#")) + { + if (($anvil->data->{switches}{"recipient-level"} =~ /\D/) or ($anvil->data->{switches}{"recipient-level"} < 0) or ($anvil->data->{switches}{"recipient-level"} > 4)) + { + # Invalid. + $anvil->Log->entry({source => $THIS_FILE, line => __LINE__, level => 0, 'print' => 1, key => "error_0386", variables => { + email => $anvil->data->{switches}{"recipient-email"}, + }}); + + $problem = 1; + $anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => { problem => $problem }}); + } + + # Get the translated log level name. + if ($anvil->data->{switches}{"recipient-level"} == 0) + { + # Ignore + $anvil->data->{sys}{say_new_level} = $anvil->Words->string({key => "unit_0023"}); + $anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => { + 'sys::say_new_level' => $anvil->data->{sys}{say_new_level}, + }}); + } + elsif ($anvil->data->{switches}{"recipient-level"} == 1) + { + # Critical + $anvil->data->{sys}{say_new_level} = $anvil->Words->string({key => "unit_0024"}); + $anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => { + 'sys::say_new_level' => $anvil->data->{sys}{say_new_level}, + }}); + } + elsif ($anvil->data->{switches}{"recipient-level"} == 2) + { + # Warning + $anvil->data->{sys}{say_new_level} = $anvil->Words->string({key => "unit_0025"}); + $anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => { + 'sys::say_new_level' => $anvil->data->{sys}{say_new_level}, + }}); + } + elsif ($anvil->data->{switches}{"recipient-level"} == 3) + { + # Notice + $anvil->data->{sys}{say_new_level} = $anvil->Words->string({key => "unit_0026"}); + $anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => { + 'sys::say_new_level' => $anvil->data->{sys}{say_new_level}, + }}); + } + elsif ($anvil->data->{switches}{"recipient-level"} == 4) + { + # Info + $anvil->data->{sys}{say_new_level} = $anvil->Words->string({key => "unit_0027"}); + $anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => { + 'sys::say_new_level' => $anvil->data->{sys}{say_new_level}, + }}); + } + } + # Later, we'll need to parse the language file, for now, we always force 'en_CA'. $anvil->data->{switches}{"recipient-language"} = "en_CA"; + # Get the name of the language. + my $recipient_language = $anvil->data->{switches}{"recipient-language"}; + $anvil->data->{sys}{say_new_language} = $anvil->data->{sys}{languages}{$recipient_language}; + $anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => { + recipient_language => $recipient_language, + 'sys::say_new_language' => $anvil->data->{sys}{say_new_language}, + }}); + # If there's a problem, exit now. if ($problem) {