src/base/conf.cc | 28 +++++++++++++++++++++++++++-
src/base/conf.h | 2 ++
2 files changed, 29 insertions(+), 1 deletions(-)
Querying the DNS can potentially be very slow, especially in the case when the
DNS servers are not responding e.g. due to a misconfiguration. Therefore, we
instead use gethostname() + getdomainname() to build the fully qualified domain
name (FQDN) using locally stored information.
The result from getdomainname() may not always be accurate so the long-term
solution is probably to introduce a separate process/thread that can query the
DNS in the background.
diff --git a/src/base/conf.cc b/src/base/conf.cc
--- a/src/base/conf.cc
+++ b/src/base/conf.cc
@@ -99,7 +99,33 @@ void Conf::PthreadOnceInitRoutine() {
if (instance_ == nullptr) osaf_abort(0);
}
-std::string Conf::GetFullyQualifiedDomainName(
+std::string Conf::GetFullyQualifiedDomainName(const std::string&) {
+ char host_name[HOST_NAME_MAX + 1];
+ char domain_name[HOST_NAME_MAX + 1];
+ if (gethostname(host_name, sizeof(host_name)) == 0) {
+ host_name[sizeof(host_name) - 1] = '\0';
+ } else {
+ LOG_ER("gethostname() failed, errno=%d", errno);
+ host_name[0] = '\0';
+ }
+ if (getdomainname(domain_name, sizeof(domain_name)) == 0) {
+ domain_name[sizeof(domain_name) - 1] = '\0';
+ if (strcmp(domain_name, "(none)") == 0) domain_name[0] = '\0';
+ } else {
+ LOG_ER("getdomainname() failed, errno=%d", errno);
+ domain_name[0] = '\0';
+ }
+ std::string fqdn{host_name};
+ if (domain_name[0] != '\0') {
+ if (!fqdn.empty()) fqdn += ".";
+ fqdn += domain_name;
+ }
+ return fqdn;
+}
+
+// Currently not used - we need to introduce a background thread for querying
+// the DNS, which can potentially be very slow.
+std::string Conf::GetFullyQualifiedDomainNameUsingDns(
const std::string& short_host_name) {
char host[NI_MAXHOST];
std::string fqdn{short_host_name};
diff --git a/src/base/conf.h b/src/base/conf.h
--- a/src/base/conf.h
+++ b/src/base/conf.h
@@ -86,6 +86,8 @@ class Conf {
static void PthreadOnceInitRoutine();
static std::string GetFullyQualifiedDomainName(
const std::string& short_host_name);
+ static std::string GetFullyQualifiedDomainNameUsingDns(
+ const std::string& short_host_name);
static std::string GetNodeName(const std::string& short_host_name);
static std::string GetShortHostName();
static std::string ReadFile(const std::string& path_name,
------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
Opensaf-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/opensaf-devel