summaryrefslogtreecommitdiffstats
path: root/src/kadmin/server
diff options
context:
space:
mode:
authorKen Raeburn <raeburn@mit.edu>2009-01-14 23:36:04 +0000
committerKen Raeburn <raeburn@mit.edu>2009-01-14 23:36:04 +0000
commit97af03eeb1b4ba7a982d066d8e3dbdc211892083 (patch)
treee5adef101fec40a416c99cfdb86507f5674a34e1 /src/kadmin/server
parent976e08fab4a7829e9fe1dc5fe8ee7b96862307a6 (diff)
downloadkrb5-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.c11
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;