summaryrefslogtreecommitdiff
path: root/usr/src/lib
diff options
context:
space:
mode:
Diffstat (limited to 'usr/src/lib')
-rw-r--r--usr/src/lib/libipsecutil/common/ipsec_util.c24
-rw-r--r--usr/src/lib/libipsecutil/common/ipsec_util.h2
2 files changed, 18 insertions, 8 deletions
diff --git a/usr/src/lib/libipsecutil/common/ipsec_util.c b/usr/src/lib/libipsecutil/common/ipsec_util.c
index 56ced009ee..e5a4daecdd 100644
--- a/usr/src/lib/libipsecutil/common/ipsec_util.c
+++ b/usr/src/lib/libipsecutil/common/ipsec_util.c
@@ -2438,7 +2438,7 @@ void
save_assoc(uint64_t *buffer, FILE *ofile)
{
int terrno;
- int seen_proto = 0;
+ boolean_t seen_proto = B_FALSE, seen_iproto = B_FALSE;
uint64_t *current;
struct sadb_address *addr;
struct sadb_msg *samsg = (struct sadb_msg *)buffer;
@@ -2463,6 +2463,7 @@ save_assoc(uint64_t *buffer, FILE *ofile)
struct sadb_sa *assoc;
ext = (struct sadb_ext *)current;
+ addr = (struct sadb_address *)ext; /* Just in case... */
switch (ext->sadb_ext_type) {
case SADB_EXT_SA:
assoc = (struct sadb_sa *)ext;
@@ -2523,19 +2524,28 @@ save_assoc(uint64_t *buffer, FILE *ofile)
}
savenl();
break;
- case SADB_EXT_ADDRESS_SRC:
- case SADB_EXT_ADDRESS_DST:
case SADB_X_EXT_ADDRESS_INNER_SRC:
case SADB_X_EXT_ADDRESS_INNER_DST:
- case SADB_X_EXT_ADDRESS_NATT_REM:
- case SADB_X_EXT_ADDRESS_NATT_LOC:
- addr = (struct sadb_address *)ext;
+ if (!seen_iproto && addr->sadb_address_proto) {
+ (void) fprintf(ofile, " iproto %d",
+ addr->sadb_address_proto);
+ savenl();
+ seen_iproto = B_TRUE;
+ }
+ goto skip_srcdst; /* Hack to avoid cases below... */
+ /* FALLTHRU */
+ case SADB_EXT_ADDRESS_SRC:
+ case SADB_EXT_ADDRESS_DST:
if (!seen_proto && addr->sadb_address_proto) {
(void) fprintf(ofile, " proto %d",
addr->sadb_address_proto);
savenl();
- seen_proto = 1;
+ seen_proto = B_TRUE;
}
+ /* FALLTHRU */
+ case SADB_X_EXT_ADDRESS_NATT_REM:
+ case SADB_X_EXT_ADDRESS_NATT_LOC:
+skip_srcdst:
if (!save_address(addr, ofile)) {
tidyup();
bail(dgettext(TEXT_DOMAIN, "save_address"));
diff --git a/usr/src/lib/libipsecutil/common/ipsec_util.h b/usr/src/lib/libipsecutil/common/ipsec_util.h
index d540e2bd2e..a78831e678 100644
--- a/usr/src/lib/libipsecutil/common/ipsec_util.h
+++ b/usr/src/lib/libipsecutil/common/ipsec_util.h
@@ -56,7 +56,7 @@ extern "C" {
/* used for file parsing */
#define NBUF_SIZE 16
-#define IBUF_SIZE 512
+#define IBUF_SIZE 2048
#define COMMENT_CHAR '#'
#define CONT_CHAR '\\'
#define QUOTE_CHAR '"'