#!/bin/perl

if ($#ARGV < 1) {
    die "usage: fix-files domain.com [files ...]\n";
}

###########################################################################

$DOMAIN = $ARGV[0];
shift;

if (-f "/vmunix") {
    $SYSV = 0;
    $HOSTNAME = `uname -n`;
} else {
    $SYSV = 1;
    $HOSTNAME = `hostname`;
}
chop $HOSTNAME;

$MIXEDCASEHOST = $HOSTNAME; $MIXEDCASEHOST =~ y/a-z/A-Z/;

$_ = `id`; /uid=\d+\(([^\)]+)\) gid=\d+\(([^\)]+)\)/;
$who = $1;
$group = $2;

$USER = $who;
$SEMIUSER = $who; $SEMIUSER =~ s/^(..).*$/\1/g;

$GROUP = $group;
$SEMIGROUP = $group; $SEMIGROUP =~ s/^(..).*$/\1/g;

$TESTDIR = `pwd`; $TESTDIR =~ s,^/tmp_mnt/,/,g; chop $TESTDIR;

$_ = `grep $HOSTNAME /etc/hosts 2>&1`;
if (/^([0-9.]+)\s/) {
    $ADDR = $1;
} else {
    $_ = `nslookup $HOSTNAME`;
    $* = 1; s/\n/ /g; $* = 0;
    (/Name:\s+${HOSTNAME}\S+ Address:\s+([0-9.]+) /) && ($ADDR = $1);
}
$HOSTIPADDR = $ADDR;

$DOMAINADDR = $ADDR; $DOMAINADDR =~ s/^([0-9.]+)\.[0-9]+$/\1.*/g;

###########################################################################

for $F (@ARGV) {
    if ($F =~ /:/) {
	$INFILE = $`;
	$OUTFILE = $';
    } else {
	$INFILE = $F;
	$_ = $F; s,^.*/([^/]+)$,\1,g; s/\.sed$//g;
	$OUTFILE = $_;
    }

    open (IN, "< $INFILE");

    # be careful!
    ($OUTFILE eq $INFILE) && die "cannot get unique name for $INFILE, use -";

    if ($OUTFILE eq '-') {
	open (OUT, ">& STDOUT");
    } else {
	(-e $OUTFILE) && (unlink $OUTFILE);
	open (OUT, "> $OUTFILE");
    }

    while (<IN>) {
	s/==TESTDIR==/${TESTDIR}/g;
	s/==HOSTNAME==/${HOSTNAME}/g;
	s/==DOMAIN==/${DOMAIN}/g;
	s/==USER==/${USER}/g;
	s/==SEMIUSER==/${SEMIUSER}/g;
	s/==GROUP==/${GROUP}/g;
	s/==SEMIGROUP==/${SEMIGROUP}/g;
	s/==MIXEDCASEHOST==/${MIXEDCASEHOST}/g;
	s/==DOMAINADDR==/${DOMAINADDR}/g;
	s/==HOSTIPADDR==/${HOSTIPADDR}/g;
	print OUT; 
    }

    close IN;
    close OUT;
}
