ldap_tools 0.5.0 → 0.6.0
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.
- checksums.yaml +4 -4
- data/bin/ldaptools +1 -4
- data/lib/tapjoy/ldap/base.rb +10 -0
- data/lib/tapjoy/ldap/key.rb +64 -163
- data/lib/tapjoy/ldap/key/add.rb +51 -0
- data/lib/tapjoy/ldap/key/install.rb +46 -0
- data/lib/tapjoy/ldap/key/remove.rb +92 -0
- data/lib/tapjoy/ldap/key/show.rb +27 -0
- data/lib/tapjoy/ldap/version.rb +1 -1
- metadata +3 -6
- data/lib/tapjoy/ldap/audit/by_group.rb +0 -0
- data/lib/tapjoy/ldap/audit/by_user.rb +0 -0
- data/lib/tapjoy/ldap/audit/raw.rb +0 -0
- data/lib/tapjoy/ldap/key/list.rb +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3c022535acfa6078a97828ec84635bf46696480f
|
4
|
+
data.tar.gz: d9e03db054a580a268acf7742226602dfae551b7
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1c0129b763def56e8a9ec64715b0339634a86db95387438175a1ae50004eb7fd6be7300137030fd7850c56e0c12df2a7597a89341844c369c0b7f01060c453a4
|
7
|
+
data.tar.gz: 9ea951e5f59988399c2447ea32e451a05f8769d2356dd0d30a87e85bef000eca5605ff5ddab52006775b4ea97d95b2d0691b791ad960a7e94d48b18b36128ded
|
data/bin/ldaptools
CHANGED
@@ -25,10 +25,7 @@ when "user" # run commands associated with user object
|
|
25
25
|
when 'group'
|
26
26
|
Tapjoy::LDAP::Group.commands
|
27
27
|
when 'key'
|
28
|
-
|
29
|
-
commands('This object is used for group management', cmd, KEY_SUB_COMMANDS)
|
30
|
-
keys = Tapjoy::LDAP::Key.new
|
31
|
-
puts keys.show(ARGV.shift)
|
28
|
+
Tapjoy::LDAP::Key.commands
|
32
29
|
when 'audit'
|
33
30
|
AUDIT_SUB_COMMANDS = %w(by_user by_group raw)
|
34
31
|
commands('This object is used for auditing LDAP permissions', cmd, AUDIT_SUB_COMMANDS)
|
data/lib/tapjoy/ldap/base.rb
CHANGED
@@ -44,6 +44,16 @@ module Tapjoy
|
|
44
44
|
return return_result
|
45
45
|
end
|
46
46
|
|
47
|
+
def add_attribute(distinguished_name, attribute, value)
|
48
|
+
@conn.add_attribute(dn, attribute, value)
|
49
|
+
return return_result
|
50
|
+
end
|
51
|
+
|
52
|
+
def replace_attribute(distinguished_name, attribute, value)
|
53
|
+
@conn.replace_attribute(distinguished_name, attribute, value)
|
54
|
+
return_result
|
55
|
+
end
|
56
|
+
|
47
57
|
# Modify objects in LDAP
|
48
58
|
def modify(distinguished_name, operations)
|
49
59
|
@conn.modify(:dn => distinguished_name, :operations => operations)
|
data/lib/tapjoy/ldap/key.rb
CHANGED
@@ -1,196 +1,97 @@
|
|
1
|
+
require_relative 'key/add'
|
2
|
+
require_relative 'key/remove'
|
3
|
+
require_relative 'key/show'
|
4
|
+
require_relative 'key/install'
|
5
|
+
|
1
6
|
module Tapjoy
|
2
7
|
module LDAP
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
command = ARGV.shift
|
8
|
-
|
9
|
-
case command
|
10
|
-
when 'add', 'remove', 'install', 'list'
|
11
|
-
send(command)
|
12
|
-
when 'show'
|
13
|
-
return
|
14
|
-
else
|
15
|
-
raise Tapjoy::LDAP::InvalidArgument
|
16
|
-
end
|
17
|
-
end
|
18
|
-
|
19
|
-
def show(user)
|
20
|
-
get_keys_from_ldap[user]
|
21
|
-
end
|
8
|
+
# Entry point for all key subcommands
|
9
|
+
module Key
|
10
|
+
class << self
|
11
|
+
SUB_COMMANDS = %w(add remove install list show)
|
22
12
|
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
13
|
+
def commands
|
14
|
+
Trollop::options do
|
15
|
+
usage 'key [SUB_COMMAND] [options]'
|
16
|
+
synopsis "\nThis object is used for user key management\nAvailable subcommands are: #{SUB_COMMANDS}"
|
27
17
|
|
28
|
-
|
29
|
-
|
30
|
-
results = Tapjoy::LDAP::client.search(attributes = ['uid', 'sshPublicKey'],
|
31
|
-
filter = Net::LDAP::Filter.eq('sshPublicKey', '*'))
|
32
|
-
|
33
|
-
results.each { |result| key_results[result.uid[0]] = result.sshPublicKey }
|
34
|
-
|
35
|
-
return key_results
|
36
|
-
end
|
18
|
+
stop_on SUB_COMMANDS
|
19
|
+
end
|
37
20
|
|
38
|
-
|
39
|
-
def get_keys_from_commandline(filename)
|
40
|
-
return_keys = []
|
21
|
+
cmd = ARGV.shift
|
41
22
|
|
42
|
-
|
43
|
-
|
44
|
-
|
23
|
+
case cmd
|
24
|
+
when 'add', 'remove', 'install', 'list', 'show'
|
25
|
+
send(cmd) # call method with respective name
|
26
|
+
else
|
27
|
+
raise Tapjoy::LDAP::InvalidArgument
|
45
28
|
end
|
46
|
-
else
|
47
|
-
return_keys = Array(File.open(filename))
|
48
29
|
end
|
49
30
|
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
# Verify key format
|
55
|
-
def verify(key)
|
56
|
-
unless key.start_with?('ssh')
|
57
|
-
puts "Invalid key due to missing ssh key type:\n\n"
|
58
|
-
puts "\t#{ key }\n\n"
|
59
|
-
abort "Please verify your key and try again"
|
31
|
+
def add
|
32
|
+
key = Tapjoy::LDAP::Key::Add.new
|
33
|
+
key.add
|
60
34
|
end
|
61
|
-
end
|
62
|
-
|
63
|
-
# Add key to LDAP
|
64
|
-
def add
|
65
|
-
opts = Trollop::options do
|
66
|
-
# Set help message
|
67
|
-
banner("#{$0} key add [options]")
|
68
35
|
|
69
|
-
|
70
|
-
|
71
|
-
|
36
|
+
def remove
|
37
|
+
key = Tapjoy::LDAP::Key::Remove.new
|
38
|
+
key.remove
|
72
39
|
end
|
73
40
|
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
results = Tapjoy::LDAP::client.search(attributes = ['*'], filter = filter)
|
78
|
-
|
79
|
-
# Make sure we return one, and only one user DN
|
80
|
-
if results.size < 1
|
81
|
-
abort 'user not found'
|
82
|
-
elsif results.size > 1
|
83
|
-
abort 'Multiple users found. Please narrow your search.'
|
41
|
+
def install
|
42
|
+
key = Tapjoy::LDAP::Key::Install.new
|
43
|
+
key.install
|
84
44
|
end
|
85
45
|
|
86
|
-
|
87
|
-
|
88
|
-
puts 'LDAP Public Key Object Class not found.'
|
89
|
-
abort 'Please ensure user was created correctly.'
|
90
|
-
end
|
91
|
-
keys.each do |key|
|
92
|
-
Tapjoy::LDAP::client.conn.add_attribute(result.dn, :sshPublicKey, key)
|
93
|
-
puts Tapjoy::LDAP::client.return_result
|
94
|
-
end
|
46
|
+
def list
|
47
|
+
Tapjoy::LDAP::Key.get_keys_from_ldap
|
95
48
|
end
|
96
|
-
end
|
97
49
|
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
# Set help message
|
102
|
-
banner("#{$0} key remove [options]")
|
103
|
-
|
104
|
-
opt :user, 'Specify username to delete key from', :type => :string,
|
105
|
-
:required => true
|
106
|
-
opt :filename, 'File to load key deletion list from', :type => :string,
|
107
|
-
:default => '-'
|
108
|
-
opt(:force, 'Force delete')
|
50
|
+
def show
|
51
|
+
key = Tapjoy::LDAP::Key::Show.new
|
52
|
+
key.show
|
109
53
|
end
|
110
54
|
|
111
|
-
|
112
|
-
|
113
|
-
filter = Net::LDAP::Filter.eq('uid', opts[:user])
|
114
|
-
attributes = ['sshPublicKey']
|
115
|
-
old_array = []
|
116
|
-
|
117
|
-
new_array = []
|
55
|
+
def get_keys_from_ldap
|
118
56
|
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
57
|
+
key_results = {}
|
58
|
+
filter = Net::LDAP::Filter.eq('sshPublicKey', '*')
|
59
|
+
attributes = %w(uid sshPublicKey)
|
60
|
+
results = Tapjoy::LDAP::client.search(attributes, filter)
|
61
|
+
results.each {|result| key_results[result.uid[0]] = result.sshPublicKey}
|
62
|
+
key_results
|
125
63
|
end
|
126
64
|
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
end
|
65
|
+
# Retrieve keys from file/stdin
|
66
|
+
def get_keys_from_commandline(filename=nil)
|
67
|
+
ARGV << filename unless filename.nil?
|
68
|
+
return_keys = []
|
132
69
|
|
133
|
-
|
134
|
-
|
135
|
-
keys_not_found = keys - old_array
|
136
|
-
|
137
|
-
puts 'Please confirm the following operations:'
|
138
|
-
puts "Keep these keys:\n\n"
|
139
|
-
print "\t #{ keep_keys }\n\n"
|
140
|
-
puts "Delete these keys:\n\n"
|
141
|
-
print "\t #{ delete_keys }\n\n"
|
142
|
-
puts "Ignore these keys (not found in LDAP for #{ opts[:user]}):\n\n"
|
143
|
-
print "\t #{ keys_not_found }\n\n"
|
144
|
-
|
145
|
-
# We have to create a new stdin here, because we already use stdin
|
146
|
-
# in the get_keys_from_commandline method.
|
147
|
-
fd = IO.sysopen('/dev/tty', 'w+')
|
148
|
-
unless opts[:force]
|
149
|
-
print '>'
|
150
|
-
confirm = ''
|
151
|
-
IO.open(fd, 'w+') { |io| confirm = io.gets.chomp }
|
152
|
-
unless confirm.eql?('y') || confirm.eql?('yes')
|
153
|
-
abort("Deletion of #{ opts[:user] } aborted")
|
70
|
+
ARGF.each do |line|
|
71
|
+
return_keys << line.chomp!
|
154
72
|
end
|
73
|
+
ARGV << '-' # close ARGF
|
74
|
+
return_keys.each { |key| verify_key(key) }
|
75
|
+
return_keys
|
155
76
|
end
|
156
77
|
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
# Set help message
|
164
|
-
banner("#{$0} key install [options]")
|
165
|
-
|
166
|
-
opt :debug, 'Enable debug/dry-run mode'
|
167
|
-
end
|
168
|
-
|
169
|
-
# Store results of query
|
170
|
-
if opts[:debug]
|
171
|
-
puts search_results
|
172
|
-
exit 1
|
78
|
+
def verify_key(key)
|
79
|
+
unless key.start_with?('ssh')
|
80
|
+
puts "Invalid key due to missing ssh key type:\n\n"
|
81
|
+
puts "\t#{ key }\n\n"
|
82
|
+
abort "Please verify your key and try again"
|
83
|
+
end
|
173
84
|
end
|
174
85
|
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
keys = []
|
183
|
-
end
|
184
|
-
File.open(keypath, 'a+') do |file|
|
185
|
-
file.puts values.reject { |value| keys.include?(value) }
|
86
|
+
def verify_user(user, results)
|
87
|
+
# Make sure we return one, and only one user DN
|
88
|
+
if results.size < 1
|
89
|
+
puts "User (#{user}) not found."
|
90
|
+
abort 'Please check the username and try again'
|
91
|
+
elsif results.size > 1
|
92
|
+
abort 'Multiple users found. Please narrow your search.'
|
186
93
|
end
|
187
94
|
end
|
188
|
-
|
189
|
-
# @TODO method to remove from authorized_keys any key that is not in LDAP
|
190
|
-
end
|
191
|
-
|
192
|
-
def list
|
193
|
-
puts get_keys_from_ldap
|
194
95
|
end
|
195
96
|
end
|
196
97
|
end
|
data/lib/tapjoy/ldap/key/add.rb
CHANGED
@@ -0,0 +1,51 @@
|
|
1
|
+
module Tapjoy
|
2
|
+
module LDAP
|
3
|
+
module Key
|
4
|
+
# Add user key to user profile
|
5
|
+
class Add
|
6
|
+
# Add key to LDAP
|
7
|
+
def add
|
8
|
+
filter_users.each do |result|
|
9
|
+
confirm_ldap_schema(result)
|
10
|
+
keys.each do |key|
|
11
|
+
puts Tapjoy::LDAP::client.add_attribute(result.dn, :sshPublicKey, key)
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
private
|
17
|
+
def opts
|
18
|
+
@opts ||= Trollop::options do
|
19
|
+
# Set help message
|
20
|
+
usage 'key add [options]'
|
21
|
+
synopsis "\nThis command is for adding user keys to a given user's profile"
|
22
|
+
|
23
|
+
opt :user, 'Specify username to add key to', type: :string,
|
24
|
+
required: true
|
25
|
+
opt :filename, 'File to load keys from', type: :string
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
def keys
|
30
|
+
@keys ||= Tapjoy::LDAP::Key.get_keys_from_commandline(opts[:filename] || nil)
|
31
|
+
end
|
32
|
+
|
33
|
+
def filter_users
|
34
|
+
filter = Net::LDAP::Filter.eq('uid', opts[:user])
|
35
|
+
results = Tapjoy::LDAP::client.search(attributes = ['*'], filter = filter)
|
36
|
+
|
37
|
+
Tapjoy::LDAP::Key.verify_user(opts[:user], results)
|
38
|
+
|
39
|
+
results
|
40
|
+
end
|
41
|
+
|
42
|
+
def confirm_ldap_schema(result)
|
43
|
+
unless result.objectclass.include?('ldapPublicKey')
|
44
|
+
puts 'LDAP Public Key Object Class not found.'
|
45
|
+
abort 'Please ensure user was created correctly.'
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
@@ -0,0 +1,46 @@
|
|
1
|
+
module Tapjoy
|
2
|
+
module LDAP
|
3
|
+
module Key
|
4
|
+
# Install key on localhost
|
5
|
+
class Install
|
6
|
+
def install
|
7
|
+
Tapjoy::LDAP::Key.get_keys_from_ldap.each do |user, values|
|
8
|
+
directory = directory(user)
|
9
|
+
FileUtils.mkdir_p(directory) unless File.exists?directory
|
10
|
+
authorized_keys_file = "#{directory}/authorized_keys"
|
11
|
+
keys = load_keys_from_file(authorized_keys_file)
|
12
|
+
insert_keys(authorized_keys_file, keys, values)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
private
|
17
|
+
def opts
|
18
|
+
@opts ||= Trollop::options do
|
19
|
+
# Set help message
|
20
|
+
usage 'key install [options]'
|
21
|
+
synopsis "\nThis command is for keys to the appropriate authorized_keys file"
|
22
|
+
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
def load_keys_from_file(authorized_keys_file)
|
27
|
+
if File.exists?(authorized_keys_file)
|
28
|
+
keys = File.read(authorized_keys_file)
|
29
|
+
else
|
30
|
+
keys = []
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
def insert_keys(authorized_keys_file, keys, values)
|
35
|
+
File.open(authorized_keys_file, 'a+') do |file|
|
36
|
+
file.puts values.reject { |value| keys.include?(value) }
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
def directory(user)
|
41
|
+
File.join('etc', 'ssh', 'users', user)
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
@@ -0,0 +1,92 @@
|
|
1
|
+
module Tapjoy
|
2
|
+
module LDAP
|
3
|
+
module Key
|
4
|
+
# Remove a user key from user profile
|
5
|
+
class Remove
|
6
|
+
# Remove key from LDAP
|
7
|
+
def remove
|
8
|
+
keys # Get keys first
|
9
|
+
Tapjoy::LDAP::Key.verify_user(opts[:user], results)
|
10
|
+
|
11
|
+
confirm unless opts[:force]
|
12
|
+
Tapjoy::LDAP::client.replace_attribute(
|
13
|
+
@user_dn, :sshPublicKey, keep_keys)
|
14
|
+
end
|
15
|
+
|
16
|
+
private
|
17
|
+
def opts
|
18
|
+
@opts ||= Trollop::options do
|
19
|
+
# Set help message
|
20
|
+
usage 'key remove [options]'
|
21
|
+
synopsis "\nThis command is for removing a user's SSH key(s)"
|
22
|
+
|
23
|
+
opt :user, 'Specify username to delete key from', type: :string,
|
24
|
+
required: true
|
25
|
+
opt :filename, 'File to load key deletion list from', type: :string
|
26
|
+
opt :force, 'Force delete', short: '-F'
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
def keys
|
31
|
+
@keys ||= Tapjoy::LDAP::Key.get_keys_from_commandline(opts[:filename])
|
32
|
+
end
|
33
|
+
|
34
|
+
def filter
|
35
|
+
@filter ||= Net::LDAP::Filter.eq('uid', opts[:user])
|
36
|
+
end
|
37
|
+
|
38
|
+
def results
|
39
|
+
@results ||= Tapjoy::LDAP::client.search(['sshPublicKey'], filter)
|
40
|
+
end
|
41
|
+
|
42
|
+
def current_keys
|
43
|
+
@current_keys ||= begin
|
44
|
+
current_keys_array = []
|
45
|
+
results.each do |result|
|
46
|
+
@user_dn = result.dn
|
47
|
+
current_keys_array = result.sshPublicKey
|
48
|
+
end
|
49
|
+
|
50
|
+
current_keys_array
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
def keep_keys
|
55
|
+
@keep_keys ||= current_keys.flatten - keys.flatten
|
56
|
+
end
|
57
|
+
|
58
|
+
def delete_keys
|
59
|
+
@delete_keys ||= current_keys & keys
|
60
|
+
end
|
61
|
+
|
62
|
+
def keys_not_found
|
63
|
+
@keys_not_found ||= keys - current_keys
|
64
|
+
end
|
65
|
+
|
66
|
+
def confirm
|
67
|
+
puts 'Please confirm the following operations:'
|
68
|
+
puts "Keep these keys:\n\n"
|
69
|
+
print "\t #{ keep_keys }\n\n"
|
70
|
+
puts "Delete these keys:\n\n"
|
71
|
+
print "\t #{ delete_keys }\n\n"
|
72
|
+
puts "Ignore these keys (not found in LDAP for #{ opts[:user]}):\n\n"
|
73
|
+
print "\t #{ keys_not_found }\n\n"
|
74
|
+
get_confirmation
|
75
|
+
end
|
76
|
+
|
77
|
+
def fd
|
78
|
+
@fd ||= IO.sysopen('/dev/tty', 'w+')
|
79
|
+
end
|
80
|
+
|
81
|
+
def get_confirmation
|
82
|
+
print '>'
|
83
|
+
confirm = gets.chomp
|
84
|
+
# IO.open(fd, 'w+') { |io| confirm = io.gets.chomp }
|
85
|
+
unless confirm.eql?('y') || confirm.eql?('yes')
|
86
|
+
abort("Deletion of #{ opts[:user] } aborted")
|
87
|
+
end
|
88
|
+
end
|
89
|
+
end
|
90
|
+
end
|
91
|
+
end
|
92
|
+
end
|
data/lib/tapjoy/ldap/key/show.rb
CHANGED
@@ -0,0 +1,27 @@
|
|
1
|
+
module Tapjoy
|
2
|
+
module LDAP
|
3
|
+
module Key
|
4
|
+
# Show all of a user's keys
|
5
|
+
class Show
|
6
|
+
def show
|
7
|
+
username = opts[:user]
|
8
|
+
keys = Tapjoy::LDAP::Key.get_keys_from_ldap[username]
|
9
|
+
puts "No keys found for #{opts[:user]}" if keys.length? 0
|
10
|
+
puts keys
|
11
|
+
end
|
12
|
+
|
13
|
+
private
|
14
|
+
def opts
|
15
|
+
@opts ||= Trollop::options do
|
16
|
+
# Set help message
|
17
|
+
usage 'key show [options]'
|
18
|
+
synopsis "\nThis command is for showing a specific user's SSH keys"
|
19
|
+
|
20
|
+
opt :user, 'Specify username', type: :string, required: true
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
data/lib/tapjoy/ldap/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ldap_tools
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.6.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ali Tayarani
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2016-01-08 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: trollop
|
@@ -76,9 +76,6 @@ files:
|
|
76
76
|
- bin/ldaptools
|
77
77
|
- lib/tapjoy/ldap.rb
|
78
78
|
- lib/tapjoy/ldap/audit.rb
|
79
|
-
- lib/tapjoy/ldap/audit/by_group.rb
|
80
|
-
- lib/tapjoy/ldap/audit/by_user.rb
|
81
|
-
- lib/tapjoy/ldap/audit/raw.rb
|
82
79
|
- lib/tapjoy/ldap/base.rb
|
83
80
|
- lib/tapjoy/ldap/group.rb
|
84
81
|
- lib/tapjoy/ldap/group/add_user.rb
|
@@ -86,7 +83,7 @@ files:
|
|
86
83
|
- lib/tapjoy/ldap/group/delete.rb
|
87
84
|
- lib/tapjoy/ldap/key.rb
|
88
85
|
- lib/tapjoy/ldap/key/add.rb
|
89
|
-
- lib/tapjoy/ldap/key/
|
86
|
+
- lib/tapjoy/ldap/key/install.rb
|
90
87
|
- lib/tapjoy/ldap/key/remove.rb
|
91
88
|
- lib/tapjoy/ldap/key/show.rb
|
92
89
|
- lib/tapjoy/ldap/user.rb
|
File without changes
|
File without changes
|
File without changes
|
data/lib/tapjoy/ldap/key/list.rb
DELETED
File without changes
|