Branch: Tag:

1998-01-26

1998-01-26 18:27:40 by Henrik Grubbström (Grubba) <grubba@grubba.org>

Now handles resolving DNS-server hostnames from /etc/hosts.

Rev: lib/modules/Protocols.pmod/DNS.pmod:1.9

211:   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)
247:    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;    }    }