summaryrefslogtreecommitdiffstats
path: root/src/lib/krb5/os/sendto_kdc.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/krb5/os/sendto_kdc.c')
-rw-r--r--src/lib/krb5/os/sendto_kdc.c9
1 files changed, 8 insertions, 1 deletions
diff --git a/src/lib/krb5/os/sendto_kdc.c b/src/lib/krb5/os/sendto_kdc.c
index 0a534b356e..f4fffee9ba 100644
--- a/src/lib/krb5/os/sendto_kdc.c
+++ b/src/lib/krb5/os/sendto_kdc.c
@@ -85,7 +85,6 @@ krb5_sendto_kdc (context, message, realm, reply)
socklist = (SOCKET *)malloc(naddr * sizeof(SOCKET));
if (socklist == NULL) {
krb5_xfree(addr);
- krb5_xfree(socklist);
return ENOMEM;
}
for (i = 0; i < naddr; i++)
@@ -98,6 +97,13 @@ krb5_sendto_kdc (context, message, realm, reply)
}
reply->length = krb5_max_dgram_size;
+ if (SOCKET_INITIALIZE()) { /* PC needs this for some tcp/ip stacks */
+ krb5_xfree(addr);
+ krb5_xfree(socklist);
+ free(reply->data);
+ return SOCKET_ERRNO;
+ }
+
/*
* do exponential backoff.
*/
@@ -197,6 +203,7 @@ krb5_sendto_kdc (context, message, realm, reply)
}
retval = KRB5_KDC_UNREACH;
out:
+ SOCKET_CLEANUP(); /* Done with sockets for now */
for (i = 0; i < naddr; i++)
if (socklist[i] != INVALID_SOCKET)
(void) closesocket (socklist[i]);