I'm fairly sure that
ret = krb5_libdefault_string(context, realm, KRB5_CONF_PREFERRED_PREAUTH_TYPES,
&preauth_types);
is optimistic preauth..
At least Apple was assuming that code generated optimistic preauth.