359 << params->getPosition() <<
")");
368 if (credentials_cache) {
372 string retry_interval_origin =
"default";
373 string retry_interval_location =
"";
376 if (global_retry_interval) {
377 retry_interval_origin =
"global";
378 retry_interval_location +=
" (";
379 retry_interval_location += global_retry_interval->getPosition().str();
380 retry_interval_location +=
")";
381 global_retry_val = global_retry_interval->intValue();
382 if ((global_retry_val < 0) ||
383 (global_retry_val > numeric_limits<uint32_t>::max())) {
385 "range [0.." << numeric_limits<uint32_t>::max()
386 <<
"]" << retry_interval_location);
390 string rekey_interval_origin =
"default";
391 string rekey_interval_location =
"";
394 if (global_rekey_interval) {
395 rekey_interval_origin =
"global";
396 rekey_interval_location +=
" (";
397 rekey_interval_location += global_rekey_interval->getPosition().str();
398 rekey_interval_location +=
")";
399 global_rekey_val = global_rekey_interval->intValue();
400 if ((global_rekey_val < 0) ||
401 (global_rekey_val > numeric_limits<uint32_t>::max())) {
403 "range [0.." << numeric_limits<uint32_t>::max()
404 <<
"]" << rekey_interval_location);
408 string tkey_lifetime_origin =
"default";
409 string tkey_lifetime_location =
"";
412 if (global_tkey_lifetime) {
413 tkey_lifetime_origin =
"global";
414 tkey_lifetime_location +=
" (";
415 tkey_lifetime_location += global_tkey_lifetime->getPosition().str();
416 tkey_lifetime_location +=
")";
417 global_tkey_lifetime_val = global_tkey_lifetime->intValue();
418 if ((global_tkey_lifetime_val < 0) ||
419 (global_tkey_lifetime_val > numeric_limits<uint32_t>::max())) {
421 "range [0.." << numeric_limits<uint32_t>::max()
422 <<
"]" << tkey_lifetime_location);
426 if (global_retry_val >= global_rekey_val) {
428 <<
" 'retry-interval' parameter"
429 << retry_interval_location <<
" must be smaller then the "
430 << rekey_interval_origin <<
" 'rekey-interval' parameter"
431 << retry_interval_location <<
": range [0.."
432 << global_rekey_val <<
"]");
435 if (global_rekey_val >= global_tkey_lifetime_val) {
437 <<
" 'rekey-interval' parameter"
438 << rekey_interval_location <<
" must be smaller than the "
439 << tkey_lifetime_origin <<
" 'tkey-lifetime' parameter"
440 << tkey_lifetime_location <<
": range [0.."
441 << global_tkey_lifetime_val <<
"]");
445 if (global_tkey_proto) {
446 string val = global_tkey_proto->stringValue();
447 if ((val !=
"UDP") && (val !=
"TCP")) {
449 "or TCP (" << global_tkey_proto->getPosition() <<
")");
456 if (global_tkey_timeout) {
457 int64_t val = global_tkey_timeout->intValue();
458 if ((val < 0) || (val > numeric_limits<uint32_t>::max())) {
460 "range [0.." << numeric_limits<uint32_t>::max()
461 <<
"] (" << global_tkey_timeout->getPosition() <<
")");
470 uint32_t max_tkey_lifetime = 0;
471 for (
auto const& map : servers->listValue()) {
477 "maps (" << map->getPosition() <<
")");
483 << map->getPosition() <<
")");
489 "gss_tsig server entry (" << map->getPosition() <<
")");
491 const string&
id = id_elem->stringValue();
494 "gss_tsig server entry (" << map->getPosition() <<
")");
498 "gss_tsig server entry (" << map->getPosition() <<
")");
503 if (domains_list && !domains_list->empty()) {
504 for (
auto const& domain : domains_list->listValue()) {
510 <<
"must contain only strings ("
511 << domain->getPosition() <<
")");
514 static_cast<void>(domains.insert(domain->stringValue()));
522 "gss_tsig server entry (" << map->getPosition() <<
")");
525 IOAddress addr(ip_address->stringValue());
526 if (map->contains(
"port")) {
528 numeric_limits<uint16_t>::max()));
529 srv.reset(
new DnsServer(
id, domains, addr,
530 static_cast<uint16_t
>(port)));
532 srv.reset(
new DnsServer(
id, domains, addr));
536 }
catch (
const std::exception& ex) {
538 <<
" (" << map->getPosition() <<
")");
542 bool server_principal_global =
false;
543 if (!server_principal) {
544 server_principal = params->get(
"server-principal");
545 server_principal_global =
true;
547 if (!server_principal) {
549 "gss_tsig server entry (" << map->getPosition() <<
")");
551 srv->setServerPrincipal(server_principal->stringValue());
553 srv->buildKeyNameSuffix();
554 }
catch (
const std::exception& ex) {
555 if (server_principal_global) {
558 << server_principal->getPosition() <<
")");
561 <<
" (" << server_principal->getPosition() <<
")");
566 if (!gss_replay_flag) {
567 gss_replay_flag = params->get(
"gss-replay-flag");
569 if (gss_replay_flag) {
570 srv->setGssReplayFlag(gss_replay_flag->boolValue());
574 if (!gss_sequence_flag) {
575 gss_sequence_flag = params->get(
"gss-sequence-flag");
577 if (gss_sequence_flag) {
578 srv->setGssSequenceFlag(gss_sequence_flag->boolValue());
582 if (!cred_principal) {
583 cred_principal = params->get(
"client-principal");
585 if (cred_principal) {
586 srv->setClientPrincipal(cred_principal->stringValue());
589 retry_interval_location =
"";
591 if (!retry_interval) {
592 retry_interval = global_retry_interval;
594 retry_interval_origin =
"server";
597 if (retry_interval) {
598 retry_interval_location +=
" (";
599 retry_interval_location += retry_interval->getPosition().str();
600 retry_interval_location +=
")";
601 retry_val = retry_interval->intValue();
602 if ((retry_val < 0) ||
603 (retry_val > numeric_limits<uint32_t>::max())) {
605 "range [0.." << numeric_limits<uint32_t>::max()
606 <<
"]" << retry_interval_location);
608 srv->setRetryInterval(retry_val);
611 rekey_interval_location =
"";
613 if (!rekey_interval) {
614 rekey_interval = global_rekey_interval;
616 rekey_interval_origin =
"server";
619 if (rekey_interval) {
620 rekey_interval_location +=
" (";
621 rekey_interval_location += rekey_interval->getPosition().str();
622 rekey_interval_location +=
")";
623 rekey_val = rekey_interval->intValue();
624 if ((rekey_val < 0) ||
625 (rekey_val > numeric_limits<uint32_t>::max())) {
627 "range [0.." << numeric_limits<uint32_t>::max()
628 <<
"]" << rekey_interval_location);
630 srv->setRekeyInterval(rekey_val);
633 tkey_lifetime_location =
"";
635 if (!tkey_lifetime) {
636 tkey_lifetime = global_tkey_lifetime;
638 tkey_lifetime_origin =
"server";
642 tkey_lifetime_location +=
" (";
643 tkey_lifetime_location += tkey_lifetime->getPosition().str();
644 tkey_lifetime_location +=
")";
645 tkey_lifetime_val = tkey_lifetime->intValue();
646 if ((tkey_lifetime_val < 0) ||
647 (tkey_lifetime_val > numeric_limits<uint32_t>::max())) {
649 "range [0.." << numeric_limits<uint32_t>::max()
650 <<
"]" << tkey_lifetime_location);
652 srv->setKeyLifetime(tkey_lifetime_val);
654 if (tkey_lifetime_val > max_tkey_lifetime) {
655 max_tkey_lifetime = tkey_lifetime_val;
658 if (retry_val >= rekey_val) {
660 <<
" 'retry-interval' parameter"
661 << retry_interval_location <<
" must be smaller then the "
662 << rekey_interval_origin <<
" 'rekey-interval' parameter"
663 << retry_interval_location <<
": range [0.."
664 << rekey_val <<
"]");
667 if (rekey_val >= tkey_lifetime_val) {
669 <<
" 'rekey-interval' parameter"
670 << rekey_interval_location <<
" must be smaller than the "
671 << tkey_lifetime_origin <<
" 'tkey-lifetime' parameter"
672 << tkey_lifetime_location <<
": range [0.."
673 << tkey_lifetime_val <<
"]");
678 tkey_proto = global_tkey_proto;
681 string val = tkey_proto->stringValue();
684 }
else if (val ==
"TCP") {
688 "or TCP (" << tkey_proto->getPosition() <<
")");
694 fallback = global_fallback;
697 srv->setFallback(fallback->boolValue());
702 tkey_timeout = global_tkey_timeout;
705 int64_t val = tkey_timeout->intValue();
706 if ((val < 0) || (val > numeric_limits<uint32_t>::max())) {
708 "range [0.." << numeric_limits<uint32_t>::max()
709 <<
"] (" << tkey_timeout->getPosition() <<
")");
711 srv->setExchangeTimeout(val);