The London Perl and Raku Workshop takes place on 26th Oct 2024. If your company depends on Perl, please consider sponsoring and/or attending.
#!/usr/local/bin/perl

use blib;
use Time::localtime;
use AFS::KAS;
use AFS::KTC_PRINCIPAL;
use AFS::KTC_TOKEN;
use AFS::KTC_EKEY;
use AFS::Cell qw(localcell);
use AFS qw(raise_exception);

die "Usage: user\n" if ($#ARGV != 0);

raise_exception(1);
my $user       = AFS::KTC_PRINCIPAL->new(shift);
$user->cell(localcell) if ($user ->cell eq'');
my $key        = AFS::KTC_EKEY->ReadPassword($user->name."'s Password:");
my $kas        = AFS::KAS->AuthServerConn(AFS::KTC_TOKEN->nulltoken, &AFS::KA_AUTHENTICATION_SERVICE);
my $auth_token = $kas->Authenticate($user->name, $user->instance, &AFS::KA_TICKET_GRANTING_SERVICE, $key, time, time+600);

undef $kas;
$kas     = AFS::KAS->AuthServerConn($auth_token, &AFS::KA_TICKET_GRANTING_SERVICE);
my $service = AFS::KTC_PRINCIPAL->new("afs", "", localcell);
my $token   = $kas->GetToken($service->name, $service->instance, time, time+600, $auth_token);
print "KAS afs-token: \n";
print "StartTime  = ", ctime($token->startTime), "\n";
print "EndTime    = ", ctime($token->endTime), "\n";
print "Kvno       = ", $token->kvno, "\n";
print "TicketLen  = ", $token->ticketLen, "\n";