@lines = <FILE>;
close(FILE);
-print "<b>",&text('file_desc', "<tt>$file</tt>"),"</b><p>\n";
+print &text('file_desc', "<tt>$file</tt>"),"<p>\n";
-print "<form action=save_file.cgi method=post enctype=multipart/form-data>\n";
-print "<input type=hidden name=mode value=\"$in{'mode'}\">\n";
-print "<input type=hidden name=idx value=\"$in{'idx'}\">\n";
-print "<textarea name=text rows=20 cols=80>",
- join("", @lines),"</textarea><p>\n";
-print "<input type=submit value=\"$text{'save'}\"> ",
- "<input type=reset value=\"$text{'file_undo'}\">\n";
-print "</form>\n";
+print &ui_form_start("save_file.cgi", "form-data");
+print &ui_hidden("mode", $in{'mode'});
+print &ui_hidden("idx", $in{'idx'});
+print &ui_textarea("text", join("", @lines), 20, 80);
+print &ui_form_end([ [ undef, $text{'save'} ] ]);
&ui_print_footer($return, $rmsg);
$access{'amax'} == 0 && $access{'apath'} eq '/' ||
&error($text{'file_ealiases'});
$log = "alias";
+ $fmt = "alias";
}
elsif ($in{'mode'} eq 'virtusers') {
require './virtusers-lib.pl';
$access{'vedit_2'} && $access{'vmax'} == 0 ||
&error($text{'file_evirtusers'});
$log = "virtuser";
+ $fmt = "tab";
}
elsif ($in{'mode'} eq 'mailers') {
require './mailers-lib.pl';
$post = "$config{'makemap_path'} $mdbmtype $mdbm <$file";
$access{'mailers'} || &error($text{'file_emailers'});
$log = "mailer";
+ $fmt = "tab";
}
elsif ($in{'mode'} eq 'generics') {
require './generics-lib.pl';
$post = "$config{'makemap_path'} $gdbmtype $gdbm <$file";
$access{'omode'} == 1 || &error($text{'file_egenerics'});
$log = "generic";
+ $fmt = "tab";
}
elsif ($in{'mode'} eq 'domains') {
require './domain-lib.pl';
$post = "$config{'makemap_path'} $ddbmtype $ddbm <$file";
$access{'domains'} || &error($text{'file_edomains'});
$log = "domain";
+ $fmt = "tab";
}
elsif ($in{'mode'} eq 'access') {
require './access-lib.pl';
$post = "$config{'makemap_path'} $adbmtype $adbm <$file";
$access{'access'} || &error($text{'file_eaccess'});
$log = "access";
+ $fmt = "tab";
}
else { &error($text{'file_emode'}); }
+# Validate format
$in{'text'} =~ s/\r//g;
+@lines = split(/\n+/, $in{'text'});
+foreach my $l (@lines) {
+ $l =~ s/#.*$//;
+ next if ($l !~ /\S/);
+ if ($fmt eq "alias") {
+ $l =~ /^\s*(\S+):\s*(\S.*)$/ ||
+ &error(&text('file_ealias',
+ "<tt>".&html_escape($l)."</tt>"));
+ }
+ elsif ($fmt eq "tab") {
+ $l =~ /^\s*(\S+)\s+(\S.*)$/ ||
+ &error(&text('file_etab',
+ "<tt>".&html_escape($l)."</tt>"));
+ }
+ }
+
+# Write out the file
&open_lock_tempfile(FILE, ">$file");
&print_tempfile(FILE, $in{'text'});
&close_tempfile(FILE);