Simultaneously, I started having trouble with one of the replica servers.
I removed the replica server, rebuilt it, and have had no reoccurrences
since.
--sk
Stuart Kendrick
Network Services
FHCRC
Original post:
I've recently noted discrepancies between the text file which I feed into
mail_aliases.org_dir and the table itself. This looks like a nightmare:
intermittent loss of entries in a NIS+ table.
I create my aliases file from an extract from our HR database. Every
hour, a cron job on one of the NIS+ boxes runs "nisaddent -mf
aliases.master aliases.org_dir" If the HR people have modded any mail
aliases, then the change gets imported into the NIS+ space automatically.
I've been receiving scattered reports of intermittent mail bouncing ...
which normally I would dismiss, except that the users are high profile and
provided me with headers showing the bounces.
In an utterly random experience this morning, I sent a message to a
co-worker ... and it bounced. Repeated typing of "nisgrep name
mail_aliases.org_dir" confirmed that indeed, this alias did not exist in
the NIS+ mail_aliases table.
I verified that this entry existed in aliases.master. I verified that the
NIS+ logs were checkpointed. (A cron job runs "nisping -C" every hour;
in fact, the logs were checkpointed.)
I imported the master text file into the NIS+ space by hand -- "nisaddent
-mvf /files/aliases.master aliases.org_dir" -- 0 entries added/updated, 0
entries removed.
I dumped the aliases table "niscat mail_aliases.org_dir > aliases.dump",
cleaned up the text master and the aliases.dump file ... typed "diff
aliases.master aliases.dump" ... and discovered indeed that there was a
single difference between the two files: the entry corresponding to
my co-worker.
I touched the master text file "touch aliases.master" and let the cron job
(which uses make) import aliases.master into the NIS+ space ... and this
time it worked, e.g. my co-worker's alias appeared. I dumped the NIS+
table, cleaned it up, and "diff aliases.master aliases.dump" -- they were
identical.
This looks like a nightmare. Intermittent loss af random entries in the
mail_aliases table. I shall write a cron job which dumps the alias table
periodically, compares it to the master text file, and screams if it
notices a difference.
Has anyone else experienced this?
Solaris 2.5.1 with identical selection of the latest patches on all boxes.
About 4000 aliases. One root master, four replica servers, two clients.
--sk
Stuart Kendrick
Network Services
FHCRC
#!/usr/local/bin/perl
# If aliases.org_dir is not identical to
# bug1:/home/mailops/etc/aliases.nisplus then scream. --sk 4-11-97
use Sys::Syslog;
use POSIX;
use File::Copy 'cp';
$dumpfile = "aliases.dump";
$lockfile = "monitor_aliases.lock";
$logdir = "/home/nisops/log";
$logfile = "aliases.log";
$masterdir = "/home/mailops/etc";
$masterfile = "aliases.nisplus";
$tmpdir = "/home/nisops/tmp";
# Dump aliases.org_dir to a text file and compare to the master on bug0.
# If they are different, scream.
# If master text file isn't there, bail
if (! -r "$masterdir/$masterfile") { exit; }
# If lock file exists, bail
if (-e "$tmpdir/$lockfile") { exit; }
# Dump aliases.org_dir to a file
system ("/usr/lib/nis/nisaddent -d aliases > '$tmpdir/$dumpfile'");
cp ("$masterdir/$masterfile", "$tmpdir/$masterfile");
# Clean the dump file
open (DUMP, "<$tmpdir/$dumpfile");
open (OUT, ">$tmpdir/aliases.dump1");
while (<DUMP>) {
s/.*#.*\n//; # Strip comments
s/:\s*\n/: /; # Join lines which end with ":"
s/:\s*/:\$\$\$/; # Save colon plus space combinations
s/,\s*\n/,/; # Join lines which end with ","
s/\(.*?\)//g; # Strip parens and their contents
s/\t//g; # Strip tabs
s/ //g; # Strip spaces
s/^\n//; # Strip blank lines
s/:\$\$\$/: /; # Restore space after colon
print (OUT $_);
}
close DUMP;
close OUT;
system ("/usr/bin/sort '$tmpdir/aliases.dump1' > '$tmpdir/aliases.dump2'");
# Clean the master file
open (MASTER, "<$tmpdir/$masterfile");
open (OUT, "> $tmpdir/aliases.nisplus1");
while (<MASTER>) {
s/.*#.*\n//; # Strip comments
s/:\s*\n/: /; # Join lines which end with ":"
s/:\s*/:\$\$\$/; # Save colon plus space combinations
s/,\s*\n/,/; # Join lines which end with ","
s/\(.*?\)//g; # Strip parens and their contents
s/\t//g; # Strip tabs
s/ //g; # Strip spaces
s/^\n//; # Strip blank lines
s/:\$\$\$/: /; # Restore space after colon
print (OUT $_);
}
close MASTER;
close OUT;
system ("/usr/bin/sort '$tmpdir/aliases.nisplus1' > '$tmpdir/aliases.nisplus2'");
# If there are differences, scream
$diff = (system ("/usr/bin/diff $tmpdir/aliases.dump2 $tmpdir/aliases.nisplus2"))/256;
if ($diff == 1) {
$diff = `/usr/bin/diff $tmpdir/aliases.dump2 $tmpdir/aliases.nisplus2`;
open FILE, ">$tmpdir/nisplus.msg";
print FILE "NIS+ not the same as files. --monitor_nisplus";
close FILE;
system "/usr/bin/mailx -s 'NIS+ not the same as files' skendric\@fhcrc.org < $tmpdir/nisplus.msg";
system ("/usr/bin/touch $tmpdir/$lockfile");
open LOG, ">>$logdir/$logfile";
print LOG scalar localtime, "\n";
print LOG $diff, "\n";
close LOG;
}
if ( ! -e "$tmpdir/$lockfile") {
unlink "$tmpdir/$dumpfile", "$tmpdir/aliases.dump1", "$tmpdir/aliases.dump2", "/$tmpdir/aliases.nisplus", "/$tmpdir/aliases.nisplus1", "/$tmpdir/aliases.nisplus2", "/$tmpdir/nisplus.msg";
}