aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNathaniel McCallum <npmccallum@redhat.com>2015-08-07 15:35:58 -0400
committerTom Yu <tlyu@mit.edu>2015-08-18 16:57:41 -0400
commit051a31aac553defb2ef0ed4354b799090899904e (patch)
tree1970675d4f25d93a2cf6d997205445b0e1f4932d
parent6ee030430abcfd76294b6599ccaa24c4d36674db (diff)
downloadkrb5-051a31aac553defb2ef0ed4354b799090899904e.zip
krb5-051a31aac553defb2ef0ed4354b799090899904e.tar.gz
krb5-051a31aac553defb2ef0ed4354b799090899904e.tar.bz2
Do not allow stream socket retries in libkrad
Before this patch, libkrad would follow the same exact logic for all socket types when the retries parameter was non-zero. This meant that when connecting with SOCK_STREAM, multiple requests were sent in case of packet drops, which, of course, cannot happen for SOCK_STREAM. Instead, just disable retries for SOCK_STREAM sockets. [ghudson@mit.edu: minor wording edits] (cherry picked from commit 25e0656fdf9862faf9aa91288023776e9a47caad) ticket: 8229 version_fixed: 1.13.3 status: resolved
-rw-r--r--src/include/krad.h3
-rw-r--r--src/lib/krad/remote.c3
2 files changed, 5 insertions, 1 deletions
diff --git a/src/include/krad.h b/src/include/krad.h
index 913464c..e4edb52 100644
--- a/src/include/krad.h
+++ b/src/include/krad.h
@@ -251,7 +251,8 @@ krad_client_free(krad_client *client);
* - hostname:service
*
* The timeout parameter (milliseconds) is the total timeout across all remote
- * hosts (when DNS returns multiple entries) and all retries.
+ * hosts (when DNS returns multiple entries) and all retries. For stream
+ * sockets, the retries parameter is ignored and no retries are performed.
*
* The cb function will be called with the data argument when either a response
* is received or the request times out on all possible remote hosts.
diff --git a/src/lib/krad/remote.c b/src/lib/krad/remote.c
index 795485f..aaabffd 100644
--- a/src/lib/krad/remote.c
+++ b/src/lib/krad/remote.c
@@ -448,6 +448,9 @@ kr_remote_send(krad_remote *rr, krad_code code, krad_attrset *attrs,
krb5_error_code retval;
request *r;
+ if (rr->info->ai_socktype == SOCK_STREAM)
+ retries = 0;
+
r = TAILQ_FIRST(&rr->list);
retval = krad_packet_new_request(rr->kctx, rr->secret, code, attrs,
(krad_packet_iter_cb)iterator, &r, &tmp);