/* * Portability wrapper around krb5.h. * * This header includes krb5.h and then adjusts for various portability * issues, primarily between MIT Kerberos and Heimdal, so that code can be * written to a consistent API. * * Unfortunately, due to the nature of the differences between MIT Kerberos * and Heimdal, it's not possible to write code to either one of the APIs and * adjust for the other one. In general, this header tries to make available * the Heimdal API and fix it for MIT Kerberos, but there are places where MIT * Kerberos requires a more specific call. For those cases, it provides the * most specific interface. * * For example, MIT Kerberos has krb5_free_unparsed_name() whereas Heimdal * prefers the generic krb5_xfree(). In this case, this header provides * krb5_free_unparsed_name() for both APIs since it's the most specific call. * * Written by Russ Allbery * This work is hereby placed in the public domain by its author. */ #ifndef PORTABLE_KRB5_H #define PORTABLE_KRB5_H 1 #include #include #include BEGIN_DECLS /* Default to a hidden visibility for all portability functions. */ #pragma GCC visibility push(hidden) /* * krb5_{get,free}_error_message are the preferred APIs for both current MIT * and current Heimdal, but there are tons of older APIs we may have to fall * back on for earlier versions. * * This function should be called immediately after the corresponding error * without any intervening Kerberos calls. Otherwise, the correct error * message and supporting information may not be returned. */ #ifndef HAVE_KRB5_GET_ERROR_MESSAGE const char *krb5_get_error_message(krb5_context, krb5_error_code); #endif #ifndef HAVE_KRB5_FREE_ERROR_MESSAGE void krb5_free_error_message(krb5_context, const char *); #endif /* * Both current MIT and current Heimdal prefer _opt_alloc, but older versions * of both require allocating your own struct and calling _opt_init. */ #ifndef HAVE_KRB5_GET_INIT_CREDS_OPT_ALLOC krb5_error_code krb5_get_init_creds_opt_alloc(krb5_context, krb5_get_init_creds_opt **); #endif /* Heimdal-specific. */ #ifndef HAVE_KRB5_GET_INIT_CREDS_OPT_SET_DEFAULT_FLAGS #define krb5_get_init_creds_opt_set_default_flags(c, p, r, o) /* empty */ #endif /* Heimdal: krb5_kt_free_entry, MIT: krb5_free_keytab_entry_contents. */ #ifndef HAVE_KRB5_KT_FREE_ENTRY # define krb5_kt_free_entry(c, e) krb5_free_keytab_entry_contents((c), (e)) #endif /* Undo default visibility change. */ #pragma GCC visibility pop #endif /* !PORTABLE_KRB5_H */