simple/dns/fqdn.c

81 lines
1.7 KiB
C
Raw Normal View History

/*
* fqdn - print fully qualified domain name(s)
*
* resolve all host names given on the comman line and print their
* fully qualified canonical names.
*
* If no argument is given, print the system's FQDN.
*/
#include <errno.h>
2002-08-14 20:44:23 +02:00
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <netdb.h>
2002-08-14 20:44:23 +02:00
#include "hstrerror.h"
char cvs_id[] = "$Id: fqdn.c,v 1.5 2004-05-17 18:13:46 hjp Exp $";
2002-08-14 20:44:23 +02:00
char *cmnd;
void usage(void) {
fprintf(stderr, "Usage: %s [hostname ...]\n", cmnd);
exit(1);
}
int main(int argc, char **argv) {
int i;
int rc = 0;
char hostname[256];
char *fake_argv[] = { NULL, hostname, NULL };
2002-08-14 20:44:23 +02:00
cmnd = argv[0];
if (argc < 2) {
if (gethostname(hostname, sizeof(hostname)) == -1) {
fprintf(stderr, "%s: cannot get hostname: %s\n",
cmnd, strerror(errno));
exit(1);
}
argv = fake_argv;
argc = 2;
2002-08-14 20:44:23 +02:00
}
for (i = 1; i < argc; i++) {
struct hostent *he = gethostbyname(argv[i]);
2002-09-19 22:13:48 +02:00
int found = 0;
2002-08-14 20:44:23 +02:00
if (!he) {
fprintf(stderr, "%s: cannot resolve %s: %s\n",
cmnd, argv[i], hstrerror(h_errno));
2002-08-14 20:44:23 +02:00
rc++;
continue;
}
2002-09-19 22:13:48 +02:00
if (strchr(he->h_name, '.')) {
printf("%s\n", he->h_name);
found = 1;
} else {
char **a;
fprintf(stderr, "Canonical name doesn't contain a dot.\n");
fprintf(stderr, "Please shoot the administrator of this box.\n");
fprintf(stderr, "In the mean time I try to find a suitable alias.\n");
for (a = he->h_aliases; !found && a; a++) {
if (strchr(*a, '.')) {
printf("%s\n", *a);
found = 1;
}
}
if (!found) {
fprintf(stderr, "No alias, either. Consider more painful methods than shooting.\n");
rc++;
}
}
2002-08-14 20:44:23 +02:00
}
return rc;
}