pike.git / lib / modules / Protocols.pmod / DNS.pmod

version» Context lines:

pike.git/lib/modules/Protocols.pmod/DNS.pmod:204:    m->ns=decode_entries(s,m->nscount,next);    m->ar=decode_entries(s,m->arcount,next);    return m;    }   };         class client {    inherit protocol;    +  static private int is_ip(string ip) +  { +  return(replace(rest, +  ({ "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "." }), +  ({ "", "", "", "", "", "", "", "", ""; "", "" })) == ""); +  } +  +  static private mapping etc_hosts; +  +  static private string match_etc_hosts(string host) +  { +  if (!etc_hosts) { +  string raw = Stdio.read_file("/etc/hosts"); +  +  etc_hosts = ([ "localhost", "127.0.0.1" ]); +  +  if (raw) { +  foreach(raw/"\n", string line) { +  // Handle comments, and split the line on white-space +  line = replace((line/"#")[0], "\t", " "); +  array arr = (line/" ") - ({ "" }); +  +  if (sizeof(arr) > 1) { +  if (is_ip(arr[0])) { +  foreach(arr[1..], name) { +  etc_hosts[name] = arr[0]; +  } +  } else { +  // Bad /etc/hosts entry ignored. +  } +  } +  } +  } else { +  // Couldn't read /etc/hosts. +  } +  } +  return(etc_hosts[host]); +  } +     array(string) nameservers = ({});    array domains = ({});    void create(void|string server)    {    if(!server)    {    string domain;    string resolv_conf = Stdio.read_file("/etc/resolv.conf");       if (!resolv_conf) {
pike.git/lib/modules/Protocols.pmod/DNS.pmod:240:    // Save domain for later.    domain = rest;    break;    case "search":    rest = replace(rest, "\t", " ");    foreach(rest / " " - ({""}), string dom)    domains += ({dom});    break;       case "nameserver": +  if (!is_ip(rest)) { +  // Not an IP-number! +  string host = rest; +  if (!(rest = match_etc_hosts(host))) { +  werror(sprintf("Protocols.DNS.client(): " +  "Can't resolv nameserver \"%s\"\n", host)); +  break; +  } +  } +  if (sizeof(rest)) {    nameservers += ({ rest }); -  +  }    break;    }    }    if (!sizeof(nameservers)) {    nameservers = ({ "127.0.0.1" });    }    if(domain)    domains = ({ domain }) + domains;    } else {    nameservers= ({ server });