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

version» Context lines:

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)