diff options
Diffstat (limited to 'src/lib/krb5/os/sendto_kdc.c')
-rw-r--r-- | src/lib/krb5/os/sendto_kdc.c | 9 |
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]); |