int flags = 0; /* for recvfrom() */
int on = 1;
struct servent *serv;
- struct hostent *host;
struct sockaddr_in s_sock; /* server's address */
struct sockaddr_in c_sock; /* client's address */
- char full_hname[MAXHOSTNAMELEN];
char *cp;
extern char * optarg;
int ch;
/* Set up server address */
memset(&s_sock, 0, sizeof(s_sock));
s_sock.sin_family = AF_INET;
+ s_sock.sin_addr.s_addr = INADDR_ANY;
if (port == 0) {
/* Look up service */
s_sock.sin_port = htons(port);
}
- if (gethostname(full_hname, sizeof(full_hname)) < 0) {
- perror("gethostname");
- exit(1);
- }
-
- if ((host = gethostbyname(full_hname)) == (struct hostent *)0) {
- fprintf(stderr, "%s: host unknown\n", full_hname);
- exit(1);
- }
- memcpy(&s_sock.sin_addr, host->h_addr, sizeof(s_sock.sin_addr));
-
/* Open socket */
if ((sock = socket(AF_INET, SOCK_DGRAM, 0)) < 0) {
perror("opening datagram socket");
-#!/afs/athena/contrib/perl/p
+#!/usr/bin/perl
+use Socket qw(:addrinfo);
+use strict;
+my $hostname;
if ($#ARGV == -1) {
chop($hostname = `hostname`);
} else {
$hostname = $ARGV[0];
}
-if (! (($name,$type,$addr) = (gethostbyname($hostname))[0,2,4])) {
- print STDERR "No such host: $hostname\n";
- exit(1);
-}
-if (! ($qualname = (gethostbyaddr($addr,$type))[0])) {
- $qualname = $name;
-}
+my ($gaerr, @addrs) = getaddrinfo($hostname, "", {flags => AI_CANONNAME});
+die "No such host: $hostname ($gaerr)" if $gaerr;
+my ($canonname, $addr) = ($addrs[0]->{canonname}, $addrs[0]->{addr});
+
+my ($gnerr, $name, $servicename) = getnameinfo($addr, NI_NAMEREQD);
+my $qualname = $gnerr ? $name : $name;
$qualname =~ tr/A-Z/a-z/; # lowercase our name for keytab use.
print "$qualname\n";
-
/* This program tests the resolve library and sees if it is broken... */
-#include "autoconf.h"
-#include <stdio.h>
-
-#if STDC_HEADERS
-#include <string.h>
-#else
-#ifndef HAVE_STRCHR
-#define strchr index
-#endif
-char *strchr();
-#endif
-
+#include "k5-platform.h"
+#include <sys/types.h>
+#include <sys/socket.h>
+#include <arpa/inet.h>
+#include <netdb.h>
#ifdef HAVE_SYS_PARAM_H
#include <sys/param.h>
#endif
-#ifdef HAVE_SYS_SOCKET_H
-#include <sys/socket.h>
-#endif
-
-#ifdef HAVE_STDLIB_H
-#include <stdlib.h>
-#endif
-
-#ifdef HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-
-#include <netinet/in.h>
-#include <netdb.h>
-
int
-main(argc, argv)
- int argc;
- char **argv;
+main(int argc, char **argv)
{
- char myname[MAXHOSTNAMELEN+1];
- char *ptr, *fqdn;
- struct in_addr addrcopy;
- struct hostent *host;
- int quiet = 0;
+ struct addrinfo *ai = NULL, hint;
+ char myname[MAXHOSTNAMELEN + 1], namebuf[NI_MAXHOST], abuf[256];
+ const char *addrstr;
+ int err, quiet = 0;
argc--; argv++;
while (argc) {
}
if (argc >= 1) {
- strncpy(myname, *argv, MAXHOSTNAMELEN);
+ strlcpy(myname, *argv, sizeof(myname));
} else {
if(gethostname(myname, MAXHOSTNAMELEN)) {
perror("gethostname failure");
if (!quiet)
printf("Hostname: %s\n", myname);
-
- /* Set the hosts db to close each time - effectively rewinding file */
- sethostent(0);
-
- if((host = gethostbyname (myname)) == NULL) {
+ memset(&hint, 0, sizeof(hint));
+ hint.ai_flags = AI_CANONNAME;
+ err = getaddrinfo(myname, 0, &hint, &ai);
+ if (err) {
fprintf(stderr,
"Could not look up address for hostname '%s' - fatal\n",
myname);
exit(2);
}
- fqdn = strdup(host->h_name);
- if (fqdn == NULL) {
- perror("strdup");
- exit(2);
+ if (!quiet) {
+ addrstr = inet_ntop(ai->ai_family, ai->ai_addr, abuf, sizeof(abuf));
+ if (addrstr != NULL)
+ printf("Host address: %s\n", addrstr);
}
- ptr = host->h_addr_list[0];
-#define UC(a) (((int)a)&0xff)
- if (!quiet)
- printf("Host address: %d.%d.%d.%d\n",
- UC(ptr[0]), UC(ptr[1]), UC(ptr[2]), UC(ptr[3]));
-
- memcpy(&addrcopy.s_addr, ptr, 4);
-
- /* Convert back to full name */
- if ((host = gethostbyaddr(&addrcopy.s_addr, 4, AF_INET)) == NULL) {
- if (!quiet)
- fprintf(stderr, "Error looking up IP address\n");
- } else {
- free(fqdn);
- fqdn = strdup(host->h_name);
- if (fqdn == NULL) {
- perror("strdup");
- exit (2);
- }
- }
+ err = getnameinfo(ai->ai_addr, ai->ai_addrlen, namebuf, sizeof(namebuf),
+ NULL, 0, NI_NAMEREQD);
+ if (err && !quiet)
+ fprintf(stderr, "Error looking up IP address\n");
- if (quiet)
- printf("%s\n", fqdn);
- else
- printf("FQDN: %s\n", fqdn);
+ printf("%s%s\n", quiet ? "" : "FQDN: ", err ? ai->ai_canonname : namebuf);
if (!quiet)
printf("Resolve library appears to have passed the test\n");
- /* All ok */
- exit(0);
-
+ freeaddrinfo(ai);
+ return 0;
}