Handle hostnames with upper-case letters
[webmin.git] / config_save.cgi
index 0e428aa..68048e1 100755 (executable)
@@ -2,7 +2,8 @@
 # config_save.cgi
 # Save inputs from config.cgi
 
-require './web-lib.pl';
+BEGIN { push(@INC, ".."); };
+use WebminCore;
 require './config-lib.pl';
 &init_config();
 &ReadParse();
@@ -14,7 +15,8 @@ $access{'noconfig'} && &error($text{'config_ecannot'});
 
 mkdir("$config_directory/$m", 0700);
 &lock_file("$config_directory/$m/config");
-&read_file("$config_directory/$m/config", \%config);
+&read_file("$config_directory/$m/config", \%newconfig);
+%oldconfig = %newconfig;
 
 $mdir = &module_root_directory($m);
 if (-r "$mdir/config_info.pl") {
@@ -22,19 +24,29 @@ if (-r "$mdir/config_info.pl") {
        &foreign_require($m, "config_info.pl");
        local $fn = "${m}::config_form";
        if (defined(&$fn)) {
-               local $pkg = $m;
-               $pkg =~ s/[^A-Za-z0-9]/_/g;
-               eval "\%${pkg}::in = \%in";
                $func++;
-               &foreign_call($m, "config_save", \%config);
+               &foreign_call($m, "config_save", \%newconfig);
                }
        }
 if (!$func) {
        # Use config.info to parse config inputs
-       &parse_config(\%config, "$mdir/config.info", $m);
+       &parse_config(\%newconfig, "$mdir/config.info", $m);
        }
-&write_file("$config_directory/$m/config", \%config);
+&write_file("$config_directory/$m/config", \%newconfig);
 &unlock_file("$config_directory/$m/config");
+
+# Call any post-config save function
+local $pfn = "${m}::config_post_save";
+if (defined(&$pfn)) {
+       &foreign_call($m, "config_post_save", \%newconfig, \%oldconfig);
+       }
+
+# Refresh installed modules
+if (&foreign_check("webmin")) {
+       &foreign_require("webmin", "webmin-lib.pl");
+       &webmin::build_installed_modules(0, $m);
+       }
+
 &webmin_log("_config_", undef, undef, \%in, $m);
 &redirect("/$m/");