pike.git
/
lib
/
modules
/
Protocols.pmod
/
DNS.pmod
version
»
Context lines:
10
20
40
80
file
none
3
pike.git/lib/modules/Protocols.pmod/DNS.pmod:205:
m->ar=decode_entries(s,m->arcount,next); return m; } }; class client { inherit protocol; string nameserver;
-
array
search
= ({});
+
array
domains
= ({});
void create(void|string server) { if(!server) { string domain; foreach(Stdio.read_file("/etc/resolv.conf")/"\n", string line) { string rest; sscanf(line,"%s#",line); sscanf(line,"%*[\r \t]%s",line);
pike.git/lib/modules/Protocols.pmod/DNS.pmod:229:
sscanf(line,"%s%*[ \t]%s",line,rest); switch(line) { case "domain": // Save domain for later. domain = rest; break; case "search": rest = replace(rest, "\t", " "); foreach(rest / " " - ({""}), string dom)
-
search
+= ({dom});
+
domains
+= ({dom});
break; case "nameserver": nameserver=rest; break; } } if(domain)
-
search
= ({ domain }) +
search
;
+
domains
= ({ domain }) +
domains
;
} else { nameserver=server; } } // Warning: NO TIMEOUT mapping do_sync_query(string s) { object udp=spider.dumUDP();
pike.git/lib/modules/Protocols.pmod/DNS.pmod:265:
m->ip != nameserver || m->data[0..1]!=s[0..1]); return decode_res(m->data); } // Warning: NO TIMEOUT mixed *gethostbyname(string s) { mapping m;
-
if(sizeof(
search
) && s[-1] != '.' && sizeof(s/".") < 3) {
+
if(sizeof(
domains
) && s[-1] != '.' && sizeof(s/".") < 3) {
m=do_sync_query(mkquery(s, C_IN, T_A)); if(!m || !m->an || !sizeof(m->an))
-
foreach(
search
, string domain)
+
foreach(
domains
, string domain)
{ m=do_sync_query(mkquery(s+"."+domain, C_IN, T_A)); if(m && m->an && sizeof(m->an)) break; } } else { m=do_sync_query(mkquery(s, C_IN, T_A)); } string *names=({});
pike.git/lib/modules/Protocols.pmod/DNS.pmod:330:
return ({ sizeof(names)?names[0]:0, ips, names, }); } string get_primary_mx(string host) { mapping m;
-
if(sizeof(
search
) && host[-1] != '.' && sizeof(host/".") < 3) {
+
if(sizeof(
domains
) && host[-1] != '.' && sizeof(host/".") < 3) {
m=do_sync_query(mkquery(host, C_IN, T_MX)); if(!m || !m->an || !sizeof(m->an))
-
foreach(
search
, string domain)
+
foreach(
domains
, string domain)
{ m=do_sync_query(mkquery(host+"."+domain, C_IN, T_MX)); if(m && m->an && sizeof(m->an)) break; } } else { m=do_sync_query(mkquery(host, C_IN, T_MX)); } int minpref=29372974; string ret;
pike.git/lib/modules/Protocols.pmod/DNS.pmod:438:
static private void generic_get(string d, mapping answer, int multi, string field, string domain, function callback, mixed ... args) { if(!answer || !answer->an || !sizeof(answer->an)) {
-
if(multi == -1 || sizeof(
search
)
< multi
) {
+
if(multi == -1 ||
multi >=
sizeof(
domains
)) {
// Either a request without multi (ip, or FQDN) or we have tried all // domains. callback(domain,0,@args); } else { // Multiple domain request. Try the next one...
-
do_query(domain+"."
+search
[multi], C_IN, T_A,
+
do_query(domain+"."
+domains
[multi], C_IN, T_A,
generic_get, ++multi, "a", domain, callback, @args); } } else { foreach(answer->an, array an) if(an[field]) { callback(domain,an[field],@args); return; } callback(domain,0,@args); return; } } void host_to_ip(string host, function callback, mixed ... args) {
-
if(sizeof(
search
) && host[-1] != '.' && sizeof(host/".") < 3) {
+
if(sizeof(
domains
) && host[-1] != '.' && sizeof(host/".") < 3) {
do_query(host, C_IN, T_A, generic_get, 0, "a", host, callback, @args ); } else { do_query(host, C_IN, T_A, generic_get, -1, "a", host, callback, @args); } } void ip_to_host(string ip, function callback, mixed ... args)