- Log_Resolver( LOG_WARNING, "Can't resolve address \"%s\"!", inet_ntoa( Addr->sin_addr ));
-#endif
- strlcpy( hostname, inet_ntoa( Addr->sin_addr ), sizeof( hostname ));
- }
- Log_Resolver( LOG_DEBUG, "Ok, translated %s to \"%s\".", inet_ntoa( Addr->sin_addr ), hostname );
-
- /* Write resolver result into pipe to parent */
- len = strlen( hostname );
- hostname[len] = '\n'; len++;
- if( (size_t)write( w_fd, hostname, len ) != (size_t)len )
- {
- Log_Resolver( LOG_CRIT, "Resolver: Can't write to parent: %s!", strerror( errno ));
- close( w_fd );
- return;
- }
-
-#ifdef IDENTAUTH
- /* Do "IDENT" (aka "AUTH") lookup and write result to parent */
- Log_Resolver( LOG_DEBUG, "Doing IDENT lookup on socket %d ...", Sock );
- res = ident_id( Sock, 10 );
- Log_Resolver( LOG_DEBUG, "Ok, IDENT lookup on socket %d done: \"%s\"", Sock, res ? res : "" );
-
- /* Write IDENT result into pipe to parent */
- len = strlen( res ? res : "" );
- if( res != NULL ) res[len] = '\n';
- len++;
- if( (size_t)write( w_fd, res ? res : "\n", len ) != (size_t)len )
- {
- Log_Resolver( LOG_CRIT, "Resolver: Can't write to parent (IDENT): %s!", strerror( errno ));
- close( w_fd );
+ const struct sockaddr_in *Addr = (const struct sockaddr_in *) IpAddr;
+ struct hostent *h;
+ static const char funcname[]="gethostbyaddr";
+
+ h = gethostbyaddr((char *)&Addr->sin_addr, sizeof(Addr->sin_addr), AF_INET);
+ if (h) {
+ if (strlcpy(resbuf, h->h_name, reslen) < reslen)
+ return true;
+ errmsg = "hostname too long";
+ } else {
+# ifdef h_errno
+ errmsg = Get_Error(h_errno);
+# else
+ errmsg = "unknown error";
+# endif /* h_errno */