The dns_adb_getcookie() doesn't use the 'adb' parameter, remove it.
Refactor the dns_adb_getcookie() function to just return the size of
the cookie when the caller passes 'NULL' as the 'cookie' argument.
}
size_t
-dns_adb_getcookie(dns_adb_t *adb, dns_adbaddrinfo_t *addr,
- unsigned char *cookie, size_t len) {
- REQUIRE(DNS_ADB_VALID(adb));
+dns_adb_getcookie(dns_adbaddrinfo_t *addr, unsigned char *cookie, size_t len) {
REQUIRE(DNS_ADBADDRINFO_VALID(addr));
dns_adbentry_t *entry = addr->entry;
LOCK(&entry->lock);
- if (cookie != NULL && entry->cookie != NULL && len >= entry->cookielen)
- {
- memmove(cookie, entry->cookie, entry->cookielen);
- len = entry->cookielen;
- } else {
+ if (entry->cookie == NULL) {
len = 0;
+ goto unlock;
}
+ if (cookie != NULL) {
+ if (len < entry->cookielen) {
+ len = 0;
+ goto unlock;
+ }
+ memmove(cookie, entry->cookie, entry->cookielen);
+ }
+ len = entry->cookielen;
+
+unlock:
UNLOCK(&entry->lock);
return (len);
*/
size_t
-dns_adb_getcookie(dns_adb_t *adb, dns_adbaddrinfo_t *addr,
- unsigned char *cookie, size_t len);
+dns_adb_getcookie(dns_adbaddrinfo_t *addr, unsigned char *cookie, size_t len);
/*
- * Retrieve the saved COOKIE value and store it in 'cookie' which has
- * size 'len'.
+ * If 'cookie' is not NULL, then retrieve the saved COOKIE value and store it
+ * in 'cookie' which has size 'len'.
*
* Requires:
- *\li 'adb' is valid.
*\li 'addr' is valid.
*
* Returns:
- * The size of the cookie or zero if it doesn't fit in the buffer
- * or it doesn't exist.
+ * The size of the cookie or zero if it doesn't exist, or when 'cookie' is
+ * not NULL and it doesn't fit in the buffer.
*/
void
ednsopts[ednsopt].code = DNS_OPT_COOKIE;
ednsopts[ednsopt].length =
(uint16_t)dns_adb_getcookie(
- fctx->adb, query->addrinfo,
- cookie, sizeof(cookie));
+ query->addrinfo, cookie,
+ sizeof(cookie));
if (ednsopts[ednsopt].length != 0) {
ednsopts[ednsopt].value = cookie;
inc_stats(
!query->rmessage->cc_ok && !query->rmessage->cc_bad &&
(rctx.retryopts & DNS_FETCHOPT_TCP) == 0)
{
- unsigned char cookie[COOKIE_BUFFER_SIZE];
- if (dns_adb_getcookie(fctx->adb, query->addrinfo, cookie,
- sizeof(cookie)) > CLIENT_COOKIE_SIZE)
+ if (dns_adb_getcookie(query->addrinfo, NULL, 0) >
+ CLIENT_COOKIE_SIZE)
{
if (isc_log_wouldlog(dns_lctx, ISC_LOG_INFO)) {
char addrbuf[ISC_SOCKADDR_FORMATSIZE];