diff options
author | Ken Raeburn <raeburn@mit.edu> | 2009-01-14 23:36:04 +0000 |
---|---|---|
committer | Ken Raeburn <raeburn@mit.edu> | 2009-01-14 23:36:04 +0000 |
commit | 97af03eeb1b4ba7a982d066d8e3dbdc211892083 (patch) | |
tree | e5adef101fec40a416c99cfdb86507f5674a34e1 /src/kadmin/server | |
parent | 976e08fab4a7829e9fe1dc5fe8ee7b96862307a6 (diff) | |
download | krb5-97af03eeb1b4ba7a982d066d8e3dbdc211892083.tar.gz krb5-97af03eeb1b4ba7a982d066d8e3dbdc211892083.tar.xz krb5-97af03eeb1b4ba7a982d066d8e3dbdc211892083.zip |
If we have a local UDP socket without the PKTINFO option set, it's
bound to a local address, so use getsockname to extract the local
(destination) address.
ticket: 6335
git-svn-id: svn://anonsvn.mit.edu/krb5/trunk@21748 dc483132-0cff-0310-8789-dd5450dbe970
Diffstat (limited to 'src/kadmin/server')
-rw-r--r-- | src/kadmin/server/network.c | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/src/kadmin/server/network.c b/src/kadmin/server/network.c index 8382b7350..df3f01cf0 100644 --- a/src/kadmin/server/network.c +++ b/src/kadmin/server/network.c @@ -1401,6 +1401,17 @@ static void process_packet(void *handle, } #endif + if (daddr_len == 0 && conn->type == CONN_UDP) { + /* If the PKTINFO option isn't set, this socket should be + bound to a specific local address. This info probably + should've been saved in our socket data structure at setup + time. */ + daddr_len = sizeof(daddr); + if (getsockname(port_fd, (struct sockaddr *)&daddr, &daddr_len) != 0) + daddr_len = 0; + /* On failure, keep going anyways. */ + } + request.length = cc; request.data = pktbuf; faddr.address = &addr; |