{ FR_CONF_OFFSET("require_message_authenticator", FR_TYPE_BOOL, RADCLIENT, message_authenticator), .dflt = "no" },
+ { FR_CONF_OFFSET("dedup_authenticator", FR_TYPE_BOOL, RADCLIENT, dedup_authenticator), .dflt = "no" },
+
{ FR_CONF_OFFSET("secret", FR_TYPE_STRING | FR_TYPE_SECRET, RADCLIENT, secret) },
{ FR_CONF_OFFSET("shortname", FR_TYPE_STRING, RADCLIENT, shortname) },
bool dynamic; //!< Whether the client was dynamically defined.
bool active; //!< for dynamic clients
bool use_connected; //!< do we use connected sockets for this client
+ bool dedup_authenticator; //!< more RADIUS stuff
#ifdef WITH_TLS
bool tls_required; //!< whether TLS encryption is required.
return state;
}
-static int mod_track_compare(void const *instance, UNUSED void *thread_instance, UNUSED RADCLIENT *client,
+static int mod_track_compare(void const *instance, UNUSED void *thread_instance, RADCLIENT *client,
void const *one, void const *two)
{
int ret;
/*
* Do a better job of deduping input packet.
*/
- if (inst->dedup_authenticator) {
+ if (inst->dedup_authenticator || client->dedup_authenticator) {
ret = memcmp(a + 4, b + 4, RADIUS_AUTH_VECTOR_LENGTH);
if (ret != 0) return ret;
}