360 << params->getPosition() <<
")");
369 if (credentials_cache) {
373 string retry_interval_origin =
"default";
374 string retry_interval_location =
"";
377 if (global_retry_interval) {
378 retry_interval_origin =
"global";
379 retry_interval_location +=
" (";
380 retry_interval_location += global_retry_interval->getPosition().str();
381 retry_interval_location +=
")";
382 global_retry_val = global_retry_interval->intValue();
383 if ((global_retry_val < 0) ||
384 (global_retry_val > numeric_limits<uint32_t>::max())) {
386 "range [0.." << numeric_limits<uint32_t>::max()
387 <<
"]" << retry_interval_location);
391 string rekey_interval_origin =
"default";
392 string rekey_interval_location =
"";
395 if (global_rekey_interval) {
396 rekey_interval_origin =
"global";
397 rekey_interval_location +=
" (";
398 rekey_interval_location += global_rekey_interval->getPosition().str();
399 rekey_interval_location +=
")";
400 global_rekey_val = global_rekey_interval->intValue();
401 if ((global_rekey_val < 0) ||
402 (global_rekey_val > numeric_limits<uint32_t>::max())) {
404 "range [0.." << numeric_limits<uint32_t>::max()
405 <<
"]" << rekey_interval_location);
409 string tkey_lifetime_origin =
"default";
410 string tkey_lifetime_location =
"";
413 if (global_tkey_lifetime) {
414 tkey_lifetime_origin =
"global";
415 tkey_lifetime_location +=
" (";
416 tkey_lifetime_location += global_tkey_lifetime->getPosition().str();
417 tkey_lifetime_location +=
")";
418 global_tkey_lifetime_val = global_tkey_lifetime->intValue();
419 if ((global_tkey_lifetime_val < 0) ||
420 (global_tkey_lifetime_val > numeric_limits<uint32_t>::max())) {
422 "range [0.." << numeric_limits<uint32_t>::max()
423 <<
"]" << tkey_lifetime_location);
427 if (global_retry_val >= global_rekey_val) {
429 <<
" 'retry-interval' parameter"
430 << retry_interval_location <<
" must be smaller then the "
431 << rekey_interval_origin <<
" 'rekey-interval' parameter"
432 << retry_interval_location <<
": range [0.."
433 << global_rekey_val <<
"]");
436 if (global_rekey_val >= global_tkey_lifetime_val) {
438 <<
" 'rekey-interval' parameter"
439 << rekey_interval_location <<
" must be smaller than the "
440 << tkey_lifetime_origin <<
" 'tkey-lifetime' parameter"
441 << tkey_lifetime_location <<
": range [0.."
442 << global_tkey_lifetime_val <<
"]");
446 if (global_tkey_proto) {
447 string val = global_tkey_proto->stringValue();
448 if ((val !=
"UDP") && (val !=
"TCP")) {
450 "or TCP (" << global_tkey_proto->getPosition() <<
")");
457 if (global_tkey_timeout) {
458 int64_t val = global_tkey_timeout->intValue();
459 if ((val < 0) || (val > numeric_limits<uint32_t>::max())) {
461 "range [0.." << numeric_limits<uint32_t>::max()
462 <<
"] (" << global_tkey_timeout->getPosition() <<
")");
471 uint32_t max_tkey_lifetime = 0;
472 for (
auto const& map : servers->listValue()) {
478 "maps (" << map->getPosition() <<
")");
484 << map->getPosition() <<
")");
490 "gss_tsig server entry (" << map->getPosition() <<
")");
492 const string&
id = id_elem->stringValue();
495 "gss_tsig server entry (" << map->getPosition() <<
")");
499 "gss_tsig server entry (" << map->getPosition() <<
")");
504 if (domains_list && !domains_list->empty()) {
505 for (
auto const& domain : domains_list->listValue()) {
511 <<
"must contain only strings ("
512 << domain->getPosition() <<
")");
515 static_cast<void>(domains.insert(domain->stringValue()));
523 "gss_tsig server entry (" << map->getPosition() <<
")");
526 IOAddress addr(ip_address->stringValue());
527 if (map->contains(
"port")) {
529 numeric_limits<uint16_t>::max()));
530 srv.reset(
new DnsServer(
id, domains, addr,
531 static_cast<uint16_t
>(port)));
533 srv.reset(
new DnsServer(
id, domains, addr));
537 }
catch (
const std::exception& ex) {
539 <<
" (" << map->getPosition() <<
")");
543 bool server_principal_global =
false;
544 if (!server_principal) {
545 server_principal = params->get(
"server-principal");
546 server_principal_global =
true;
548 if (!server_principal) {
550 "gss_tsig server entry (" << map->getPosition() <<
")");
552 srv->setServerPrincipal(server_principal->stringValue());
554 srv->buildKeyNameSuffix();
555 }
catch (
const std::exception& ex) {
556 if (server_principal_global) {
559 << server_principal->getPosition() <<
")");
562 <<
" (" << server_principal->getPosition() <<
")");
567 if (!gss_replay_flag) {
568 gss_replay_flag = params->get(
"gss-replay-flag");
570 if (gss_replay_flag) {
571 srv->setGssReplayFlag(gss_replay_flag->boolValue());
575 if (!gss_sequence_flag) {
576 gss_sequence_flag = params->get(
"gss-sequence-flag");
578 if (gss_sequence_flag) {
579 srv->setGssSequenceFlag(gss_sequence_flag->boolValue());
583 if (!cred_principal) {
584 cred_principal = params->get(
"client-principal");
586 if (cred_principal) {
587 srv->setClientPrincipal(cred_principal->stringValue());
590 retry_interval_location =
"";
592 if (!retry_interval) {
593 retry_interval = global_retry_interval;
595 retry_interval_origin =
"server";
598 if (retry_interval) {
599 retry_interval_location +=
" (";
600 retry_interval_location += retry_interval->getPosition().str();
601 retry_interval_location +=
")";
602 retry_val = retry_interval->intValue();
603 if ((retry_val < 0) ||
604 (retry_val > numeric_limits<uint32_t>::max())) {
606 "range [0.." << numeric_limits<uint32_t>::max()
607 <<
"]" << retry_interval_location);
609 srv->setRetryInterval(retry_val);
612 rekey_interval_location =
"";
614 if (!rekey_interval) {
615 rekey_interval = global_rekey_interval;
617 rekey_interval_origin =
"server";
620 if (rekey_interval) {
621 rekey_interval_location +=
" (";
622 rekey_interval_location += rekey_interval->getPosition().str();
623 rekey_interval_location +=
")";
624 rekey_val = rekey_interval->intValue();
625 if ((rekey_val < 0) ||
626 (rekey_val > numeric_limits<uint32_t>::max())) {
628 "range [0.." << numeric_limits<uint32_t>::max()
629 <<
"]" << rekey_interval_location);
631 srv->setRekeyInterval(rekey_val);
634 tkey_lifetime_location =
"";
636 if (!tkey_lifetime) {
637 tkey_lifetime = global_tkey_lifetime;
639 tkey_lifetime_origin =
"server";
643 tkey_lifetime_location +=
" (";
644 tkey_lifetime_location += tkey_lifetime->getPosition().str();
645 tkey_lifetime_location +=
")";
646 tkey_lifetime_val = tkey_lifetime->intValue();
647 if ((tkey_lifetime_val < 0) ||
648 (tkey_lifetime_val > numeric_limits<uint32_t>::max())) {
650 "range [0.." << numeric_limits<uint32_t>::max()
651 <<
"]" << tkey_lifetime_location);
653 srv->setKeyLifetime(tkey_lifetime_val);
655 if (tkey_lifetime_val > max_tkey_lifetime) {
656 max_tkey_lifetime = tkey_lifetime_val;
659 if (retry_val >= rekey_val) {
661 <<
" 'retry-interval' parameter"
662 << retry_interval_location <<
" must be smaller then the "
663 << rekey_interval_origin <<
" 'rekey-interval' parameter"
664 << retry_interval_location <<
": range [0.."
665 << rekey_val <<
"]");
668 if (rekey_val >= tkey_lifetime_val) {
670 <<
" 'rekey-interval' parameter"
671 << rekey_interval_location <<
" must be smaller than the "
672 << tkey_lifetime_origin <<
" 'tkey-lifetime' parameter"
673 << tkey_lifetime_location <<
": range [0.."
674 << tkey_lifetime_val <<
"]");
679 tkey_proto = global_tkey_proto;
682 string val = tkey_proto->stringValue();
685 }
else if (val ==
"TCP") {
689 "or TCP (" << tkey_proto->getPosition() <<
")");
695 fallback = global_fallback;
698 srv->setFallback(fallback->boolValue());
703 tkey_timeout = global_tkey_timeout;
706 int64_t val = tkey_timeout->intValue();
707 if ((val < 0) || (val > numeric_limits<uint32_t>::max())) {
709 "range [0.." << numeric_limits<uint32_t>::max()
710 <<
"] (" << tkey_timeout->getPosition() <<
")");
712 srv->setExchangeTimeout(val);