aboutsummaryrefslogtreecommitdiff
path: root/src/ejabberd_s2s_in.erl
diff options
context:
space:
mode:
Diffstat (limited to 'src/ejabberd_s2s_in.erl')
-rw-r--r--src/ejabberd_s2s_in.erl70
1 files changed, 50 insertions, 20 deletions
diff --git a/src/ejabberd_s2s_in.erl b/src/ejabberd_s2s_in.erl
index 79ae93387..ca2a32c56 100644
--- a/src/ejabberd_s2s_in.erl
+++ b/src/ejabberd_s2s_in.erl
@@ -31,6 +31,7 @@
-include("jlib.hrl").
%-include_lib("ssl/pkix/SSL-PKIX.hrl").
-include_lib("ssl/pkix/PKIX1Explicit88.hrl").
+-include_lib("ssl/pkix/PKIX1Implicit88.hrl").
-include("tls/XmppAddr.hrl").
-define(DICT, dict).
@@ -542,6 +543,8 @@ is_key_packet(_) ->
get_cert_domains(Cert) ->
{rdnSequence, Subject} =
(Cert#'Certificate'.tbsCertificate)#'TBSCertificate'.subject,
+ Extensions =
+ (Cert#'Certificate'.tbsCertificate)#'TBSCertificate'.extensions,
lists:flatmap(
fun(#'AttributeTypeAndValue'{type = ?'id-at-commonName',
value = Val}) ->
@@ -555,11 +558,13 @@ get_cert_domains(Cert) ->
end,
if
D /= error ->
- case jlib:nameprep(D) of
- error ->
- [];
- LD ->
- [LD]
+ case jlib:string_to_jid(D) of
+ #jid{luser = "",
+ lserver = LD,
+ lresource = ""} ->
+ [LD];
+ _ ->
+ []
end;
true ->
[]
@@ -567,23 +572,48 @@ get_cert_domains(Cert) ->
_ ->
[]
end;
- (#'AttributeTypeAndValue'{type = ?'id-on-xmppAddr',
- value = Val}) ->
- case 'XmppAddr':decode(
- 'XmppAddr', Val) of
- {ok, D} when is_binary(D) ->
- case jlib:nameprep(binary_to_list(D)) of
- error ->
- [];
- LD ->
- [LD]
- end;
- _ ->
- []
- end;
(_) ->
[]
- end, lists:flatten(Subject)).
+ end, lists:flatten(Subject)) ++
+ lists:flatmap(
+ fun(#'Extension'{extnID = ?'id-ce-subjectAltName',
+ extnValue = Val}) ->
+ BVal = if
+ is_list(Val) -> list_to_binary(Val);
+ is_binary(Val) -> Val;
+ true -> Val
+ end,
+ case 'PKIX1Implicit88':decode('SubjectAltName', BVal) of
+ {ok, SANs} ->
+ lists:flatmap(
+ fun({otherName,
+ #'AnotherName'{'type-id' = ?'id-on-xmppAddr',
+ value = XmppAddr
+ }}) ->
+ case 'XmppAddr':decode(
+ 'XmppAddr', XmppAddr) of
+ {ok, D} when is_binary(D) ->
+ case jlib:string_to_jid(
+ binary_to_list(D)) of
+ #jid{luser = "",
+ lserver = LD,
+ lresource = ""} ->
+ [LD];
+ _ ->
+ []
+ end;
+ _ ->
+ []
+ end;
+ (_) ->
+ []
+ end, SANs);
+ _ ->
+ []
+ end;
+ (_) ->
+ []
+ end, Extensions).