# -*- sh -*-

handle_vendor_options()
{
    local vendor_options_temp="$(mktemp -dt vendor-options.XXXXXXXX)"
    local base64=$(type -p base64)
    local ktutil=$(type -p ktutil)
    local keytab='/etc/krb5.keytab'
    local newtab="$vendor_options_temp/keytab"
    local s p opt len options=${new_vendor_encapsulated_options}

    while [ -n "$options" ]; do
	opt="${options:0:4}"
	case "$opt" in
	    '\002')
		len=$(echo -n ${options:4:1}| od -dAn)
		if [ -n "$base64" -a -n "$ktutil" ]; then
		    printf %s "${options:5:$len}" > "${newtab}.b64"
		    if "$base64" -d < "${newtab}.b64" > "$newtab"; then
			p=$(printf '%s\n%s' "rkt $newtab" l|$ktutil |\
			    sed -e 's,/,\\/,' -ne '/^[[:blank:]]/ s,^.\+[[:blank:]]\([^[:blank:]]\+\)$,\1,p')
			s=$(printf '%s\n%s' "rkt $keytab" l|$ktutil |\
			    sed -n "/$p/ s,^[[:blank:]]\+\([[:digit:]]\+\).\+$,delent \1,p"|tac)
			printf 'rkt %s\n%s\nrkt %s\nwkt %s\n' "$keytab" "$s" "$newtab" "${newtab}.new" |$ktutil
			mv -f -- "${newtab}.new" "$keytab"
		    fi
		fi
		options=${options:$(($len+5))}
	    ;;
	    *)
		break
	    ;;
	esac
    done
    rm -rf -- $vendor_options_temp
}

case "${reason}" in
    BOUND|INFORM|REBIND|REBOOT|RENEW) [ -z "$new_vendor_encapsulated_options" ] || handle_vendor_options;;
esac

