ad_search 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,4 @@
1
+ *.gem
2
+ .bundle
3
+ Gemfile.lock
4
+ pkg/*
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source "http://rubygems.org"
2
+
3
+ # Specify your gem's dependencies in ad_search.gemspec
4
+ gemspec
@@ -0,0 +1 @@
1
+ require "bundler/gem_tasks"
@@ -0,0 +1,27 @@
1
+ # -*- encoding: utf-8 -*-
2
+ $:.push File.expand_path("../lib", __FILE__)
3
+ require "ad_search/version"
4
+
5
+ Gem::Specification.new do |s|
6
+ s.name = "ad_search"
7
+ s.version = AdSearch::VERSION
8
+ s.authors = ["Neil Hoff"]
9
+ s.email = ["neilhoff@gmail.com"]
10
+ s.homepage = ""
11
+ s.summary = %q{Search Active Directory}
12
+ s.description = %q{Allows you to connect to and search your Active Directory system for users that have
13
+ not been disabled.}
14
+
15
+ s.rubyforge_project = "ad_search"
16
+
17
+ s.files = `git ls-files`.split("\n")
18
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
19
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
20
+ s.require_paths = ["lib"]
21
+
22
+ # specify any dependencies here; for example:
23
+ # s.add_development_dependency "rspec"
24
+ # s.add_runtime_dependency "rest-client"
25
+ s.add_development_dependency "rspec"
26
+ s.add_runtime_dependency "net-ldap"
27
+ end
@@ -0,0 +1,94 @@
1
+ require "ad_search/version"
2
+
3
+ module AdSearch
4
+ # Search Active Directory and get a hash in return
5
+
6
+ def initialize(user, pw, domain, host, base)
7
+ @ad_connection = connect_to_ad(user, pw, domain, host, base)
8
+ end
9
+
10
+ # Connection to Active Directory
11
+ def connect_to_ad(username, password, domain, host, base)
12
+ ldap = Net::LDAP.new :host => host,
13
+ :port => 389,
14
+ :base => base,
15
+ :auth => {
16
+ :method => :simple,
17
+ :username => username + '@' + domain,
18
+ :password => password
19
+ }
20
+ if ldap.bind
21
+ return ldap
22
+ else
23
+ raise 'authentication failed'
24
+ end
25
+ end
26
+
27
+ def search_active_users_by_username(search_term, treebase)
28
+ users = Hash.new
29
+
30
+ #Create a filter based on the username
31
+ filter = Net::LDAP::Filter.eq("sAMAccountName", search_term)
32
+ #Create a 2nd filter that makes sure we are only searching on users
33
+ filter2 = Net::LDAP::Filter.eq("objectCategory", "organizationalPerson")
34
+ #Join the filters together
35
+ joined_filter = Net::LDAP::Filter.join(filter, filter2)
36
+
37
+ count = 0
38
+ @ad_connection.search(:base => treebase, :filter => joined_filter) do |entry|
39
+ if active_account?(entry)
40
+ username = entry.sAMAccountName.to_s[2..-3]
41
+ #Split the first name and last name and remove un-needed characters
42
+ name = entry.name.to_s
43
+ name_length = name.length
44
+ name = name[2..-3].split
45
+ begin
46
+ manager = entry.manager.to_s.split(',')
47
+ manager = manager[0][5..-1]
48
+ rescue
49
+ manager = 'Manager is not set'
50
+ end
51
+ begin
52
+ title = entry.title.to_s[2..-3]
53
+ rescue
54
+ title = 'Title is not set'
55
+ end
56
+ begin
57
+ office = entry.physicaldeliveryofficename.to_s[2..-3]
58
+ rescue
59
+ office = 'Office is not set'
60
+ end
61
+ begin
62
+ email = entry.mail.to_s[2..-3]
63
+ rescue
64
+ email = 'Email is not set'
65
+ end
66
+
67
+ users[username] = {"first_name" => name[0],
68
+ "last_name" => name[1],
69
+ "username" => username,
70
+ "title" => title,
71
+ "office" => office,
72
+ "email" => email
73
+ #"manager" => manager
74
+ }
75
+ count = count + 1
76
+ end
77
+ end
78
+ return users
79
+ end
80
+
81
+ #Microsoft Active Directory's way of keeping track of time: BIGEPOCH (01/01/1970) is 116444916000000000 "100 nanosecond intervals since 01/01/1601"
82
+ BIGEPOCH = 116444916000000000
83
+ def active_account?(ad_object)
84
+ #See if account is disabled or the account is expired
85
+ tmpuac = ad_object.userAccountControl[0].to_i
86
+ if tmpuac & 2 == 2
87
+ return false
88
+ elsif ad_object.accountExpires[0].to_i != 0 and Time.now > Time.at((ad_object.accountExpires[0].to_i - BIGEPOCH) / 10000000) #Microsoft time to epoch time
89
+ return false
90
+ else
91
+ return true
92
+ end
93
+ end
94
+ end
@@ -0,0 +1,3 @@
1
+ module AdSearch
2
+ VERSION = "0.0.1"
3
+ end
metadata ADDED
@@ -0,0 +1,74 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: ad_search
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Neil Hoff
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2013-04-02 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: rspec
16
+ requirement: &22654416 !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: '0'
22
+ type: :development
23
+ prerelease: false
24
+ version_requirements: *22654416
25
+ - !ruby/object:Gem::Dependency
26
+ name: net-ldap
27
+ requirement: &22653852 !ruby/object:Gem::Requirement
28
+ none: false
29
+ requirements:
30
+ - - ! '>='
31
+ - !ruby/object:Gem::Version
32
+ version: '0'
33
+ type: :runtime
34
+ prerelease: false
35
+ version_requirements: *22653852
36
+ description: ! "Allows you to connect to and search your Active Directory system for
37
+ users that have\n not been disabled."
38
+ email:
39
+ - neilhoff@gmail.com
40
+ executables: []
41
+ extensions: []
42
+ extra_rdoc_files: []
43
+ files:
44
+ - .gitignore
45
+ - Gemfile
46
+ - Rakefile
47
+ - ad_search.gemspec
48
+ - lib/ad_search.rb
49
+ - lib/ad_search/version.rb
50
+ homepage: ''
51
+ licenses: []
52
+ post_install_message:
53
+ rdoc_options: []
54
+ require_paths:
55
+ - lib
56
+ required_ruby_version: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ! '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ required_rubygems_version: !ruby/object:Gem::Requirement
63
+ none: false
64
+ requirements:
65
+ - - ! '>='
66
+ - !ruby/object:Gem::Version
67
+ version: '0'
68
+ requirements: []
69
+ rubyforge_project: ad_search
70
+ rubygems_version: 1.8.16
71
+ signing_key:
72
+ specification_version: 3
73
+ summary: Search Active Directory
74
+ test_files: []