diff options
Diffstat (limited to 'lib/uri/ldap.rb')
| -rw-r--r-- | lib/uri/ldap.rb | 187 |
1 files changed, 100 insertions, 87 deletions
diff --git a/lib/uri/ldap.rb b/lib/uri/ldap.rb index ae85bb2164..4544349f18 100644 --- a/lib/uri/ldap.rb +++ b/lib/uri/ldap.rb @@ -1,33 +1,31 @@ +# frozen_string_literal: false +# = uri/ldap.rb # -# $Id$ +# Author:: +# Takaaki Tateishi <ttate@jaist.ac.jp> +# Akira Yamada <akira@ruby-lang.org> +# License:: +# URI::LDAP is copyrighted free software by Takaaki Tateishi and Akira Yamada. +# You can redistribute it and/or modify it under the same term as Ruby. +# +# See URI for general documentation # -require 'uri/generic' +require_relative 'generic' module URI -=begin - -== URI::LDAP - -URI::LDAP is copyrighted free software by Takaaki Tateishi and akira yamada. - - Copyright (c) 2001 Takaaki Tateishi <ttate@jaist.ac.jp> and - akira yamada <akira@ruby-lang.org>. - You can redistribute it and/or modify it under the same term as Ruby. - -=== Super Class - -((<URI::Generic>)) - -=end - - # LDAP URI SCHEMA (described in RFC2255) + # + # LDAP URI SCHEMA (described in RFC2255). + #-- # ldap://<host>/<dn>[?<attrs>[?<scope>[?<filter>[?<extensions>]]]] + #++ class LDAP < Generic + # A Default port of 389 for URI::LDAP. DEFAULT_PORT = 389 - + + # An Array of the available components for URI::LDAP. COMPONENT = [ :scheme, :host, :port, @@ -38,33 +36,52 @@ URI::LDAP is copyrighted free software by Takaaki Tateishi and akira yamada. :extensions, ].freeze + # 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 - subtrees, all entries at all levels + # SCOPE = [ SCOPE_ONE = 'one', SCOPE_SUB = 'sub', SCOPE_BASE = 'base', ].freeze -=begin - -=== Class Methods - ---- URI::LDAP::build - ---- URI::LDAP::new - -=end - + # + # == Description + # + # Creates a new URI::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 <code>[host, port, dn, attributes, scope, filter, extensions]</code>. + # + # Example: + # + # uri = URI::LDAP.build({:host => 'ldap.example.com', + # :dn => '/dc=example'}) + # + # uri = URI::LDAP.build(["ldap.example.com", nil, + # "/dc=example;dc=com", "query", nil, nil, nil]) + # def self.build(args) tmp = Util::make_components_hash(self, args) if tmp[:dn] - tmp[:path] = 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]) + next if !tmp[x] && query.size == 0 + query.unshift(tmp[x]) end tmp[:query] = query.join('?') @@ -72,22 +89,42 @@ URI::LDAP is copyrighted free software by Takaaki Tateishi and akira yamada. return super(tmp) end + # + # == Description + # + # Creates a new URI::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, nil, + # "/dc=example;dc=com", nil, "query", nil) + # + # See also URI::Generic.new. + # def initialize(*arg) super(*arg) if @fragment - raise InvalidURIError, 'bad LDAP URL' + raise InvalidURIError, 'bad LDAP URL' end parse_dn parse_query end + # Private method to cleanup +dn+ from using the +path+ component attribute. def parse_dn + raise InvalidURIError, 'bad LDAP URL' unless @path @dn = @path[1..-1] end private :parse_dn + # Private method to cleanup +attributes+, +scope+, +filter+, and +extensions+ + # from using the +query+ component attribute. def parse_query @attributes = nil @scope = nil @@ -95,42 +132,35 @@ URI::LDAP is copyrighted free software by Takaaki Tateishi and akira yamada. @extensions = nil if @query - attrs, scope, filter, extensions = @query.split('?') + 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 + @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 private :parse_query + # Private method to assemble +query+ from +attributes+, +scope+, +filter+, and +extensions+. def build_path_query @path = '/' + @dn query = [] [@extensions, @filter, @scope, @attributes].each do |x| - next if !x && query.size == 0 - query.unshift(x) + next if !x && query.size == 0 + query.unshift(x) end @query = query.join('?') end private :build_path_query -=begin - -=== Instance Methods - ---- URI::LDAP#dn - ---- URI::LDAP#dn=(v) - -=end - + # Returns dn. def dn @dn end + # Private setter for dn +val+. def set_dn(val) @dn = val build_path_query @@ -138,23 +168,18 @@ URI::LDAP is copyrighted free software by Takaaki Tateishi and akira yamada. end protected :set_dn + # Setter for dn +val+. def dn=(val) set_dn(val) val end -=begin - ---- URI::LDAP#attributes - ---- URI::LDAP#attributes=(v) - -=end - + # Returns attributes. def attributes @attributes end + # Private setter for attributes +val+. def set_attributes(val) @attributes = val build_path_query @@ -162,23 +187,18 @@ URI::LDAP is copyrighted free software by Takaaki Tateishi and akira yamada. end protected :set_attributes + # Setter for attributes +val+. def attributes=(val) set_attributes(val) val end -=begin - ---- URI::LDAP#scope - ---- URI::LDAP#scope=(v) - -=end - + # Returns scope. def scope @scope end + # Private setter for scope +val+. def set_scope(val) @scope = val build_path_query @@ -186,23 +206,18 @@ URI::LDAP is copyrighted free software by Takaaki Tateishi and akira yamada. end protected :set_scope + # Setter for scope +val+. def scope=(val) set_scope(val) val end -=begin - ---- URI::LDAP#filter - ---- URI::LDAP#filter=(v) - -=end - + # Returns filter. def filter @filter end + # Private setter for filter +val+. def set_filter(val) @filter = val build_path_query @@ -210,23 +225,18 @@ URI::LDAP is copyrighted free software by Takaaki Tateishi and akira yamada. end protected :set_filter + # Setter for filter +val+. def filter=(val) set_filter(val) val end -=begin - ---- URI::LDAP#extensions - ---- URI::LDAP#extensions=(v) - -=end - + # Returns extensions. def extensions @extensions end + # Private setter for extensions +val+. def set_extensions(val) @extensions = val build_path_query @@ -234,15 +244,18 @@ URI::LDAP is copyrighted free software by Takaaki Tateishi and akira yamada. end protected :set_extensions + # Setter for extensions +val+. def extensions=(val) set_extensions(val) val end - end - def hierarchical? - false + # Checks if URI has a path. + # For URI::LDAP this will return +false+. + def hierarchical? + false + end end - @@schemes['LDAP'] = LDAP + register_scheme 'LDAP', LDAP end |
