aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAnders Svensson <[email protected]>2015-03-20 02:03:31 +0100
committerAnders Svensson <[email protected]>2015-03-24 11:02:05 +0100
commit35f564094033ea2eb4c5b01d0d0b1c0d629ea5b1 (patch)
tree3c03cce0511a58276153da3a339e0fdf049b2852
parentb7d8668ea5a4215da900bfcd2a1dbd51384cb0c7 (diff)
downloadotp-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.erl7
-rw-r--r--lib/diameter/test/diameter_codec_test.erl11
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';