- /* Write result into pipe to parent */
- len = strlen( ip );
- ip[len] = '\n'; len++;
- if( (size_t)write( w_fd, ip, len ) != (size_t)len )
- {
- Log_Resolver( LOG_CRIT, "Resolver: Can't write to parent: %s!", strerror( errno ));
- close( w_fd );
+ addr.sin4.sin_family = AF_INET;
+ memcpy(&addr.sin4.sin_addr, h->h_addr, sizeof(struct in_addr));
+
+ return array_copyb(IpAddr, (char *)&addr, sizeof(addr));
+#endif /* HAVE_GETADDRINFO */
+}
+
+
+static bool
+Addr_in_list(const array *resolved_addr, const ng_ipaddr_t *Addr)
+{
+ char tmp_ip_str[NG_INET_ADDRSTRLEN];
+ const ng_ipaddr_t *tmpAddrs = array_start(resolved_addr);
+ size_t len = array_length(resolved_addr, sizeof(*tmpAddrs));
+
+ assert(len > 0);
+ assert(tmpAddrs);
+
+ while (len > 0) {
+ if (ng_ipaddr_ipequal(Addr, tmpAddrs))
+ return true;
+ tmpAddrs++;
+ len--;
+ }
+ /* failed; print list of addresses */
+ ng_ipaddr_tostr_r(Addr, tmp_ip_str);
+ len = array_length(resolved_addr, sizeof(*tmpAddrs));
+ tmpAddrs = array_start(resolved_addr);
+
+ while (len > 0) {
+ Log_Subprocess(LOG_WARNING, "Address mismatch: %s != %s",
+ tmp_ip_str, ng_ipaddr_tostr(tmpAddrs));
+ tmpAddrs++;
+ len--;