cdns_rs/sync/cfg_host_parser.rs
1/*-
2 * cdns-rs - a simple sync/async DNS query library
3 *
4 * Copyright (C) 2020 Aleksandr Morozov
5 *
6 * Copyright 2025 Aleksandr Morozov
7 *
8 * Licensed under the EUPL, Version 1.2 or - as soon they will be approved by
9 * the European Commission - subsequent versions of the EUPL (the "Licence").
10 *
11 * You may not use this work except in compliance with the Licence.
12 *
13 * You may obtain a copy of the Licence at:
14 *
15 * https://joinup.ec.europa.eu/software/page/eupl
16 *
17 * Unless required by applicable law or agreed to in writing, software
18 * distributed under the Licence is distributed on an "AS IS" basis, WITHOUT
19 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
20 * Licence for the specific language governing permissions and limitations
21 * under the Licence.
22 */
23
24
25use std::path::Path;
26
27use crate::cfg_host_parser::HostConfig;
28use crate::error::*;
29
30
31use super::caches::CacheOperations;
32use super::cfg_parsers::{ConfigParser, read_file};
33use super::common::{ HOST_CFG_PATH, HOST_CFG_PATH_P};
34use super::log::sync_log_writer;
35
36/// An /etc/hosts file parser
37
38
39impl CacheOperations for HostConfig
40{
41 fn is_reload_allowed(&self) -> bool
42 {
43 return true;
44 }
45}
46
47impl ConfigParser<HostConfig> for HostConfig
48{
49 fn parse_config() -> CDnsResult<Self>
50 {
51 let mut writer = Writer::new();
52
53 let file_content = read_file(HOST_CFG_PATH)?;
54
55 let ret = Self::parse_host_file_internal(file_content, &mut writer);
56
57 sync_log_writer(writer);
58
59 return ret;
60 }
61
62 fn get_file_path() -> &'static Path
63 {
64 return &HOST_CFG_PATH_P;
65 }
66
67 fn is_default(&self) -> bool
68 {
69 return self.is_empty();
70 }
71}
72
73
74