/*
* -T options:
*/
+static bool cookiealwaysvalid = false;
static bool dropedns = false;
static bool ednsformerr = false;
static bool ednsnotimp = false;
* force the server to behave (or misbehave) in
* specified ways for testing purposes.
*/
- if (!strcmp(option, "dropedns")) {
+ if (!strcmp(option, "cookiealwaysvalid")) {
+ cookiealwaysvalid = true;
+ } else if (!strcmp(option, "dropedns")) {
dropedns = true;
} else if (!strcmp(option, "ednsformerr")) {
ednsformerr = true;
/*
* Modify server context according to command line options
*/
+ if (cookiealwaysvalid) {
+ ns_server_setoption(sctx, NS_SERVER_COOKIEALWAYSVALID, true);
+ }
if (disable4) {
ns_server_setoption(sctx, NS_SERVER_DISABLE4, true);
}
foreach my $t_option(
"dropedns", "ednsformerr", "ednsnotimp", "ednsrefused",
- "noaa", "noedns", "nosoa", "maxudp512", "maxudp1460",
+ "cookiealwaysvalid", "noaa", "noedns", "nosoa",
+ "maxudp512", "maxudp1460",
) {
if (-e "$testdir/$server/named.$t_option") {
$command .= "-T $t_option "
isc_stdtime_t now;
uint32_t when;
isc_buffer_t db;
+ bool alwaysvalid;
/*
* If we have already seen a cookie option skip this cookie option.
when = isc_buffer_getuint32(buf);
isc_buffer_forward(buf, 8);
+ /*
+ * For '-T cookiealwaysvalid' still process everything to not skew any
+ * performance tests involving cookies, but make sure that the cookie
+ * check passes in the end, given the cookie was structurally correct.
+ */
+ alwaysvalid = ns_server_getoption(client->manager->sctx,
+ NS_SERVER_COOKIEALWAYSVALID);
+
/*
* Allow for a 5 minute clock skew between servers sharing a secret.
* Only accept COOKIE if we have talked to the client in the last hour.
*/
now = isc_stdtime_now();
+ if (alwaysvalid) {
+ now = when;
+ }
if (isc_serial_gt(when, (now + 300)) /* In the future. */ ||
isc_serial_lt(when, (now - 3600)) /* In the past. */)
{
isc_buffer_init(&db, dbuf, sizeof(dbuf));
compute_cookie(client, when, client->manager->sctx->secret, &db);
- if (isc_safe_memequal(old, dbuf, COOKIE_SIZE)) {
+ if (isc_safe_memequal(old, dbuf, COOKIE_SIZE) || alwaysvalid) {
ns_stats_increment(client->manager->sctx->nsstats,
ns_statscounter_cookiematch);
client->attributes |= NS_CLIENTATTR_HAVECOOKIE;
#include <ns/types.h>
-#define NS_SERVER_LOGQUERIES 0x00000001U /*%< log queries */
-#define NS_SERVER_NOAA 0x00000002U /*%< -T noaa */
-#define NS_SERVER_NOSOA 0x00000004U /*%< -T nosoa */
-#define NS_SERVER_NONEAREST 0x00000008U /*%< -T nonearest */
-#define NS_SERVER_NOEDNS 0x00000020U /*%< -T noedns */
-#define NS_SERVER_DROPEDNS 0x00000040U /*%< -T dropedns */
-#define NS_SERVER_NOTCP 0x00000080U /*%< -T notcp */
-#define NS_SERVER_DISABLE4 0x00000100U /*%< -6 */
-#define NS_SERVER_DISABLE6 0x00000200U /*%< -4 */
-#define NS_SERVER_FIXEDLOCAL 0x00000400U /*%< -T fixedlocal */
-#define NS_SERVER_SIGVALINSECS 0x00000800U /*%< -T sigvalinsecs */
-#define NS_SERVER_EDNSFORMERR 0x00001000U /*%< -T ednsformerr (STD13) */
-#define NS_SERVER_EDNSNOTIMP 0x00002000U /*%< -T ednsnotimp */
-#define NS_SERVER_EDNSREFUSED 0x00004000U /*%< -T ednsrefused */
-#define NS_SERVER_TRANSFERINSECS 0x00008000U /*%< -T transferinsecs */
-#define NS_SERVER_TRANSFERSLOWLY 0x00010000U /*%< -T transferslowly */
-#define NS_SERVER_TRANSFERSTUCK 0x00020000U /*%< -T transferstuck */
-#define NS_SERVER_LOGRESPONSES 0x00040000U /*%< log responses */
+#define NS_SERVER_LOGQUERIES 0x00000001U /*%< log queries */
+#define NS_SERVER_NOAA 0x00000002U /*%< -T noaa */
+#define NS_SERVER_NOSOA 0x00000004U /*%< -T nosoa */
+#define NS_SERVER_NONEAREST 0x00000008U /*%< -T nonearest */
+#define NS_SERVER_NOEDNS 0x00000020U /*%< -T noedns */
+#define NS_SERVER_DROPEDNS 0x00000040U /*%< -T dropedns */
+#define NS_SERVER_NOTCP 0x00000080U /*%< -T notcp */
+#define NS_SERVER_DISABLE4 0x00000100U /*%< -6 */
+#define NS_SERVER_DISABLE6 0x00000200U /*%< -4 */
+#define NS_SERVER_FIXEDLOCAL 0x00000400U /*%< -T fixedlocal */
+#define NS_SERVER_SIGVALINSECS 0x00000800U /*%< -T sigvalinsecs */
+#define NS_SERVER_EDNSFORMERR 0x00001000U /*%< -T ednsformerr (STD13) */
+#define NS_SERVER_EDNSNOTIMP 0x00002000U /*%< -T ednsnotimp */
+#define NS_SERVER_EDNSREFUSED 0x00004000U /*%< -T ednsrefused */
+#define NS_SERVER_TRANSFERINSECS 0x00008000U /*%< -T transferinsecs */
+#define NS_SERVER_TRANSFERSLOWLY 0x00010000U /*%< -T transferslowly */
+#define NS_SERVER_TRANSFERSTUCK 0x00020000U /*%< -T transferstuck */
+#define NS_SERVER_LOGRESPONSES 0x00040000U /*%< log responses */
+#define NS_SERVER_COOKIEALWAYSVALID 0x00080000U /*%< -T cookiealwaysvalid */
/*%
* Type for callback function to get hostname.