diff options
Diffstat (limited to 'src/lib/krb5/krb/mk_safe.c')
-rw-r--r-- | src/lib/krb5/krb/mk_safe.c | 42 |
1 files changed, 38 insertions, 4 deletions
diff --git a/src/lib/krb5/krb/mk_safe.c b/src/lib/krb5/krb/mk_safe.c index 29eac3e..06c0022 100644 --- a/src/lib/krb5/krb/mk_safe.c +++ b/src/lib/krb5/krb/mk_safe.c @@ -24,7 +24,8 @@ * krb5_mk_safe() */ -#include "k5-int.h" +#include <k5-int.h> +#include "cleanup.h" #include "auth_con.h" /* @@ -166,11 +167,44 @@ krb5_mk_safe(context, auth_context, userdata, outbuf, outdata) } } +{ + krb5_address * premote_fulladdr = NULL; + krb5_address * plocal_fulladdr = NULL; + krb5_address remote_fulladdr; + krb5_address local_fulladdr; + + CLEANUP_INIT(2); + + if (auth_context->local_addr) { + if (!(retval = krb5_make_fulladdr(context, auth_context->local_addr, + auth_context->local_port, &local_fulladdr))){ + CLEANUP_PUSH(&local_fulladdr.contents, free); + plocal_fulladdr = &local_fulladdr; + } else { + goto error; + } + } + + if (auth_context->remote_addr) { + if (!(retval = krb5_make_fulladdr(context, auth_context->remote_addr, + auth_context->remote_port, &remote_fulladdr))){ + CLEANUP_PUSH(&remote_fulladdr.contents, free); + premote_fulladdr = &remote_fulladdr; + } else { + CLEANUP_DONE(); + goto error; + } + } + if (retval = krb5_mk_safe_basic(context, userdata, keyblock, &replaydata, - auth_context->local_addr, - auth_context->remote_addr, - auth_context->cksumtype, outbuf)) + plocal_fulladdr, premote_fulladdr, + auth_context->cksumtype, outbuf)) { + CLEANUP_DONE(); goto error; + } + + CLEANUP_DONE(); +} if (auth_context->auth_context_flags & KRB5_AUTH_CONTEXT_DO_TIME) { krb5_donot_replay replay; |