face+security: Introduce environment variables to set/override transport, pib, and tpm configurations.
- NDN_CLIENT_TRANSPORT: equivalent of transport in client.conf
- NDN_CLIENT_PIB: equivalent of pib in client.conf
- NDN_CLIENT_TPM: equivalent of tpm in client.conf
Whenever an environment variable is set, it takes precedence over any
values specified in the configuration file.
Change-Id: I44c2347168616387a0489b6bf5c2c3a12db29863
Refs: #2925, #2514
diff --git a/src/security/key-chain.cpp b/src/security/key-chain.cpp
index c1c605a..e6b1ff0 100644
--- a/src/security/key-chain.cpp
+++ b/src/security/key-chain.cpp
@@ -123,11 +123,29 @@
, m_tpm(nullptr)
, m_lastTimestamp(time::toUnixTimestamp(time::system_clock::now()))
{
- ConfigFile config;
- const ConfigFile::Parsed& parsed = config.getParsedConfiguration();
+ std::string pibLocator;
+ std::string tpmLocator;
- std::string pibLocator = parsed.get<std::string>("pib", "");
- std::string tpmLocator = parsed.get<std::string>("tpm", "");
+ if (getenv("NDN_CLIENT_PIB") != nullptr) {
+ pibLocator = getenv("NDN_CLIENT_PIB");
+ }
+
+ if (getenv("NDN_CLIENT_TPM") != nullptr) {
+ tpmLocator = getenv("NDN_CLIENT_TPM");
+ }
+
+ if (pibLocator.empty() || tpmLocator.empty()) {
+ ConfigFile config;
+ const ConfigFile::Parsed& parsed = config.getParsedConfiguration();
+
+ if (pibLocator.empty()) {
+ pibLocator = parsed.get<std::string>("pib", "");
+ }
+
+ if (tpmLocator.empty()) {
+ tpmLocator = parsed.get<std::string>("tpm", "");
+ }
+ }
initialize(pibLocator, tpmLocator, false);
}
diff --git a/src/security/pib-sqlite3.cpp b/src/security/pib-sqlite3.cpp
index b20ee7c..01e80f7 100644
--- a/src/security/pib-sqlite3.cpp
+++ b/src/security/pib-sqlite3.cpp
@@ -1,6 +1,6 @@
/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
/**
- * Copyright (c) 2013-2015 Regents of the University of California.
+ * Copyright (c) 2013-2016 Regents of the University of California.
*
* This file is part of ndn-cxx library (NDN C++ library with eXperimental eXtensions).
*
@@ -216,16 +216,24 @@
// Determine the path of PIB DB
boost::filesystem::path actualDir;
if (dir == "") {
- if (getenv("HOME") == nullptr)
- BOOST_THROW_EXCEPTION(PibImpl::Error("Environment variable HOME is not set"));
-
- actualDir = boost::filesystem::path(getenv("HOME")) / ".ndn";
- boost::filesystem::create_directories(actualDir);
+#ifdef NDN_CXX_HAVE_TESTS
+ if (getenv("TEST_HOME") != nullptr) {
+ actualDir = boost::filesystem::path(getenv("TEST_HOME")) / ".ndn";
+ }
+ else
+#endif // NDN_CXX_HAVE_TESTS
+ if (getenv("HOME") != nullptr) {
+ actualDir = boost::filesystem::path(getenv("HOME")) / ".ndn";
+ }
+ else {
+ actualDir = boost::filesystem::path(".") / ".ndn";
+ }
}
else {
actualDir = boost::filesystem::path(dir);
- boost::filesystem::create_directories(actualDir);
}
+ boost::filesystem::create_directories(actualDir);
+
// Open PIB
int result = sqlite3_open_v2((actualDir / "pib.db").c_str(), &m_database,
SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE,
diff --git a/src/security/sec-public-info-sqlite3.cpp b/src/security/sec-public-info-sqlite3.cpp
index 462f215..9974336 100644
--- a/src/security/sec-public-info-sqlite3.cpp
+++ b/src/security/sec-public-info-sqlite3.cpp
@@ -1,6 +1,6 @@
/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
/**
- * Copyright (c) 2013-2015 Regents of the University of California.
+ * Copyright (c) 2013-2016 Regents of the University of California.
*
* This file is part of ndn-cxx library (NDN C++ library with eXperimental eXtensions).
*
@@ -114,10 +114,23 @@
, m_database(nullptr)
{
boost::filesystem::path identityDir;
- if (dir == "")
- identityDir = boost::filesystem::path(getenv("HOME")) / ".ndn";
- else
- identityDir = boost::filesystem::path(dir) / ".ndn";
+ if (dir == "") {
+#ifdef NDN_CXX_HAVE_TESTS
+ if (getenv("TEST_HOME") != nullptr) {
+ identityDir = boost::filesystem::path(getenv("TEST_HOME")) / ".ndn";
+ }
+ else
+#endif // NDN_CXX_HAVE_TESTS
+ if (getenv("HOME") != nullptr) {
+ identityDir = boost::filesystem::path(getenv("HOME")) / ".ndn";
+ }
+ else {
+ identityDir = boost::filesystem::path(".") / ".ndn";
+ }
+ }
+ else {
+ identityDir = boost::filesystem::path(dir);
+ }
boost::filesystem::create_directories(identityDir);
/// @todo Add define for windows/unix in wscript. The following may completely fail on windows
diff --git a/src/security/sec-tpm-file.cpp b/src/security/sec-tpm-file.cpp
index e20fa94..306a062 100644
--- a/src/security/sec-tpm-file.cpp
+++ b/src/security/sec-tpm-file.cpp
@@ -1,6 +1,6 @@
/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
/**
- * Copyright (c) 2013-2015 Regents of the University of California.
+ * Copyright (c) 2013-2016 Regents of the University of California.
*
* This file is part of ndn-cxx library (NDN C++ library with eXperimental eXtensions).
*
@@ -51,11 +51,26 @@
explicit
Impl(const string& dir)
{
- if (dir.empty())
- m_keystorePath = boost::filesystem::path(getenv("HOME")) / ".ndn" / "ndnsec-tpm-file";
- else
- m_keystorePath = boost::filesystem::path(dir) / ".ndn" / "ndnsec-tpm-file";
+ boost::filesystem::path actualDir;
+ if (dir.empty()) {
+#ifdef NDN_CXX_HAVE_TESTS
+ if (getenv("TEST_HOME") != nullptr) {
+ actualDir = boost::filesystem::path(getenv("TEST_HOME")) / ".ndn";
+ }
+ else
+#endif // NDN_CXX_HAVE_TESTS
+ if (getenv("HOME") != nullptr) {
+ actualDir = boost::filesystem::path(getenv("HOME")) / ".ndn";
+ }
+ else {
+ actualDir = boost::filesystem::path(".") / ".ndn";
+ }
+ }
+ else {
+ actualDir = boost::filesystem::path(dir);
+ }
+ m_keystorePath = actualDir / "ndnsec-tpm-file";
boost::filesystem::create_directories(m_keystorePath);
}