summaryrefslogtreecommitdiff
path: root/usr/src
diff options
context:
space:
mode:
authorJason King <jason.king@joyent.com>2018-02-15 17:23:35 +0000
committerJason King <jason.king@joyent.com>2020-03-20 06:19:38 +0000
commit98259457e848de1bd9b4e8ee53190e85e7caeb1f (patch)
tree4274de0ee7b32ff4df94c6bf945847a2ed2a6d62 /usr/src
parent9bdac164aa3c3819f9945e906ae9c578f61a1e9b (diff)
downloadillumos-joyent-98259457e848de1bd9b4e8ee53190e85e7caeb1f.tar.gz
ipsecutil fix
Diffstat (limited to 'usr/src')
-rw-r--r--usr/src/lib/libipsecutil/common/ipsec_util.c186
-rw-r--r--usr/src/lib/libipsecutil/common/ipsec_util.h13
-rw-r--r--usr/src/lib/libipsecutil/common/mapfile-vers3
3 files changed, 79 insertions, 123 deletions
diff --git a/usr/src/lib/libipsecutil/common/ipsec_util.c b/usr/src/lib/libipsecutil/common/ipsec_util.c
index a3b30d316f..7cf23e1d6f 100644
--- a/usr/src/lib/libipsecutil/common/ipsec_util.c
+++ b/usr/src/lib/libipsecutil/common/ipsec_util.c
@@ -364,43 +364,66 @@ dump_sockaddr(struct sockaddr *sa, uint8_t prefixlen, boolean_t addr_only,
return (0);
}
-char *
-sadb_op_str(uint8_t op, char *buf, size_t buflen)
+const char *
+sadb_op_str(uint8_t op)
{
- static const char *pfkey_opcodes[] = {
- "RESERVED", "GETSPI", "UPDATE", "ADD", "DELETE", "GET",
- "ACQUIRE", "REGISTER", "EXPIRE", "FLUSH", "DUMP", "X_PROMISC",
- "X_INVERSE_ACQUIRE", "X_UPDATEPAIR", "X_DELPAIR"
- };
-
- if (op < A_CNT(pfkey_opcodes)) {
- (void) strlcpy(buf, pfkey_opcodes[op], buflen);
- } else {
- (void) snprintf(buf, buflen, dgettext(TEXT_DOMAIN,
- "Unknown (%hhu)"), op);
+ switch (op) {
+ case SADB_RESERVED:
+ return ("RESERVED");
+ case SADB_GETSPI:
+ return ("GETSPI");
+ case SADB_UPDATE:
+ return ("UPDATE");
+ case SADB_ADD:
+ return ("ADD");
+ case SADB_DELETE:
+ return ("DELETE");
+ case SADB_GET:
+ return ("GET");
+ case SADB_ACQUIRE:
+ return ("ACQUIRE");
+ case SADB_REGISTER:
+ return ("REGISTER");
+ case SADB_EXPIRE:
+ return ("EXPIRE");
+ case SADB_FLUSH:
+ return ("FLUSH");
+ case SADB_DUMP:
+ return ("DUMP");
+ case SADB_X_PROMISC:
+ return ("X_PROMISC");
+ case SADB_X_INVERSE_ACQUIRE:
+ return ("X_INVERSE_ACQUIRE");
+ case SADB_X_UPDATEPAIR:
+ return ("X_UPDATEPAIR");
+ case SADB_X_DELPAIR:
+ return ("X_DELPAIR");
+ case SADB_X_DELPAIR_STATE:
+ return ("X_DELPAIR_STATE");
}
- return (buf);
+ return (NULL);
}
-char *
-sadb_type_str(uint8_t type, char *buf, size_t buflen)
+const char *
+sadb_satype_str(uint8_t satype)
{
- static const char *pfkey_satypes[] = {
- "UNSPEC", NULL, "AH", "ESP", NULL, "RSVP", "OSPFV2",
- "RIPV2", "MIP"
- };
- const char *str = NULL;
-
- if (type < A_CNT(pfkey_satypes))
- str = pfkey_satypes[type];
-
- if (str != NULL) {
- (void) strlcpy(buf, str, buflen);
- } else {
- (void) snprintf(buf, buflen,
- dgettext(TEXT_DOMAIN, "<unknown %hhu>"), type);
+ switch (satype) {
+ case SADB_SATYPE_UNSPEC:
+ return ("UNSPEC");
+ case SADB_SATYPE_AH:
+ return ("AH");
+ case SADB_SATYPE_ESP:
+ return ("ESP");
+ case SADB_SATYPE_RSVP:
+ return ("RSVP");
+ case SADB_SATYPE_OSPFV2:
+ return ("OSPFV2");
+ case SADB_SATYPE_RIPV2:
+ return ("RIPV2");
+ case SADB_SATYPE_MIP:
+ return (dgettext(TEXT_DOMAIN, "Mobile IP"));
}
- return (buf);
+ return (NULL);
}
/*
@@ -1691,98 +1714,33 @@ void
print_sadb_msg(FILE *file, struct sadb_msg *samsg, time_t wallclock,
boolean_t vflag)
{
+ const char *opstr = sadb_op_str(samsg->sadb_msg_type);
+ const char *satypestr = sadb_satype_str(samsg->sadb_msg_satype);
+ char unkbuf[2][32] = { 0 };
+
if (wallclock != 0)
printsatime(file, wallclock, dgettext(TEXT_DOMAIN,
"%sTimestamp: %s\n"), "", NULL,
vflag);
- (void) fprintf(file, dgettext(TEXT_DOMAIN,
- "Base message (version %u) type "),
- samsg->sadb_msg_version);
- switch (samsg->sadb_msg_type) {
- case SADB_RESERVED:
- (void) fprintf(file, dgettext(TEXT_DOMAIN,
- "RESERVED (warning: set to 0)"));
- break;
- case SADB_GETSPI:
- (void) fprintf(file, "GETSPI");
- break;
- case SADB_UPDATE:
- (void) fprintf(file, "UPDATE");
- break;
- case SADB_X_UPDATEPAIR:
- (void) fprintf(file, "UPDATE PAIR");
- break;
- case SADB_ADD:
- (void) fprintf(file, "ADD");
- break;
- case SADB_DELETE:
- (void) fprintf(file, "DELETE");
- break;
- case SADB_X_DELPAIR:
- (void) fprintf(file, "DELETE PAIR");
- break;
- case SADB_GET:
- (void) fprintf(file, "GET");
- break;
- case SADB_ACQUIRE:
- (void) fprintf(file, "ACQUIRE");
- break;
- case SADB_REGISTER:
- (void) fprintf(file, "REGISTER");
- break;
- case SADB_EXPIRE:
- (void) fprintf(file, "EXPIRE");
- break;
- case SADB_FLUSH:
- (void) fprintf(file, "FLUSH");
- break;
- case SADB_DUMP:
- (void) fprintf(file, "DUMP");
- break;
- case SADB_X_PROMISC:
- (void) fprintf(file, "X_PROMISC");
- break;
- case SADB_X_INVERSE_ACQUIRE:
- (void) fprintf(file, "X_INVERSE_ACQUIRE");
- break;
- default:
- (void) fprintf(file, dgettext(TEXT_DOMAIN,
- "Unknown (%u)"), samsg->sadb_msg_type);
- break;
+ if (opstr == NULL) {
+ (void) snprintf(unkbuf[0], sizeof (unkbuf[0]),
+ "Unknown (%hhu)", samsg->sadb_msg_type);
+ opstr = unkbuf[0];
+ } else if (samsg->sadb_msg_type == SADB_RESERVED) {
+ opstr = dgettext(TEXT_DOMAIN, "RESERVED (warning: set to 0)");
}
- (void) fprintf(file, dgettext(TEXT_DOMAIN, ", SA type "));
- switch (samsg->sadb_msg_satype) {
- case SADB_SATYPE_UNSPEC:
- (void) fprintf(file, dgettext(TEXT_DOMAIN,
- "<unspecified/all>"));
- break;
- case SADB_SATYPE_AH:
- (void) fprintf(file, "AH");
- break;
- case SADB_SATYPE_ESP:
- (void) fprintf(file, "ESP");
- break;
- case SADB_SATYPE_RSVP:
- (void) fprintf(file, "RSVP");
- break;
- case SADB_SATYPE_OSPFV2:
- (void) fprintf(file, "OSPFv2");
- break;
- case SADB_SATYPE_RIPV2:
- (void) fprintf(file, "RIPv2");
- break;
- case SADB_SATYPE_MIP:
- (void) fprintf(file, dgettext(TEXT_DOMAIN, "Mobile IP"));
- break;
- default:
- (void) fprintf(file, dgettext(TEXT_DOMAIN,
- "<unknown %u>"), samsg->sadb_msg_satype);
- break;
+ if (satypestr == NULL) {
+ (void) snprintf(unkbuf[1], sizeof (unkbuf[1]),
+ dgettext(TEXT_DOMAIN, "<unknown %hhu>"),
+ samsg->sadb_msg_satype);
+ satypestr = unkbuf[1];
}
- (void) fprintf(file, ".\n");
+ (void) fprintf(file, dgettext(TEXT_DOMAIN,
+ "Base message (version %hhu) type %s, SA type %s\n."),
+ samsg->sadb_msg_version, opstr, satypestr);
if (samsg->sadb_msg_errno != 0) {
(void) fprintf(file, dgettext(TEXT_DOMAIN,
diff --git a/usr/src/lib/libipsecutil/common/ipsec_util.h b/usr/src/lib/libipsecutil/common/ipsec_util.h
index 212968df8c..7f4d3526aa 100644
--- a/usr/src/lib/libipsecutil/common/ipsec_util.h
+++ b/usr/src/lib/libipsecutil/common/ipsec_util.h
@@ -167,14 +167,11 @@ extern void bail(char *);
*/
extern void bail_msg(char *, ...);
-/*
- * XXX_str functions return symbolic names for a given SADB value.
- * The XXX_str functions all take an output buffer and length as arguments
- * and fill in the buffer (upto len - 1 characters) with the symbolic name
- * or a string with 'UNKNOWN' and the numeric value.
- */
-extern char *sadb_op_str(uint8_t, char *, size_t);
-extern char *sadb_type_str(uint8_t, char *, size_t);
+/* Translate pf_key(7P) msg type (SADB_) to string, or NULL if unknown */
+extern const char *sadb_op_str(uint8_t);
+
+/* Translate pf_key(7P) SA type (SADB_SATYPE_) to string, or NULL if unknown */
+extern const char *sadb_satype_str(uint8_t);
/*
* dump_XXX functions produce ASCII output from the passed in data.
diff --git a/usr/src/lib/libipsecutil/common/mapfile-vers b/usr/src/lib/libipsecutil/common/mapfile-vers
index fe75c4a4d6..47ec167081 100644
--- a/usr/src/lib/libipsecutil/common/mapfile-vers
+++ b/usr/src/lib/libipsecutil/common/mapfile-vers
@@ -20,6 +20,7 @@
#
#
# Copyright (c) 2006, 2010, Oracle and/or its affiliates. All rights reserved.
+# Copyright 2018, Joyent, Inc.
#
#
@@ -108,7 +109,7 @@ SYMBOL_VERSION SUNWprivate_1.1 {
rparseidtype;
rparsesatype;
sadb_op_str;
- sadb_type_str;
+ sadb_satype_str;
save_address;
save_assoc;
save_ident;