summaryrefslogtreecommitdiffstats
path: root/src/lib
diff options
context:
space:
mode:
authorKen Raeburn <raeburn@mit.edu>2002-07-08 19:48:36 +0000
committerKen Raeburn <raeburn@mit.edu>2002-07-08 19:48:36 +0000
commite30be15aa7fef3e9d02334670b6f4d34a8e4380d (patch)
treef51ecafc0aac3417c62b695551a4584d62405832 /src/lib
parent0b3ec0d3e5f2b0b0e379e0a6e51c6e4e4d109b93 (diff)
downloadkrb5-e30be15aa7fef3e9d02334670b6f4d34a8e4380d.tar.gz
krb5-e30be15aa7fef3e9d02334670b6f4d34a8e4380d.tar.xz
krb5-e30be15aa7fef3e9d02334670b6f4d34a8e4380d.zip
Add hooks to optionally report local address used when contacting a KDC-like
service via UDP. Currently unused, this will eventually be used for MacOS support for krb524. git-svn-id: svn://anonsvn.mit.edu/krb5/trunk@14615 dc483132-0cff-0310-8789-dd5450dbe970
Diffstat (limited to 'src/lib')
-rw-r--r--src/lib/krb5/os/ChangeLog6
-rw-r--r--src/lib/krb5/os/sendto_kdc.c15
2 files changed, 19 insertions, 2 deletions
diff --git a/src/lib/krb5/os/ChangeLog b/src/lib/krb5/os/ChangeLog
index 77aacb761..5407c97f4 100644
--- a/src/lib/krb5/os/ChangeLog
+++ b/src/lib/krb5/os/ChangeLog
@@ -1,3 +1,9 @@
+2002-07-08 Ken Raeburn <raeburn@mit.edu>
+
+ * sendto_kdc.c (krb5int_sendto_udp): Accept new args for optional
+ location to store local address used to contact server.
+ (krb5_sendto_kdc): Update call to pass 0.
+
2002-07-05 Ken Raeburn <raeburn@mit.edu>
* sendto_kdc.c (service_tcp_fd): sockerrlen should have type
diff --git a/src/lib/krb5/os/sendto_kdc.c b/src/lib/krb5/os/sendto_kdc.c
index bd05fc576..2d64ac3e3 100644
--- a/src/lib/krb5/os/sendto_kdc.c
+++ b/src/lib/krb5/os/sendto_kdc.c
@@ -108,7 +108,8 @@ krb5_sendto_kdc (context, message, realm, reply, use_master, tcp_only)
&& message->length < 1500
&& ! krb5_locate_kdc(context, realm, &addrs, use_master, SOCK_DGRAM)) {
if (addrs.naddrs > 0) {
- retval = krb5int_sendto_udp (context, message, &addrs, reply);
+ retval = krb5int_sendto_udp (context, message, &addrs, reply,
+ 0, 0);
krb5int_free_addrlist (&addrs);
if (retval == 0)
return 0;
@@ -173,7 +174,8 @@ static void print_fdsets (FILE *, fd_set *, fd_set *, fd_set *, int);
krb5_error_code
krb5int_sendto_udp (krb5_context context, const krb5_data *message,
- const struct addrlist *addrs, krb5_data *reply)
+ const struct addrlist *addrs, krb5_data *reply,
+ struct sockaddr *localaddr, socklen_t *localaddrlen)
{
int host, i;
unsigned int timeout;
@@ -323,6 +325,15 @@ krb5int_sendto_udp (krb5_context context, const krb5_data *message,
reply->length = cc;
retval = 0;
dfprintf((stderr, "got answer on fd %d\n", socklist[host]));
+ if (localaddr != 0 && localaddrlen != 0 && *localaddrlen > 0) {
+ if (getsockname(socklist[host], localaddr, localaddrlen) == SOCKET_ERROR) {
+ /* Don't report it, just go on. */
+#ifdef DEBUG
+ dperror("getsockname");
+#endif
+ *localaddrlen = 0;
+ }
+ }
goto out;
} else if (nready == 0) {
/* timeout */