Skip to content

Commit 8631235

Browse files
feat(sspi): migrate from winreg to windows-registry crate (#441)
1 parent 99eeaec commit 8631235

File tree

4 files changed

+76
-68
lines changed

4 files changed

+76
-68
lines changed

Cargo.lock

Lines changed: 57 additions & 47 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -134,7 +134,7 @@ zeroize = { version = "1.8", features = ["zeroize_derive"] }
134134
async-recursion = "1.1"
135135

136136
[target.'cfg(windows)'.dependencies]
137-
winreg = "0.55"
137+
windows-registry = "0.4"
138138
windows = { version = "0.61", features = [ "Win32_Foundation", "Win32_NetworkManagement_Dns"] }
139139
windows-sys = { workspace = true, features = ["Win32_Security_Cryptography", "Win32_Foundation"] }
140140

src/dns.rs

Lines changed: 14 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,7 @@ cfg_if::cfg_if! {
77
core::*,
88
Win32::NetworkManagement::Dns::*,
99
};
10-
use winreg::RegKey;
11-
use winreg::enums::*;
10+
use windows_registry::LOCAL_MACHINE;
1211
use std::ptr::{null_mut};
1312
use core::ffi::{c_void};
1413

@@ -42,14 +41,14 @@ cfg_if::cfg_if! {
4241

4342
pub fn get_dns_client_nrpt_rules() -> Vec<DnsClientNrptRule> {
4443
let mut rules: Vec<DnsClientNrptRule> = Vec::new();
45-
let hklm = RegKey::predef(HKEY_LOCAL_MACHINE);
44+
let hklm = LOCAL_MACHINE;
4645
let dns_policy_config_key_path = "System\\CurrentControlSet\\Services\\Dnscache\\Parameters\\DnsPolicyConfig";
47-
if let Ok(dns_policy_config_key) = hklm.open_subkey(dns_policy_config_key_path) {
48-
for rule_name in dns_policy_config_key.enum_keys().map(|x| x.unwrap()) {
46+
if let Ok(dns_policy_config_key) = hklm.open(dns_policy_config_key_path) {
47+
for rule_name in dns_policy_config_key.keys().unwrap() {
4948
let dns_policy_rule_key_path = format!("{}\\{}", dns_policy_config_key_path, &rule_name);
50-
if let Ok(dns_policy_rule_key) = hklm.open_subkey(dns_policy_rule_key_path) {
51-
let namespace: Option<String> = dns_policy_rule_key.get_value("Name").ok(); // REG_MULTI_SZ
52-
let name_server_list: Option<String> = dns_policy_rule_key.get_value("GenericDNSServers").ok(); // REG_SZ
49+
if let Ok(dns_policy_rule_key) = hklm.open(dns_policy_rule_key_path) {
50+
let namespace: Option<String> = dns_policy_rule_key.get_string("Name").ok(); // REG_MULTI_SZ
51+
let name_server_list: Option<String> = dns_policy_rule_key.get_string("GenericDNSServers").ok(); // REG_SZ
5352
if let (Some(namespace), Some(name_server_list)) = (namespace, name_server_list) {
5453
let name_servers: Vec<String> = name_server_list.split(';').map(|x| x.to_string()).collect();
5554
rules.push(DnsClientNrptRule {
@@ -65,23 +64,23 @@ cfg_if::cfg_if! {
6564
}
6665

6766
pub fn get_default_name_servers() -> Vec<String> {
68-
let hklm = RegKey::predef(HKEY_LOCAL_MACHINE);
67+
let hklm = LOCAL_MACHINE;
6968
let tcpip_linkage_key_path = "SYSTEM\\CurrentControlSet\\Services\\Tcpip\\Linkage";
7069
let tcpip_interfaces_key_path = "SYSTEM\\CurrentControlSet\\Services\\Tcpip\\Parameters\\Interfaces";
7170
let dns_registered_adapters_key_path = "SYSTEM\\CurrentControlSet\\Services\\Tcpip\\Parameters\\DNSRegisteredAdapters";
7271

73-
if let Ok(tcpip_linkage_key) = hklm.open_subkey(tcpip_linkage_key_path) {
74-
let bind_devices: Vec<String> = tcpip_linkage_key.get_value("Bind").unwrap();
72+
if let Ok(tcpip_linkage_key) = hklm.open(tcpip_linkage_key_path) {
73+
let bind_devices: Vec<String> = tcpip_linkage_key.get_multi_string("Bind").unwrap();
7574
let device_ids = bind_devices.iter().map(|x| x.strip_prefix("\\Device\\").unwrap());
7675

7776
for device_id in device_ids {
7877
let interface_key_path = format!("{}\\{}", tcpip_interfaces_key_path, &device_id);
7978
let dns_adapter_key_path = format!("{}\\{}", dns_registered_adapters_key_path, &device_id);
8079

81-
if let (Ok(interface_key), Ok(dns_adapter_key)) = (hklm.open_subkey(interface_key_path), hklm.open_subkey(dns_adapter_key_path)) {
82-
let name_server: Option<String> = interface_key.get_value("NameServer").ok().filter(|x: &String| !x.is_empty());
83-
let dhcp_name_server: Option<String> = interface_key.get_value("DhcpNameServer").ok().filter(|x: &String| !x.is_empty());
84-
let stale_adapter: u32 = dns_adapter_key.get_value("StaleAdapter").unwrap_or(1);
80+
if let (Ok(interface_key), Ok(dns_adapter_key)) = (hklm.open(interface_key_path), hklm.open(dns_adapter_key_path)) {
81+
let name_server: Option<String> = interface_key.get_string("NameServer").ok().filter(|x: &String| !x.is_empty());
82+
let dhcp_name_server: Option<String> = interface_key.get_string("DhcpNameServer").ok().filter(|x: &String| !x.is_empty());
83+
let stale_adapter: u32 = dns_adapter_key.get_u32("StaleAdapter").unwrap_or(1);
8584

8685
if stale_adapter != 1 {
8786
if let Some(name_server_list) = name_server.or(dhcp_name_server) {

src/kdc.rs

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
cfg_if::cfg_if! {
22
if #[cfg(windows)] {
3-
use winreg::RegKey;
4-
use winreg::enums::*;
3+
use windows_registry::LOCAL_MACHINE;
54
}
65
}
76

@@ -20,11 +19,11 @@ use crate::krb::Krb5Conf;
2019
#[instrument(level = "debug", ret)]
2120
pub fn detect_kdc_hosts_from_system(domain: &str) -> Vec<String> {
2221
let domain_upper = domain.to_uppercase();
23-
let hklm = RegKey::predef(HKEY_LOCAL_MACHINE);
22+
let hklm = LOCAL_MACHINE;
2423
let domains_key_path = "SYSTEM\\CurrentControlSet\\Control\\Lsa\\Kerberos\\Domains";
2524
let domain_key_path = format!("{}\\{}", domains_key_path, &domain_upper);
26-
if let Ok(domain_key) = hklm.open_subkey(domain_key_path) {
27-
let kdc_names: Vec<String> = domain_key.get_value("KdcNames").unwrap_or_default();
25+
if let Ok(domain_key) = hklm.open(domain_key_path) {
26+
let kdc_names: Vec<String> = domain_key.get_multi_string("KdcNames").unwrap_or_default();
2827
kdc_names.iter().map(|x| format!("tcp://{}:88", x)).collect()
2928
} else {
3029
Vec::new()

0 commit comments

Comments
 (0)