#!/usr/bin/perl -w -I/csciloc/linux/Update
use strict ;
use Sys::Hostname ;

my $kinitExe    = '/usr/bin/kinit' ;
my $kadminExe   = '/usr/bin/kadmin' ;
my $kdestroyExe = '/usr/bin/kdestroy' ;
my $klistExe    = '/usr/bin/klist' ;

sub setupKerberos4NFS4 {
    my $kCache = "/tmp/KERBNFS.$$" ;

    my $host = `/bin/hostname -f` ;

    print "\n  Enter your administration account (without /admin)\n" ;
    my $adminAcct = <STDIN> ;
    chomp $adminAcct ;

    $adminAcct .= '/admin' ;
    print "  Using ${adminAcct} as administrator principal\n\n" ;

    print "  Running ${kinitExe} to obtain service ticket\n" ;
    print "    ${kinitExe} will prompt you for your password\n" ;
    print "    Service ticket will be cached in ${kCache}\n\n" ;

    system $kinitExe, '-c', $kCache, '-S', 'kadmin/admin', $adminAcct ;

    if ($? !=0) {
	print STDERR "kinit failed\n" ;
	unlink $kCache ;
	exit 1 ;
    }

    print "  Adding keys for ${host}\n" ;

    my $kadminFH ;
    if (! open($kadminFH, '|-', $kadminExe, '-c', $kCache)) {
	print "  Unable to start kadmin\n" ;
	unlink $kCache ;
	exit 1 ;
    }

    print $kadminFH "addprinc -randkey host/${host}\n" ;
    print $kadminFH "addprinc -randkey nfs/${host}\n" ;
    print $kadminFH "ktadd host/${host}\n" ;
    print $kadminFH "ktadd nfs/${host}\n" ;
    close $kadminFH ;

    print "\n  Destroying cached key\n" ;
    system $kdestroyExe, '-c', $kCache ;

    unlink $kCache ;

    sleep 2 ;

    print "\n  Listing keys for ${host}\n" ;
    system $klistExe, '-k', '/etc/krb5.keytab' ;
}

print "Generate needed Kerberos principals for system\n" ;
print "You will need a Kerberos administrator account!\n" ;

&setupKerberos4NFS4() ;
