summaryrefslogtreecommitdiff
path: root/usr/src/cmd/cmd-inet/usr.sbin/kssl/ksslcfg/ksslcfg.c
diff options
context:
space:
mode:
Diffstat (limited to 'usr/src/cmd/cmd-inet/usr.sbin/kssl/ksslcfg/ksslcfg.c')
-rw-r--r--usr/src/cmd/cmd-inet/usr.sbin/kssl/ksslcfg/ksslcfg.c58
1 files changed, 34 insertions, 24 deletions
diff --git a/usr/src/cmd/cmd-inet/usr.sbin/kssl/ksslcfg/ksslcfg.c b/usr/src/cmd/cmd-inet/usr.sbin/kssl/ksslcfg/ksslcfg.c
index d4005fe2d6..80d945ebaf 100644
--- a/usr/src/cmd/cmd-inet/usr.sbin/kssl/ksslcfg/ksslcfg.c
+++ b/usr/src/cmd/cmd-inet/usr.sbin/kssl/ksslcfg/ksslcfg.c
@@ -19,12 +19,10 @@
* CDDL HEADER END
*/
/*
- * Copyright 2006 Sun Microsystems, Inc. All rights reserved.
+ * Copyright 2009 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
*/
-#pragma ident "%Z%%M% %I% %E% SMI"
-
#include <arpa/inet.h> /* inet_addr() */
#include <ctype.h>
#include <libscf.h>
@@ -46,7 +44,11 @@
* It makes use of kssladm(1M) which does the grunt work.
*/
-#define KSSLCFG_VERSION "v%I%"
+/*
+ * This version number is rather meaningless. In any case,
+ * version 2.0 adds support for IPv6 addresses.
+ */
+#define KSSLCFG_VERSION "Version 2.0"
boolean_t verbose = B_FALSE;
const char *SERVICE_NAME = "network/ssl/proxy";
@@ -96,12 +98,12 @@ create_instance_name(const char *arg, char **inaddr_any_name,
int len;
uint16_t port;
char *cname;
- in_addr_t addr;
char *instance_name;
const char *prefix = "kssl-";
- char *first_space = strchr(arg, ' ');
+ char *first_space;
- if (first_space == NULL) {
+ first_space = strchr(arg, ' ');
+ if (first_space == NULL) { /* No host name. Use INADDR_ANY. */
if (get_portnum(arg, &port) == 0) {
(void) fprintf(stderr,
gettext("Error: Invalid port value -- %s\n"),
@@ -116,6 +118,9 @@ create_instance_name(const char *arg, char **inaddr_any_name,
char *ptr;
struct hostent *hp;
boolean_t do_warn;
+ int error_num;
+ in_addr_t v4addr;
+ in6_addr_t v6addr;
if (get_portnum(first_space + 1, &port) == 0) {
(void) fprintf(stderr,
@@ -129,30 +134,35 @@ create_instance_name(const char *arg, char **inaddr_any_name,
return (NULL);
*(strchr(temp_str, ' ')) = '\0';
- if ((int)(addr = inet_addr(temp_str)) == -1) {
- if ((hp = gethostbyname(temp_str)) == NULL) {
- (void) fprintf(stderr,
- gettext("Error: Unknown host -- %s\n"),
- temp_str);
- free(temp_str);
- return (NULL);
- }
+ if (inet_pton(AF_INET6, temp_str, &v6addr) == 1) {
+ /* Do a reverse lookup for the IPv6 address */
+ hp = getipnodebyaddr(&v6addr, sizeof (v6addr),
+ AF_INET6, &error_num);
+ } else if (inet_pton(AF_INET, temp_str, &v4addr) == 1) {
+ /* Do a reverse lookup for the IPv4 address */
+ hp = getipnodebyaddr(&v4addr, sizeof (v4addr),
+ AF_INET, &error_num);
} else {
- /* This is an IP address. Do a reverse lookup. */
- if ((hp = gethostbyaddr((char *)&addr, 4, AF_INET))
- == NULL) {
- (void) fprintf(stderr,
- gettext("Error: Unknown host -- %s\n"),
- temp_str);
- free(temp_str);
- return (NULL);
- }
+ /* Do a lookup for the host name */
+ hp = getipnodebyname(temp_str, AF_INET6, AI_DEFAULT,
+ &error_num);
+ }
+
+ if (hp == NULL) {
+ (void) fprintf(stderr,
+ gettext("Error: Unknown host -- %s\n"), temp_str);
+ free(temp_str);
+ return (NULL);
}
if ((ptr = cname = strdup(hp->h_name)) == NULL) {
+ freehostent(hp);
free(temp_str);
return (NULL);
}
+
+ freehostent(hp);
+
do_warn = B_TRUE;
/* "s/./-/g" */
while ((ptr = strchr(ptr, '.')) != NULL) {