Crate resolv_conf [] [src]

The crate simply parses /etc/resolv.conf file and creates a config object

Examples

Parsing a config from a string

extern crate resolv_conf;

use std::net::{Ipv4Addr, Ipv6Addr};
use resolv_conf::{ScopedIp, Config, Network};

fn main() {
    let config_str = "
options ndots:8 timeout:8 attempts:8

domain example.com
search example.com sub.example.com

nameserver 2001:4860:4860::8888
nameserver 2001:4860:4860::8844
nameserver 8.8.8.8
nameserver 8.8.4.4

options rotate
options inet6 no-tld-query

sortlist 130.155.160.0/255.255.240.0 130.155.0.0";

    // Parse the config.
    let parsed_config = Config::parse(&config_str).expect("Failed to parse config");

    // We can build configs manually as well, either directly or with Config::new()
    let expected_config = Config {
        nameservers: vec![
            ScopedIp::V6(Ipv6Addr::new(0x2001, 0x4860, 0x4860, 0, 0, 0, 0, 0x8888), None),
            ScopedIp::V6(Ipv6Addr::new(0x2001, 0x4860, 0x4860, 0, 0, 0, 0, 0x8844), None),
            ScopedIp::V4(Ipv4Addr::new(8, 8, 8, 8)),
            ScopedIp::V4(Ipv4Addr::new(8, 8, 4, 4)),
        ],
        search: vec![String::from("example.com"), String::from("sub.example.com")],
        sortlist: vec![
            Network::V4(Ipv4Addr::new(130, 155, 160, 0), Ipv4Addr::new(255, 255, 240, 0)),
            Network::V4(Ipv4Addr::new(130, 155, 0, 0), Ipv4Addr::new(255, 255, 0, 0)),
        ],
        debug: false,
        ndots: 8,
        timeout: 8,
        attempts: 8,
        rotate: true,
        no_check_names: false,
        inet6: true,
        ip6_bytestring: false,
        ip6_dotint: false,
        edns0: false,
        single_request: false,
        single_request_reopen: false,
        no_tld_query: true,
        use_vc: false,
    };

    // We can compare configurations, since resolv_conf::Config implements Eq
    assert_eq!(parsed_config, expected_config);
}

Parsing a file

use std::io::Read;
use std::fs::File;

extern crate resolv_conf;

fn main() {
    // Read the file
    let mut buf = Vec::with_capacity(4096);
    let mut f = File::open("/etc/resolv.conf").unwrap();
    f.read_to_end(&mut buf).unwrap();

    // Parse the buffer
    let cfg = resolv_conf::Config::parse(&buf).unwrap();

    // Print the config
    println!("---- Parsed /etc/resolv.conf -----\n{:#?}\n", cfg);
}

Structs

AddrParseError

An error which can be returned when parsing an IP address.

Config

Represent a resolver configuration, as described in man 5 resolv.conf on linux. The options and defaults match those in this man page.

Enums

Network

A network, that is an IP address and a mask

ParseError

Error while parsing resolv.conf file

ScopedIp

Represent an IP address. This type is similar to std::net::IpAddr but it supports IPv6 scope identifiers.