X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=src%2Fdns.cpp;h=14305ccab2f49a2a4e94f94ee67dc543c34e92c2;hb=4c751dbbe8945e5efc230a59b0ed51c2ba10cf92;hp=8ad94e9e1a9fa4465e1ce570b1bf596deb34af8a;hpb=df67ab549bcc2cd53519f309110c58c00f2c935b;p=user%2Fhenk%2Fcode%2Finspircd.git diff --git a/src/dns.cpp b/src/dns.cpp index 8ad94e9e1..14305ccab 100644 --- a/src/dns.cpp +++ b/src/dns.cpp @@ -677,19 +677,13 @@ DNSResult DNS::GetResult() case DNS_QUERY_AAAA: { - inet_ntop(AF_INET6, data.first, formatted, sizeof(formatted)); - char* c = strstr(formatted,":0:"); - if (c != NULL) + if (!inet_ntop(AF_INET6, data.first, formatted, sizeof(formatted))) { - memmove(c+1,c+2,strlen(c+2) + 1); - c += 2; - while (memcmp(c,"0:",2) == 0) - memmove(c,c+2,strlen(c+2) + 1); - if (memcmp(c,"0",2) == 0) - *c = 0; - if (memcmp(formatted,"0::",3) == 0) - memmove(formatted,formatted + 1, strlen(formatted + 1) + 1); + std::string ro = req->orig; + delete req; + return DNSResult(this_id | ERROR_MASK, "inet_ntop() failed", 0, ro); } + resultstr = formatted; /* Special case. Sending ::1 around between servers @@ -706,8 +700,16 @@ DNSResult DNS::GetResult() /* Identical handling to PTR */ case DNS_QUERY_PTR: + { /* Reverse lookups just come back as char* */ resultstr = std::string((const char*)data.first); + if (resultstr.find_first_not_of("0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ.-") != std::string::npos) + { + std::string ro = req->orig; + delete req; + return DNSResult(this_id | ERROR_MASK, "Invalid char(s) in reply", 0, ro); + } + } break; default: