aboutsummaryrefslogtreecommitdiff
path: root/src/lib/krb5/krb/rd_cred.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/krb5/krb/rd_cred.c')
-rw-r--r--src/lib/krb5/krb/rd_cred.c39
1 files changed, 37 insertions, 2 deletions
diff --git a/src/lib/krb5/krb/rd_cred.c b/src/lib/krb5/krb/rd_cred.c
index f221d9a..8e18a30 100644
--- a/src/lib/krb5/krb/rd_cred.c
+++ b/src/lib/krb5/krb/rd_cred.c
@@ -1,4 +1,5 @@
#include <k5-int.h>
+#include "cleanup.h"
#include "auth_con.h"
#include <stddef.h> /* NULL */
@@ -232,10 +233,44 @@ krb5_rd_cred(context, auth_context, pcreddata, pppcreds, outdata)
(auth_context->rcache == NULL))
return KRB5_RC_REQUIRED;
+{
+ 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 {
+ return retval;
+ }
+ }
+
+ 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();
+ return retval;
+ }
+ }
+
if (retval = krb5_rd_cred_basic(context, pcreddata, keyblock,
- auth_context->local_addr, auth_context->remote_addr,
- &replaydata, pppcreds))
+ plocal_fulladdr, premote_fulladdr,
+ &replaydata, pppcreds)) {
+ CLEANUP_DONE();
return retval;
+ }
+
+ CLEANUP_DONE();
+}
+
if (auth_context->auth_context_flags & KRB5_AUTH_CONTEXT_DO_TIME) {
krb5_donot_replay replay;