facter 3.9.6.cfacter.20180612 → 3.11.0.cfacter.20180319

Sign up to get free protection for your applications and to get access to all the features.
Files changed (85) hide show
  1. checksums.yaml +4 -4
  2. data/ext/facter/facter/CMakeLists.txt +1 -1
  3. data/ext/facter/facter/acceptance/Gemfile +3 -4
  4. data/ext/facter/facter/acceptance/Rakefile +342 -2
  5. data/ext/facter/facter/acceptance/config/aio/options.rb +6 -0
  6. data/ext/facter/facter/acceptance/config/git/options.rb +5 -1
  7. data/ext/facter/facter/acceptance/setup/aio/pre-suite/010_Install.rb +22 -0
  8. data/ext/facter/facter/acceptance/setup/aio/pre-suite/021_InstallAristaModule.rb +12 -0
  9. data/ext/facter/facter/acceptance/setup/aio/pre-suite/022_Remove_LD_PRELOAD.rb +11 -0
  10. data/ext/facter/facter/acceptance/setup/common/00_EnvSetup.rb +64 -0
  11. data/ext/facter/facter/acceptance/setup/common/pre-suite/000-delete-puppet-when-none.rb +11 -0
  12. data/ext/facter/facter/acceptance/setup/git/pre-suite/01_TestSetup.rb +31 -0
  13. data/ext/facter/facter/acceptance/tests/ticket_1238_hostname_fqdn.rb +20 -0
  14. data/ext/facter/facter/lib/CMakeLists.txt +3 -2
  15. data/ext/facter/facter/lib/Doxyfile +1 -1
  16. data/ext/facter/facter/lib/inc/facter/facts/fact.hpp +5 -0
  17. data/ext/facter/facter/lib/inc/internal/facts/aix/networking_resolver.hpp +0 -7
  18. data/ext/facter/facter/lib/inc/internal/facts/freebsd/networking_resolver.hpp +0 -7
  19. data/ext/facter/facter/lib/inc/internal/facts/linux/fips_resolver.hpp +31 -0
  20. data/ext/facter/facter/lib/inc/internal/facts/linux/networking_resolver.hpp +0 -7
  21. data/ext/facter/facter/lib/inc/internal/facts/openbsd/networking_resolver.hpp +0 -7
  22. data/ext/facter/facter/lib/inc/internal/facts/osx/networking_resolver.hpp +0 -7
  23. data/ext/facter/facter/lib/inc/internal/facts/posix/networking_resolver.hpp +0 -7
  24. data/ext/facter/facter/lib/inc/internal/facts/resolvers/fips_resolver.hpp +46 -0
  25. data/ext/facter/facter/lib/inc/internal/facts/resolvers/networking_resolver.hpp +2 -3
  26. data/ext/facter/facter/lib/inc/internal/facts/resolvers/ssh_resolver.hpp +6 -0
  27. data/ext/facter/facter/lib/inc/internal/facts/solaris/networking_resolver.hpp +0 -7
  28. data/ext/facter/facter/lib/schema/facter.yaml +38 -18
  29. data/ext/facter/facter/lib/src/cwrapper.cc +5 -0
  30. data/ext/facter/facter/lib/src/facts/aix/disk_resolver.cc +2 -11
  31. data/ext/facter/facter/lib/src/facts/aix/networking_resolver.cc +0 -5
  32. data/ext/facter/facter/lib/src/facts/freebsd/dmi_resolver.cc +5 -1
  33. data/ext/facter/facter/lib/src/facts/freebsd/networking_resolver.cc +1 -10
  34. data/ext/facter/facter/lib/src/facts/freebsd/virtualization_resolver.cc +1 -4
  35. data/ext/facter/facter/lib/src/facts/linux/collection.cc +2 -0
  36. data/ext/facter/facter/lib/src/facts/linux/fips_resolver.cc +31 -0
  37. data/ext/facter/facter/lib/src/facts/linux/networking_resolver.cc +1 -10
  38. data/ext/facter/facter/lib/src/facts/openbsd/networking_resolver.cc +1 -10
  39. data/ext/facter/facter/lib/src/facts/osx/networking_resolver.cc +1 -10
  40. data/ext/facter/facter/lib/src/facts/posix/networking_resolver.cc +2 -3
  41. data/ext/facter/facter/lib/src/facts/posix/ssh_resolver.cc +3 -2
  42. data/ext/facter/facter/lib/src/facts/resolvers/fips_resolver.cc +23 -0
  43. data/ext/facter/facter/lib/src/facts/resolvers/networking_resolver.cc +7 -23
  44. data/ext/facter/facter/lib/src/facts/resolvers/ssh_resolver.cc +1 -0
  45. data/ext/facter/facter/lib/src/facts/solaris/networking_resolver.cc +0 -5
  46. data/ext/facter/facter/lib/tests/facts/resolvers/ssh_resolver.cc +8 -1
  47. data/ext/facter/facter/lib/tests/facts/schema.cc +17 -0
  48. data/ext/facter/facter/locales/FACTER.pot +2 -23
  49. data/ext/facter/leatherman/CHANGELOG.md +16 -9
  50. data/ext/facter/leatherman/CMakeLists.txt +1 -2
  51. data/ext/facter/leatherman/appveyor.yml +26 -19
  52. data/ext/facter/leatherman/catch/CMakeLists.txt +1 -1
  53. data/ext/facter/leatherman/curl/tests/client_test.cc +396 -398
  54. data/ext/facter/leatherman/curl/tests/mock_curl.cc +2 -0
  55. data/ext/facter/leatherman/curl/tests/request_test.cc +66 -68
  56. data/ext/facter/leatherman/curl/tests/response_test.cc +50 -52
  57. data/ext/facter/leatherman/dynamic_library/tests/dynamic_library_tests.cc +71 -75
  58. data/ext/facter/leatherman/execution/src/execution.cc +3 -0
  59. data/ext/facter/leatherman/execution/src/posix/execution.cc +5 -6
  60. data/ext/facter/leatherman/execution/src/windows/execution.cc +2 -0
  61. data/ext/facter/leatherman/execution/tests/windows/execution.cc +4 -2
  62. data/ext/facter/leatherman/file_util/tests/directory_utils_test.cc +66 -68
  63. data/ext/facter/leatherman/file_util/tests/file_utils_test.cc +175 -177
  64. data/ext/facter/leatherman/json_container/inc/leatherman/json_container/json_container.hpp +7 -0
  65. data/ext/facter/leatherman/json_container/src/json_container.cc +10 -1
  66. data/ext/facter/leatherman/json_container/tests/json_container_test.cc +152 -8
  67. data/ext/facter/leatherman/locale/CMakeLists.txt +0 -7
  68. data/ext/facter/leatherman/locales/leatherman.pot +8 -13
  69. data/ext/facter/leatherman/logging/src/logging.cc +2 -0
  70. data/ext/facter/leatherman/util/tests/timer.cc +1 -3
  71. data/ext/facter/leatherman/vendor/Catch-1.10.0.zip +0 -0
  72. data/ext/facter/leatherman/vendor/nowide/doc/Doxyfile +4 -4
  73. data/ext/facter/leatherman/vendor/nowide/doc/LICENSE_1_0.txt +23 -0
  74. data/ext/facter/leatherman/vendor/nowide/doc/main.txt +62 -54
  75. data/ext/facter/leatherman/vendor/nowide/include/boost/nowide/convert.hpp +16 -16
  76. data/ext/facter/leatherman/vendor/nowide/include/boost/nowide/cstdio.hpp +4 -4
  77. data/ext/facter/leatherman/vendor/nowide/include/boost/nowide/utf8_codecvt.hpp +1 -1
  78. data/ext/facter/leatherman/vendor/nowide/src/iostream.cpp +32 -30
  79. data/ext/facter/leatherman/vendor/nowide/standalone/convert +6 -6
  80. data/ext/facter/leatherman/vendor/nowide/standalone/encoding_utf.hpp +1 -1
  81. data/ext/facter/leatherman/vendor/nowide/standalone/run_convert_and_build.sh +1 -3
  82. metadata +15 -6
  83. data/ext/facter/leatherman/cmake/FindICU.cmake +0 -690
  84. data/ext/facter/leatherman/scripts/travis_target.sh +0 -79
  85. data/ext/facter/leatherman/vendor/catch-1.4.0.zip +0 -0
@@ -30,7 +30,12 @@ uint8_t get_default_facts(char **result) {
30
30
 
31
31
  auto json_facts = stream.str();
32
32
  auto l = json_facts.length()+1;
33
+
33
34
  *result = static_cast<char*>(malloc(sizeof(char)*l));
35
+ if (*result == nullptr) {
36
+ return EXIT_FAILURE;
37
+ }
38
+
34
39
  strncpy(*result, json_facts.c_str(), l);
35
40
  } catch (const std::exception&) {
36
41
  return EXIT_FAILURE;
@@ -36,18 +36,9 @@ namespace facter { namespace facts { namespace aix {
36
36
 
37
37
  {
38
38
  string device = (boost::format("/dev/%1%") % d.name).str();
39
- auto descriptor = open(device.c_str(), O_RDONLY);
40
- if (descriptor < 0) {
41
- LOG_DEBUG("Could not open device %1% for reading: %2% (%3%). Disk facts will not be populated for this device", d.name, strerror(errno), errno);
42
- continue;
43
- }
44
- scoped_descriptor fd(descriptor);
39
+ scoped_descriptor fd(open(device.c_str(), O_RDONLY));
45
40
  devinfo info;
46
- auto result = ioctl(fd, IOCINFO, &info);
47
- if (result < 0) {
48
- LOG_DEBUG("Ioctl IOCINFO failed for device %1%: %2% (%3%). Disk facts will not be populated for this device", d.name, strerror(errno), errno);
49
- continue;
50
- }
41
+ ioctl(fd, IOCINFO, &info);
51
42
  switch (info.devtype) {
52
43
  case DD_DISK:
53
44
  case DD_SCDISK:
@@ -241,10 +241,5 @@ namespace facter { namespace facts { namespace aix {
241
241
  return nullptr;
242
242
  }
243
243
 
244
- uint8_t networking_resolver::get_link_address_length(const sockaddr * addr) const
245
- {
246
- return 0;
247
- }
248
-
249
244
 
250
245
  }}} // namespace facter::facts::aix
@@ -20,6 +20,10 @@ namespace facter { namespace facts { namespace freebsd {
20
20
  result.product_name = result.bios_vendor;
21
21
  }
22
22
  result.manufacturer = kenv_lookup("smbios.system.maker");
23
+ // Fix for Proxmox VMs
24
+ if (result.manufacturer == "QEMU") {
25
+ result.product_name = "KVM";
26
+ }
23
27
 
24
28
  return result;
25
29
  }
@@ -30,7 +34,7 @@ namespace facter { namespace facts { namespace freebsd {
30
34
 
31
35
  LOG_DEBUG("kenv lookup for {1}", file);
32
36
  if (kenv(KENV_GET, file, buffer, sizeof(buffer) - 1) == -1) {
33
- LOG_WARNING("kenv lookup for {1} failed: {2} ({3})", file, strerror(errno), errno);
37
+ LOG_INFO("kenv lookup for {1} failed: {2} ({3})", file, strerror(errno), errno);
34
38
  return "";
35
39
  }
36
40
  return buffer;
@@ -27,21 +27,12 @@ namespace facter { namespace facts { namespace freebsd {
27
27
  return nullptr;
28
28
  }
29
29
  sockaddr_dl const* link_addr = reinterpret_cast<sockaddr_dl const*>(addr);
30
- if (link_addr->sdl_alen != 6 && link_addr->sdl_alen != 20) {
30
+ if (link_addr->sdl_alen != 6) {
31
31
  return nullptr;
32
32
  }
33
33
  return reinterpret_cast<uint8_t const*>(LLADDR(link_addr));
34
34
  }
35
35
 
36
- uint8_t networking_resolver::get_link_address_length(sockaddr const* addr) const
37
- {
38
- if (!is_link_address(addr)) {
39
- return 0;
40
- }
41
- sockaddr_dl const* link_addr = reinterpret_cast<sockaddr_dl const*>(addr);
42
- return link_addr->sdl_alen;
43
- }
44
-
45
36
  boost::optional<uint64_t> networking_resolver::get_link_mtu(string const& interface, void* data) const
46
37
  {
47
38
  ifreq ifr;
@@ -20,10 +20,7 @@ namespace facter { namespace facts { namespace freebsd {
20
20
  string value = get_jail_vm();
21
21
 
22
22
  if (value.empty()) {
23
- auto product_name = facts.get<string_value>(fact::product_name);
24
- if (product_name) {
25
- value = get_product_name_vm(product_name->value());
26
- }
23
+ value = get_fact_vm(facts);
27
24
  }
28
25
 
29
26
  return value;
@@ -14,6 +14,7 @@
14
14
  #include <internal/facts/linux/memory_resolver.hpp>
15
15
  #include <internal/facts/glib/load_average_resolver.hpp>
16
16
  #include <internal/facts/posix/xen_resolver.hpp>
17
+ #include <internal/facts/linux/fips_resolver.hpp>
17
18
 
18
19
 
19
20
  using namespace std;
@@ -37,6 +38,7 @@ namespace facter { namespace facts {
37
38
  add(make_shared<linux::memory_resolver>());
38
39
  add(make_shared<glib::load_average_resolver>());
39
40
  add(make_shared<posix::xen_resolver>());
41
+ add(make_shared<linux::fips_resolver>());
40
42
  }
41
43
 
42
44
  }} // namespace facter::facts
@@ -0,0 +1,31 @@
1
+ #include <internal/facts/linux/fips_resolver.hpp>
2
+ #include <leatherman/file_util/file.hpp>
3
+ #include <boost/algorithm/string.hpp>
4
+ #include <boost/lexical_cast.hpp>
5
+
6
+ using namespace std;
7
+
8
+ using boost::lexical_cast;
9
+ using boost::bad_lexical_cast;
10
+
11
+ namespace lth_file = leatherman::file_util;
12
+
13
+ namespace facter { namespace facts { namespace linux {
14
+
15
+ fips_resolver::data fips_resolver::collect_data(collection& facts)
16
+ {
17
+ data result;
18
+
19
+ // Set a safe default
20
+ result.is_fips_mode_enabled = false;
21
+
22
+ lth_file::each_line("/proc/sys/crypto/fips_enabled", [&](string& line) {
23
+ boost::trim(line);
24
+ result.is_fips_mode_enabled = line != "0";
25
+
26
+ return true;
27
+ });
28
+ return result;
29
+ }
30
+
31
+ }}} // namespace facter::facts::linux
@@ -67,21 +67,12 @@ namespace facter { namespace facts { namespace linux {
67
67
  return nullptr;
68
68
  }
69
69
  sockaddr_ll const* link_addr = reinterpret_cast<sockaddr_ll const*>(addr);
70
- if (link_addr->sll_halen != 6 && link_addr->sll_halen != 20) {
70
+ if (link_addr->sll_halen != 6) {
71
71
  return nullptr;
72
72
  }
73
73
  return reinterpret_cast<uint8_t const*>(link_addr->sll_addr);
74
74
  }
75
75
 
76
- uint8_t networking_resolver::get_link_address_length(sockaddr const* addr) const
77
- {
78
- if (!is_link_address(addr)) {
79
- return 0;
80
- }
81
- sockaddr_ll const* link_addr = reinterpret_cast<sockaddr_ll const*>(addr);
82
- return link_addr->sll_halen;
83
- }
84
-
85
76
  boost::optional<uint64_t> networking_resolver::get_link_mtu(string const& interface, void* data) const
86
77
  {
87
78
  // Unfortunately in Linux, the data points at interface statistics
@@ -27,21 +27,12 @@ namespace facter { namespace facts { namespace openbsd {
27
27
  return nullptr;
28
28
  }
29
29
  sockaddr_dl const* link_addr = reinterpret_cast<sockaddr_dl const*>(addr);
30
- if (link_addr->sdl_alen != 6 && link_addr->sdl_alen != 20) {
30
+ if (link_addr->sdl_alen != 6) {
31
31
  return nullptr;
32
32
  }
33
33
  return reinterpret_cast<uint8_t const*>(LLADDR(link_addr));
34
34
  }
35
35
 
36
- uint8_t networking_resolver::get_link_address_length(sockaddr const* addr) const
37
- {
38
- if (!is_link_address(addr)) {
39
- return 0;
40
- }
41
- sockaddr_dl const* link_addr = reinterpret_cast<sockaddr_dl const*>(addr);
42
- return link_addr->sdl_alen;
43
- }
44
-
45
36
  boost::optional<uint64_t> networking_resolver::get_link_mtu(string const& interface, void* data) const
46
37
  {
47
38
  ifreq ifr;
@@ -23,21 +23,12 @@ namespace facter { namespace facts { namespace osx {
23
23
  return nullptr;
24
24
  }
25
25
  sockaddr_dl const* link_addr = reinterpret_cast<sockaddr_dl const*>(addr);
26
- if (link_addr->sdl_alen != 6 && link_addr->sdl_alen != 20) {
26
+ if (link_addr->sdl_alen != 6) {
27
27
  return nullptr;
28
28
  }
29
29
  return reinterpret_cast<uint8_t const*>(LLADDR(link_addr));
30
30
  }
31
31
 
32
- uint8_t networking_resolver::get_link_address_length(sockaddr const* addr) const
33
- {
34
- if (!is_link_address(addr)) {
35
- return 0;
36
- }
37
- sockaddr_dl const* link_addr = reinterpret_cast<sockaddr_dl const*>(addr);
38
- return link_addr->sdl_alen;
39
- }
40
-
41
32
  boost::optional<uint64_t> networking_resolver::get_link_mtu(string const& interface, void* data) const
42
33
  {
43
34
  if (!data) {
@@ -49,9 +49,8 @@ namespace facter { namespace facts { namespace posix {
49
49
  return buffer;
50
50
  } else if (is_link_address(addr)) {
51
51
  auto link_addr = get_link_address_bytes(addr);
52
- uint8_t link_addr_len = get_link_address_length(addr);
53
52
  if (link_addr) {
54
- return macaddress_to_string(reinterpret_cast<uint8_t const*>(link_addr), link_addr_len);
53
+ return macaddress_to_string(reinterpret_cast<uint8_t const*>(link_addr));
55
54
  }
56
55
  }
57
56
 
@@ -69,7 +68,7 @@ namespace facter { namespace facts { namespace posix {
69
68
  }
70
69
  // Get the hostname (+1 to ensure a null is returned on platforms where maximum truncation may occur)
71
70
  vector<char> name(size + 1);
72
- if (gethostname(name.data(), size) != 0) {
71
+ if (gethostname(name.data(), size + 1) != 0) {
73
72
  LOG_WARNING("gethostname failed: {1} ({2}): hostname is unavailable.", strerror(errno), errno);
74
73
  } else {
75
74
  // Check for fully-qualified hostname
@@ -72,7 +72,7 @@ namespace facter { namespace facts { namespace posix {
72
72
  return;
73
73
  }
74
74
 
75
- // The SSH file format should be <algo> <key> <hostname>
75
+ // The SSH public key file format is <algo> <key> <comment>
76
76
  vector<boost::iterator_range<string::iterator>> parts;
77
77
  boost::split(parts, contents, boost::is_any_of(" "), boost::token_compress_on);
78
78
  if (parts.size() < 2) {
@@ -80,7 +80,8 @@ namespace facter { namespace facts { namespace posix {
80
80
  return;
81
81
  }
82
82
 
83
- // Assign the key
83
+ // Assign the key and its type
84
+ key.type.assign(parts[0].begin(), parts[0].end());
84
85
  key.key.assign(parts[1].begin(), parts[1].end());
85
86
 
86
87
  // Only fingerprint if we are using OpenSSL
@@ -0,0 +1,23 @@
1
+ #include <internal/facts/resolvers/fips_resolver.hpp>
2
+ #include <facter/facts/collection.hpp>
3
+ #include <facter/facts/fact.hpp>
4
+ #include <facter/facts/map_value.hpp>
5
+ #include <facter/facts/scalar_value.hpp>
6
+
7
+ using namespace std;
8
+ using namespace facter::facts;
9
+
10
+ namespace facter { namespace facts { namespace resolvers {
11
+
12
+ fips_resolver::fips_resolver() :
13
+ resolver("fips", {fact::fips_enabled})
14
+ {
15
+ }
16
+
17
+ void fips_resolver::resolve(collection& facts)
18
+ {
19
+ auto data = collect_data(facts);
20
+ facts.add(fact::fips_enabled, make_value<boolean_value>(data.is_fips_mode_enabled));
21
+ }
22
+
23
+ }}} // namespace facter::facts::resolvers
@@ -151,15 +151,15 @@ namespace facter { namespace facts { namespace resolvers {
151
151
  }
152
152
  }
153
153
 
154
- string networking_resolver::macaddress_to_string(uint8_t const* bytes, uint8_t byte_count)
154
+ string networking_resolver::macaddress_to_string(uint8_t const* bytes)
155
155
  {
156
- if (!bytes || (byte_count != 6 && byte_count != 20)) {
156
+ if (!bytes) {
157
157
  return {};
158
158
  }
159
159
 
160
160
  // Ignore MAC address "0"
161
161
  bool nonzero = false;
162
- for (size_t i = 0; i < byte_count; ++i) {
162
+ for (size_t i = 0; i < 6; ++i) {
163
163
  if (bytes[i] != 0) {
164
164
  nonzero = true;
165
165
  break;
@@ -169,26 +169,10 @@ namespace facter { namespace facts { namespace resolvers {
169
169
  return {};
170
170
  }
171
171
 
172
- if (byte_count == 6) {
173
- return (boost::format("%02x:%02x:%02x:%02x:%02x:%02x") %
174
- static_cast<int>(bytes[0]) % static_cast<int>(bytes[1]) %
175
- static_cast<int>(bytes[2]) % static_cast<int>(bytes[3]) %
176
- static_cast<int>(bytes[4]) % static_cast<int>(bytes[5])).str();
177
- } else if (byte_count == 20) {
178
- return (boost::format("%02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x") %
179
- static_cast<int>(bytes[0]) % static_cast<int>(bytes[1]) %
180
- static_cast<int>(bytes[2]) % static_cast<int>(bytes[3]) %
181
- static_cast<int>(bytes[4]) % static_cast<int>(bytes[5]) %
182
- static_cast<int>(bytes[6]) % static_cast<int>(bytes[7]) %
183
- static_cast<int>(bytes[8]) % static_cast<int>(bytes[9]) %
184
- static_cast<int>(bytes[10]) % static_cast<int>(bytes[11]) %
185
- static_cast<int>(bytes[12]) % static_cast<int>(bytes[13]) %
186
- static_cast<int>(bytes[14]) % static_cast<int>(bytes[15]) %
187
- static_cast<int>(bytes[16]) % static_cast<int>(bytes[17]) %
188
- static_cast<int>(bytes[18]) % static_cast<int>(bytes[19])).str();
189
- } else {
190
- return {};
191
- }
172
+ return (boost::format("%02x:%02x:%02x:%02x:%02x:%02x") %
173
+ static_cast<int>(bytes[0]) % static_cast<int>(bytes[1]) %
174
+ static_cast<int>(bytes[2]) % static_cast<int>(bytes[3]) %
175
+ static_cast<int>(bytes[4]) % static_cast<int>(bytes[5])).str();
192
176
  }
193
177
 
194
178
  bool networking_resolver::ignored_ipv4_address(string const& addr)
@@ -50,6 +50,7 @@ namespace facter { namespace facts { namespace resolvers {
50
50
 
51
51
  facts.add(string(key_fact_name), make_value<string_value>(key.key, true));
52
52
  key_value->add("key", make_value<string_value>(move(key.key)));
53
+ key_value->add("type", make_value<string_value>(move(key.type)));
53
54
 
54
55
  string fingerprint;
55
56
  if (!key.digest.sha1.empty()) {
@@ -171,11 +171,6 @@ namespace facter { namespace facts { namespace solaris {
171
171
  return nullptr;
172
172
  }
173
173
 
174
- uint8_t networking_resolver::get_link_address_length(const sockaddr * addr) const
175
- {
176
- return 0;
177
- }
178
-
179
174
  string networking_resolver::find_dhcp_server(string const& interface) const
180
175
  {
181
176
  auto exec = execute("dhcpinfo", { "-i", interface, "ServerID" });
@@ -27,15 +27,19 @@ struct test_ssh_resolver : ssh_resolver
27
27
  {
28
28
  data result;
29
29
  result.dsa.key = "dsa:key";
30
+ result.dsa.type = "dsa:type";
30
31
  result.dsa.digest.sha1 = "dsa:sha1";
31
32
  result.dsa.digest.sha256 = "dsa:sha256";
32
33
  result.ecdsa.key = "ecdsa:key";
34
+ result.ecdsa.type = "ecdsa:type";
33
35
  result.ecdsa.digest.sha1 = "ecdsa:sha1";
34
36
  result.ecdsa.digest.sha256 = "ecdsa:sha256";
35
37
  result.ed25519.key = "ed25519:key";
38
+ result.ed25519.type = "ed25519:type";
36
39
  result.ed25519.digest.sha1 = "ed25519:sha1";
37
40
  result.ed25519.digest.sha256 = "ed25519:sha256";
38
41
  result.rsa.key = "rsa:key";
42
+ result.rsa.type = "rsa:type";
39
43
  result.rsa.digest.sha1 = "rsa:sha1";
40
44
  result.rsa.digest.sha256 = "rsa:sha256";
41
45
  return result;
@@ -66,10 +70,13 @@ SCENARIO("using the ssh resolver") {
66
70
  for (auto const& algorithm : algorithms) {
67
71
  auto entry = ssh->get<map_value>(algorithm);
68
72
  REQUIRE(entry);
69
- REQUIRE(entry->size() == 2u);
73
+ REQUIRE(entry->size() == 3u);
70
74
  auto key = entry->get<string_value>("key");
71
75
  REQUIRE(key);
72
76
  REQUIRE(key->value() == algorithm + ":key");
77
+ auto type = entry->get<string_value>("type");
78
+ REQUIRE(type);
79
+ REQUIRE(type->value() == algorithm + ":type");
73
80
  auto fingerprints = entry->get<map_value>("fingerprints");
74
81
  REQUIRE(fingerprints);
75
82
  REQUIRE(fingerprints->size() == 2u);
@@ -17,6 +17,7 @@
17
17
  #include <internal/facts/resolvers/dmi_resolver.hpp>
18
18
  #include <internal/facts/resolvers/ec2_resolver.hpp>
19
19
  #include <internal/facts/resolvers/filesystem_resolver.hpp>
20
+ #include <internal/facts/resolvers/fips_resolver.hpp>
20
21
  #include <internal/facts/resolvers/gce_resolver.hpp>
21
22
  #include <internal/facts/resolvers/hypervisors_resolver.hpp>
22
23
  #include <internal/facts/resolvers/identity_resolver.hpp>
@@ -139,6 +140,17 @@ struct filesystem_resolver : resolvers::filesystem_resolver
139
140
  }
140
141
  };
141
142
 
143
+ struct fips_resolver : resolvers::fips_resolver
144
+ {
145
+ protected:
146
+ virtual data collect_data(collection& facts) override
147
+ {
148
+ data result;
149
+ result.is_fips_mode_enabled = false;
150
+ return result;
151
+ }
152
+ };
153
+
142
154
  using hypervisor_data = std::unordered_map<std::string, std::unordered_map<std::string, boost::variant<std::string, bool, int>>>;
143
155
 
144
156
  struct hypervisors_resolver_test : resolvers::hypervisors_resolver_base
@@ -310,15 +322,19 @@ protected:
310
322
  {
311
323
  data result;
312
324
  result.dsa.key = "dsa:key";
325
+ result.dsa.type = "dsa:type";
313
326
  result.dsa.digest.sha1 = "dsa:sha1";
314
327
  result.dsa.digest.sha256 = "dsa:sha256";
315
328
  result.ecdsa.key = "ecdsa:key";
329
+ result.ecdsa.type = "ecdsa:type";
316
330
  result.ecdsa.digest.sha1 = "ecdsa:sha1";
317
331
  result.ecdsa.digest.sha256 = "ecdsa:sha256";
318
332
  result.ed25519.key = "ed25519:key";
333
+ result.ed25519.type = "ed25519:type";
319
334
  result.ed25519.digest.sha1 = "ed25519:sha1";
320
335
  result.ed25519.digest.sha256 = "ed25519:sha256";
321
336
  result.rsa.key = "rsa:key";
337
+ result.rsa.type = "rsa:type";
322
338
  result.rsa.digest.sha1 = "rsa:sha1";
323
339
  result.rsa.digest.sha256 = "rsa:sha256";
324
340
  return result;
@@ -469,6 +485,7 @@ void add_all_facts(collection& facts)
469
485
  facts.add(make_shared<disk_resolver>());
470
486
  facts.add(make_shared<dmi_resolver>());
471
487
  facts.add(make_shared<filesystem_resolver>());
488
+ facts.add(make_shared<fips_resolver>());
472
489
  // TODO: refactor the EC2 resolver to use the "collect_data" pattern
473
490
  facts.add(make_shared<ec2_resolver>());
474
491
  // TODO: refactor the GCE resolver to use the "collect_data" pattern