Kea  1.9.9-git
cfg_db_access.cc
Go to the documentation of this file.
1 // Copyright (C) 2016-2020 Internet Systems Consortium, Inc. ("ISC")
2 //
3 // This Source Code Form is subject to the terms of the Mozilla Public
4 // License, v. 2.0. If a copy of the MPL was not distributed with this
5 // file, You can obtain one at http://mozilla.org/MPL/2.0/.
6 
7 #include <config.h>
9 #include <dhcpsrv/db_type.h>
11 #include <dhcpsrv/host_mgr.h>
13 #include <boost/algorithm/string.hpp>
14 #include <boost/foreach.hpp>
15 #include <boost/lexical_cast.hpp>
16 #include <sstream>
17 #include <vector>
18 
19 using namespace isc::data;
20 
21 namespace isc {
22 namespace dhcp {
23 
24 CfgDbAccess::CfgDbAccess()
25  : appended_parameters_(), lease_db_access_("type=memfile"),
26  host_db_access_(), ip_reservations_unique_(true) {
27 }
28 
29 std::string
32 }
33 
34 
35 std::string
37  if (host_db_access_.empty()) {
38  return ("");
39  } else {
40  return (getAccessString(host_db_access_.front()));
41  }
42 }
43 
44 std::list<std::string>
46  std::list<std::string> ret;
47  for (const std::string& dbaccess : host_db_access_) {
48  if (!dbaccess.empty()) {
49  ret.push_back(getAccessString(dbaccess));
50  }
51  }
52  return (ret);
53 }
54 
55 void
57  // Recreate lease manager.
60 
61  // Recreate host data source.
63 
64  // Restore the host cache.
66  HostMgr::addBackend("type=cache");
67  }
68 
69  // Add database backends.
70  std::list<std::string> host_db_access_list = getHostDbAccessStringList();
71  for (std::string& hds : host_db_access_list) {
73  }
74 
75  // Check for a host cache.
77 
78  // Populate the ip-reservations-unique global setting to HostMgr.
79  // This operation may fail if any of the host backends does not support
80  // the new setting. We throw an exception here to signal configuration
81  // error. The exception does not contain the backend name but the called
82  // function in HostMgr logs a warning message that contains the name of
83  // the backend.
85  isc_throw(InvalidOperation, "unable to configure the server to allow "
86  "non unique IP reservations (ip-reservations-unique=false) "
87  "because some host backends in use do not support this "
88  "setting");
89  }
90 }
91 
92 std::string
93 CfgDbAccess::getAccessString(const std::string& access_string) const {
94  std::ostringstream s;
95  s << access_string;
96  // Only append additional parameters if any parameters are specified
97  // in a configuration. For host database, no parameters mean that
98  // database access is disabled and thus we don't want to append any
99  // parameters.
100  if ((s.tellp() != std::streampos(0)) && (!appended_parameters_.empty())) {
101  s << " " << appended_parameters_;
102  }
103 
104  return (s.str());
105 }
106 
107 } // end of isc::dhcp namespace
108 } // end of isc namespace
static HostMgr & instance()
Returns a sole instance of the HostMgr.
Definition: host_mgr.cc:105
std::list< std::string > host_db_access_
Holds host database access strings.
static void destroy()
Destroy lease manager.
void setIPReservationsUnique(const bool unique)
Modifies the setting imposing whether the IP reservations are unique or can be non unique...
Definition: cfg_db_access.h:90
std::string getLeaseDbAccessString() const
Retrieves lease database access string.
std::list< std::string > getHostDbAccessStringList() const
Retrieves host database access string.
#define isc_throw(type, stream)
A shortcut macro to insert known values into exception arguments.
static bool registeredFactory(const std::string &db_type)
Check if a host data source factory was registered.
static void create()
Creates new instance of the HostMgr.
Definition: host_mgr.cc:43
std::string lease_db_access_
Holds lease database access string.
std::string getHostDbAccessString() const
Retrieves host database access string.
bool ip_reservations_unique_
Holds the setting whether IP reservations should be unique or can be non-unique.
std::string getAccessString(const std::string &access_string) const
Returns lease or host database access string.
Defines the logger used by the top-level component of kea-dhcp-ddns.
void createManagers() const
Creates instance of lease manager and host data sources according to the configuration specified...
static void create(const std::string &dbaccess)
Create an instance of a lease manager.
A generic exception that is thrown if a function is called in a prohibited way.
static void addBackend(const std::string &access)
Add an alternate host backend (aka host data source).
Definition: host_mgr.cc:48
static bool checkCacheBackend(bool logging=false)
Check for the cache host backend.
Definition: host_mgr.cc:83
std::string appended_parameters_
Parameters to be appended to the database access strings.