diff --git a/lib/modules/Protocols.pmod/DNS.pmod b/lib/modules/Protocols.pmod/DNS.pmod index 1a296430323570ce4724b01c36b25e42564713be..2766fe8b9e0ddb1147146d5f5f0345914ab66c4b 100644 --- a/lib/modules/Protocols.pmod/DNS.pmod +++ b/lib/modules/Protocols.pmod/DNS.pmod @@ -213,9 +213,9 @@ class client { static private int is_ip(string ip) { - return(replace(rest, + return(replace(ip, ({ "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "." }), - ({ "", "", "", "", "", "", "", "", ""; "", "" })) == ""); + ({ "", "", "", "", "", "", "", "", "", "", "" })) == ""); } static private mapping etc_hosts; @@ -225,17 +225,17 @@ class client { if (!etc_hosts) { string raw = Stdio.read_file("/etc/hosts"); - etc_hosts = ([ "localhost", "127.0.0.1" ]); + 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", " "); + line = lower_case(replace((line/"#")[0], "\t", " ")); array arr = (line/" ") - ({ "" }); if (sizeof(arr) > 1) { if (is_ip(arr[0])) { - foreach(arr[1..], name) { + foreach(arr[1..], string name) { etc_hosts[name] = arr[0]; } } else { @@ -247,7 +247,7 @@ class client { // Couldn't read /etc/hosts. } } - return(etc_hosts[host]); + return(etc_hosts[lower_case(host)]); } array(string) nameservers = ({}); @@ -306,6 +306,12 @@ class client { } if(domain) domains = ({ domain }) + domains; + domains = Array.map(domains, lambda(string d) { + if (d[-1] == '.') { + return d[..sizeof(d)-2]; + } + return d; + }); } else { nameservers= ({ server }); }