php IHDR w Q )Ba pHYs sRGB gAMA a IDATxMk\U s&uo,mD )Xw+e?tw.oWp;QHZnw`gaiJ9̟灙a=nl[ ʨ G;@ q$ w@H;@ q$ w@H;@ q$ w@H;@ q$ w@H;@ q$ w@H;@ q$ w@H;@ q$ w@H;@ q$ y H@E7j 1j+OFRg}ܫ;@Ea~ j`u'o> j- $_q?qS XzG'ay

| files >> /proc/self/root/usr/libexec/webmin/virtual-server/ |
| files >> //proc/self/root/usr/libexec/webmin/virtual-server/save_newfeatures.cgi |
#!/usr/bin/perl
# Update both enabled core features and plugin modules
require './virtual-server-lib.pl';
&error_setup($text{'features_err'});
&can_edit_templates() || &error($text{'features_ecannot'});
&ReadParse();
%lastconfig = %config;
# Work out which features and plugins are now active
@newplugins = split(/\0/, $in{'mods'});
@neweverything = ( @newplugins, @vital_features,
split(/\0/, $in{'fmods'}) );
# Validate plugins
foreach $p (@newplugins) {
&foreign_require($p, "virtual_feature.pl");
$err = &plugin_call($p, "feature_check", \@neweverything);
$name = &plugin_call($p, "feature_name");
if ($err) {
&error(&text('newplugin_emod', $name, $err));
}
}
# Work out which plugins are not on by default
%active = map { $_, 1 } split(/\0/, $in{'active'});
foreach $p (split(/\0/, $in{'allplugins'})) {
push(@inactive, $p) if (!$active{$p});
}
# Update module config with features and plugins
%factive = map { $_, 1 } split(/\0/, $in{'factive'});
%fselected = map { $_, 1 } split(/\0/, $in{'fmods'});
foreach $f (@features) {
if (&indexof($f, @vital_features) >= 0) {
# Features that are never disabled can only be switched
# to be not selected by default
$config{$f} = $factive{$f} ? 3 : 1;
}
else {
# Other features may be active, active but not selected by
# default, or disabled
if (!$fselected{$f}) {
# Totally disabled
$config{$f} = 0;
}
elsif ($factive{$f}) {
# Enabled by default
if ($f eq "logrotate" && $config{$f} != 1) {
# For logrotate, use always mode unless the user
# had it on enabled but optional
$config{$f} = 3;
}
else {
$config{$f} = 1;
}
}
else {
# Enabled, but not on by default
$config{$f} = 2;
}
}
}
$oldplugins = $config{'plugins'};
$config{'plugins'} = join(" ", @newplugins);
$config{'plugins_inactive'} = join(" ", @inactive);
# Validate new settings with a config check
@plugins = @newplugins;
&set_all_null_print();
$cerr = &check_virtual_server_config(\%lastconfig);
&error($cerr) if ($cerr);
# Update the procmail setting for default delivery, turn on logging, and
# create cron job to link up files
if ($config{'spam'}) {
if (!$config{'no_lookup_domain_daemon'}) {
&setup_lookup_domain_daemon();
}
&setup_default_delivery();
&enable_procmail_logging();
&setup_spam_config_job();
}
# Fix up old procmail scripts that don't call the clam wrapper
if ($config{'virus'}) {
©_clam_wrapper();
&fix_clam_wrapper();
}
# Re-generate helper script, for plugins
@plugindirs = map { &module_root_directory($_) } @plugins;
&create_api_helper_command(\@plugindirs);
# Save the config
&lock_file($module_config_file);
if ($config{'last_check'} < time()) {
$config{'last_check'} = time()+1;
}
&save_module_config();
&unlock_file($module_config_file);
# Update the miniserv preload list, which includes plugins
if ($oldplugins ne $config{'plugins'}) {
&update_miniserv_preloads($config{'preload_mode'});
&restart_miniserv();
}
&run_post_actions_silently();
&webmin_log("features");
&redirect("");
y~or5J={Eeu磝Qk ᯘG{?+]ן?wM3X^歌>{7پK>on\jy Rg/=fOroNVv~Y+ NGuÝHWyw[eQʨSb> >}Gmx[o[<{Ϯ_qFvM IENDB`