#!/usr/athena/bin/perl
#
# adds new user accounts on SIPB Solaris server machines that have
# /var/userauth and /var/mailspool
#
# mhpower, 24 February 1999
#
#
#
#
if (!defined($ARGV[0]))
  {
    print "usage: add-a-user _username_\n";
    exit 1;
  }
@hesiod = `/bin/athena/hesinfo $ARGV[0] filsys`;
if ($#hesiod == -1)
  {
    die "no hesiod filsys entry for $ARGV[0]";
  }
if ($#hesiod != 0)
  {
    for ($i = 0; $i <= $#hesiod; ++$i)
      {
         #print "DEBUG checking: " . $hesiod[$i];
         @hent = split(/ /, $hesiod[$i]);
         #print 'DEBUG $#hent is ' . $#hent . "\n";
         #print 'DEBUG $hent[$#hent] is ' . $hent[$#hent] . "\n";
         if ($hent[$#hent] == 1)
           {
             if ($hent[0] ne "AFS")
               {
                 die "homedir for $ARGV[0] is of type $hent[0]\n";
               }
             $homedir = $hent[1];
           }
      }
  }
else
  {
    @hent = split(/ /, $hesiod[0]);
    if ($hent[0] ne "AFS")
      {
         die "homedir for $ARGV[0] is of type $hent[0]\n";
      }
    $homedir = $hent[1];
  }
#print "DEBUG homedir = \"$homedir\"\n";

$passwd = `/bin/athena/hesinfo $ARGV[0] passwd`;
chop $passwd;
@pf = split(/:/, $passwd);
#print "DEBUG pf6 is $pf[6] pf5 is $pf[5]\n";

$aexpect = "/afs/athena.mit.edu/user/" . substr($ARGV[0], 0, 1) . "/" .
  substr($ARGV[0], 1, 1) . "/" . $ARGV[0];
$sexpect = "/afs/sipb.mit.edu/user/" . $ARGV[0];
$sexpect2 = "/afs/sipb/user/" . $ARGV[0];
if ($homedir ne $aexpect && $homedir ne $sexpect &&
    $homedir ne $sexpect2)
  {
    die "did NOT add due to unexpected homedir for $ARGV[0] of $homedir\n";
  }
if ($pf[6] ne "/bin/sh" &&
    $pf[6] ne "/bin/athena/tcsh" &&
    $pf[6] ne "/afs/athena/project/gnu/bin/bash" &&
    $pf[6] ne "/afs/sipb/project/tcsh/tcsh" &&
    $pf[6] ne "/afs/sipb/project/tcsh/bin/betatcsh" &&
    $pf[6] ne "/afs/sipb/project/sipb/bin/zsh" &&
    $pf[6] ne "/bin/csh" &&
    $pf[6] ne "/bin/ksh" &&
    $pf[6] ne "/afs/sipb/project/bash/bash" &&
    $pf[6] ne "/afs/sipb/project/tcsh/t" &&
    $pf[6] ne "/afs/sipb/project/tcsh/b")
      {
         die "did NOT add due to unexpected shell for $ARGV[0] of $pf[6]\n";
      }
if ($pf[2] < 50)
  {
    die "did NOT add due to unexpectedly low uid for $ARGV[0] of $pf[2]\n";
  }
$newp = $pf[0] . ":*:" . $pf[2] . ":101:" . $pf[4] . ":" . $homedir . ":" . $pf[6] . "\n";
#print "DEBUG newp is $newp";
open PASS, '>>/etc/passwd';
print PASS $newp;
close PASS;
mkdir "/var/mailspool/$ARGV[0]", 0755;
open MAILS, ">/var/mailspool/$ARGV[0]/.qmail";
print MAILS "$ARGV[0]\@mit.edu\n";
close MAILS;
chown $pf[2], 101, "/var/mailspool/$ARGV[0]";
chown $pf[2], 101, "/var/mailspool/$ARGV[0]/.qmail";
chmod 0755, "/var/mailspool/$ARGV[0]";
chmod 0644, "/var/mailspool/$ARGV[0]/.qmail";
mkdir "/var/userauth/$ARGV[0]", 0755;
open KLOGIN, ">/var/userauth/$ARGV[0]/.k5login";
print KLOGIN "$ARGV[0]/root\@ATHENA.MIT.EDU\n";
print KLOGIN "$ARGV[0]\@ATHENA.MIT.EDU\n";
close KLOGIN;
chmod 0755, "/var/userauth/$ARGV[0]";
chmod 0644, "/var/userauth/$ARGV[0]/.k5login";
chown $pf[2], 101, "/var/userauth/$ARGV[0]";
chown $pf[2], 101, "/var/userauth/$ARGV[0]/.k5login";
open FTPU, '>>/etc/ftpusers';
print FTPU $ARGV[0] . "\n";
close FTPU;
if ($ARGV[1] eq "root")
  {
    open ROOT, '>>/var/userauth/root/.k5login';
    print ROOT $ARGV[0] . "/root\@ATHENA.MIT.EDU\n";
    close ROOT;
  }
exit 0;
