2424package microsoft .exchange .webservices .data .autodiscover ;
2525
2626import microsoft .exchange .webservices .data .core .EwsUtilities ;
27- import microsoft .exchange .webservices .data .dns .DnsClient ;
28- import microsoft .exchange .webservices .data .dns .DnsSrvRecord ;
2927import microsoft .exchange .webservices .data .core .enumeration .misc .TraceFlags ;
3028import microsoft .exchange .webservices .data .core .exception .dns .DnsException ;
29+ import microsoft .exchange .webservices .data .dns .DnsClient ;
30+ import microsoft .exchange .webservices .data .dns .DnsSrvRecord ;
3131
3232import javax .xml .stream .XMLStreamException ;
3333
@@ -70,12 +70,28 @@ protected AutodiscoverDnsClient(AutodiscoverService service) {
7070 this .service = service ;
7171 }
7272
73+ /**
74+ * Extracts a valid autodiscover hostname, if any, from a dns srv response.
75+ *
76+ * @param dnsNameTarget The hostname response returned by DNS
77+ * @return Autodiscover hostname (will be null if dnsNameTarget is invalid).
78+ */
79+ protected static String extractHostnameFromDnsSrv (String dnsNameTarget ) {
80+ if (dnsNameTarget == null || dnsNameTarget .isEmpty ()) {
81+ return null ;
82+ } else {
83+ if (dnsNameTarget .endsWith ("." )) {
84+ dnsNameTarget = dnsNameTarget .substring (0 , dnsNameTarget .length ()-1 );
85+ }
86+ return dnsNameTarget ;
87+ }
88+ }
89+
7390 /**
7491 * Finds the Autodiscover host from DNS SRV records.
7592 *
7693 * @param domain the domain
7794 * @return Autodiscover hostname (will be null if lookup failed).
78- * @throws XMLStreamException the XML stream exception
7995 * @throws IOException signals that an I/O exception has occurred.
8096 */
8197 protected String findAutodiscoverHostFromSrv (String domain )
@@ -84,20 +100,17 @@ protected String findAutodiscoverHostFromSrv(String domain)
84100
85101 DnsSrvRecord dnsSrvRecord = this
86102 .findBestMatchingSrvRecord (domainToMatch );
87-
88- if ((dnsSrvRecord == null ) || dnsSrvRecord .getNameTarget () == null ||
89- dnsSrvRecord .getNameTarget ().isEmpty ()) {
90- this .service .traceMessage (TraceFlags .AutodiscoverConfiguration ,
91- "No appropriate SRV record was found." );
92- return null ;
93- } else {
94- this .service .traceMessage (TraceFlags .AutodiscoverConfiguration ,
95- String .format (
96- "DNS query for SRV record for domain %s found %s" ,
97- domain , dnsSrvRecord .getNameTarget ()));
98-
99- return dnsSrvRecord .getNameTarget ();
103+ if (dnsSrvRecord != null ) {
104+ String hostName = extractHostnameFromDnsSrv (dnsSrvRecord .getNameTarget ());
105+ if (hostName != null ) {
106+ this .service .traceMessage (TraceFlags .AutodiscoverConfiguration , String
107+ .format ("DNS query for SRV record for domain %s found %s" , domain , hostName ));
108+ return hostName ;
109+ }
100110 }
111+ this .service .traceMessage (TraceFlags .AutodiscoverConfiguration ,
112+ "No appropriate SRV record was found." );
113+ return null ;
101114 }
102115
103116 /**
0 commit comments