[Cluster-devel] cluster/rgmanager/src/utils clufindhostname.c
lhh at sourceware.org
lhh at sourceware.org
Wed Jul 12 15:01:11 UTC 2006
CVSROOT: /cvs/cluster
Module name: cluster
Changes by: lhh at sourceware.org 2006-07-12 15:01:11
Modified files:
rgmanager/src/utils: clufindhostname.c
Log message:
Fix #198406 - lack of ipv6 support in clufindhostname.c
Patches:
http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/rgmanager/src/utils/clufindhostname.c.diff?cvsroot=cluster&r1=1.3&r2=1.4
--- cluster/rgmanager/src/utils/clufindhostname.c 2006/06/02 17:37:11 1.3
+++ cluster/rgmanager/src/utils/clufindhostname.c 2006/07/12 15:01:11 1.4
@@ -1,5 +1,5 @@
/*
- Copyright Red Hat, Inc. 2002
+ Copyright Red Hat, Inc. 2002, 2006
Copyright Mission Critical Linux, 2000
This program is free software; you can redistribute it and/or modify it
@@ -21,6 +21,7 @@
* Utility/command to return name found by gethostbyname and gethostbyaddr.
*
* Author: Richard Rabbat <rabbat at missioncriticallinux.com>
+ * IPv6 support added 7/2006
*/
#include <netdb.h>
#include <stdio.h>
@@ -28,54 +29,65 @@
#include <unistd.h>
#include <arpa/inet.h>
-void usage(char* progname)
+void
+usage(char *progname)
{
- fprintf (stderr, "Usage: %s [-i ip_addr] [-n ip_name]\n", progname);
+ fprintf(stderr, "Usage: %s [-i ip_addr] [-n ip_name]\n", progname);
}
-int main (int argc, char** argv)
+int
+main(int argc, char **argv)
{
- struct hostent* hp;
- unsigned long int address;
- int opt;
-
- if (argc != 3)
- {
- usage(argv[0]);
- exit(1);
- }
-
- while ((opt = getopt(argc, argv, "i:n:")) != EOF) {
- switch (opt) {
- case 'i':
- address = inet_addr (optarg);
-
- if ( !( hp = gethostbyaddr ((char*)&address, 4, AF_INET )))
- {
- exit (2);
- }
- else
- {
- fprintf (stdout, "%s\n", hp->h_name);
- exit (0);
- }
- break;
- case 'n':
- if ( !( hp = gethostbyname (argv[2])))
- {
- exit (2);
- }
- else
- {
- fprintf (stdout, "%s\n", hp->h_name);
- exit (0);
- }
- break;
- default:
- break;
+ struct hostent *hp;
+ void *ptr;
+ struct in_addr addr4;
+ struct in6_addr addr6;
+ int opt, size, family;
+ char *sep;
+
+ if (argc != 3) {
+ usage(argv[0]);
+ exit(1);
}
- }
- exit (0);
-}
-
+ while ((opt = getopt(argc, argv, "i:n:")) != EOF) {
+ switch (opt) {
+ case 'i':
+ /* Check for IPv4 address */
+ sep = strchr(optarg, '.');
+ if (sep) {
+ family = AF_INET;
+ ptr = &addr4;
+ size = sizeof(addr4);
+ } else {
+ family = AF_INET6;
+ ptr = &addr6;
+ size = sizeof(addr6);
+ }
+
+ if (inet_pton(family, optarg, ptr) < 0) {
+ perror("inet_pton");
+ exit(2);
+ }
+
+ if (!(hp = gethostbyaddr(ptr, size, family))) {
+ exit(2);
+ } else {
+ fprintf(stdout, "%s\n", hp->h_name);
+ exit(0);
+ }
+ break;
+ case 'n':
+ if (!(hp = gethostbyname(argv[2]))) {
+ exit(2);
+ } else {
+ fprintf(stdout, "%s\n", hp->h_name);
+ exit(0);
+ }
+ break;
+ default:
+ break;
+ }
+ }
+ exit(0);
+}
More information about the Cluster-devel
mailing list