1
0
mirror of https://github.com/samba-team/samba.git synced 2024-12-25 23:21:54 +03:00

r21778: Wrap calls to krb5_get_init_creds_opt_free to handle the different

calling convention in the latest MIT changes.  Apparantly Heimdal
is also changing to this calling convention.
(This used to be commit c29c69d2df)
This commit is contained in:
James Peach 2007-03-09 18:51:48 +00:00 committed by Gerald (Jerry) Carter
parent 257d2e0d2a
commit 3adeb42742
4 changed files with 50 additions and 10 deletions

View File

@ -3549,6 +3549,26 @@ if test x"$with_ads_support" != x"no"; then
[Whether the krb5_ticket structure contains the kvno and enctype])
fi
AC_CACHE_CHECK(whether krb5_get_init_creds_opt_free takes a context argument,
smb_krb5_creds_opt_free_context,
[
AC_TRY_COMPILE([
#include <krb5.h>],
[
krb5_context ctx;
krb5_get_init_creds_opt *opt = NULL;
krb5_get_init_creds_opt_free(ctx, opt);
],
[smb_krb5_creds_opt_free_context=yes],
[smb_krb5_creds_opt_free_context=no]
)
])
if test x"$smb_krb5_creds_opt_free_context" = x"yes" ; then
AC_DEFINE(KRB5_CREDS_OPT_FREE_REQUIRES_CONTEXT, 1,
[Whether krb5_get_init_creds_opt_free takes a context argument])
fi
AC_CACHE_CHECK(whether krb5_verify_checksum takes 7 arguments, smb_krb5_verify_checksum, [
AC_TRY_COMPILE([
#include <krb5.h>],

View File

@ -1176,8 +1176,11 @@ krb5_error_code nt_status_to_krb5(NTSTATUS nt_status);
void smb_krb5_free_error(krb5_context context, krb5_error *krberror);
krb5_error_code handle_krberror_packet(krb5_context context,
krb5_data *packet);
void krb5_get_init_creds_opt_free(krb5_get_init_creds_opt *opt);
krb5_error_code krb5_get_init_creds_opt_alloc(krb5_context context, krb5_get_init_creds_opt **opt);
void smb_krb5_get_init_creds_opt_free(krb5_context context,
krb5_get_init_creds_opt *opt);
krb5_error_code smb_krb5_get_init_creds_opt_alloc(krb5_context context,
krb5_get_init_creds_opt **opt);
#endif /* HAVE_KRB5 */

View File

@ -140,7 +140,7 @@ int kerberos_kinit_password_ext(const char *principal,
if ((code = krb5_get_init_creds_password(ctx, &my_creds, me, CONST_DISCARD(char *,password),
kerb_prompter, NULL, 0, NULL, opt)))
{
krb5_get_init_creds_opt_free(opt);
smb_krb5_get_init_creds_opt_free(ctx, opt);
smb_krb5_free_addresses(ctx, addr);
krb5_cc_close(ctx, cc);
krb5_free_principal(ctx, me);
@ -148,7 +148,7 @@ int kerberos_kinit_password_ext(const char *principal,
return code;
}
krb5_get_init_creds_opt_free(opt);
smb_krb5_get_init_creds_opt_free(ctx, opt);
if ((code = krb5_cc_initialize(ctx, cc, me))) {
smb_krb5_free_addresses(ctx, addr);

View File

@ -1389,9 +1389,14 @@ done:
return ret;
}
#ifndef HAVE_KRB5_GET_INIT_CREDS_OPT_ALLOC
krb5_error_code krb5_get_init_creds_opt_alloc(krb5_context context, krb5_get_init_creds_opt **opt)
krb5_error_code smb_krb5_get_init_creds_opt_alloc(krb5_context context,
krb5_get_init_creds_opt **opt)
{
#ifdef HAVE_KRB5_GET_INIT_CREDS_OPT_ALLOC
/* Heimdal or modern MIT version */
return krb5_get_init_creds_opt_alloc(context, opt);
#else
/* Historical MIT version */
krb5_get_init_creds_opt *my_opt;
*opt = NULL;
@ -1404,16 +1409,28 @@ done:
*opt = my_opt;
return 0;
#endif /* HAVE_KRB5_GET_INIT_CREDS_OPT_ALLOC */
}
void smb_krb5_get_init_creds_opt_free(krb5_context context,
krb5_get_init_creds_opt *opt)
{
#ifdef HAVE_KRB5_GET_INIT_CREDS_OPT_FREE
#ifdef KRB5_CREDS_OPT_FREE_REQUIRES_CONTEXT
/* Modern MIT version */
krb5_get_init_creds_opt_free(context, opt);
#else
/* Heimdal version */
krb5_get_init_creds_opt_free(opt);
#endif
#ifndef HAVE_KRB5_GET_INIT_CREDS_OPT_FREE
void krb5_get_init_creds_opt_free(krb5_get_init_creds_opt *opt)
{
#else /* HAVE_KRB5_GET_INIT_CREDS_OPT_FREE */
/* Historical MIT version */
SAFE_FREE(opt);
opt = NULL;
#endif /* HAVE_KRB5_GET_INIT_CREDS_OPT_FREE */
}
#endif
#else /* HAVE_KRB5 */
/* this saves a few linking headaches */