summaryrefslogtreecommitdiffstats
path: root/lib/libipsec
diff options
context:
space:
mode:
authorbms <bms@FreeBSD.org>2004-02-11 04:34:34 +0000
committerbms <bms@FreeBSD.org>2004-02-11 04:34:34 +0000
commit9ce9891eda27e795842235191242d30adbed875f (patch)
treea0a78792b610ea5a9a0f7dfb08f47c3816efb276 /lib/libipsec
parent903cdeea1a6d0c99fecc1d8aeeab65bdfbab46d7 (diff)
downloadFreeBSD-src-9ce9891eda27e795842235191242d30adbed875f.zip
FreeBSD-src-9ce9891eda27e795842235191242d30adbed875f.tar.gz
Initial import of RFC 2385 (TCP-MD5) digest support.
This is the second of two commits; bring in the userland support to finish. Teach libipsec and setkey about the tcp-md5 class of security associations, thus allowing administrators to add per-host keys to the SADB for use by the tcpsignature_compute() function. Document that a single SPI must be used until such time as the code which adds support to the SPD to specify flows for tcp-md5 treatment is suitable for production. Sponsored by: sentex.net
Diffstat (limited to 'lib/libipsec')
-rw-r--r--lib/libipsec/ipsec_dump_policy.c2
-rw-r--r--lib/libipsec/pfkey.c15
-rw-r--r--lib/libipsec/pfkey_dump.c3
-rw-r--r--lib/libipsec/policy_token.l1
4 files changed, 20 insertions, 1 deletions
diff --git a/lib/libipsec/ipsec_dump_policy.c b/lib/libipsec/ipsec_dump_policy.c
index 459e8a7..3ce525b 100644
--- a/lib/libipsec/ipsec_dump_policy.c
+++ b/lib/libipsec/ipsec_dump_policy.c
@@ -196,6 +196,8 @@ ipsec_dump_ipsecrequest(buf, len, xisr, bound)
case IPPROTO_IPCOMP:
proto = "ipcomp";
break;
+ case IPPROTO_TCP:
+ proto = "tcp";
default:
__ipsec_errcode = EIPSEC_INVAL_PROTO;
return NULL;
diff --git a/lib/libipsec/pfkey.c b/lib/libipsec/pfkey.c
index d7263ee..ca75df4 100644
--- a/lib/libipsec/pfkey.c
+++ b/lib/libipsec/pfkey.c
@@ -79,12 +79,13 @@ static caddr_t pfkey_setsadbxsa2(caddr_t, caddr_t, u_int32_t, u_int32_t);
/*
* make and search supported algorithm structure.
*/
-static struct sadb_supported *ipsec_supported[] = { NULL, NULL, NULL, };
+static struct sadb_supported *ipsec_supported[] = { NULL, NULL, NULL, NULL };
static int supported_map[] = {
SADB_SATYPE_AH,
SADB_SATYPE_ESP,
SADB_X_SATYPE_IPCOMP,
+ SADB_X_SATYPE_TCPSIGNATURE
};
static int
@@ -1169,6 +1170,16 @@ pfkey_send_x1(so, type, satype, mode, src, dst, spi, reqid, wsize,
return -1;
}
break;
+ case SADB_X_SATYPE_TCPSIGNATURE:
+ if (e_type != SADB_EALG_NONE) {
+ __ipsec_errcode = EIPSEC_INVAL_ALGS;
+ return -1;
+ }
+ if (a_type != SADB_X_AALG_TCP_MD5) {
+ __ipsec_errcode = EIPSEC_INVAL_ALGS;
+ return -1;
+ }
+ break;
default:
__ipsec_errcode = EIPSEC_INVAL_SATYPE;
return -1;
@@ -1379,6 +1390,7 @@ pfkey_send_x3(so, type, satype)
case SADB_SATYPE_AH:
case SADB_SATYPE_ESP:
case SADB_X_SATYPE_IPCOMP:
+ case SADB_X_SATYPE_TCPSIGNATURE:
break;
default:
__ipsec_errcode = EIPSEC_INVAL_SATYPE;
@@ -1838,6 +1850,7 @@ pfkey_check(mhp)
case SADB_SATYPE_ESP:
case SADB_SATYPE_AH:
case SADB_X_SATYPE_IPCOMP:
+ case SADB_X_SATYPE_TCPSIGNATURE:
switch (msg->sadb_msg_type) {
case SADB_X_SPDADD:
case SADB_X_SPDDELETE:
diff --git a/lib/libipsec/pfkey_dump.c b/lib/libipsec/pfkey_dump.c
index 393f74e..d8d4676 100644
--- a/lib/libipsec/pfkey_dump.c
+++ b/lib/libipsec/pfkey_dump.c
@@ -126,6 +126,8 @@ static char *str_satype[] = {
"ripv2",
"mip",
"ipcomp",
+ "policy",
+ "tcp"
};
static char *str_mode[] = {
@@ -148,6 +150,7 @@ static struct val2str str_alg_auth[] = {
{ SADB_X_AALG_MD5, "md5", },
{ SADB_X_AALG_SHA, "sha", },
{ SADB_X_AALG_NULL, "null", },
+ { SADB_X_AALG_TCP_MD5, "tcp-md5", },
#ifdef SADB_X_AALG_SHA2_256
{ SADB_X_AALG_SHA2_256, "hmac-sha2-256", },
#endif
diff --git a/lib/libipsec/policy_token.l b/lib/libipsec/policy_token.l
index ced57b3..f957569 100644
--- a/lib/libipsec/policy_token.l
+++ b/lib/libipsec/policy_token.l
@@ -97,6 +97,7 @@ entrust { yylval.num = IPSEC_POLICY_ENTRUST; return(ACTION); }
esp { yylval.num = IPPROTO_ESP; return(PROTOCOL); }
ah { yylval.num = IPPROTO_AH; return(PROTOCOL); }
ipcomp { yylval.num = IPPROTO_IPCOMP; return(PROTOCOL); }
+tcp { yylval.num = IPPROTO_TCP; return(PROTOCOL); }
transport { yylval.num = IPSEC_MODE_TRANSPORT; return(MODE); }
tunnel { yylval.num = IPSEC_MODE_TUNNEL; return(MODE); }
OpenPOWER on IntegriCloud