diff options
| -rw-r--r-- | src/rabbit_reader.erl | 34 |
1 files changed, 24 insertions, 10 deletions
diff --git a/src/rabbit_reader.erl b/src/rabbit_reader.erl index cf32dedaa5..8b9dd3830e 100644 --- a/src/rabbit_reader.erl +++ b/src/rabbit_reader.erl @@ -942,21 +942,29 @@ escape_ssl_string([C | S], middle) -> escape_ssl_string([$ | S], ending) -> ["\\ " | escape_ssl_string(S, ending)]. +%% A few common attribute type names, as described by RFC 2253 (2.3) format_ssl_type_and_value(Type, Value) -> FV = format_ssl_value(Value), - Fmts = [{?'id-at-commonName' , "CN=~s"}, - {?'id-at-countryName' , "C=~s"}, - {?'id-at-organizationName' , "O=~s"}, - {?'id-at-organizationalUnitName' , "OU=~s"}, - {?'street-address' , "STREET=~s"}, - {?'id-domainComponent' , "DC=~s"}, - {?'id-at-stateOrProvinceName' , "ST=~s"}, - {?'id-at-localityName' , "L=~s"}], + Fmts = [{?'id-at-commonName' , "CN"}, + {?'id-at-countryName' , "C"}, + {?'id-at-organizationName' , "O"}, + {?'id-at-organizationalUnitName' , "OU"}, + {?'street-address' , "STREET"}, + {?'id-domainComponent' , "DC"}, + {?'id-at-stateOrProvinceName' , "ST="}, + {?'id-at-localityName' , "L="}], case proplists:lookup(Type, Fmts) of - none -> io_lib:format("~p:~p", [Type, FV]); - {_, Fmt} -> io_lib:format(Fmt, [FV]) + {_, Fmt} -> io_lib:format(Fmt ++ "=~s", [FV]); + none when is_tuple(Type) -> + io_lib:format("~s:~s", + [textify(intersperse( ".", tuple_to_list(Type))), FV]); + none -> io_lib:format("~p:~s", [Type, FV]) end. +textify(Xs) -> + lists:map(fun(X) when list(X) -> X; + (X) -> io_lib:format("~p", [X]) end, Xs). + format_ssl_value({printableString, S}) -> S; format_ssl_value({utf8String, Bin}) -> @@ -968,6 +976,12 @@ format_ssl_value({utcTime, [Y1, Y2, M1, M2, D1, D2, H1, H2, format_ssl_value(V) -> V. +intersperse(_, []) -> + []; +intersperse(_, [Y]) -> + [Y]; +intersperse(X, [Y|Ys]) -> + [Y, X | intersperse(X, Ys)]. %%-------------------------------------------------------------------------- |
