Package org.ldaptive

Class DnsSrvConnectionStrategy

  • All Implemented Interfaces:
    java.lang.Iterable<LdapURL>, ConnectionStrategy

    public class DnsSrvConnectionStrategy
    extends AbstractConnectionStrategy
    DNS SRV connection strategy. Queries a DNS server for SRV records and uses those records to construct a list of URLs. A time to live can be set to control how often the DNS server is consulted. See http://www.ietf.org/rfc/rfc2782.txt.
    Author:
    Middleware Services
    • Field Detail

      • DEFAULT_TTL

        protected static final java.time.Duration DEFAULT_TTL
        Default time to live for DNS results.
    • Constructor Detail

      • DnsSrvConnectionStrategy

        public DnsSrvConnectionStrategy()
        Default constructor.
      • DnsSrvConnectionStrategy

        public DnsSrvConnectionStrategy​(java.time.Duration ttl)
        Creates a new DNS SRV connection strategy.
        Parameters:
        ttl - time to live for SRV records
      • DnsSrvConnectionStrategy

        public DnsSrvConnectionStrategy​(DNSContextFactory factory)
        Creates a new DNS SRV connection strategy.
        Parameters:
        factory - DNS context factory
      • DnsSrvConnectionStrategy

        public DnsSrvConnectionStrategy​(DNSContextFactory factory,
                                        java.time.Duration ttl)
        Creates a new DNS SRV connection strategy.
        Parameters:
        factory - DNS context factory
        ttl - time to live for SRV records
      • DnsSrvConnectionStrategy

        public DnsSrvConnectionStrategy​(DNSContextFactory factory,
                                        java.time.Duration ttl,
                                        boolean ssl)
        Creates a new DNS SRV connection strategy.
        Parameters:
        factory - DNS context factory
        ttl - time to live for SRV records
        ssl - whether SRV records should produce LDAPS URLs
    • Method Detail

      • populate

        public void populate​(java.lang.String urls,
                             LdapURLSet urlSet)
        Description copied from interface: ConnectionStrategy
        Populates a LdapURLSet from the URL string provided at configuration time.
        Specified by:
        populate in interface ConnectionStrategy
        Overrides:
        populate in class AbstractConnectionStrategy
        Parameters:
        urls - Space-delimited string of URLs describing the LDAP hosts to connect to. The URLs in the string are commonly ldap:// or ldaps:// URLs that directly describe the hosts to connect to, but may also describe a resource from which to obtain LDAP connection URLs as is the case for DnsSrvConnectionStrategy that use URLs with the scheme dns:.
        urlSet - LDAP URL set to populate.
      • readSrvRecords

        protected java.util.Set<SRVRecord> readSrvRecords​(java.lang.String urls)
        Parses the supplied DNS URL string and reads SRV records from DNS.
        Parameters:
        urls - to parse
        Returns:
        Set of DNS SRV records ordered first by priority and then by weight.
      • parseUrl

        protected java.lang.String[] parseUrl​(java.lang.String url)
        Parses the supplied URL. If the URL has an ldap scheme, it is inspected for a baseDN which will be used as the domain. Otherwise, the URL is assumed to have a dns scheme.
        Parameters:
        url - to parse
        Returns:
        array containing the DNS URL and the record name in that order
      • parseDnsUrl

        protected java.lang.String[] parseDnsUrl​(java.lang.String url)
        Parses a DNS URL of the form dns://hostname/domain?record. Where record is the DNS record to retrieve.
        Parameters:
        url - to parse
        Returns:
        array containing the DNS URL and the record name in that order
      • iterator

        public java.util.Iterator<LdapURL> iterator()
        Returns a list of URLs retrieved from DNS SRV records.
        Returns:
        list of URLs to attempt connections to
      • retrieveDNSRecords

        protected java.util.Set<SRVRecord> retrieveDNSRecords()
        Invoke DNSResolver.resolve(String) for each resolver until results are found.
        Returns:
        list of LDAP URLs