diff options
Diffstat (limited to 'src/windows/leashdll')
-rw-r--r-- | src/windows/leashdll/krb5routines.c | 40 | ||||
-rw-r--r-- | src/windows/leashdll/leashdll.c | 6 | ||||
-rw-r--r-- | src/windows/leashdll/leashdll.h | 3 |
3 files changed, 29 insertions, 20 deletions
diff --git a/src/windows/leashdll/krb5routines.c b/src/windows/leashdll/krb5routines.c index ccd9dd8ce..b98abe7fa 100644 --- a/src/windows/leashdll/krb5routines.c +++ b/src/windows/leashdll/krb5routines.c @@ -835,14 +835,13 @@ DWORD publicIP krb5_principal me = 0; char* name = 0; krb5_creds my_creds; - krb5_get_init_creds_opt options; + krb5_get_init_creds_opt * options = NULL; krb5_address ** addrs = NULL; int i = 0, addr_count = 0; if (!pkrb5_init_context) return 0; - pkrb5_get_init_creds_opt_init(&options); memset(&my_creds, 0, sizeof(my_creds)); if (alt_ctx) @@ -855,6 +854,9 @@ DWORD publicIP if (code) goto cleanup; } + code = pkrb5_get_init_creds_opt_alloc(ctx, &options); + if (code) goto cleanup; + code = pkrb5_cc_default(ctx, &cc); if (code) goto cleanup; @@ -873,15 +875,15 @@ DWORD publicIP renew_life *= 5*60; if (lifetime) - pkrb5_get_init_creds_opt_set_tkt_life(&options, lifetime); - pkrb5_get_init_creds_opt_set_forwardable(&options, - forwardable ? 1 : 0); - pkrb5_get_init_creds_opt_set_proxiable(&options, - proxiable ? 1 : 0); - pkrb5_get_init_creds_opt_set_renew_life(&options, - renew_life); + pkrb5_get_init_creds_opt_set_tkt_life(options, lifetime); + pkrb5_get_init_creds_opt_set_forwardable(options, + forwardable ? 1 : 0); + pkrb5_get_init_creds_opt_set_proxiable(options, + proxiable ? 1 : 0); + pkrb5_get_init_creds_opt_set_renew_life(options, + renew_life); if (addressless) - pkrb5_get_init_creds_opt_set_address_list(&options,NULL); + pkrb5_get_init_creds_opt_set_address_list(options,NULL); else { if (publicIP) { @@ -937,11 +939,15 @@ DWORD publicIP netIPAddr = htonl(publicIP); memcpy(addrs[i]->contents,&netIPAddr,4); - pkrb5_get_init_creds_opt_set_address_list(&options,addrs); + pkrb5_get_init_creds_opt_set_address_list(options,addrs); } } + code = pkrb5_get_init_creds_opt_set_out_ccache(ctx, options, cc); + if (code) + goto cleanup; + code = pkrb5_get_init_creds_password(ctx, &my_creds, me, @@ -950,15 +956,7 @@ DWORD publicIP hParent, // prompter data 0, // start time 0, // service name - &options); - if (code) goto cleanup; - - code = pkrb5_cc_initialize(ctx, cc, me); - if (code) goto cleanup; - - code = pkrb5_cc_store_cred(ctx, cc, &my_creds); - if (code) goto cleanup; - + options); cleanup: if ( addrs ) { for ( i=0;i<addr_count;i++ ) { @@ -978,6 +976,8 @@ DWORD publicIP pkrb5_free_principal(ctx, me); if (cc) pkrb5_cc_close(ctx, cc); + if (options) + pkrb5_get_init_creds_opt_free(ctx, options); if (ctx && (ctx != alt_ctx)) pkrb5_free_context(ctx); return(code); diff --git a/src/windows/leashdll/leashdll.c b/src/windows/leashdll/leashdll.c index eb11a366f..4c736c0ea 100644 --- a/src/windows/leashdll/leashdll.c +++ b/src/windows/leashdll/leashdll.c @@ -22,12 +22,15 @@ DWORD AfsAvailable = 0; // krb5 functions DECL_FUNC_PTR(krb5_change_password); +DECL_FUNC_PTR(krb5_get_init_creds_opt_alloc); +DECL_FUNC_PTR(krb5_get_init_creds_opt_free); DECL_FUNC_PTR(krb5_get_init_creds_opt_init); DECL_FUNC_PTR(krb5_get_init_creds_opt_set_tkt_life); DECL_FUNC_PTR(krb5_get_init_creds_opt_set_renew_life); DECL_FUNC_PTR(krb5_get_init_creds_opt_set_forwardable); DECL_FUNC_PTR(krb5_get_init_creds_opt_set_proxiable); DECL_FUNC_PTR(krb5_get_init_creds_opt_set_address_list); +DECL_FUNC_PTR(krb5_get_init_creds_opt_set_out_ccache); DECL_FUNC_PTR(krb5_get_init_creds_password); DECL_FUNC_PTR(krb5_build_principal_ext); DECL_FUNC_PTR(krb5_cc_resolve); @@ -119,12 +122,15 @@ DECL_FUNC_PTR(cc_free_NC_info); FUNC_INFO k5_fi[] = { MAKE_FUNC_INFO(krb5_change_password), + MAKE_FUNC_INFO(krb5_get_init_creds_opt_alloc), + MAKE_FUNC_INFO(krb5_get_init_creds_opt_free), MAKE_FUNC_INFO(krb5_get_init_creds_opt_init), MAKE_FUNC_INFO(krb5_get_init_creds_opt_set_tkt_life), MAKE_FUNC_INFO(krb5_get_init_creds_opt_set_renew_life), MAKE_FUNC_INFO(krb5_get_init_creds_opt_set_forwardable), MAKE_FUNC_INFO(krb5_get_init_creds_opt_set_proxiable), MAKE_FUNC_INFO(krb5_get_init_creds_opt_set_address_list), + MAKE_FUNC_INFO(krb5_get_init_creds_opt_set_out_ccache), MAKE_FUNC_INFO(krb5_get_init_creds_password), MAKE_FUNC_INFO(krb5_build_principal_ext), MAKE_FUNC_INFO(krb5_cc_resolve), diff --git a/src/windows/leashdll/leashdll.h b/src/windows/leashdll/leashdll.h index 1b7ddfc12..6f34b9d47 100644 --- a/src/windows/leashdll/leashdll.h +++ b/src/windows/leashdll/leashdll.h @@ -160,6 +160,8 @@ extern DECL_FUNC_PTR(krb_life_to_time); // krb5 functions extern DECL_FUNC_PTR(krb5_change_password); +extern DECL_FUNC_PTR(krb5_get_init_creds_opt_alloc); +extern DECL_FUNC_PTR(krb5_get_init_creds_opt_free); extern DECL_FUNC_PTR(krb5_get_init_creds_opt_init); extern DECL_FUNC_PTR(krb5_get_init_creds_opt_set_tkt_life); extern DECL_FUNC_PTR(krb5_get_init_creds_opt_set_renew_life); @@ -167,6 +169,7 @@ extern DECL_FUNC_PTR(krb5_get_init_creds_opt_set_forwardable); extern DECL_FUNC_PTR(krb5_get_init_creds_opt_set_proxiable); extern DECL_FUNC_PTR(krb5_get_init_creds_opt_set_renew_life); extern DECL_FUNC_PTR(krb5_get_init_creds_opt_set_address_list); +extern DECL_FUNC_PTR(krb5_get_init_creds_opt_set_out_ccache); extern DECL_FUNC_PTR(krb5_get_init_creds_password); extern DECL_FUNC_PTR(krb5_build_principal_ext); extern DECL_FUNC_PTR(krb5_cc_resolve); |