123456789_123456789_123456789_123456789_123456789_

Class: URI::LDAP

Relationships & Source Files
Extension / Inclusion / Inheritance Descendants
Subclasses:
Super Chains via Extension / Inclusion / Inheritance
Class Chain:
self, Generic
Instance Chain:
Inherits: URI::Generic
Defined in: lib/uri/ldap.rb

Overview

LDAP URI SCHEMA (described in RFC2255) dn, :attributes, :scope, :filter, :extensions, ].freeze

  • DEFAULT_PORT =

    A Default port of 389 for LDAP

    # File 'lib/uri/ldap.rb', line 26
    389
  • SCOPE =

    Scopes available for the starting point.

    • SCOPE_BASE - the Base DN

    • SCOPE_ONE - one level under the Base DN, not including the base DN and

      not including any entries under this.
    • SCOPE_SUB - subtress, all entries at all levels

    # File 'lib/uri/ldap.rb', line 46
    [
      SCOPE_ONE = 'one',
      SCOPE_SUB = 'sub',
      SCOPE_BASE = 'base',
    ].freeze
  • ::URI - Included

    DEFAULT_PARSER, Parser, REGEXP, RFC3986_PARSER

    Generic - Inherited

    COMPONENT, DEFAULT_PORT

    Class Method Summary

    Generic - Inherited

    .build

    Synopsis.

    .build2

    Synopsis.

    .component

    Components of the ::URI in the order.

    .default_port

    Returns default port.

    .new

    Args.

    Instance Attribute Summary

    Generic - Inherited

    #fragment

    returns the fragment component of the ::URI.

    #fragment=

    check the fragment v component against the Parser Regexp for :FRAGMENT.

    #host

    returns the host component of the ::URI.

    #host=

    Args.

    #hostname

    extract the host part of the ::URI and unwrap brackets for IPv6 addresses.

    #hostname=

    set the host part of the ::URI as the argument with brackets for IPv6 addresses.

    #opaque

    returns the opaque part of the ::URI.

    #opaque=

    Args.

    #password

    returns the password component.

    #password=

    Args.

    #path

    returns the path component of the ::URI.

    #path=

    Args.

    #port

    returns the port component of the ::URI.

    #port=

    Args.

    #query

    returns the query component of the ::URI.

    #query=

    Args.

    #registry=,
    #scheme

    returns the scheme component of the ::URI.

    #scheme=

    Args.

    #user

    returns the user component.

    #user=

    Args.

    #userinfo

    returns the userinfo, either as 'user' or 'user:password'.

    #userinfo=

    Sets userinfo, argument is string like 'name:pass'.

    #absolute
    #hierarchical?

    Checks if ::URI has a path.

    #relative?

    Checks if ::URI is relative.

    Instance Method Summary

    Generic - Inherited

    #+

    Alias for Generic#merge.

    #-
    #==

    Compares to URI's.

    #absolute?

    Checks if ::URI is an absolute one.

    #coerce

    Args.

    #component

    Components of the ::URI in the order.

    #default_port

    Returns default port.

    #eql?,
    #find_proxy

    returns a proxy ::URI.

    #hash, #inspect,
    #merge

    Args.

    #merge!

    Args.

    #normalize

    Returns normalized ::URI.

    #normalize!

    Destructive version of #normalize

    #parser

    returns the parser to be used.

    #route_from

    Args.

    #route_to

    Args.

    #select

    Args.

    #to_s

    Constructs String from ::URI.

    #component_ary

    returns an Array of the components defined from the COMPONENT Array.

    #set_host

    protected setter for the host component v

    #set_opaque

    protected setter for the opaque component v

    #set_password

    protected setter for the password component v

    #set_path

    protected setter for the path component v

    #set_port

    protected setter for the port component v

    #set_scheme

    protected setter for the scheme component v

    #set_user

    protected setter for the user component v

    #set_userinfo

    protect setter for the user component, and password if available.

    #check_host

    check the host v component for RFC2396 compliance and against the Parser Regexp for :HOST.

    #check_opaque

    check the opaque v component for RFC2396 compliance and against the Parser Regexp for :OPAQUE.

    #check_password

    check the password v component for RFC2396 compliance and against the Parser Regexp for :USERINFO.

    #check_path

    check the path v component for RFC2396 compliance and against the Parser Regexp for :ABS_PATH and :REL_PATH.

    #check_port

    check the port v component for RFC2396 compliance and against the Parser Regexp for :PORT.

    #check_scheme

    check the scheme v component against the Parser Regexp for :SCHEME.

    #check_user

    check the user v component for RFC2396 compliance and against the Parser Regexp for :USERINFO.

    #check_userinfo

    check the user and password.

    #escape_userpass

    escapes 'user:password' v based on RFC 1738 section 3.1.

    #merge0

    return base and rel.

    #merge_path

    Merges a base path base, with relative path rel, returns a modified base path.

    #replace!

    replace self by other ::URI object.

    #route_from0,
    #split_path

    returns an Array of the path split on '/'.

    #split_userinfo

    returns the userinfo ui as user, password if properly formatted as 'user:password'.

    Constructor Details

    .new(*arg) ⇒ LDAP

    Description

    Create a new LDAP object from generic ::URI components as per RFC 2396. No LDAP-specific syntax checking is performed.

    Arguments are scheme, userinfo, host, port, registry, path, opaque, query and fragment, in that order.

    Example:

    uri = URI::LDAP.new("ldap", nil, "ldap.example.com", nil,
      "/dc=example;dc=com", "query", nil, nil, nil, nil)

    See also Generic.new

    [ GitHub ]
    
      
    # File 'lib/uri/ldap.rb', line 109
    
    def initialize(*arg)
      super(*arg)
    
      if @fragment
        raise InvalidURIError, 'bad LDAP URL'
      end
    
      parse_dn
      parse_query
    end
    

    Class Method Details

    .build(args)

    Description

    Create a new LDAP object from components, with syntax checking.

    The components accepted are host, port, dn, attributes, scope, filter, and extensions.

    The components should be provided either as an Array, or as a Hash with keys formed by preceding the component names with a colon.

    If an Array is used, the components must be passed in the order [host, port, dn, attributes, scope, filter, extensions].

    Example:

    newuri = URI::LDAP.build({:host => 'ldap.example.com',
      :dn> => '/dc=example'})
    
    newuri = URI::LDAP.build(["ldap.example.com", nil,
      "/dc=example;dc=com", "query", nil, nil, nil])
    [ GitHub ]
    
      
    # File 'lib/uri/ldap.rb', line 74
    
    def self.build(args)
      tmp = Util::make_components_hash(self, args)
    
      if tmp[:dn]
        tmp[:path] = tmp[:dn]
      end
    
      query = []
      [:extensions, :filter, :scope, :attributes].collect do |x|
        next if !tmp[x] && query.size == 0
        query.unshift(tmp[x])
      end
    
      tmp[:query] = query.join('?')
    
      return super(tmp)
    end
    

    Instance Attribute Details

    #attributes (rw)

    returns attributes.

    [ GitHub ]
    
      
    # File 'lib/uri/ldap.rb', line 178
    
    def attributes
      @attributes
    end
    

    #attributes=(val) (rw)

    setter for attributes val

    [ GitHub ]
    
      
    # File 'lib/uri/ldap.rb', line 191
    
    def attributes=(val)
      set_attributes(val)
      val
    end
    

    #dn (rw)

    returns dn.

    [ GitHub ]
    
      
    # File 'lib/uri/ldap.rb', line 159
    
    def dn
      @dn
    end
    

    #dn=(val) (rw)

    setter for dn val

    [ GitHub ]
    
      
    # File 'lib/uri/ldap.rb', line 172
    
    def dn=(val)
      set_dn(val)
      val
    end
    

    #extensions (rw)

    returns extensions.

    [ GitHub ]
    
      
    # File 'lib/uri/ldap.rb', line 235
    
    def extensions
      @extensions
    end
    

    #extensions=(val) (rw)

    setter for extensions val

    [ GitHub ]
    
      
    # File 'lib/uri/ldap.rb', line 248
    
    def extensions=(val)
      set_extensions(val)
      val
    end
    

    #filter (rw)

    returns filter.

    [ GitHub ]
    
      
    # File 'lib/uri/ldap.rb', line 216
    
    def filter
      @filter
    end
    

    #filter=(val) (rw)

    setter for filter val

    [ GitHub ]
    
      
    # File 'lib/uri/ldap.rb', line 229
    
    def filter=(val)
      set_filter(val)
      val
    end
    

    #hierarchical?Boolean (readonly)

    Checks if ::URI has a path For LDAP this will return false

    [ GitHub ]
    
      
    # File 'lib/uri/ldap.rb', line 255
    
    def hierarchical?
      false
    end
    

    #scope (rw)

    returns scope.

    [ GitHub ]
    
      
    # File 'lib/uri/ldap.rb', line 197
    
    def scope
      @scope
    end
    

    #scope=(val) (rw)

    setter for scope val

    [ GitHub ]
    
      
    # File 'lib/uri/ldap.rb', line 210
    
    def scope=(val)
      set_scope(val)
      val
    end
    

    Instance Method Details

    #build_path_query (private)

    private method to assemble query from #attributes, #scope, #filter and #extensions.

    [ GitHub ]
    
      
    # File 'lib/uri/ldap.rb', line 146
    
    def build_path_query
      @path = '/' + @dn
    
      query = []
      [@extensions, @filter, @scope, @attributes].each do |x|
        next if !x && query.size == 0
        query.unshift(x)
      end
      @query = query.join('?')
    end
    

    #parse_dn (private)

    private method to cleanup #dn from using the path component attribute

    [ GitHub ]
    
      
    # File 'lib/uri/ldap.rb', line 121
    
    def parse_dn
      @dn = @path[1..-1]
    end
    

    #parse_query (private)

    private method to cleanup #attributes, #scope, #filter and #extensions, from using the query component attribute

    [ GitHub ]
    
      
    # File 'lib/uri/ldap.rb', line 128
    
    def parse_query
      @attributes = nil
      @scope      = nil
      @filter     = nil
      @extensions = nil
    
      if @query
        attrs, scope, filter, extensions = @query.split('?')
    
        @attributes = attrs if attrs && attrs.size > 0
        @scope      = scope if scope && scope.size > 0
        @filter     = filter if filter && filter.size > 0
        @extensions = extensions if extensions && extensions.size > 0
      end
    end
    

    #set_attributes(val) (protected)

    private setter for attributes val

    [ GitHub ]
    
      
    # File 'lib/uri/ldap.rb', line 183
    
    def set_attributes(val)
      @attributes = val
      build_path_query
      @attributes
    end
    

    #set_dn(val) (protected)

    private setter for dn val

    [ GitHub ]
    
      
    # File 'lib/uri/ldap.rb', line 164
    
    def set_dn(val)
      @dn = val
      build_path_query
      @dn
    end
    

    #set_extensions(val) (protected)

    private setter for extensions val

    [ GitHub ]
    
      
    # File 'lib/uri/ldap.rb', line 240
    
    def set_extensions(val)
      @extensions = val
      build_path_query
      @extensions
    end
    

    #set_filter(val) (protected)

    private setter for filter val

    [ GitHub ]
    
      
    # File 'lib/uri/ldap.rb', line 221
    
    def set_filter(val)
      @filter = val
      build_path_query
      @filter
    end
    

    #set_scope(val) (protected)

    private setter for scope val

    [ GitHub ]
    
      
    # File 'lib/uri/ldap.rb', line 202
    
    def set_scope(val)
      @scope = val
      build_path_query
      @scope
    end