#!/bin/bash -e

PROG=my-service

tmpdir=
ccname=
cleanup_handler()
{
    [ -z "$ccname" ] ||
        kdestroy -c "$ccname"
    [ -z "$tmpdir" ] ||
        rm -rf -- "$tmpdir"
}

tmpdir="$(mktemp -dt "$PROG.XXXXXXXX")"
ccname="FILE:$tmpdir/krb5cc"

trap cleanup_handler EXIT
trap cleanup_handler HUP PIPE INT QUIT TERM

export KRB5CCNAME="$ccname"

# Machine Netbios name from smb.conf
m=$(testparm -s --parameter-name="netbios name" 2>/dev/null)

# domain name as realm from smb.conf
d=$(testparm -s --parameter-name="realm" 2>/dev/null | tr '[:upper:]' '[:lower:]')

# SAMAccountName based machine principal name
# - https://learn.microsoft.com/en-us/troubleshoot/windows-server/active-directory/naming-conventions-for-computer-domain-site-ou
p="$m\$"

kinit -k "$p"
klist

# Get dc from dns for kerberos srv record
dc="$(host -t srv _kerberos._udp.$d | sed 's/[^ ]\+ has SRV record [0-9]\+ [0-9]\+ [0-9]\+ //' | head -1)"

# Actions with temporary kerberos machine account
# ...

smbclient -k -L "$dc"
klist
