summaryrefslogtreecommitdiff
path: root/source3
diff options
context:
space:
mode:
authorJames Peach <jpeach@samba.org>2007-03-09 18:51:48 +0000
committerGerald (Jerry) Carter <jerry@samba.org>2007-10-10 12:18:32 -0500
commit3adeb4274250ec4420d9d874b07d8e688a354402 (patch)
treed783eaa54a28fe825030142ce65b7b42da1d32e7 /source3
parent257d2e0d2a6cd4c2ea62399ec97ada46dd8c395c (diff)
downloadsamba-3adeb4274250ec4420d9d874b07d8e688a354402.tar.gz
samba-3adeb4274250ec4420d9d874b07d8e688a354402.tar.bz2
samba-3adeb4274250ec4420d9d874b07d8e688a354402.zip
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 c29c69d2df377fabb88a78e6f5237de106d5c2c5)
Diffstat (limited to 'source3')
-rw-r--r--source3/configure.in20
-rw-r--r--source3/include/includes.h7
-rw-r--r--source3/libads/kerberos.c4
-rw-r--r--source3/libsmb/clikrb5.c29
4 files changed, 50 insertions, 10 deletions
diff --git a/source3/configure.in b/source3/configure.in
index 3e407cf5dc..6a380a1cde 100644
--- a/source3/configure.in
+++ b/source3/configure.in
@@ -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>],
diff --git a/source3/include/includes.h b/source3/include/includes.h
index 3864faddb9..c71acd3866 100644
--- a/source3/include/includes.h
+++ b/source3/include/includes.h
@@ -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 */
diff --git a/source3/libads/kerberos.c b/source3/libads/kerberos.c
index 8e8297b07e..1c0e85dd55 100644
--- a/source3/libads/kerberos.c
+++ b/source3/libads/kerberos.c
@@ -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);
diff --git a/source3/libsmb/clikrb5.c b/source3/libsmb/clikrb5.c
index f06a19b345..43dfddda47 100644
--- a/source3/libsmb/clikrb5.c
+++ b/source3/libsmb/clikrb5.c
@@ -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 */
}
-#endif
-#ifndef HAVE_KRB5_GET_INIT_CREDS_OPT_FREE
- void krb5_get_init_creds_opt_free(krb5_get_init_creds_opt *opt)
+ 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
+
+#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 */