/*
// Full copyright information is available in the file ../doc/CREDITS
//
// RFC references: 1293, 903, 1035
*/
#define _BSD 44 /* For RS6000s. */
#define _dns_c_
#include "defs.h"
#ifdef __UNIX__
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <netdb.h>
#endif
#include <ctype.h>
#include "dns.h"
/* out must be a DNS_MAXLEN character buffer */
int lookup_name_by_ip(char * ip, char * out)
{
unsigned addr;
register struct hostent * hp;
addr = inet_addr(ip);
if (addr == INVALID_INADDR)
return DNS_INVADDR;
if (!(hp = gethostbyaddr((char *) &addr, 4, AF_INET)))
return DNS_NORESOLV;
/* we have a problem houston */
strncpy(out, hp->h_name, DNS_MAXLEN);
if (strlen(hp->h_name) > DNS_MAXLEN) {
write_err("Hostname longer than DNS_MAXLEN?!?: '%s'\n", hp->h_name);
out[DNS_MAXLEN] = (char) NULL;
return DNS_OVERFLOW;
}
return DNS_NOERROR;
}
/* out must be a DNS_MAXLEN character buffer */
int lookup_ip_by_name(char * name, char * out)
{
register struct hostent *hp;
char * p;
if (!(hp = gethostbyname(name)))
return DNS_NORESOLV;
p = inet_ntoa(*(struct in_addr *)hp->h_addr);
strncpy(out, p, DNS_MAXLEN);
if (strlen(p) > DNS_MAXLEN) {
write_err("Hostname longer than DNS_MAXLEN?!?: '%s'\n", hp->h_name);
out[DNS_MAXLEN] = (char) NULL;
return DNS_OVERFLOW;
}
return DNS_NOERROR;
}