362 << params->getPosition() <<
")");
371 if (credentials_cache) {
375 string retry_interval_origin =
"default";
376 string retry_interval_location =
"";
379 if (global_retry_interval) {
380 retry_interval_origin =
"global";
381 retry_interval_location +=
" (";
382 retry_interval_location += global_retry_interval->getPosition().str();
383 retry_interval_location +=
")";
384 global_retry_val = global_retry_interval->intValue();
385 if ((global_retry_val < 0) ||
386 (global_retry_val > numeric_limits<uint32_t>::max())) {
388 "range [0.." << numeric_limits<uint32_t>::max()
389 <<
"]" << retry_interval_location);
393 string rekey_interval_origin =
"default";
394 string rekey_interval_location =
"";
397 if (global_rekey_interval) {
398 rekey_interval_origin =
"global";
399 rekey_interval_location +=
" (";
400 rekey_interval_location += global_rekey_interval->getPosition().str();
401 rekey_interval_location +=
")";
402 global_rekey_val = global_rekey_interval->intValue();
403 if ((global_rekey_val < 0) ||
404 (global_rekey_val > numeric_limits<uint32_t>::max())) {
406 "range [0.." << numeric_limits<uint32_t>::max()
407 <<
"]" << rekey_interval_location);
411 string tkey_lifetime_origin =
"default";
412 string tkey_lifetime_location =
"";
415 if (global_tkey_lifetime) {
416 tkey_lifetime_origin =
"global";
417 tkey_lifetime_location +=
" (";
418 tkey_lifetime_location += global_tkey_lifetime->getPosition().str();
419 tkey_lifetime_location +=
")";
420 global_tkey_lifetime_val = global_tkey_lifetime->intValue();
421 if ((global_tkey_lifetime_val < 0) ||
422 (global_tkey_lifetime_val > numeric_limits<uint32_t>::max())) {
424 "range [0.." << numeric_limits<uint32_t>::max()
425 <<
"]" << tkey_lifetime_location);
429 if (global_retry_val >= global_rekey_val) {
431 <<
" 'retry-interval' parameter"
432 << retry_interval_location <<
" must be smaller then the "
433 << rekey_interval_origin <<
" 'rekey-interval' parameter"
434 << retry_interval_location <<
": range [0.."
435 << global_rekey_val <<
"]");
438 if (global_rekey_val >= global_tkey_lifetime_val) {
440 <<
" 'rekey-interval' parameter"
441 << rekey_interval_location <<
" must be smaller than the "
442 << tkey_lifetime_origin <<
" 'tkey-lifetime' parameter"
443 << tkey_lifetime_location <<
": range [0.."
444 << global_tkey_lifetime_val <<
"]");
448 if (global_tkey_proto) {
449 string val = global_tkey_proto->stringValue();
450 if ((val !=
"UDP") && (val !=
"TCP")) {
452 "or TCP (" << global_tkey_proto->getPosition() <<
")");
459 if (global_tkey_timeout) {
460 int64_t val = global_tkey_timeout->intValue();
461 if ((val < 0) || (val > numeric_limits<uint32_t>::max())) {
463 "range [0.." << numeric_limits<uint32_t>::max()
464 <<
"] (" << global_tkey_timeout->getPosition() <<
")");
468 ConstElementPtr ignore_bad_direction = params->get(
"ignore-bad-direction");
469 if (ignore_bad_direction) {
470 bool val = ignore_bad_direction->boolValue();
471 ignore_bad_direction_ = val;
480 uint32_t max_tkey_lifetime = 0;
481 for (
auto const& map : servers->listValue()) {
487 "maps (" << map->getPosition() <<
")");
493 << map->getPosition() <<
")");
499 "gss_tsig server entry (" << map->getPosition() <<
")");
501 const string&
id = id_elem->stringValue();
504 "gss_tsig server entry (" << map->getPosition() <<
")");
508 "gss_tsig server entry (" << map->getPosition() <<
")");
513 if (domains_list && !domains_list->empty()) {
514 for (
auto const& domain : domains_list->listValue()) {
520 <<
"must contain only strings ("
521 << domain->getPosition() <<
")");
524 static_cast<void>(domains.insert(domain->stringValue()));
532 "gss_tsig server entry (" << map->getPosition() <<
")");
535 IOAddress addr(ip_address->stringValue());
536 if (map->contains(
"port")) {
538 numeric_limits<uint16_t>::max()));
539 srv.reset(
new DnsServer(
id, domains, addr,
540 static_cast<uint16_t
>(port)));
542 srv.reset(
new DnsServer(
id, domains, addr));
546 }
catch (
const std::exception& ex) {
548 <<
" (" << map->getPosition() <<
")");
552 bool server_principal_global =
false;
553 if (!server_principal) {
554 server_principal = params->get(
"server-principal");
555 server_principal_global =
true;
557 if (!server_principal) {
559 "gss_tsig server entry (" << map->getPosition() <<
")");
561 srv->setServerPrincipal(server_principal->stringValue());
563 srv->buildKeyNameSuffix();
564 }
catch (
const std::exception& ex) {
565 if (server_principal_global) {
568 << server_principal->getPosition() <<
")");
571 <<
" (" << server_principal->getPosition() <<
")");
576 if (!gss_replay_flag) {
577 gss_replay_flag = params->get(
"gss-replay-flag");
579 if (gss_replay_flag) {
580 srv->setGssReplayFlag(gss_replay_flag->boolValue());
584 if (!gss_sequence_flag) {
585 gss_sequence_flag = params->get(
"gss-sequence-flag");
587 if (gss_sequence_flag) {
588 srv->setGssSequenceFlag(gss_sequence_flag->boolValue());
592 if (!cred_principal) {
593 cred_principal = params->get(
"client-principal");
595 if (cred_principal) {
596 srv->setClientPrincipal(cred_principal->stringValue());
599 retry_interval_location =
"";
601 if (!retry_interval) {
602 retry_interval = global_retry_interval;
604 retry_interval_origin =
"server";
607 if (retry_interval) {
608 retry_interval_location +=
" (";
609 retry_interval_location += retry_interval->getPosition().str();
610 retry_interval_location +=
")";
611 retry_val = retry_interval->intValue();
612 if ((retry_val < 0) ||
613 (retry_val > numeric_limits<uint32_t>::max())) {
615 "range [0.." << numeric_limits<uint32_t>::max()
616 <<
"]" << retry_interval_location);
618 srv->setRetryInterval(retry_val);
621 rekey_interval_location =
"";
623 if (!rekey_interval) {
624 rekey_interval = global_rekey_interval;
626 rekey_interval_origin =
"server";
629 if (rekey_interval) {
630 rekey_interval_location +=
" (";
631 rekey_interval_location += rekey_interval->getPosition().str();
632 rekey_interval_location +=
")";
633 rekey_val = rekey_interval->intValue();
634 if ((rekey_val < 0) ||
635 (rekey_val > numeric_limits<uint32_t>::max())) {
637 "range [0.." << numeric_limits<uint32_t>::max()
638 <<
"]" << rekey_interval_location);
640 srv->setRekeyInterval(rekey_val);
643 tkey_lifetime_location =
"";
645 if (!tkey_lifetime) {
646 tkey_lifetime = global_tkey_lifetime;
648 tkey_lifetime_origin =
"server";
652 tkey_lifetime_location +=
" (";
653 tkey_lifetime_location += tkey_lifetime->getPosition().str();
654 tkey_lifetime_location +=
")";
655 tkey_lifetime_val = tkey_lifetime->intValue();
656 if ((tkey_lifetime_val < 0) ||
657 (tkey_lifetime_val > numeric_limits<uint32_t>::max())) {
659 "range [0.." << numeric_limits<uint32_t>::max()
660 <<
"]" << tkey_lifetime_location);
662 srv->setKeyLifetime(tkey_lifetime_val);
664 if (tkey_lifetime_val > max_tkey_lifetime) {
665 max_tkey_lifetime = tkey_lifetime_val;
668 if (retry_val >= rekey_val) {
670 <<
" 'retry-interval' parameter"
671 << retry_interval_location <<
" must be smaller then the "
672 << rekey_interval_origin <<
" 'rekey-interval' parameter"
673 << retry_interval_location <<
": range [0.."
674 << rekey_val <<
"]");
677 if (rekey_val >= tkey_lifetime_val) {
679 <<
" 'rekey-interval' parameter"
680 << rekey_interval_location <<
" must be smaller than the "
681 << tkey_lifetime_origin <<
" 'tkey-lifetime' parameter"
682 << tkey_lifetime_location <<
": range [0.."
683 << tkey_lifetime_val <<
"]");
688 tkey_proto = global_tkey_proto;
691 string val = tkey_proto->stringValue();
694 }
else if (val ==
"TCP") {
698 "or TCP (" << tkey_proto->getPosition() <<
")");
704 fallback = global_fallback;
707 srv->setFallback(fallback->boolValue());
712 tkey_timeout = global_tkey_timeout;
715 int64_t val = tkey_timeout->intValue();
716 if ((val < 0) || (val > numeric_limits<uint32_t>::max())) {
718 "range [0.." << numeric_limits<uint32_t>::max()
719 <<
"] (" << tkey_timeout->getPosition() <<
")");
721 srv->setExchangeTimeout(val);