# -*- 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