mirror of
https://github.com/Start9Labs/start-os.git
synced 2026-03-30 12:11:56 +00:00
coukd work
This commit is contained in:
@@ -164,7 +164,8 @@ impl DnsClient {
|
|||||||
loop {
|
loop {
|
||||||
if let Err::<(), Error>(e) = async {
|
if let Err::<(), Error>(e) = async {
|
||||||
let mut stream = file_string_stream("/run/systemd/resolve/resolv.conf")
|
let mut stream = file_string_stream("/run/systemd/resolve/resolv.conf")
|
||||||
.filter_map(|a| futures::future::ready(a.transpose())).boxed();
|
.filter_map(|a| futures::future::ready(a.transpose()))
|
||||||
|
.boxed();
|
||||||
let mut conf: String = stream
|
let mut conf: String = stream
|
||||||
.next()
|
.next()
|
||||||
.await
|
.await
|
||||||
@@ -172,7 +173,7 @@ impl DnsClient {
|
|||||||
let mut prev_nameservers = Vec::new();
|
let mut prev_nameservers = Vec::new();
|
||||||
let mut bg = BTreeMap::<SocketAddr, BoxFuture<_>>::new();
|
let mut bg = BTreeMap::<SocketAddr, BoxFuture<_>>::new();
|
||||||
loop {
|
loop {
|
||||||
let nameservers = conf
|
let nameservers = dbg!(&conf)
|
||||||
.lines()
|
.lines()
|
||||||
.map(|l| l.trim())
|
.map(|l| l.trim())
|
||||||
.filter_map(|l| l.strip_prefix("nameserver "))
|
.filter_map(|l| l.strip_prefix("nameserver "))
|
||||||
@@ -234,10 +235,14 @@ impl DnsClient {
|
|||||||
}
|
}
|
||||||
bg.retain(|n, _| nameservers.iter().any(|a| a == n));
|
bg.retain(|n, _| nameservers.iter().any(|a| a == n));
|
||||||
prev_nameservers = nameservers;
|
prev_nameservers = nameservers;
|
||||||
|
client.replace(new);
|
||||||
}
|
}
|
||||||
tokio::select! {
|
tokio::select! {
|
||||||
c = stream.next() => conf = c.or_not_found("/run/systemd/resolve/resolv.conf")??,
|
c = stream.next() => conf = c.or_not_found("/run/systemd/resolve/resolv.conf")??,
|
||||||
_ = futures::future::join_all(bg.values_mut()) => (),
|
_ = futures::future::join(
|
||||||
|
futures::future::join_all(bg.values_mut()),
|
||||||
|
futures::future::pending::<()>(),
|
||||||
|
) => (),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -258,6 +263,7 @@ impl DnsClient {
|
|||||||
) -> Vec<hickory_client::proto::xfer::DnsExchangeSend> {
|
) -> Vec<hickory_client::proto::xfer::DnsExchangeSend> {
|
||||||
self.client.peek(|c| {
|
self.client.peek(|c| {
|
||||||
c.iter()
|
c.iter()
|
||||||
|
.map(|(k, v)| (dbg!(k), v))
|
||||||
.map(|(_, c)| c.lookup(query.clone(), options.clone()))
|
.map(|(_, c)| c.lookup(query.clone(), options.clone()))
|
||||||
.collect()
|
.collect()
|
||||||
})
|
})
|
||||||
@@ -332,7 +338,7 @@ impl RequestHandler for Resolver {
|
|||||||
request: &Request,
|
request: &Request,
|
||||||
mut response_handle: R,
|
mut response_handle: R,
|
||||||
) -> ResponseInfo {
|
) -> ResponseInfo {
|
||||||
async {
|
match async {
|
||||||
let req = request.request_info()?;
|
let req = request.request_info()?;
|
||||||
let query = req.query;
|
let query = req.query;
|
||||||
if let Some(ip) = self.resolve(query.name().borrow(), req.src.ip()) {
|
if let Some(ip) = self.resolve(query.name().borrow(), req.src.ip()) {
|
||||||
@@ -415,10 +421,9 @@ impl RequestHandler for Resolver {
|
|||||||
.lookup(dbg!(query), DnsRequestOptions::default());
|
.lookup(dbg!(query), DnsRequestOptions::default());
|
||||||
let mut err = None;
|
let mut err = None;
|
||||||
for stream in streams.iter_mut() {
|
for stream in streams.iter_mut() {
|
||||||
match dbg!(stream.next().await) {
|
match dbg!(tokio::time::timeout(Duration::from_secs(5), stream.next()).await) {
|
||||||
None => (),
|
Ok(Some(Err(e))) => err = Some(e),
|
||||||
Some(Err(e)) => err = Some(e),
|
Ok(Some(Ok(msg))) => {
|
||||||
Some(Ok(msg)) => {
|
|
||||||
return response_handle
|
return response_handle
|
||||||
.send_response(
|
.send_response(
|
||||||
MessageResponseBuilder::from_message_request(&*request).build(
|
MessageResponseBuilder::from_message_request(&*request).build(
|
||||||
@@ -431,6 +436,7 @@ impl RequestHandler for Resolver {
|
|||||||
)
|
)
|
||||||
.await;
|
.await;
|
||||||
}
|
}
|
||||||
|
_ => (),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if let Some(e) = err {
|
if let Some(e) = err {
|
||||||
@@ -439,17 +445,41 @@ impl RequestHandler for Resolver {
|
|||||||
}
|
}
|
||||||
let mut res = Header::response_from_request(request.header());
|
let mut res = Header::response_from_request(request.header());
|
||||||
res.set_response_code(ResponseCode::ServFail);
|
res.set_response_code(ResponseCode::ServFail);
|
||||||
Ok(res.into())
|
response_handle
|
||||||
|
.send_response(
|
||||||
|
MessageResponseBuilder::from_message_request(&*request).build(
|
||||||
|
res,
|
||||||
|
[],
|
||||||
|
[],
|
||||||
|
[],
|
||||||
|
[],
|
||||||
|
),
|
||||||
|
)
|
||||||
|
.await
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
.await
|
.await
|
||||||
.unwrap_or_else(|e| {
|
{
|
||||||
tracing::error!("{}", e);
|
Ok(a) => a,
|
||||||
tracing::debug!("{:?}", e);
|
Err(e) => {
|
||||||
let mut res = Header::response_from_request(request.header());
|
tracing::error!("{}", e);
|
||||||
res.set_response_code(ResponseCode::ServFail);
|
tracing::debug!("{:?}", e);
|
||||||
res.into()
|
let mut res = Header::response_from_request(request.header());
|
||||||
})
|
res.set_response_code(ResponseCode::ServFail);
|
||||||
|
response_handle
|
||||||
|
.send_response(
|
||||||
|
MessageResponseBuilder::from_message_request(&*request).build(
|
||||||
|
res,
|
||||||
|
[],
|
||||||
|
[],
|
||||||
|
[],
|
||||||
|
[],
|
||||||
|
),
|
||||||
|
)
|
||||||
|
.await
|
||||||
|
.unwrap_or(res.into())
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user