windows fixess
This commit is contained in:
		| @@ -79,21 +79,19 @@ pub async fn txt_lookup<S: AsRef<str>>(host: S) -> EyreResult<Vec<String>> { | ||||
|     cfg_if! { | ||||
|         if #[cfg(target_os = "windows")] { | ||||
|             use core::ffi::c_void; | ||||
|             use windows::core::PSTR; | ||||
|             use windows::core::{PSTR,PCSTR}; | ||||
|             use std::ffi::CStr; | ||||
|             use windows::Win32::NetworkManagement::Dns::{DnsQuery_UTF8, DnsFree, DNS_TYPE_TEXT, DNS_QUERY_STANDARD, DNS_RECORDA, DnsFreeRecordList}; | ||||
|  | ||||
|             let mut out = Vec::new(); | ||||
|             unsafe { | ||||
|                 let mut p_query_results: *mut DNS_RECORDA = core::ptr::null_mut(); | ||||
|                 let status = DnsQuery_UTF8(host.as_ref(), DNS_TYPE_TEXT as u16, DNS_QUERY_STANDARD, core::ptr::null_mut(), &mut p_query_results as *mut *mut DNS_RECORDA, core::ptr::null_mut()); | ||||
|                 if status != 0 { | ||||
|                     bail!("Failed to resolve TXT record"); | ||||
|                 } | ||||
|                 let host = host.as_ref().to_string(); | ||||
|                 DnsQuery_UTF8(PCSTR::from_raw(host.as_ptr()), DNS_TYPE_TEXT, DNS_QUERY_STANDARD, None, &mut p_query_results as *mut *mut DNS_RECORDA, None).wrap_err("Failed to resolve TXT record")?; | ||||
|  | ||||
|                 let mut p_record: *mut DNS_RECORDA = p_query_results; | ||||
|                 while !p_record.is_null() { | ||||
|                     if (*p_record).wType == DNS_TYPE_TEXT as u16 { | ||||
|                     if (*p_record).wType == DNS_TYPE_TEXT.0 { | ||||
|                         let count:usize = (*p_record).Data.TXT.dwStringCount.try_into().unwrap(); | ||||
|                         let string_array: *const PSTR = &(*p_record).Data.TXT.pStringArray[0]; | ||||
|                         for n in 0..count { | ||||
| @@ -107,7 +105,7 @@ pub async fn txt_lookup<S: AsRef<str>>(host: S) -> EyreResult<Vec<String>> { | ||||
|                     } | ||||
|                     p_record = (*p_record).pNext; | ||||
|                 } | ||||
|                 DnsFree(p_query_results as *const c_void, DnsFreeRecordList); | ||||
|                 DnsFree(Some(p_query_results as *const c_void), DnsFreeRecordList); | ||||
|             } | ||||
|             Ok(out) | ||||
|  | ||||
| @@ -139,7 +137,7 @@ pub async fn ptr_lookup(ip_addr: IpAddr) -> EyreResult<String> { | ||||
|     cfg_if! { | ||||
|         if #[cfg(target_os = "windows")] { | ||||
|             use core::ffi::c_void; | ||||
|             use windows::core::PSTR; | ||||
|             use windows::core::{PSTR,PCSTR}; | ||||
|             use std::ffi::CStr; | ||||
|             use windows::Win32::NetworkManagement::Dns::{DnsQuery_UTF8, DnsFree, DNS_TYPE_PTR, DNS_QUERY_STANDARD, DNS_RECORDA, DnsFreeRecordList}; | ||||
|  | ||||
| @@ -159,14 +157,11 @@ pub async fn ptr_lookup(ip_addr: IpAddr) -> EyreResult<String> { | ||||
|  | ||||
|             unsafe { | ||||
|                 let mut p_query_results: *mut DNS_RECORDA = core::ptr::null_mut(); | ||||
|                 let status = DnsQuery_UTF8(host, DNS_TYPE_PTR as u16, DNS_QUERY_STANDARD, core::ptr::null_mut(), &mut p_query_results as *mut *mut DNS_RECORDA, core::ptr::null_mut()); | ||||
|                 if status != 0 { | ||||
|                     bail!("Failed to resolve PTR record"); | ||||
|                 } | ||||
|                 DnsQuery_UTF8(PCSTR::from_raw(host.as_ptr()), DNS_TYPE_PTR, DNS_QUERY_STANDARD, None, &mut p_query_results as *mut *mut DNS_RECORDA, None).wrap_err("Failed to resolve PTR record")?; | ||||
|  | ||||
|                 let mut p_record: *mut DNS_RECORDA = p_query_results; | ||||
|                 while !p_record.is_null() { | ||||
|                     if (*p_record).wType == DNS_TYPE_PTR as u16 { | ||||
|                     if (*p_record).wType == DNS_TYPE_PTR.0 { | ||||
|                         let p_name_host: PSTR = (*p_record).Data.PTR.pNameHost; | ||||
|                         let c_str: &CStr = CStr::from_ptr(p_name_host.0 as *const i8); | ||||
|                         if let Ok(str_slice) = c_str.to_str() { | ||||
| @@ -176,7 +171,7 @@ pub async fn ptr_lookup(ip_addr: IpAddr) -> EyreResult<String> { | ||||
|                     } | ||||
|                     p_record = (*p_record).pNext; | ||||
|                 } | ||||
|                 DnsFree(p_query_results as *const c_void, DnsFreeRecordList); | ||||
|                 DnsFree(Some(p_query_results as *const c_void), DnsFreeRecordList); | ||||
|             } | ||||
|             bail!("No records returned"); | ||||
|         } else { | ||||
|   | ||||
		Reference in New Issue
	
	Block a user