#!/usr/bin/perl use strict; use warnings; use Anvil::Tools; use Data::Dumper; use Text::Diff; $| = 1; my $THIS_FILE = ($0 =~ /^.*\/(.*)$/)[0]; my $running_directory = ($0 =~ /^(.*?)\/$THIS_FILE$/)[0]; if (($running_directory =~ /^\./) && ($ENV{PWD})) { $running_directory =~ s/^\./$ENV{PWD}/; } my $anvil = Anvil::Tools->new(); # Get a list of all interfaces with IP addresses. $anvil->Get->switches({list => [ "add", "edit", "delete", "mail-servers", "mail-server-uuid", "mail-server-address", "mail-server-port", "mail-server-username", "mail-server-password", "mail-server-security", "mail-server-authentication", "mail-server-helo-domain", "notifications", "notification-uuid", "notification-recipient-uuid", "notification-host-uuid", "notification-alert-level", "recipients", "recipient-uuid", "recipient-name", "recipient-email", "recipient-language", "recipient-level", ]}); $anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => $anvil->data->{switches}}); $anvil->Database->connect(); $anvil->Log->entry({source => $THIS_FILE, line => __LINE__, level => 2, secure => 0, key => "log_0132" }); if (not $anvil->data->{sys}{database}{connections}) { # No databases, exit. $anvil->Log->entry({ source => $THIS_FILE, line => __LINE__, level => 0, 'print' => 1, priority => "err", key => "error_0003" }); $anvil->nice_exit({ exit_code => 1 }); } check_switches($anvil); if ($anvil->data->{switches}{"mail-servers"}) { handle_mail_servers($anvil); } elsif ($anvil->data->{switches}{"notifications"}) { handle_notifications($anvil); } elsif ($anvil->data->{switches}{"recipients"}) { handle_recipients($anvil); } else { show_existing($anvil); } $anvil->nice_exit({exit_code => 0}); ############################################################################################################# # Functions # ############################################################################################################# sub recipients { my ($anvil) = @_; return(0); } sub handle_mail_servers { my ($anvil) = @_; return(0); } sub handle_notifications { my ($anvil) = @_; return(0); } # Show existing mail servers. sub show_existing { my ($anvil) = @_; # Show mail servers $anvil->data->{longest}{mail_server_address} = 0; $anvil->data->{longest}{mail_server_port} = 0; $anvil->data->{longest}{mail_server_username} = 0; $anvil->data->{longest}{mail_server_password} = 0; $anvil->data->{longest}{mail_server_security} = 0; $anvil->data->{longest}{mail_server_authentication} = 0; $anvil->data->{longest}{mail_server_helo_domain} = 0; $anvil->data->{longest}{notification_recipient_name} = 0; $anvil->data->{longest}{notification_host_name} = 0; $anvil->data->{longest}{notification_anvil_name} = 0; $anvil->data->{longest}{notification_alert_level} = 0; $anvil->data->{longest}{recipient_name} = 0; $anvil->data->{longest}{recipient_email} = 0; $anvil->data->{longest}{recipient_language} = 0; $anvil->data->{longest}{recipient_alert_level} = 0; $anvil->data->{say_alert}{1} = "1 (".$anvil->Words->string({key => "unit_0024"}).")"; $anvil->data->{say_alert}{2} = "2 (".$anvil->Words->string({key => "unit_0025"}).")"; $anvil->data->{say_alert}{3} = "3 (".$anvil->Words->string({key => "unit_0026"}).")"; $anvil->data->{say_alert}{4} = "4 (".$anvil->Words->string({key => "unit_0027"}).")"; $anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => { 'say_alert::1' => $anvil->data->{say_alert}{1}, 'say_alert::2' => $anvil->data->{say_alert}{2}, 'say_alert::3' => $anvil->data->{say_alert}{3}, 'say_alert::4' => $anvil->data->{say_alert}{4}, }}); # Get longest counts. 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, }}); if (length($mail_server_address) > $anvil->data->{longest}{mail_server_address}) { $anvil->data->{longest}{mail_server_address} = length($mail_server_address); $anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => { 'longest::mail_server_address' => $anvil->data->{longest}{mail_server_address}, }}); } if (length($mail_server_port) > $anvil->data->{longest}{mail_server_port}) { $anvil->data->{longest}{mail_server_port} = length($mail_server_port); $anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => { 'longest::mail_server_port' => $anvil->data->{longest}{mail_server_port}, }}); } if (length($mail_server_username) > $anvil->data->{longest}{mail_server_username}) { $anvil->data->{longest}{mail_server_username} = length($mail_server_username); $anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => { 'longest::mail_server_username' => $anvil->data->{longest}{mail_server_username}, }}); } if (length($mail_server_password) > $anvil->data->{longest}{mail_server_password}) { $anvil->data->{longest}{mail_server_password} = length($mail_server_password); $anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => { 'longest::mail_server_password' => $anvil->data->{longest}{mail_server_password}, }}); } if (length($mail_server_security) > $anvil->data->{longest}{mail_server_security}) { $anvil->data->{longest}{mail_server_security} = length($mail_server_security); $anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => { 'longest::mail_server_security' => $anvil->data->{longest}{mail_server_security}, }}); } if (length($mail_server_authentication) > $anvil->data->{longest}{mail_server_authentication}) { $anvil->data->{longest}{mail_server_authentication} = length($mail_server_authentication); $anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => { 'longest::mail_server_authentication' => $anvil->data->{longest}{mail_server_authentication}, }}); } if (length($mail_server_helo_domain) > $anvil->data->{longest}{mail_server_helo_domain}) { $anvil->data->{longest}{mail_server_helo_domain} = length($mail_server_helo_domain); $anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => { 'longest::mail_server_helo_domain' => $anvil->data->{longest}{mail_server_helo_domain}, }}); } } foreach my $notification_uuid (sort {$a cmp $b} keys %{$anvil->data->{notifications}{notification_uuid}}) { my $notification_recipient_uuid = $anvil->data->{notifications}{notification_uuid}{$notification_uuid}{notification_recipient_uuid}; my $notification_recipient_name = $anvil->data->{recipients}{recipient_uuid}{$notification_recipient_uuid}{recipient_name}; my $notification_recipient_email = $anvil->data->{recipients}{recipient_uuid}{$notification_recipient_uuid}{recipient_email}; my $say_recipient = $notification_recipient_name." <".$notification_recipient_email.">"; my $notification_host_uuid = $anvil->data->{notifications}{notification_uuid}{$notification_uuid}{notification_host_uuid}; my $notification_short_host_name = $anvil->data->{hosts}{host_uuid}{$notification_host_uuid}{short_host_name}; my $say_anvil_name = $anvil->data->{hosts}{host_uuid}{$notification_host_uuid}{anvil_name} ? $anvil->data->{hosts}{host_uuid}{$notification_host_uuid}{anvil_name} : "--"; my $notification_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:notification_recipient_uuid' => $notification_recipient_uuid, 's3:notification_recipient_name' => $notification_recipient_name, 's4:notification_recipient_email' => $notification_recipient_email, 's5:say_recipient' => $say_recipient, 's6:notification_host_uuid' => $notification_host_uuid, 's7:notification_short_host_name' => $notification_short_host_name, 's8:say_anvil_name' => $say_anvil_name, 's9:notification_alert_level' => $notification_alert_level, }}); if (length($say_recipient) > $anvil->data->{longest}{notification_recipient_name}) { $anvil->data->{longest}{notification_recipient_name} = length($say_recipient); $anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => { 'longest::notification_recipient_name' => $anvil->data->{longest}{notification_recipient_name}, }}); } if (length($notification_short_host_name) > $anvil->data->{longest}{notification_host_name}) { $anvil->data->{longest}{notification_host_name} = length($notification_short_host_name); $anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => { 'longest::notification_host_name' => $anvil->data->{longest}{notification_host_name}, }}); } if (length($say_anvil_name) > $anvil->data->{longest}{notification_anvil_name}) { $anvil->data->{longest}{notification_anvil_name} = length($say_anvil_name); $anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => { 'longest::notification_anvil_name' => $anvil->data->{longest}{notification_anvil_name}, }}); } if (length($anvil->data->{say_alert}{$notification_alert_level}) > $anvil->data->{longest}{notification_alert_level}) { $anvil->data->{longest}{notification_alert_level} = length($anvil->data->{say_alert}{$notification_alert_level}); $anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => { 'longest::notification_alert_level' => $anvil->data->{longest}{notification_alert_level}, }}); } # This will let us display over-rides by user in order. $anvil->data->{notifications}{name_to_uuid}{$notification_recipient_name} = $notification_uuid; $anvil->data->{notifications}{notification_uuid}{$notification_uuid}{recipient_name} = $say_recipient; $anvil->data->{notifications}{notification_uuid}{$notification_uuid}{anvil_name} = $say_anvil_name; $anvil->data->{notifications}{notification_uuid}{$notification_uuid}{host_uuid} = $notification_host_uuid; $anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => { "s1:notifications::name_to_uuid::${notification_recipient_name}" => $anvil->data->{notifications}{name_to_uuid}{$notification_recipient_name}, "s2:notifications::notification_uuid::${notification_uuid}::recipient_name" => $anvil->data->{notifications}{notification_uuid}{$notification_uuid}{recipient_name}, "s3:notifications::notification_uuid::${notification_uuid}::anvil_name" => $anvil->data->{notifications}{notification_uuid}{$notification_uuid}{anvil_name}, "s4:notifications::notification_uuid::${notification_uuid}::host_uuid" => $anvil->data->{notifications}{notification_uuid}{$notification_uuid}{host_uuid}, }}); } 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, }}); if (length($recipient_name) > $anvil->data->{longest}{recipient_name}) { $anvil->data->{longest}{recipient_name} = length($recipient_name); $anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => { 'longest::recipient_name' => $anvil->data->{longest}{recipient_name}, }}); } if (length($recipient_email) > $anvil->data->{longest}{recipient_email}) { $anvil->data->{longest}{recipient_email} = length($recipient_email); $anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => { 'longest::recipient_email' => $anvil->data->{longest}{recipient_email}, }}); } if (length($say_language) > $anvil->data->{longest}{recipient_language}) { $anvil->data->{longest}{recipient_language} = length($say_language); $anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => { 'longest::recipient_language' => $anvil->data->{longest}{recipient_language}, }}); } if (length($anvil->data->{say_alert}{$recipient_level}) > $anvil->data->{longest}{recipient_alert_level}) { $anvil->data->{longest}{recipient_alert_level} = length($anvil->data->{say_alert}{$recipient_level}); $anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => { 'longest::recipient_alert_level' => $anvil->data->{longest}{recipient_alert_level}, }}); } } # 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}}) { 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++; } if (not $mail_servers) { print "No mail servers configured yet!\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}}) { 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++; } if (not $recipients) { print "No alert recipients added yet!\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}}) { 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"; } # Lastly, show machines. print "\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"; } return(0); } # This sanity checks input switches. By necessity, this also loads data from the database. sub check_switches { my ($anvil) = @_; # Load data $anvil->Database->get_hosts(); $anvil->Database->get_anvils(); $anvil->Database->get_mail_servers(); $anvil->Database->get_recipients(); $anvil->Database->get_notifications(); $anvil->Words->language_list(); ### Now sanity check my $problem = 0; # Validate UUIDs. foreach my $switch ("mail-server-uuid", "notification-uuid", "recipient-uuid", "notification-recipient-uuid", "notification-host-uuid") { $anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => { switch => $switch }}); 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 => { uuid => $anvil->data->{switches}{$switch}, switch => "--".$switch, }}); $problem = 1; $anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => { problem => $problem }}); } } # Validate domain or IP data. foreach my $switch ("mail-server-address", "mail-server-helo-domain") { $anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => { switch => $switch }}); if ($anvil->data->{switches}{$switch}) { # 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 => { name => $anvil->data->{switches}{$switch}, switch => "--".$switch, }}); $problem = 1; $anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => { problem => $problem }}); } } } # Check log levels. 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 they used a level name, convert it to a number. # 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 "critical") { $anvil->data->{switches}{$switch} = 1; $anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => { "switches::".$switch => $anvil->data->{switches}{$switch} }}); } elsif ($anvil->data->{switches}{$switch} eq "warning") { $anvil->data->{switches}{$switch} = 2; $anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => { "switches::".$switch => $anvil->data->{switches}{$switch} }}); } elsif ($anvil->data->{switches}{$switch} eq "notice") { $anvil->data->{switches}{$switch} = 3; $anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => { "switches::".$switch => $anvil->data->{switches}{$switch} }}); } elsif ($anvil->data->{switches}{$switch} eq "info") { $anvil->data->{switches}{$switch} = 4; $anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => { "switches::".$switch => $anvil->data->{switches}{$switch} }}); } if (($anvil->data->{switches}{$switch} =~ /\D/) or ($anvil->data->{switches}{$switch} < 1) or ($anvil->data->{switches}{$switch} > 4)) { $anvil->Log->entry({source => $THIS_FILE, line => __LINE__, level => 2, key => "error_0382", variables => { level => $anvil->data->{switches}{$switch}, switch => "--".$switch, }}); $problem = 1; $anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => { problem => $problem }}); } } } # Ports (there's only one) if ($anvil->data->{switches}{"mail-server-port"}) { # Make sure it's a valid port. if (($anvil->data->{switches}{"mail-server-port"} =~ /\D/) or ($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 => { port => $anvil->data->{switches}{"mail-server-port"}, switch => "--mail-server-port", }}); $problem = 1; $anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => { problem => $problem }}); } } # Make sure mail server security is correct. 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->entry({source => $THIS_FILE, line => __LINE__, level => 2, key => "error_0384", variables => { security => $anvil->data->{switches}{"mail-server-security"}, }}); $problem = 1; $anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => { problem => $problem }}); } } 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->entry({source => $THIS_FILE, line => __LINE__, level => 2, key => "error_0385", variables => { auth => $anvil->data->{switches}{"mail-server-authentication"}, }}); $problem = 1; $anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => { problem => $problem }}); } } 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 => { email => $anvil->data->{switches}{"recipient-email"}, }}); $problem = 1; $anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => { problem => $problem }}); } } # Later, we'll need to parse the language file, for now, we always force 'en_CA'. $anvil->data->{switches}{"recipient-language"} = "en_CA"; # If there's a problem, exit now. if ($problem) { $anvil->nice_exit({exit_code => 1}); } return(0); }