diff --git a/github-ldap.gemspec b/github-ldap.gemspec index b62fcb0..dd04392 100644 --- a/github-ldap.gemspec +++ b/github-ldap.gemspec @@ -2,7 +2,7 @@ Gem::Specification.new do |spec| spec.name = "github-ldap" - spec.version = "1.3.0" + spec.version = "1.3.1" spec.authors = ["David Calavera"] spec.email = ["david.calavera@gmail.com"] spec.description = %q{Ldap authentication for humans} diff --git a/lib/github/ldap/filter.rb b/lib/github/ldap/filter.rb index 87173ef..f11934d 100644 --- a/lib/github/ldap/filter.rb +++ b/lib/github/ldap/filter.rb @@ -26,10 +26,17 @@ def group_filter(group_names) # Returns a Net::LDAP::Filter. def member_filter(entry = nil, uid_attr = @ldap.uid) if entry - MEMBERSHIP_NAMES.map {|n| Net::LDAP::Filter.eq(n, entry.dn) }. - reduce(:|) | - entry[uid_attr]. map { |uid| Net::LDAP::Filter.eq("memberUid", uid) }. - reduce(:|) + filter = + MEMBERSHIP_NAMES. map {|n| Net::LDAP::Filter.eq(n, entry.dn) }. + reduce(:|) + + if !entry[uid_attr].empty? + filter |= + entry[uid_attr].map { |uid| Net::LDAP::Filter.eq("memberUid", uid) }. + reduce(:|) + end + + filter else (MEMBERSHIP_NAMES + %w(memberUid)). map {|n| Net::LDAP::Filter.pres(n)}.reduce(:|) diff --git a/test/filter_test.rb b/test/filter_test.rb index 39e9143..0fff2ce 100644 --- a/test/filter_test.rb +++ b/test/filter_test.rb @@ -32,6 +32,12 @@ def test_member_equal @subject.member_filter(@entry).to_s end + def test_member_without_uid + @entry.uid = nil + assert_equal "(|(member=#{@me})(uniqueMember=#{@me}))", + @subject.member_filter(@entry).to_s + end + def test_groups_reduced assert_equal "(|(cn=Enterprise)(cn=People))", @subject.group_filter(%w(Enterprise People)).to_s