Server IP : 195.201.23.43 / Your IP : 13.59.203.127 Web Server : Apache System : Linux webserver2.vercom.be 5.4.0-192-generic #212-Ubuntu SMP Fri Jul 5 09:47:39 UTC 2024 x86_64 User : kdecoratie ( 1041) PHP Version : 7.1.33-63+ubuntu20.04.1+deb.sury.org+1 Disable Function : pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals, MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : OFF | Sudo : ON | Pkexec : ON Directory : /usr/share/webmin/virtual-server/ |
Upload File : |
# Functions for setting up web status monitoring for a domain sub require_status { return if ($require_status++); &foreign_require("status"); } sub check_depends_status { local ($d) = @_; if (!&domain_has_website($d)) { return $text{'setup_edepstatus'}; } return undef; } # check_status_clash() # No need to check for clashes .. sub check_status_clash { return 0; } # setup_status(&domain) # Creates a new status monitor for this domain's website sub setup_status { my ($d) = @_; &$first_print($text{'setup_status'}); &require_status(); local $tmpl = &get_template($d->{'template'}); # Create website monitor local $serv = &make_monitor($d, 0); &status::save_service($serv); &$second_print($text{'setup_done'}); if (&domain_has_ssl($d)) { # Add SSL website monitor too &$first_print($text{'setup_statusssl'}); local $serv = &make_monitor($d, 1); &status::save_service($serv); &$second_print($text{'setup_done'}); } if (&domain_has_ssl($d) && $tmpl->{'statussslcert'}) { # Add SSL cert monitor &$first_print($text{'setup_statussslcert'}); local $certserv = &make_sslcert_monitor($d); &status::save_service($certserv); &$second_print($text{'setup_done'}); } return 1; } # make_monitor(&domain, ssl) # Returns a hash ref for a status object for monitoring a webserver sub make_monitor { local ($d, $ssl) = @_; local $tmpl = &get_template($d->{'template'}); local $host = &get_domain_http_hostname($d); local $serv = { 'id' => $d->{'id'}.($ssl ? "_ssl" : "_web"), 'type' => 'http', 'desc' => $ssl ? "Website $host (SSL)" : "Website $host", 'fails' => 2, 'email' => &monitor_email($d), 'host' => $host, 'port' => $ssl ? $d->{'web_sslport'} : $d->{'web_port'}, 'nosched' => 0, 'ssl' => $ssl, 'alarm' => $tmpl->{'statustimeout'}, 'tmpl' => $tmpl->{'statustmpl'}, 'page' => '/', 'virtualmin' => $d->{'id'}, }; return $serv; } # make_sslcert_monitor(&domain) # Returns a hash ref for a status object for monitoring an SSL domain's cert sub make_sslcert_monitor { local ($d) = @_; local $tmpl = &get_template($d->{'template'}); local $host = &get_domain_http_hostname($d); local $serv = { 'id' => $d->{'id'}."_sslcert", 'type' => 'sslcert', 'desc' => "SSL cert $host", 'fails' => 2, 'email' => &monitor_email($d), 'url' => 'https://'.$host.':'.$d->{'web_sslport'}.'/', 'days' => 7, 'mismatch' => $tmpl->{'statussslcert'} == 2 ? 1 : 0, 'nosched' => 0, 'alarm' => $tmpl->{'statustimeout'}, 'tmpl' => $tmpl->{'statustmpl'}, 'virtualmin' => $d->{'id'}, }; return $serv; } # monitor_email(&domain) # Returns the addresses to send email to for a monitor sub monitor_email { local ($d) = @_; local $tmpl = &get_template($d->{'template'}); local @rv; if ($tmpl->{'status'} ne 'none') { push(@rv, $tmpl->{'status'}); } if (!$tmpl->{'statusonly'}) { push(@rv, &extract_address_parts($d->{'emailto'})); } return join(",", @rv); } # modify_status(&domain, &olddomain) # Possible update the hostname of the web server sub modify_status { my ($d, $oldd) = @_; &require_status(); if ($d->{'dom'} ne $oldd->{'dom'} || $d->{'emailto'} ne $oldd->{'emailto'}) { # Update HTTP monitor &$first_print($text{'save_status'}); local $serv = &status::get_service($d->{'id'}."_web"); local $host = &get_domain_http_hostname($d); if ($serv) { $serv->{'host'} = $host; $serv->{'desc'} = "Website $host"; $serv->{'email'} = &monitor_email($d); &status::save_service($serv); &$second_print($text{'setup_done'}); } else { &$second_print($text{'delete_nostatus'}); } if (&domain_has_ssl_cert($d)) { # Update cert monitor local $certserv = &status::get_service($d->{'id'}."_sslcert"); if ($certserv) { &$first_print($text{'save_statussslcert'}); $certserv->{'url'} = 'https://'.$host.':'.$d->{'web_sslport'}.'/', $certserv->{'desc'} = "SSL cert $host"; $certserv->{'email'} = $d->{'emailto'}; &status::save_service($certserv); &$second_print($text{'setup_done'}); } } if (&domain_has_ssl($d)) { # Update HTTPS monitor &$first_print($text{'save_statusssl'}); local $serv = &status::get_service($d->{'id'}."_ssl"); if ($serv) { $serv->{'host'} = $host; $serv->{'desc'} = "Website $host (SSL)"; $serv->{'email'} = $d->{'emailto'}; &status::save_service($serv); &$second_print($text{'setup_done'}); } else { &$second_print($text{'delete_nostatus'}); } } } if (&domain_has_ssl($d) && !&domain_has_ssl($oldd)) { # Turned on SSL .. add monitor &$first_print($text{'setup_status'}); local $serv = &make_monitor($d, 1); &status::save_service($serv); &$second_print($text{'setup_done'}); } elsif (!&domain_has_ssl($d) && &domain_has_ssl($oldd)) { # Turned off SSL .. remove monitor (but not the cert monitor) &$first_print($text{'delete_statusssl'}); local $serv = &status::get_service($d->{'id'}."_ssl"); if ($serv) { &status::delete_service($serv); &$second_print($text{'setup_done'}); } else { &$second_print($text{'delete_nostatus'}); } } if (&domain_has_ssl_cert($d) && !&domain_has_ssl_cert($oldd)) { # Added a cert ... add monitor &$first_print($text{'setup_status'}); local $certserv = &make_sslcert_monitor($d); &status::save_service($certserv); &$second_print($text{'setup_done'}); } } # delete_status(&domain) # Just delete the status monitor for this domain sub delete_status { my ($d) = @_; # Remove HTTP status monitor &$first_print($text{'delete_status'}); &require_status(); local $serv = &status::get_service($d->{'id'}."_web"); if ($serv) { &status::delete_service($serv); &$second_print($text{'setup_done'}); } else { &$second_print($text{'delete_nostatus'}); } if (&domain_has_ssl($d)) { # Remove HTTPS status monitor &$first_print($text{'delete_statusssl'}); local $serv = &status::get_service($d->{'id'}."_ssl"); if ($serv) { &status::delete_service($serv); &$second_print($text{'setup_done'}); } else { &$second_print($text{'delete_nostatus'}); } } if (&domain_has_ssl_cert($d)) { # Remove SSL cert monitor &$first_print($text{'delete_statussslcert'}); local $certserv = &status::get_service($d->{'id'}."_sslcert"); if ($certserv) { &status::delete_service($certserv); } &$second_print($text{'setup_done'}); } return 1; } # validate_status(&domain) # Check for the required monitors sub validate_status { local ($d) = @_; &require_status(); local $serv = &status::get_service($_[0]->{'id'}."_web"); return &text('validate_estatusweb') if (!$serv); if (&domain_has_ssl($d)) { local $serv = &status::get_service($_[0]->{'id'}."_ssl"); return &text('validate_estatusssl') if (!$serv); } return undef; } # disable_status(&domain) # Turns off the status monitor for this domain sub disable_status { # Disable HTTP status monitor &$first_print($text{'disable_status'}); &require_status(); local $serv = &status::get_service($_[0]->{'id'}."_web"); if ($serv) { $serv->{'nosched'} = 1; &status::save_service($serv); &$second_print($text{'setup_done'}); } else { &$second_print($text{'delete_nostatus'}); } # Disable HTTPS status monitor if (domain_has_ssl($_[0])) { &$first_print($text{'disable_statusssl'}); local $certserv = &status::get_service($_[0]->{'id'}."_sslcert"); if ($certserv) { $certserv->{'nosched'} = 1; &status::save_service($certserv); } local $serv = &status::get_service($_[0]->{'id'}."_ssl"); if ($serv) { $serv->{'nosched'} = 1; &status::save_service($serv); &$second_print($text{'setup_done'}); } else { &$second_print($text{'delete_nostatus'}); } } return 1; } # enable_status(&domain) # Turns on the status monitor for this domain sub enable_status { # Enable HTTP status monitor &$first_print($text{'enable_status'}); &require_status(); local $serv = &status::get_service($_[0]->{'id'}."_web"); if ($serv) { $serv->{'nosched'} = 0; &status::save_service($serv); &$second_print($text{'setup_done'}); } else { &$second_print($text{'delete_nostatus'}); } # Disable HTTPS status monitor if (&domain_has_ssl($_[0])) { &$first_print($text{'enable_statusssl'}); local $certserv = &status::get_service($_[0]->{'id'}."_sslcert"); if ($certserv) { $certserv->{'nosched'} = 0; &status::save_service($certserv); } local $serv = &status::get_service($_[0]->{'id'}."_ssl"); if ($serv) { $serv->{'nosched'} = 0; &status::save_service($serv); &$second_print($text{'setup_done'}); } else { &$second_print($text{'delete_nostatus'}); } } return 1; } # show_template_status(&tmpl) # Outputs HTML for editing status monitoring related template options sub show_template_status { local ($tmpl) = @_; &require_status(); local @status_fields = ( "status", "statusonly", "statustimeout", "statustimeout_def", "statussslcert", "statustmpl" ); print &ui_table_row( &hlink($text{'tmpl_status'}, "template_status"), &none_def_input("status", $tmpl->{'status'}, $text{'tmpl_statusemail'}, 0, 0, undef, \@status_fields, 1)."\n". &ui_textbox("status", $tmpl->{'status'} eq "none" ? undef : $tmpl->{'status'}, 50)); # Send email to server owner print &ui_table_row( &hlink($text{'tmpl_statusonly'}, "template_statusonly"), &ui_radio("statusonly", int($tmpl->{'statusonly'}), [ [ 0, $text{'yes'} ], [ 1, $text{'no'} ] ])); # Default HTTP check timeout print &ui_table_row( &hlink($text{'tmpl_statustimeout'}, "template_statustimeout"), &ui_opt_textbox("statustimeout", $tmpl->{'statustimeout'}, 5, &text('tmpl_statustimeoutdef', 10))); # Check SSL cert too print &ui_table_row( &hlink($text{'tmpl_statussslcert'}, "template_statussslcert"), &ui_radio("statussslcert", $tmpl->{'statussslcert'}, [ [ 0, $text{'no'} ], [ 1, $text{'tmpl_statussslcert1'} ], [ 2, $text{'tmpl_statussslcert2'} ] ])); # Default email template local @stmpls = &status::list_templates(); print &ui_table_row( &hlink($text{'tmpl_statustmpl'}, "template_statustmpl"), &ui_select("statustmpl", $tmpl->{'statustmpl'}, [ [ '', "<$status::text{'mon_notmpl'}>" ], map { [ $_->{'id'}, $_->{'desc'} ] } @stmpls ])); } # parse_template_status(&tmpl) # Updates status monitoring related template options from %in sub parse_template_status { local ($tmpl) = @_; # Save status monitoring settings $tmpl->{'status'} = &parse_none_def("status"); if ($in{'status_mode'} != 1) { if ($in{'status_mode'} == 2) { $in{'status'} =~ /\S/ || &error($text{'tmpl_estatus'}); } $tmpl->{'statusonly'} = $in{'statusonly'}; $in{'statustimeout_def'} || $in{'statustimeout'} =~ /^\d+$/ || &error($text{'tmpl_estatustimeout'}); $tmpl->{'statustimeout'} = $in{'statustimeout_def'} ? undef : $in{'statustimeout'}; if (defined($in{'statustmpl'})) { $tmpl->{'statustmpl'} = $in{'statustmpl'}; } $tmpl->{'statussslcert'} = $in{'statussslcert'}; } } $done_feature_script{'status'} = 1; 1;Private