diff options
author | Anders Svensson <[email protected]> | 2015-03-20 02:03:31 +0100 |
---|---|---|
committer | Anders Svensson <[email protected]> | 2015-03-24 11:02:05 +0100 |
commit | 35f564094033ea2eb4c5b01d0d0b1c0d629ea5b1 (patch) | |
tree | 3c03cce0511a58276153da3a339e0fdf049b2852 | |
parent | b7d8668ea5a4215da900bfcd2a1dbd51384cb0c7 (diff) | |
download | otp-35f564094033ea2eb4c5b01d0d0b1c0d629ea5b1.tar.gz otp-35f564094033ea2eb4c5b01d0d0b1c0d629ea5b1.tar.bz2 otp-35f564094033ea2eb4c5b01d0d0b1c0d629ea5b1.zip |
Reject transport=udp;protocol=diameter at DiameterURI encode
Both RFC 3588 and 6733 disallow the combination. Make its encode fail.
-rw-r--r-- | lib/diameter/src/base/diameter_types.erl | 7 | ||||
-rw-r--r-- | lib/diameter/test/diameter_codec_test.erl | 11 |
2 files changed, 15 insertions, 3 deletions
diff --git a/lib/diameter/src/base/diameter_types.erl b/lib/diameter/src/base/diameter_types.erl index 28a0635c57..8497329c20 100644 --- a/lib/diameter/src/base/diameter_types.erl +++ b/lib/diameter/src/base/diameter_types.erl @@ -311,7 +311,12 @@ is_integer(PN), 0 =< PN, (T == tcp orelse T == sctp orelse T == udp), - (P == diameter orelse P == radius orelse P == 'tacacs+') -> + (P == diameter orelse P == radius orelse P == 'tacacs+'), + (P /= diameter orelse T /= udp) -> + #diameter_uri{port = PN0, + transport = T0, + protocol = P0} + = #diameter_uri{}, iolist_to_binary([atom_to_list(Type), "://", DN, ":", integer_to_list(PN), ";transport=", atom_to_list(T), diff --git a/lib/diameter/test/diameter_codec_test.erl b/lib/diameter/test/diameter_codec_test.erl index 472755c62a..854b71ba93 100644 --- a/lib/diameter/test/diameter_codec_test.erl +++ b/lib/diameter/test/diameter_codec_test.erl @@ -356,8 +356,15 @@ values('DiameterURI') -> Tr <- ["" | [";transport=" ++ X || X <- ["tcp", "sctp", "udp"]]], Pr <- ["" | [";protocol=" ++ X - || X <- ["diameter","radius","tacacs+"]]]], - []}; + || X <- ["diameter","radius","tacacs+"]]], + Tr /= ";transport=udp" + orelse (Pr /= ";protocol=diameter" andalso Pr /= "")], + ["aaa://diameter.se;transport=udp;protocol=diameter", + "aaa://diameter.se;transport=udp", + "aaa://:3868", + "aaax://diameter.se", + "aaa://diameter.se;transport=tcpx", + "aaa://diameter.se;transport=tcp;protocol=diameter "]}; values(T) when T == 'IPFilterRule'; |