Custom map rebuild command

This commit is contained in:
Jamie Cameron
2008-12-02 06:32:17 +00:00
parent f12a854d35
commit ac22900f25
10 changed files with 156 additions and 87 deletions

View File

@@ -38,4 +38,5 @@ Added an access control page option to prevent creation and editing of catchall
---- Changes since 1.430 ----
Autoreply messages containing non-ASCII characters are now properly quoted-printable encoded.
---- Changes since 1.440 ----
Added a module config option to control if the user is prompted for confirmation before deleting queued messages.
Added a Module Config option to control if the user is prompted for confirmation before deleting queued messages.
A custom command to rebuild all maps can be specified on the Module Config page, to be used instead of makemap or newaliases.

View File

@@ -76,12 +76,14 @@ $_[0]->{'eline'} = scalar(@$lref)-1;
&flush_file_lines($_[1]);
# Add to DBM
if ($_[3] eq "dbm") {
if (!&rebuild_map_cmd($_[1])) {
if ($_[3] eq "dbm") {
dbmopen(%acc, $_[2], 0644);
$acc{$from} = $_[0]->{'action'};
dbmclose(%acc);
}
else { &run_makemap($_[1], $_[2], $_[3]); }
else { &run_makemap($_[1], $_[2], $_[3]); }
}
# Add to cache
$_[0]->{'num'} = scalar(@list_access_cache);
@@ -104,12 +106,14 @@ splice(@$lref, $_[0]->{'line'}, $len);
# Delete from DBM
local $oldfrom = $_[0]->{'tag'} ? "$_[0]->{'tag'}:$_[0]->{'from'}"
: $_[0]->{'from'};
if ($_[3] eq "dbm") {
if (!&rebuild_map_cmd($_[1])) {
if ($_[3] eq "dbm") {
dbmopen(%acc, $_[2], 0644);
delete($acc{$oldfrom});
dbmclose(%acc);
}
else { &run_makemap($_[1], $_[2], $_[3]); }
else { &run_makemap($_[1], $_[2], $_[3]); }
}
# Delete from cache
local $idx = &indexof($_[0], @list_access_cache);
@@ -137,13 +141,15 @@ splice(@$lref, $_[0]->{'line'}, $oldlen, @newlines);
&flush_file_lines($_[2]);
# Update DBM
if ($_[4] eq "dbm") {
if (!&rebuild_map_cmd($_[2])) {
if ($_[4] eq "dbm") {
dbmopen(%virt, $_[3], 0644);
delete($virt{$oldfrom});
$virt{$from} = $_[1]->{'action'};
dbmclose(%virt);
}
else { &run_makemap($_[2], $_[3], $_[4]); }
else { &run_makemap($_[2], $_[3], $_[4]); }
}
# Update cache
local $idx = &indexof($_[0], @list_generics_cache);

View File

@@ -184,7 +184,11 @@ local $str = ($_[0]->{'enabled'} ? "" : "# ") . $_[0]->{'name'} . ": " .
push(@$lref, $str);
$_[0]->{'eline'} = scalar(@$lref)-1;
&flush_file_lines($_[1]->[0]);
&system_logged("newaliases >/dev/null 2>&1") if (!$_[2]);
if (!$_[2]) {
if (!&rebuild_map_cmd($_[1]->[0])) {
&system_logged("newaliases >/dev/null 2>&1");
}
}
# Add to the cache
local $jfiles = join(",", @{$_[1]});
@@ -203,7 +207,11 @@ local $lref = &read_file_lines($_[0]->{'file'});
local $len = $_[0]->{'eline'} - $_[0]->{'line'} + 1;
splice(@$lref, $_[0]->{'line'}, $len);
&flush_file_lines($_[0]->{'file'});
&system_logged("newaliases >/dev/null 2>&1") if (!$_[1]);
if (!$_[1]) {
if (!&rebuild_map_cmd($_[0]->{'file'})) {
&system_logged("newaliases >/dev/null 2>&1");
}
}
# Remove from the cache
local $jfiles = join(",", @{$_[0]->{'files'}});
@@ -227,7 +235,11 @@ local $lref = &read_file_lines($_[0]->{'file'});
local $len = $_[0]->{'eline'} - $_[0]->{'line'} + 1;
splice(@$lref, $_[0]->{'line'}, $len, @newlines);
&flush_file_lines($_[0]->{'file'});
&system_logged("newaliases >/dev/null 2>&1") if (!$_[2]);
if (!$_[2]) {
if (!&rebuild_map_cmd($_[0]->{'file'})) {
&system_logged("newaliases >/dev/null 2>&1");
}
}
local $jfiles = join(",", @{$_[0]->{'files'}});
local $c = $list_aliases_cache{$jfiles};

View File

@@ -38,3 +38,4 @@ mail_style=Mail file directory style,4,0-mail/username,1-mail/u/username,2-mail/
mail_sync=User mail file synchronization,2,create-Create with user,delete-Delete with user,modify-Rename with user
smrsh_dir=SMRSH directory,3,None
queue_dirs=Extra mail queue directories,3,None
rebuild_cmd=Command to rebuild all maps,3,Use makemap command

View File

@@ -72,12 +72,14 @@ $_[0]->{'eline'} = scalar(@$lref)-1;
&flush_file_lines($_[1]);
# Add to DBM
if ($_[3] eq "dbm") {
if (!&rebuild_map_cmd($_[1])) {
if ($_[3] eq "dbm") {
dbmopen(%dom, $_[2], 0644);
$dom{$_[0]->{'from'}} = $_[0]->{'to'};
dbmclose(%dom);
}
else { &run_makemap($_[1], $_[2], $_[3]); }
else { &run_makemap($_[1], $_[2], $_[3]); }
}
# Add to cache
$_[0]->{'num'} = scalar(@list_domains_cache);
@@ -98,12 +100,14 @@ splice(@$lref, $_[0]->{'line'}, $len);
&flush_file_lines($_[1]);
# Delete from DBM
if ($_[3] eq "dbm") {
if (!&rebuild_map_cmd($_[1])) {
if ($_[3] eq "dbm") {
dbmopen(%dom, $_[2], 0644);
delete($dom{$_[0]->{'from'}});
dbmclose(%dom);
}
else { &run_makemap($_[1], $_[2], $_[3]); }
else { &run_makemap($_[1], $_[2], $_[3]); }
}
# Delete from cache
local $idx = &indexof($_[0], @list_domains_cache);
@@ -127,13 +131,15 @@ splice(@$lref, $_[0]->{'line'}, $oldlen, @newlines);
&flush_file_lines($_[2]);
# Update DBM
if ($_[4] eq "dbm") {
if (!&rebuild_map_cmd($_[2])) {
if ($_[4] eq "dbm") {
dbmopen(%dom, $_[3], 0644);
delete($dom{$_[0]->{'from'}});
$dom{$_[1]->{'from'}} = $_[1]->{'to'};
dbmclose(%dom);
}
else { &run_makemap($_[2], $_[3], $_[4]); }
else { &run_makemap($_[2], $_[3], $_[4]); }
}
# Update cache
local $idx = &indexof($_[0], @list_domains_cache);

View File

@@ -72,12 +72,16 @@ $_[0]->{'eline'} = scalar(@$lref)-1;
&flush_file_lines($_[1]);
# Add to DBM
if ($_[3] eq "dbm") {
if (!&rebuild_map_cmd($_[1])) {
if (!&rebuild_map_cmd($_[1])) {
if ($_[3] eq "dbm") {
dbmopen(%virt, $_[2], 0644);
$virt{$_[0]->{'from'}} = $_[0]->{'to'};
dbmclose(%virt);
}
else { &run_makemap($_[1], $_[2], $_[3]); }
else { &run_makemap($_[1], $_[2], $_[3]); }
}
}
# Add to cache
$_[0]->{'num'} = scalar(@list_generics_cache);
@@ -98,12 +102,14 @@ splice(@$lref, $_[0]->{'line'}, $len);
&flush_file_lines($_[1]);
# Delete from DBM
if ($_[3] eq "dbm") {
if (!&rebuild_map_cmd($_[1])) {
if ($_[3] eq "dbm") {
dbmopen(%virt, $_[2], 0644);
delete($virt{$_[0]->{'from'}});
dbmclose(%virt);
}
else { &run_makemap($_[1], $_[2], $_[3]); }
else { &run_makemap($_[1], $_[2], $_[3]); }
}
# Delete from cache
local $idx = &indexof($_[0], @list_generics_cache);
@@ -127,13 +133,15 @@ splice(@$lref, $_[0]->{'line'}, $oldlen, @newlines);
&flush_file_lines($_[2]);
# Update DBM
if ($_[4] eq "dbm") {
if (!&rebuild_map_cmd($_[2])) {
if ($_[4] eq "dbm") {
dbmopen(%virt, $_[3], 0644);
delete($virt{$_[0]->{'from'}});
$virt{$_[1]->{'from'}} = $_[1]->{'to'};
dbmclose(%virt);
}
else { &run_makemap($_[2], $_[3], $_[4]); }
else { &run_makemap($_[2], $_[3], $_[4]); }
}
# Update cache
local $idx = &indexof($_[0], @list_generics_cache);

View File

@@ -72,12 +72,14 @@ $_[0]->{'eline'} = scalar(@$lref)-1;
&flush_file_lines();
# Write to the DBM
if ($_[3] eq "dbm") {
if (!&rebuild_map_cmd($_[1])) {
if ($_[3] eq "dbm") {
dbmopen(%mailer, $_[2], 0644);
$mailer{$_[0]->{'domain'}} = "$_[0]->{'mailer'}:$_[0]->{'dest'}";
dbmclose(%mailer);
}
else { &run_makemap($_[1], $_[2], $_[3]); }
else { &run_makemap($_[1], $_[2], $_[3]); }
}
# Update the cache
$_[0]->{'num'} = scalar(@list_mailers_cache);
@@ -100,13 +102,15 @@ splice(@$lref, $_[0]->{'line'}, $oldlen, @newlines);
&flush_file_lines($_[2]);
# Update the DBM
if ($_[3] eq "dbm") {
if (!&rebuild_map_cmd($_[2])) {
if ($_[3] eq "dbm") {
dbmopen(%mailer, $_[3], 0644);
delete($mailer{$_[0]->{'domain'}});
$mailer{$_[1]->{'domain'}} = "$_[1]->{'mailer'}:$_[1]->{'dest'}";
dbmclose(%mailer);
}
else { &run_makemap($_[2], $_[3], $_[4]); }
else { &run_makemap($_[2], $_[3], $_[4]); }
}
local $idx = &indexof($_[0], @list_mailers_cache);
$_[1]->{'line'} = $_[0]->{'line'};
@@ -127,12 +131,14 @@ splice(@$lref, $_[0]->{'line'}, $len);
&flush_file_lines($_[1]);
# Delete f rom the DBM
if ($_[3] eq "dbm") {
if (!&rebuild_map_cmd($_[1])) {
if ($_[3] eq "dbm") {
dbmopen(%mailer, $_[2], 0644);
delete($mailer{$_[0]->{'domain'}});
dbmclose(%mailer);
}
else { &run_makemap($_[1], $_[2], $_[3]); }
else { &run_makemap($_[1], $_[2], $_[3]); }
}
# Update the cache
local $idx = &indexof($_[0], @list_mailers_cache);

View File

@@ -73,6 +73,8 @@ $in{'text'} =~ s/\r//g;
&close_tempfile(FILE);
&webmin_log("manual", $log, $file);
&system_logged("$post >/dev/null 2>&1") if ($post);
if (!&rebuild_map_cmd($file)) {
&system_logged("$post >/dev/null 2>&1") if ($post);
}
&redirect($return);

View File

@@ -192,11 +192,32 @@ else {
}
# run_makemap(textfile, dbmfile, type)
# Run makemap to rebuild some map. Calls error if it fails.
sub run_makemap
{
local($out);
$out = &backquote_logged("$config{'makemap_path'} $_[2] $_[1] <\"$_[0]\" 2>&1");
if ($?) { &error("makemap failed : <pre>$out</pre>"); }
$out = &backquote_logged(
$config{'makemap_path'}." ".quotemeta($_[2])." ".quotemeta($_[1]).
" <".quotemeta($_[0])." 2>&1");
if ($?) { &error("makemap failed : <pre>".
&html_escape($out)."</pre>"); }
}
# rebuild_map_cmd(textfile)
# If a map rebuild command is defined, run it and return 1, otherwise return 0.
# Calls error if it fails.
sub rebuild_map_cmd
{
local ($file) = @_;
if ($config{'rebuild_cmd'}) {
local $cmd = &substitute_template($config{'rebuild_cmd'},
{ 'map_file' => $file });
local $out = &backquote_logged("($cmd) 2>&1");
if ($?) { &error("Map rebuild failed : <pre>".
&html_escape($out)."</pre>"); }
return 1;
}
return 0;
}
# find_textfile(config, dbm)

View File

@@ -73,12 +73,14 @@ $_[0]->{'eline'} = scalar(@$lref)-1;
&flush_file_lines($_[1]);
# Add to DBM
if ($_[3] eq "dbm") {
if (!&rebuild_map_cmd($_[1])) {
if ($_[3] eq "dbm") {
dbmopen(%virt, $_[2], 0644);
$virt{$_[0]->{'from'}} = $_[0]->{'to'};
dbmclose(%virt);
}
else { &run_makemap($_[1], $_[2], $_[3]); }
else { &run_makemap($_[1], $_[2], $_[3]); }
}
# Add to cache
$_[0]->{'num'} = scalar(@list_virtusers_cache);
@@ -99,12 +101,14 @@ splice(@$lref, $_[0]->{'line'}, $len);
&flush_file_lines($_[1]);
# Delete from DBM
if ($_[3] eq "dbm") {
if (!&rebuild_map_cmd($_[1])) {
if ($_[3] eq "dbm") {
dbmopen(%virt, $_[2], 0644);
delete($virt{$_[0]->{'from'}});
dbmclose(%virt);
}
else { &run_makemap($_[1], $_[2], $_[3]); }
else { &run_makemap($_[1], $_[2], $_[3]); }
}
# Delete from cache
local $idx = &indexof($_[0], @list_virtusers_cache);
@@ -128,13 +132,15 @@ splice(@$lref, $_[0]->{'line'}, $oldlen, @newlines);
&flush_file_lines($_[2]);
# Update DBM
if ($_[4] eq "dbm") {
if (!&rebuild_map_cmd($_[2])) {
if ($_[4] eq "dbm") {
dbmopen(%virt, $_[3], 0644);
delete($virt{$_[0]->{'from'}});
$virt{$_[1]->{'from'}} = $_[1]->{'to'};
dbmclose(%virt);
}
else { &run_makemap($_[2], $_[3], $_[4]); }
else { &run_makemap($_[2], $_[3], $_[4]); }
}
# Update cache
local $idx = &indexof($_[0], @list_virtusers_cache);