svn commit: samba r21110 - in branches: SAMBA_3_0/source/include
SAMBA_3_0/source/libads SAMBA_3_0/source/libsmb
SAMBA_3_0_24/source SAMBA_3_0_24/source/include
SAMBA_3_0_24/source/libads SAMBA_3_0_24/source/libsmb
gd at samba.org
gd at samba.org
Thu Feb 1 15:10:14 GMT 2007
Author: gd
Date: 2007-02-01 15:10:13 +0000 (Thu, 01 Feb 2007)
New Revision: 21110
WebSVN: http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=rev&root=samba&rev=21110
Log:
Fix kinit with Heimdal (Bug #4226).
Guenther
Modified:
branches/SAMBA_3_0/source/include/includes.h
branches/SAMBA_3_0/source/libads/kerberos.c
branches/SAMBA_3_0/source/libsmb/clikrb5.c
branches/SAMBA_3_0_24/source/configure.in
branches/SAMBA_3_0_24/source/include/includes.h
branches/SAMBA_3_0_24/source/libads/kerberos.c
branches/SAMBA_3_0_24/source/libsmb/clikrb5.c
Changeset:
Modified: branches/SAMBA_3_0/source/include/includes.h
===================================================================
--- branches/SAMBA_3_0/source/include/includes.h 2007-02-01 14:31:10 UTC (rev 21109)
+++ branches/SAMBA_3_0/source/include/includes.h 2007-02-01 15:10:13 UTC (rev 21110)
@@ -1176,6 +1176,8 @@
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);
#endif /* HAVE_KRB5 */
Modified: branches/SAMBA_3_0/source/libads/kerberos.c
===================================================================
--- branches/SAMBA_3_0/source/libads/kerberos.c 2007-02-01 14:31:10 UTC (rev 21109)
+++ branches/SAMBA_3_0/source/libads/kerberos.c 2007-02-01 15:10:13 UTC (rev 21110)
@@ -75,7 +75,7 @@
krb5_ccache cc = NULL;
krb5_principal me;
krb5_creds my_creds;
- krb5_get_init_creds_opt opt;
+ krb5_get_init_creds_opt *opt = NULL;
smb_krb5_addresses *addr = NULL;
initialize_krb5_error_table();
@@ -96,47 +96,60 @@
}
if ((code = smb_krb5_parse_name(ctx, principal, &me))) {
+ krb5_cc_close(ctx, cc);
krb5_free_context(ctx);
return code;
}
- krb5_get_init_creds_opt_init(&opt);
- krb5_get_init_creds_opt_set_renew_life(&opt, renewable_time);
- krb5_get_init_creds_opt_set_forwardable(&opt, 1);
-
+ code = krb5_get_init_creds_opt_alloc(ctx, &opt);
+ if (code) {
+ krb5_cc_close(ctx, cc);
+ krb5_free_context(ctx);
+ return code;
+ }
+
+ krb5_get_init_creds_opt_set_renew_life(opt, renewable_time);
+ krb5_get_init_creds_opt_set_forwardable(opt, True);
+
+#ifdef HAVE_KRB5_GET_INIT_CREDS_OPT_SET_PAC_REQUEST
if (request_pac) {
-#ifdef HAVE_KRB5_GET_INIT_CREDS_OPT_SET_PAC_REQUEST
- code = krb5_get_init_creds_opt_set_pac_request(ctx, &opt, True);
+ code = krb5_get_init_creds_opt_set_pac_request(ctx, opt, (krb5_boolean)request_pac);
if (code) {
+ krb5_cc_close(ctx, cc);
krb5_free_principal(ctx, me);
krb5_free_context(ctx);
return code;
}
+ }
#endif
- }
-
if (add_netbios_addr) {
code = smb_krb5_gen_netbios_krb5_address(&addr);
if (code) {
+ krb5_cc_close(ctx, cc);
krb5_free_principal(ctx, me);
krb5_free_context(ctx);
return code;
}
- krb5_get_init_creds_opt_set_address_list(&opt, addr->addrs);
+ krb5_get_init_creds_opt_set_address_list(opt, addr->addrs);
}
if ((code = krb5_get_init_creds_password(ctx, &my_creds, me, CONST_DISCARD(char *,password),
- kerb_prompter, NULL, 0, NULL, &opt)))
+ kerb_prompter, NULL, 0, NULL, opt)))
{
+ krb5_get_init_creds_opt_free(opt);
smb_krb5_free_addresses(ctx, addr);
+ krb5_cc_close(ctx, cc);
krb5_free_principal(ctx, me);
- krb5_free_context(ctx);
+ krb5_free_context(ctx);
return code;
}
-
+
+ krb5_get_init_creds_opt_free(opt);
+
if ((code = krb5_cc_initialize(ctx, cc, me))) {
smb_krb5_free_addresses(ctx, addr);
krb5_free_cred_contents(ctx, &my_creds);
+ krb5_cc_close(ctx, cc);
krb5_free_principal(ctx, me);
krb5_free_context(ctx);
return code;
Modified: branches/SAMBA_3_0/source/libsmb/clikrb5.c
===================================================================
--- branches/SAMBA_3_0/source/libsmb/clikrb5.c 2007-02-01 14:31:10 UTC (rev 21109)
+++ branches/SAMBA_3_0/source/libsmb/clikrb5.c 2007-02-01 15:10:13 UTC (rev 21110)
@@ -1379,6 +1379,32 @@
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_get_init_creds_opt *my_opt;
+
+ *opt = NULL;
+
+ if ((my_opt = SMB_MALLOC(sizeof(krb5_get_init_creds_opt))) == NULL) {
+ return ENOMEM;
+ }
+
+ krb5_get_init_creds_opt_init(my_opt);
+
+ *opt = my_opt;
+ return 0;
+}
+#endif
+
+#ifndef HAVE_KRB5_GET_INIT_CREDS_OPT_FREE
+ void krb5_get_init_creds_opt_free(krb5_get_init_creds_opt *opt)
+{
+ SAFE_FREE(opt);
+ opt = NULL;
+}
+#endif
+
#else /* HAVE_KRB5 */
/* this saves a few linking headaches */
int cli_krb5_get_ticket(const char *principal, time_t time_offset,
Modified: branches/SAMBA_3_0_24/source/configure.in
===================================================================
--- branches/SAMBA_3_0_24/source/configure.in 2007-02-01 14:31:10 UTC (rev 21109)
+++ branches/SAMBA_3_0_24/source/configure.in 2007-02-01 15:10:13 UTC (rev 21110)
@@ -3480,6 +3480,8 @@
AC_CHECK_FUNC_EXT(krb5_get_kdc_cred, $KRB5_LIBS)
AC_CHECK_FUNC_EXT(krb5_free_error_contents, $KRB5_LIBS)
AC_CHECK_FUNC_EXT(initialize_krb5_error_table, $KRB5_LIBS)
+ AC_CHECK_FUNC_EXT(krb5_get_init_creds_opt_alloc, $KRB5_LIBS)
+ AC_CHECK_FUNC_EXT(krb5_get_init_creds_opt_free, $KRB5_LIBS)
LIBS="$KRB5_LIBS $LIBS"
Modified: branches/SAMBA_3_0_24/source/include/includes.h
===================================================================
--- branches/SAMBA_3_0_24/source/include/includes.h 2007-02-01 14:31:10 UTC (rev 21109)
+++ branches/SAMBA_3_0_24/source/include/includes.h 2007-02-01 15:10:13 UTC (rev 21110)
@@ -1176,6 +1176,8 @@
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);
#endif /* HAVE_KRB5 */
Modified: branches/SAMBA_3_0_24/source/libads/kerberos.c
===================================================================
--- branches/SAMBA_3_0_24/source/libads/kerberos.c 2007-02-01 14:31:10 UTC (rev 21109)
+++ branches/SAMBA_3_0_24/source/libads/kerberos.c 2007-02-01 15:10:13 UTC (rev 21110)
@@ -75,7 +75,7 @@
krb5_ccache cc = NULL;
krb5_principal me;
krb5_creds my_creds;
- krb5_get_init_creds_opt opt;
+ krb5_get_init_creds_opt *opt = NULL;
smb_krb5_addresses *addr = NULL;
initialize_krb5_error_table();
@@ -96,47 +96,60 @@
}
if ((code = smb_krb5_parse_name(ctx, principal, &me))) {
+ krb5_cc_close(ctx, cc);
krb5_free_context(ctx);
return code;
}
- krb5_get_init_creds_opt_init(&opt);
- krb5_get_init_creds_opt_set_renew_life(&opt, renewable_time);
- krb5_get_init_creds_opt_set_forwardable(&opt, 1);
-
+ code = krb5_get_init_creds_opt_alloc(ctx, &opt);
+ if (code) {
+ krb5_cc_close(ctx, cc);
+ krb5_free_context(ctx);
+ return code;
+ }
+
+ krb5_get_init_creds_opt_set_renew_life(opt, renewable_time);
+ krb5_get_init_creds_opt_set_forwardable(opt, True);
+
+#ifdef HAVE_KRB5_GET_INIT_CREDS_OPT_SET_PAC_REQUEST
if (request_pac) {
-#ifdef HAVE_KRB5_GET_INIT_CREDS_OPT_SET_PAC_REQUEST
- code = krb5_get_init_creds_opt_set_pac_request(ctx, &opt, True);
+ code = krb5_get_init_creds_opt_set_pac_request(ctx, opt, (krb5_boolean)request_pac);
if (code) {
+ krb5_cc_close(ctx, cc);
krb5_free_principal(ctx, me);
krb5_free_context(ctx);
return code;
}
+ }
#endif
- }
-
if (add_netbios_addr) {
code = smb_krb5_gen_netbios_krb5_address(&addr);
if (code) {
+ krb5_cc_close(ctx, cc);
krb5_free_principal(ctx, me);
krb5_free_context(ctx);
return code;
}
- krb5_get_init_creds_opt_set_address_list(&opt, addr->addrs);
+ krb5_get_init_creds_opt_set_address_list(opt, addr->addrs);
}
if ((code = krb5_get_init_creds_password(ctx, &my_creds, me, CONST_DISCARD(char *,password),
- kerb_prompter, NULL, 0, NULL, &opt)))
+ kerb_prompter, NULL, 0, NULL, opt)))
{
+ krb5_get_init_creds_opt_free(opt);
smb_krb5_free_addresses(ctx, addr);
+ krb5_cc_close(ctx, cc);
krb5_free_principal(ctx, me);
- krb5_free_context(ctx);
+ krb5_free_context(ctx);
return code;
}
-
+
+ krb5_get_init_creds_opt_free(opt);
+
if ((code = krb5_cc_initialize(ctx, cc, me))) {
smb_krb5_free_addresses(ctx, addr);
krb5_free_cred_contents(ctx, &my_creds);
+ krb5_cc_close(ctx, cc);
krb5_free_principal(ctx, me);
krb5_free_context(ctx);
return code;
Modified: branches/SAMBA_3_0_24/source/libsmb/clikrb5.c
===================================================================
--- branches/SAMBA_3_0_24/source/libsmb/clikrb5.c 2007-02-01 14:31:10 UTC (rev 21109)
+++ branches/SAMBA_3_0_24/source/libsmb/clikrb5.c 2007-02-01 15:10:13 UTC (rev 21110)
@@ -1379,6 +1379,32 @@
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_get_init_creds_opt *my_opt;
+
+ *opt = NULL;
+
+ if ((my_opt = SMB_MALLOC(sizeof(krb5_get_init_creds_opt))) == NULL) {
+ return ENOMEM;
+ }
+
+ krb5_get_init_creds_opt_init(my_opt);
+
+ *opt = my_opt;
+ return 0;
+}
+#endif
+
+#ifndef HAVE_KRB5_GET_INIT_CREDS_OPT_FREE
+ void krb5_get_init_creds_opt_free(krb5_get_init_creds_opt *opt)
+{
+ SAFE_FREE(opt);
+ opt = NULL;
+}
+#endif
+
#else /* HAVE_KRB5 */
/* this saves a few linking headaches */
int cli_krb5_get_ticket(const char *principal, time_t time_offset,
More information about the samba-cvs
mailing list