From: Miod Vallat Date: Wed, 15 Jan 2025 08:40:46 +0000 (+0100) Subject: Use a container to simplify command dispatch. X-Git-Tag: dnsdist-2.0.0-alpha1~167^2~2 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=eee60aa5d3c46603cecc64ff50642460b7ffd6c8;p=thirdparty%2Fpdns.git Use a container to simplify command dispatch. --- diff --git a/pdns/pdnsutil.cc b/pdns/pdnsutil.cc index 205fdc7f46..a447d03b35 100644 --- a/pdns/pdnsutil.cc +++ b/pdns/pdnsutil.cc @@ -4328,6 +4328,90 @@ static int backendLookup(vector& cmds) return 0; } +static std::unordered_map&)>> commands{ + {"activate-tsig-key", {true, activateTSIGKey}}, + {"activate-zone-key", {true, activateZoneKey}}, + {"add-autoprimary", {true, addAutoprimary}}, + {"add-meta", {true, setMeta}}, + {"add-record", {true, addRecord}}, + {"add-zone-key", {true, addZoneKey}}, + {"b2b-migrate", {true, B2BMigrate}}, + {"backend-cmd", {true, backendCmd}}, + {"backend-lookup", {true, backendLookup}}, + {"bench-db", {true, benchDb}}, + {"change-secondary-zone-primary", {true, changeSecondaryZonePrimary}}, + {"check-all-zones", {true, checkAllZones}}, + {"check-zone", {true, checkZone}}, + {"clear-zone", {true, clearZone}}, + {"create-bind-db", {true, createBindDb}}, + {"create-secondary-zone", {true, createSecondaryZone}}, + {"create-zone", {true, createZone}}, + {"deactivate-tsig-key", {true, deactivateTSIGKey}}, + {"deactivate-zone-key", {true, deactivateZoneKey}}, + {"delete-rrset", {true, deleteRRSet}}, + {"delete-tsig-key", {true, deleteTSIGKey}}, + {"delete-zone", {true, deleteZone}}, + {"disable-dnssec", {true, disableDNSSEC}}, + {"edit-zone", {true, editZone}}, + {"export-zone-dnskey", {true, expotZoneDNSKey}}, + {"export-zone-ds", {true, exportZoneDS}}, + {"export-zone-key", {true, exportZoneKey}}, + {"export-zone-key-pem", {true, exportZoneKeyPEM}}, + {"generate-tsig-key", {true, generateTSIGKey}}, + {"generate-zone-key", {true, generateZoneKey}}, + {"get-meta", {true, getMeta}}, + {"hash-password", {true, hashPassword}}, + {"hash-zone-record", {true, hashZoneRecord}}, + {"hsm", {true, HSM}}, + {"import-tsig-key", {true, importTSIGKey}}, + {"import-zone-key", {true, importZoneKey}}, + {"import-zone-key-pem", {true, importZoneKeyPEM}}, + {"increase-serial", {true, increaseSerial}}, + {"ipdecrypt", {false, ipEncrypt}}, + {"ipencrypt", {false, ipEncrypt}}, + {"list-algorithms", {false, listAlgorithms}}, + {"list-all-zones", {true, listAllZones}}, + {"list-autoprimaries", {true, listAutoprimaries}}, + {"list-keys", {true, listKeys}}, + {"list-member-zones", {true, listMemberZones}}, + {"list-tsig-keys", {true, listTSIGKeys}}, + {"list-zone", {true, listZone}}, + {"lmdb-get-backend-version", {false, lmdbGetBackendVersion}}, + {"load-zone", {true, loadZone}}, + {"publish-zone-key", {true, publishZoneKey}}, + {"raw-lua-from-content", {true, rawLuaFromContent}}, + {"rectify-all-zones", {true, rectifyAllZones}}, + {"rectify-zone", {true, rectifyZone}}, + {"remove-autoprimary", {true, removeAutoprimary}}, + {"remove-zone-key", {true, removeZoneKey}}, + {"replace-rrset", {true, replaceRRSet}}, + {"secure-all-zones", {true, secureAllZones}}, + {"secure-zone", {true, secureZone}}, + {"set-account", {true, setAccount}}, + {"set-catalog", {true, setCatalog}}, + {"set-kind", {true, setKind}}, + {"set-meta", {true, setMeta}}, + {"set-nsec3", {true, setNsec3}}, + {"set-option", {true, setOption}}, + {"set-options-json", {true, setOptionsJson}}, + {"set-presigned", {true, setPresigned}}, + {"set-publish-cdnskey", {true, setPublishCDNSKey}}, + {"set-publish-cds", {true, setPublishCDs}}, + {"show-zone", {true, showZone}}, + {"test-algorithm", {false, testAlgorithm}}, + {"test-algorithms", {false, testAlgorithms}}, + {"test-all-zones", {true, testAllZones}}, + {"test-schema", {true, testSchema}}, + {"test-speed", {true, testSpeed}}, + {"test-zone", {true, testZone}}, + {"unpublish-zone-key", {true, unpublishZoneKey}}, + {"unset-nsec3", {true, unsetNSec3}}, + {"unset-presigned", {true, unsetPresigned}}, + {"unset-publish-cdnskey", {true, unsetPublishCDNSKey}}, + {"unset-publish-cds", {true, unsetPublishCDs}}, + {"verify-crypto", {true, verifyCrypto}}, + {"zonemd-verify-file", {true, zonemdVerifyFile}} +}; // NOLINTNEXTLINE(readability-function-cognitive-complexity): TODO Clean this function up. int main(int argc, char** argv) @@ -4485,261 +4569,17 @@ try loadMainConfig(g_vm["config-dir"].as()); - if (cmds.at(0) == "lmdb-get-backend-version") { - return lmdbGetBackendVersion(cmds); - } - if (cmds.at(0) == "test-algorithm") { - return testAlgorithm(cmds); - } - - if (cmds.at(0) == "ipencrypt" || cmds.at(0) == "ipdecrypt") { - return ipEncrypt(cmds); - } - - if (cmds.at(0) == "test-algorithms") { - return testAlgorithms(cmds); - } - - if (cmds.at(0) == "list-algorithms") { - return listAlgorithms(cmds); - } - - reportAllTypes(); - - if (cmds.at(0) == "create-bind-db") { - return createBindDb(cmds); - } - - if (cmds.at(0) == "raw-lua-from-content") { - return rawLuaFromContent(cmds); - } - else if (cmds.at(0) == "hash-password") { - return hashPassword(cmds); - } - - if(cmds[0] == "zonemd-verify-file") { - return zonemdVerifyFile(cmds); - } - - if (cmds.at(0) == "test-schema") { - return testSchema(cmds); - } - if (cmds.at(0) == "rectify-zone") { - return rectifyZone(cmds); - } - else if (cmds.at(0) == "rectify-all-zones") { - return rectifyAllZones(cmds); - } - else if (cmds.at(0) == "check-zone") { - return checkZone(cmds); - } - else if (cmds.at(0) == "bench-db") { - return benchDb(cmds); - } - else if (cmds.at(0) == "check-all-zones") { - return checkAllZones(cmds); - } - else if (cmds.at(0) == "list-all-zones") { - return listAllZones(cmds); - } - else if (cmds.at(0) == "list-member-zones") { - return listMemberZones(cmds); - } - else if (cmds.at(0) == "test-zone") { - return testZone(cmds); - } - else if (cmds.at(0) == "test-all-zones") { - return testAllZones(cmds); - } - else if (cmds.at(0) == "test-speed") { - return testSpeed(cmds); - } - else if (cmds.at(0) == "verify-crypto") { - return verifyCrypto(cmds); - } - else if (cmds.at(0) == "show-zone") { - return showZone(cmds); - } - else if (cmds.at(0) == "export-zone-ds") { - return exportZoneDS(cmds); - } - else if (cmds.at(0) == "disable-dnssec") { - return disableDNSSEC(cmds); - } - else if (cmds.at(0) == "activate-zone-key") { - return activateZoneKey(cmds); - } - else if (cmds.at(0) == "deactivate-zone-key") { - return deactivateZoneKey(cmds); - } - else if (cmds.at(0) == "publish-zone-key") { - return publishZoneKey(cmds); - } - else if (cmds.at(0) == "unpublish-zone-key") { - return unpublishZoneKey(cmds); + auto it = commands.find(cmds.at(0)); + if (it != commands.end()) { + auto [initRequired, handler] = it->second; + if (initRequired) { + reportAllTypes(); + } + return handler(cmds); } - else if (cmds.at(0) == "add-zone-key") { - return addZoneKey(cmds); - } - else if (cmds.at(0) == "remove-zone-key") { - return removeZoneKey(cmds); - } - else if (cmds.at(0) == "delete-zone") { - return deleteZone(cmds); - } - else if (cmds.at(0) == "create-zone") { - return createZone(cmds); - } - else if (cmds.at(0) == "create-secondary-zone") { - return createSecondaryZone(cmds); - } - else if (cmds.at(0) == "change-secondary-zone-primary") { - return changeSecondaryZonePrimary(cmds); - } - else if (cmds.at(0) == "add-record") { - return addRecord(cmds); - } - else if (cmds.at(0) == "add-autoprimary") { - return addAutoprimary(cmds); - } - else if (cmds.at(0) == "remove-autoprimary") { - return removeAutoprimary(cmds); - } - else if (cmds.at(0) == "list-autoprimaries") { - return listAutoprimaries(cmds); - } - else if (cmds.at(0) == "replace-rrset") { - return replaceRRSet(cmds); - } - else if (cmds.at(0) == "delete-rrset") { - return deleteRRSet(cmds); - } - else if (cmds.at(0) == "list-zone") { - return listZone(cmds); - } - else if (cmds.at(0) == "edit-zone") { - return editZone(cmds); - } - else if (cmds.at(0) == "clear-zone") { - return clearZone(cmds); - } - else if (cmds.at(0) == "list-keys") { - return listKeys(cmds); - } - else if (cmds.at(0) == "load-zone") { - return loadZone(cmds); - } - else if (cmds.at(0) == "secure-zone") { - return secureZone(cmds); - } - else if (cmds.at(0) == "secure-all-zones") { - return secureAllZones(cmds); - } - else if (cmds.at(0) == "set-kind") { - return setKind(cmds); - } - else if (cmds.at(0) == "set-options-json") { - return setOptionsJson(cmds); - } - else if (cmds.at(0) == "set-option") { - return setOption(cmds); - } - else if (cmds.at(0) == "set-catalog") { - return setCatalog(cmds); - } - else if (cmds.at(0) == "set-account") { - return setAccount(cmds); - } - else if (cmds.at(0) == "set-nsec3") { - return setNsec3(cmds); - } - else if (cmds.at(0) == "set-presigned") { - return setPresigned(cmds); - } - else if (cmds.at(0) == "set-publish-cdnskey") { - return setPublishCDNSKey(cmds); - } - else if (cmds.at(0) == "set-publish-cds") { - return setPublishCDs(cmds); - } - else if (cmds.at(0) == "unset-presigned") { - return unsetPresigned(cmds); - } - else if (cmds.at(0) == "unset-publish-cdnskey") { - return unsetPublishCDNSKey(cmds); - } - else if (cmds.at(0) == "unset-publish-cds") { - return unsetPublishCDs(cmds); - } - else if (cmds.at(0) == "hash-zone-record") { - return hashZoneRecord(cmds); - } - else if (cmds.at(0) == "unset-nsec3") { - return unsetNSec3(cmds); - } - else if (cmds.at(0) == "export-zone-key") { - return exportZoneKey(cmds); - } - else if (cmds.at(0) == "export-zone-key-pem") { - return exportZoneKeyPEM(cmds); - } - else if (cmds.at(0) == "increase-serial") { - return increaseSerial(cmds); - } - else if (cmds.at(0) == "import-zone-key-pem") { - return importZoneKeyPEM(cmds); - } - else if (cmds.at(0) == "import-zone-key") { - return importZoneKey(cmds); - } - else if (cmds.at(0) == "export-zone-dnskey") { - return expotZoneDNSKey(cmds); - } - else if (cmds.at(0) == "generate-zone-key") { - return generateZoneKey(cmds); - } - else if (cmds.at(0) == "generate-tsig-key") { - return generateTSIGKey(cmds); - } - else if (cmds.at(0) == "import-tsig-key") { - return importTSIGKey(cmds); - } - else if (cmds.at(0) == "delete-tsig-key") { - return deleteTSIGKey(cmds); - } - else if (cmds.at(0) == "list-tsig-keys") { - return listTSIGKeys(cmds); - } - else if (cmds.at(0) == "activate-tsig-key") { - return activateTSIGKey(cmds); - } - else if (cmds.at(0) == "deactivate-tsig-key") { - return deactivateTSIGKey(cmds); - } - else if (cmds.at(0) == "get-meta") { - return getMeta(cmds); - } - else if (cmds.at(0) == "set-meta" || cmds.at(0) == "add-meta") { - return setMeta(cmds); - } - else if (cmds.at(0) == "hsm") { - return HSM(cmds); - } - else if (cmds.at(0) == "b2b-migrate") { - return B2BMigrate(cmds); - } - else if (cmds.at(0) == "backend-cmd") { - return backendCmd(cmds); - } - else if (cmds.at(0) == "backend-lookup") { - return backendLookup(cmds); - } - else { - cerr << "Unknown command '" << cmds.at(0) << "'" << endl; - return 1; - } - return 0; + cerr << "Unknown command '" << cmds.at(0) << "'" << endl; + return 1; } catch (PDNSException& ae) { cerr << "Error: " << ae.reason << endl;