From 2bf8125abfeec9e1176ea7ab9793b8947f9c09b6 Mon Sep 17 00:00:00 2001 From: Badlop Date: Wed, 27 Jun 2012 11:10:48 +0200 Subject: Allow multiple fqdn values in configuration (EJAB-1578) --- src/cyrsasl_digest.erl | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) (limited to 'src') diff --git a/src/cyrsasl_digest.erl b/src/cyrsasl_digest.erl index 134a86daf..056df3356 100644 --- a/src/cyrsasl_digest.erl +++ b/src/cyrsasl_digest.erl @@ -165,14 +165,25 @@ parse4([], Key, Val, Ts) -> is_digesturi_valid(DigestURICase, JabberDomain, JabberFQDN) -> DigestURI = stringprep:tolower(DigestURICase), case catch string:tokens(DigestURI, "/") of - ["xmpp", Host] when (Host == JabberDomain) or (Host == JabberFQDN) -> - true; - ["xmpp", Host, ServName] when (ServName == JabberDomain) and (Host == JabberFQDN) -> - true; + ["xmpp", Host] -> + IsHostFqdn = is_host_fqdn(Host, JabberFQDN), + (Host == JabberDomain) or IsHostFqdn; + ["xmpp", Host, ServName] -> + IsHostFqdn = is_host_fqdn(Host, JabberFQDN), + (ServName == JabberDomain) and IsHostFqdn; _ -> false end. +is_host_fqdn(Host, [Letter | _Tail] = Fqdn) when not is_list(Letter) -> + Host == Fqdn; +is_host_fqdn(_Host, []) -> + false; +is_host_fqdn(Host, [Fqdn | _FqdnTail]) when Host == Fqdn -> + true; +is_host_fqdn(Host, [Fqdn | FqdnTail]) when Host /= Fqdn -> + is_host_fqdn(Host, FqdnTail). + get_local_fqdn() -> case (catch get_local_fqdn2()) of Str when is_list(Str) -> Str; -- cgit v1.2.3