ladle 0.1.0 → 0.1.1
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG.md +9 -0
- data/README.md +12 -3
- data/lib/ladle/default.ldif +53 -0
- data/lib/ladle/java/net/detailedbalance/ladle/Main$1.class +0 -0
- data/lib/ladle/java/net/detailedbalance/ladle/Main.class +0 -0
- data/lib/ladle/java/net/detailedbalance/ladle/Main.java +6 -1
- data/lib/ladle/java/net/detailedbalance/ladle/Server.class +0 -0
- data/lib/ladle/java/net/detailedbalance/ladle/Server.java +6 -2
- data/lib/ladle/server.rb +15 -2
- data/lib/ladle/version.rb +1 -1
- data/spec/ladle/server_spec.rb +134 -59
- metadata +19 -4
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,12 @@
|
|
1
|
+
0.1.1
|
2
|
+
=====
|
3
|
+
|
4
|
+
- Allowed disabling anonymous access to the server. See the
|
5
|
+
`:allow_anonymous` option on {Ladle::Server#initialize}.
|
6
|
+
- Added passwords to default people.
|
7
|
+
- Internal: ensured that specs properly close sockets so that the
|
8
|
+
suite will pass on Linux.
|
9
|
+
|
1
10
|
0.1.0
|
2
11
|
=====
|
3
12
|
|
data/README.md
CHANGED
@@ -14,7 +14,7 @@ It is a wrapper around [ApacheDS][] (a pure-java embeddable LDAP
|
|
14
14
|
server), so it needs Java 1.5 or later available whether you are using
|
15
15
|
JRuby or not.
|
16
16
|
|
17
|
-
[ApacheDS]: http://directory.apache.org/apacheds/1.
|
17
|
+
[ApacheDS]: http://directory.apache.org/apacheds/1.0/index.html
|
18
18
|
|
19
19
|
Ladle in 30 seconds
|
20
20
|
-------------------
|
@@ -106,11 +106,20 @@ default data. You can peruse it in `lib/ladle/default.ldif`.
|
|
106
106
|
|
107
107
|
Note also that you will usually need to provide both the `:ldif` and
|
108
108
|
`:domain` configuration parameters. The latter must be the domain
|
109
|
-
matching the data in the former. (N.b. the implicit
|
110
|
-
the data to a single domain.)
|
109
|
+
component (dc) matching the data in the former. (N.b. the implicit
|
110
|
+
restriction of the data to a single domain.)
|
111
111
|
|
112
112
|
[rfc2849]: http://tools.ietf.org/rfc/rfc2849.txt
|
113
113
|
|
114
|
+
Project links
|
115
|
+
-------------
|
116
|
+
|
117
|
+
* [API documentation](http://rubydoc.info/github/rsutphin/ladle/master/frames)
|
118
|
+
* [Continuous integration](https://ctms-ci.nubic.northwestern.edu/hudson/job/ladle/)
|
119
|
+
* [Issue tracking](http://github.com/rsutphin/ladle/issues)
|
120
|
+
|
121
|
+
Non-issue questions can be sent to rhett@detailedbalance.net.
|
122
|
+
|
114
123
|
About
|
115
124
|
-----
|
116
125
|
|
data/lib/ladle/default.ldif
CHANGED
@@ -15,6 +15,8 @@ sn: Adams
|
|
15
15
|
givenName: Alexandra
|
16
16
|
mail: alexandra@example.org
|
17
17
|
uid: aa729
|
18
|
+
# Password is "smada"
|
19
|
+
userpassword: {SHA}pGlmZX1VOEdHHb30HZezeVNFxGM=
|
18
20
|
|
19
21
|
dn: uid=bb459,ou=people,dc=example,dc=org
|
20
22
|
objectClass: top
|
@@ -26,6 +28,8 @@ sn: Baldwin
|
|
26
28
|
givenName: Belle
|
27
29
|
mail: belle@example.org
|
28
30
|
uid: bb459
|
31
|
+
# Password is "niwdlab"
|
32
|
+
userpassword: {SHA}LRif2N+5TDSaO/rdkH2HHF8fF74=
|
29
33
|
|
30
34
|
dn: uid=cc414,ou=people,dc=example,dc=org
|
31
35
|
objectClass: top
|
@@ -37,6 +41,8 @@ sn: Carpenter
|
|
37
41
|
givenName: Claire
|
38
42
|
mail: claire@example.org
|
39
43
|
uid: cc414
|
44
|
+
# Password is "retneprac"
|
45
|
+
userpassword: {SHA}UL/iS+2R7GhwbhXOWoTHd4/qoMA=
|
40
46
|
|
41
47
|
dn: uid=dd945,ou=people,dc=example,dc=org
|
42
48
|
objectClass: top
|
@@ -48,6 +54,8 @@ sn: Dawson
|
|
48
54
|
givenName: Dorothy
|
49
55
|
mail: dorothy@example.org
|
50
56
|
uid: dd945
|
57
|
+
# Password is "noswad"
|
58
|
+
userpassword: {SHA}D0UlcTfbCddFLwih04ig4DEilAc=
|
51
59
|
|
52
60
|
dn: uid=ee855,ou=people,dc=example,dc=org
|
53
61
|
objectClass: top
|
@@ -59,6 +67,8 @@ sn: Emerson
|
|
59
67
|
givenName: Elizabeth
|
60
68
|
mail: elizabeth@example.org
|
61
69
|
uid: ee855
|
70
|
+
# Password is "nosreme"
|
71
|
+
userpassword: {SHA}pheE9wd/iTps6f8bJjM6AePjwrU=
|
62
72
|
|
63
73
|
dn: uid=ff531,ou=people,dc=example,dc=org
|
64
74
|
objectClass: top
|
@@ -70,6 +80,8 @@ sn: Fuller
|
|
70
80
|
givenName: Freya
|
71
81
|
mail: freya@example.org
|
72
82
|
uid: ff531
|
83
|
+
# Password is "relluf"
|
84
|
+
userpassword: {SHA}HLU2WZjFf/PF0Pp4qSDzoB3x+bs=
|
73
85
|
|
74
86
|
dn: uid=gg855,ou=people,dc=example,dc=org
|
75
87
|
objectClass: top
|
@@ -81,6 +93,8 @@ sn: Gonzales
|
|
81
93
|
givenName: Grace
|
82
94
|
mail: grace@example.org
|
83
95
|
uid: gg855
|
96
|
+
# Password is "selaznog"
|
97
|
+
userpassword: {SHA}zT4oO9pFXIj+ISIc60bvM8A5+UQ=
|
84
98
|
|
85
99
|
dn: uid=hh153,ou=people,dc=example,dc=org
|
86
100
|
objectClass: top
|
@@ -92,6 +106,8 @@ sn: Hatfield
|
|
92
106
|
givenName: Hilda
|
93
107
|
mail: hilda@example.org
|
94
108
|
uid: hh153
|
109
|
+
# Password is "dleiftah"
|
110
|
+
userpassword: {SHA}PTDJLPy4kwa7VZ/sGLyCPzZ7d3o=
|
95
111
|
|
96
112
|
dn: uid=ii711,ou=people,dc=example,dc=org
|
97
113
|
objectClass: top
|
@@ -103,6 +119,8 @@ sn: Ingram
|
|
103
119
|
givenName: Iona
|
104
120
|
mail: iona@example.org
|
105
121
|
uid: ii711
|
122
|
+
# Password is "margni"
|
123
|
+
userpassword: {SHA}L7qElLblWuLNFPrFku60uCuCr7Q=
|
106
124
|
|
107
125
|
dn: uid=jj243,ou=people,dc=example,dc=org
|
108
126
|
objectClass: top
|
@@ -114,6 +132,8 @@ sn: Jackson
|
|
114
132
|
givenName: Josephine
|
115
133
|
mail: josephine@example.org
|
116
134
|
uid: jj243
|
135
|
+
# Password is "noskcaj"
|
136
|
+
userpassword: {SHA}ElqdCxdbvRNqXBgdUdkCmGZlQmk=
|
117
137
|
|
118
138
|
dn: uid=kk891,ou=people,dc=example,dc=org
|
119
139
|
objectClass: top
|
@@ -125,6 +145,8 @@ sn: Kline
|
|
125
145
|
givenName: Kelly
|
126
146
|
mail: kelly@example.org
|
127
147
|
uid: kk891
|
148
|
+
# Password is "enilk"
|
149
|
+
userpassword: {SHA}WlNzQqBB/QoEKh3LRcLZHgnCGNw=
|
128
150
|
|
129
151
|
dn: uid=ll819,ou=people,dc=example,dc=org
|
130
152
|
objectClass: top
|
@@ -136,6 +158,8 @@ sn: Lawrence
|
|
136
158
|
givenName: Leah
|
137
159
|
mail: leah@example.org
|
138
160
|
uid: ll819
|
161
|
+
# Password is "ecnerwal"
|
162
|
+
userpassword: {SHA}CzyyPOSrIxgFCm24nSv2FA8wihQ=
|
139
163
|
|
140
164
|
dn: uid=mm405,ou=people,dc=example,dc=org
|
141
165
|
objectClass: top
|
@@ -147,6 +171,8 @@ sn: Maddox
|
|
147
171
|
givenName: Mona
|
148
172
|
mail: mona@example.org
|
149
173
|
uid: mm405
|
174
|
+
# Password is "xoddam"
|
175
|
+
userpassword: {SHA}WiCnxkOb4kpy16ON7ZC6mD/iqII=
|
150
176
|
|
151
177
|
dn: uid=nn297,ou=people,dc=example,dc=org
|
152
178
|
objectClass: top
|
@@ -158,6 +184,8 @@ sn: Nash
|
|
158
184
|
givenName: Noel
|
159
185
|
mail: noel@example.org
|
160
186
|
uid: nn297
|
187
|
+
# Password is "hsan"
|
188
|
+
userpassword: {SHA}1zOsG076wDkikQbnK5vAMM1BM/o=
|
161
189
|
|
162
190
|
dn: uid=oo981,ou=people,dc=example,dc=org
|
163
191
|
objectClass: top
|
@@ -169,6 +197,8 @@ sn: Osborn
|
|
169
197
|
givenName: Ophelia
|
170
198
|
mail: ophelia@example.org
|
171
199
|
uid: oo981
|
200
|
+
# Password is "nrobso"
|
201
|
+
userpassword: {SHA}w8mQw0kEa1UiWzMsNclD/LWzlgs=
|
172
202
|
|
173
203
|
dn: uid=pp468,ou=people,dc=example,dc=org
|
174
204
|
objectClass: top
|
@@ -180,6 +210,8 @@ sn: Patel
|
|
180
210
|
givenName: Penelope
|
181
211
|
mail: penelope@example.org
|
182
212
|
uid: pp468
|
213
|
+
# Password is "letap"
|
214
|
+
userpassword: {SHA}p7jaVoRIV9o8gDPbN10sEhXaYHk=
|
183
215
|
|
184
216
|
dn: uid=qq612,ou=people,dc=example,dc=org
|
185
217
|
objectClass: top
|
@@ -191,6 +223,8 @@ sn: Queen
|
|
191
223
|
givenName: Quin
|
192
224
|
mail: quin@example.org
|
193
225
|
uid: qq612
|
226
|
+
# Password is "neeuq"
|
227
|
+
userpassword: {SHA}v9ibNIx42giCH4tQnwUHJy6LeJg=
|
194
228
|
|
195
229
|
dn: uid=rr477,ou=people,dc=example,dc=org
|
196
230
|
objectClass: top
|
@@ -202,6 +236,8 @@ sn: Rowland
|
|
202
236
|
givenName: Ruth
|
203
237
|
mail: ruth@example.org
|
204
238
|
uid: rr477
|
239
|
+
# Password is "dnalwor"
|
240
|
+
userpassword: {SHA}S3eMb2C/ctXzbFnlgcH7ZQ/fozU=
|
205
241
|
|
206
242
|
dn: uid=ss198,ou=people,dc=example,dc=org
|
207
243
|
objectClass: top
|
@@ -213,6 +249,8 @@ sn: Solomon
|
|
213
249
|
givenName: Serena
|
214
250
|
mail: serena@example.org
|
215
251
|
uid: ss198
|
252
|
+
# Password is "nomolos"
|
253
|
+
userpassword: {SHA}EizIKlU79Kz1Y2WIV4deIh0MSA8=
|
216
254
|
|
217
255
|
dn: uid=tt882,ou=people,dc=example,dc=org
|
218
256
|
objectClass: top
|
@@ -224,6 +262,8 @@ sn: Torres
|
|
224
262
|
givenName: Talia
|
225
263
|
mail: talia@example.org
|
226
264
|
uid: tt882
|
265
|
+
# Password is "serrot"
|
266
|
+
userpassword: {SHA}yO0DcSZ4fTMcx3sTHnAPQGvMkwg=
|
227
267
|
|
228
268
|
dn: uid=uu972,ou=people,dc=example,dc=org
|
229
269
|
objectClass: top
|
@@ -235,6 +275,8 @@ sn: Underwood
|
|
235
275
|
givenName: Ursula
|
236
276
|
mail: ursula@example.org
|
237
277
|
uid: uu972
|
278
|
+
# Password is "doowrednu"
|
279
|
+
userpassword: {SHA}GQWGu8IvIEFU1PP34qGi5DyDF/c=
|
238
280
|
|
239
281
|
dn: uid=vv180,ou=people,dc=example,dc=org
|
240
282
|
objectClass: top
|
@@ -246,6 +288,8 @@ sn: Vickers
|
|
246
288
|
givenName: Vera
|
247
289
|
mail: vera@example.org
|
248
290
|
uid: vv180
|
291
|
+
# Password is "srekciv"
|
292
|
+
userpassword: {SHA}3UrzY38O4R1GLK6ccSSfL4D0efQ=
|
249
293
|
|
250
294
|
dn: uid=ww369,ou=people,dc=example,dc=org
|
251
295
|
objectClass: top
|
@@ -257,6 +301,8 @@ sn: Wise
|
|
257
301
|
givenName: Wendy
|
258
302
|
mail: wendy@example.org
|
259
303
|
uid: ww369
|
304
|
+
# Password is "esiw"
|
305
|
+
userpassword: {SHA}8gU4KSqUeeLRPov2tmXZXgOZw78=
|
260
306
|
|
261
307
|
dn: uid=xx396,ou=people,dc=example,dc=org
|
262
308
|
objectClass: top
|
@@ -268,6 +314,8 @@ sn: Xiong
|
|
268
314
|
givenName: Xara
|
269
315
|
mail: xara@example.org
|
270
316
|
uid: xx396
|
317
|
+
# Password is "gnoix"
|
318
|
+
userpassword: {SHA}Yc2En2R/sbdjlEOitkLlkwY4jAY=
|
271
319
|
|
272
320
|
dn: uid=yy423,ou=people,dc=example,dc=org
|
273
321
|
objectClass: top
|
@@ -279,6 +327,8 @@ sn: Yates
|
|
279
327
|
givenName: Yvette
|
280
328
|
mail: yvette@example.org
|
281
329
|
uid: yy423
|
330
|
+
# Password is "setay"
|
331
|
+
userpassword: {SHA}iKBhwF+Mbbct6mlmy6AvodIek3E=
|
282
332
|
|
283
333
|
dn: uid=zz882,ou=people,dc=example,dc=org
|
284
334
|
objectClass: top
|
@@ -290,3 +340,6 @@ sn: Zimmerman
|
|
290
340
|
givenName: Zana
|
291
341
|
mail: zana@example.org
|
292
342
|
uid: zz882
|
343
|
+
# Password is "namremmiz"
|
344
|
+
userpassword: {SHA}KlsWojnknRWCHXGoBOTlEZxxrG8=
|
345
|
+
|
Binary file
|
Binary file
|
@@ -40,7 +40,8 @@ public class Main {
|
|
40
40
|
new Integer(commandLine.getOptionValue("p")),
|
41
41
|
commandLine.getOptionValue("d"),
|
42
42
|
new File(commandLine.getOptionValue("l")),
|
43
|
-
new File(commandLine.getOptionValue(
|
43
|
+
new File(commandLine.getOptionValue('t')),
|
44
|
+
!commandLine.hasOption('A'));
|
44
45
|
|
45
46
|
Runtime.getRuntime().addShutdownHook(new Thread(new Runnable() {
|
46
47
|
public void run() {
|
@@ -110,6 +111,10 @@ public class Main {
|
|
110
111
|
withLongOpt("tmpdir").hasArg().isRequired().
|
111
112
|
withDescription("Specify the temporary directory to use").
|
112
113
|
create('t'))
|
114
|
+
.addOption(OptionBuilder.
|
115
|
+
withLongOpt("no-anonymous").
|
116
|
+
withDescription("Disable anonymous access").
|
117
|
+
create('A'))
|
113
118
|
;
|
114
119
|
CommandLineParser parser = new GnuParser();
|
115
120
|
|
Binary file
|
@@ -35,13 +35,17 @@ public class Server {
|
|
35
35
|
|
36
36
|
private final int port;
|
37
37
|
private final String domainComponent;
|
38
|
+
private final boolean allowAnonymous;
|
38
39
|
private final File tempDir;
|
39
40
|
private final File ldifDir;
|
40
41
|
private boolean running = false;
|
41
42
|
|
42
|
-
public Server(
|
43
|
+
public Server(
|
44
|
+
int port, String domainComponent, File ldifFile, File tempDirBase, boolean allowAnonymous
|
45
|
+
) {
|
43
46
|
this.port = port;
|
44
47
|
this.domainComponent = domainComponent;
|
48
|
+
this.allowAnonymous = allowAnonymous;
|
45
49
|
this.tempDir = createTempDir(tempDirBase);
|
46
50
|
this.ldifDir = prepareLdif(ldifFile);
|
47
51
|
}
|
@@ -98,7 +102,7 @@ public class Server {
|
|
98
102
|
cfg.setLdifDirectory(ldifDir);
|
99
103
|
cfg.setEnableNetworking(true);
|
100
104
|
cfg.setLdapPort(port);
|
101
|
-
cfg.setAllowAnonymousAccess(
|
105
|
+
cfg.setAllowAnonymousAccess(allowAnonymous);
|
102
106
|
cfg.setAccessControlEnabled(false);
|
103
107
|
cfg.setShutdownHookEnabled(false);
|
104
108
|
cfg.setContextPartitionConfigurations(
|
data/lib/ladle/server.rb
CHANGED
@@ -47,6 +47,8 @@ module Ladle
|
|
47
47
|
# :domain option to match.
|
48
48
|
# @option opts [String] :domain ("dc=example,dc=org") the domain
|
49
49
|
# for the data provided in the :ldif option.
|
50
|
+
# @option opts [Boolean] :allow_anonymous (true) whether anonymous
|
51
|
+
# users will be able to query the server.
|
50
52
|
# @option opts [Boolean] :verbose (false) if true, detailed
|
51
53
|
# information about the execution of the server will be printed
|
52
54
|
# to standard error.
|
@@ -66,6 +68,7 @@ module Ladle
|
|
66
68
|
@port = opts[:port] || 3897
|
67
69
|
@domain = opts[:domain] || "dc=example,dc=org"
|
68
70
|
@ldif = opts[:ldif] || File.expand_path("../default.ldif", __FILE__)
|
71
|
+
@allow_anonymous = opts[:allow_anonymous].nil? ? true : opts[:allow_anonymous]
|
69
72
|
@quiet = opts[:quiet]
|
70
73
|
@verbose = opts[:verbose]
|
71
74
|
@timeout = opts[:timeout] || 15
|
@@ -193,6 +196,15 @@ module Ladle
|
|
193
196
|
@verbose
|
194
197
|
end
|
195
198
|
|
199
|
+
##
|
200
|
+
# Whether anonymous users will be allowed access to the server
|
201
|
+
# once it is running.
|
202
|
+
#
|
203
|
+
# @return [Boolean]
|
204
|
+
def allow_anonymous?
|
205
|
+
@allow_anonymous
|
206
|
+
end
|
207
|
+
|
196
208
|
private
|
197
209
|
|
198
210
|
def create_process(*cmd)
|
@@ -216,8 +228,9 @@ module Ladle
|
|
216
228
|
"--port", port,
|
217
229
|
"--domain", domain,
|
218
230
|
"--ldif", ldif,
|
219
|
-
"--tmpdir", tmpdir
|
220
|
-
|
231
|
+
"--tmpdir", tmpdir,
|
232
|
+
("--no-anonymous" unless allow_anonymous?)
|
233
|
+
].compact + @additional_args
|
221
234
|
end
|
222
235
|
|
223
236
|
def classpath
|
data/lib/ladle/version.rb
CHANGED
data/spec/ladle/server_spec.rb
CHANGED
@@ -4,11 +4,28 @@ require 'net/ldap'
|
|
4
4
|
|
5
5
|
describe Ladle, "::Server" do
|
6
6
|
def create_server(opts = {})
|
7
|
-
|
7
|
+
default_opts = { :tmpdir => tmpdir }.merge(
|
8
|
+
ENV['LADLE_TRACE'] ? { :verbose => true } : { :quiet => true })
|
9
|
+
Ladle::Server.new(default_opts.merge(opts))
|
10
|
+
end
|
11
|
+
|
12
|
+
def should_be_running
|
13
|
+
s = nil
|
14
|
+
lambda { s = TCPSocket.new('localhost', @server.port) }.
|
15
|
+
should_not raise_error
|
16
|
+
s.close if s
|
17
|
+
end
|
18
|
+
|
19
|
+
def should_not_be_running
|
20
|
+
s = nil
|
21
|
+
lambda { s = TCPSocket.new('localhost', @server.port) }.
|
22
|
+
should raise_error(/Connection refused/)
|
23
|
+
s.close if s
|
8
24
|
end
|
9
25
|
|
10
26
|
before do
|
11
27
|
@server = create_server
|
28
|
+
should_not_be_running # fail early
|
12
29
|
end
|
13
30
|
|
14
31
|
after do
|
@@ -166,14 +183,19 @@ describe Ladle, "::Server" do
|
|
166
183
|
should == "#{tmpdir}/openjdk/jre"
|
167
184
|
end
|
168
185
|
end
|
169
|
-
end
|
170
186
|
|
171
|
-
|
172
|
-
|
173
|
-
|
174
|
-
|
187
|
+
describe ":allow_anonymous" do
|
188
|
+
it "defaults to true" do
|
189
|
+
Ladle::Server.new.allow_anonymous?.should be_true
|
190
|
+
end
|
191
|
+
|
192
|
+
it "can be overridden" do
|
193
|
+
Ladle::Server.new(:allow_anonymous => false).allow_anonymous?.should be_false
|
194
|
+
end
|
175
195
|
end
|
196
|
+
end
|
176
197
|
|
198
|
+
describe "running" do
|
177
199
|
it "blocks until the server is up" do
|
178
200
|
@server.start
|
179
201
|
should_be_running
|
@@ -192,8 +214,7 @@ describe Ladle, "::Server" do
|
|
192
214
|
@server.start
|
193
215
|
@server.stop
|
194
216
|
@server.start
|
195
|
-
|
196
|
-
should_not raise_error
|
217
|
+
should_be_running
|
197
218
|
end
|
198
219
|
|
199
220
|
it "throws an exception when the server doesn't start up" do
|
@@ -231,16 +252,20 @@ describe Ladle, "::Server" do
|
|
231
252
|
end
|
232
253
|
end
|
233
254
|
|
234
|
-
describe "
|
255
|
+
describe "LDAP implementation" do
|
235
256
|
before do
|
236
257
|
pending "Net::LDAP doesn't work on 1.9" if RUBY_VERSION =~ /1.9/
|
237
258
|
end
|
238
259
|
|
239
|
-
def with_ldap
|
260
|
+
def with_ldap(params={})
|
240
261
|
@server.start
|
241
|
-
Net::LDAP.open
|
242
|
-
|
243
|
-
|
262
|
+
# We don't use Net::LDAP.open because it seems to leak sockets,
|
263
|
+
# at least on Linux and with version 0.0.4 of the library.
|
264
|
+
ldap = Net::LDAP.new({
|
265
|
+
:host => 'localhost', :port => @server.port,
|
266
|
+
:auth => { :method => :anonymous }
|
267
|
+
}.merge(params))
|
268
|
+
yield ldap
|
244
269
|
end
|
245
270
|
|
246
271
|
def ldap_search(filter, base=nil)
|
@@ -248,58 +273,108 @@ describe Ladle, "::Server" do
|
|
248
273
|
ldap.search(
|
249
274
|
:base => base || 'dc=example,dc=org',
|
250
275
|
:filter => filter
|
251
|
-
)
|
252
|
-
|
253
|
-
|
254
|
-
|
255
|
-
def ldap_parameters
|
256
|
-
@ldap_parameters ||= {
|
257
|
-
:host => 'localhost', :port => @server.port,
|
258
|
-
:auth => { :method => :anonymous }
|
276
|
+
).tap {
|
277
|
+
ldap.get_operation_result.code.should == 0 # success
|
278
|
+
}
|
259
279
|
}
|
260
280
|
end
|
261
281
|
|
262
|
-
describe "
|
263
|
-
|
264
|
-
|
265
|
-
|
266
|
-
|
267
|
-
|
268
|
-
|
269
|
-
|
270
|
-
|
271
|
-
|
272
|
-
|
273
|
-
|
274
|
-
|
275
|
-
|
276
|
-
|
277
|
-
|
278
|
-
|
279
|
-
|
280
|
-
|
281
|
-
|
282
|
-
|
283
|
-
|
282
|
+
describe "data" do
|
283
|
+
describe "the default set" do
|
284
|
+
it "has 26 people" do
|
285
|
+
ldap_search(Net::LDAP::Filter.pres('uid')).should have(26).people
|
286
|
+
end
|
287
|
+
|
288
|
+
it "has 1 group" do
|
289
|
+
ldap_search(Net::LDAP::Filter.pres('ou')).should have(1).group
|
290
|
+
end
|
291
|
+
|
292
|
+
it "has given names" do
|
293
|
+
ldap_search(Net::LDAP::Filter.pres('uid')).
|
294
|
+
select { |res| !res[:givenname] || res[:givenname].empty? }.should == []
|
295
|
+
end
|
296
|
+
|
297
|
+
it "has e-mail addresses" do
|
298
|
+
ldap_search(Net::LDAP::Filter.pres('uid')).
|
299
|
+
select { |res| !res[:mail] || res[:mail].empty? }.should == []
|
300
|
+
end
|
301
|
+
|
302
|
+
it "can be searched by value" do
|
303
|
+
ldap_search(Net::LDAP::Filter.eq(:givenname, 'Josephine')).
|
304
|
+
collect { |res| res[:uid].first }.should == %w(jj243)
|
305
|
+
end
|
306
|
+
end
|
307
|
+
|
308
|
+
describe "with a provided set" do
|
309
|
+
before do
|
310
|
+
@server = create_server(
|
311
|
+
:domain => "dc=example,dc=net",
|
312
|
+
:ldif => File.expand_path("../animals.ldif", __FILE__)
|
313
|
+
)
|
314
|
+
end
|
315
|
+
|
316
|
+
it "has the groups provided by the other LDIF" do
|
317
|
+
ldap_search(Net::LDAP::Filter.pres('ou'), 'dc=example,dc=net').
|
318
|
+
collect { |result| result[:ou].first }.should == ["animals"]
|
319
|
+
end
|
320
|
+
|
321
|
+
it "has the individuals provided by the other LDIF" do
|
322
|
+
ldap_search(Net::LDAP::Filter.pres('uid'), 'dc=example,dc=net').
|
323
|
+
collect { |result| result[:givenname].first }.sort.should == %w(Ada Bob)
|
324
|
+
end
|
284
325
|
end
|
285
326
|
end
|
286
327
|
|
287
|
-
describe "
|
288
|
-
|
289
|
-
|
290
|
-
|
291
|
-
|
292
|
-
|
293
|
-
end
|
294
|
-
|
295
|
-
it "
|
296
|
-
|
297
|
-
|
298
|
-
|
299
|
-
|
300
|
-
|
301
|
-
|
302
|
-
|
328
|
+
describe "binding" do
|
329
|
+
it "works with a valid password" do
|
330
|
+
with_ldap do |ldap|
|
331
|
+
ldap.authenticate("uid=hh153,ou=people,dc=example,dc=org", "hatfield".reverse)
|
332
|
+
ldap.bind.should be_true
|
333
|
+
end
|
334
|
+
end
|
335
|
+
|
336
|
+
it "does not work with an invalid password" do
|
337
|
+
with_ldap do |ldap|
|
338
|
+
ldap.authenticate("uid=hh153,ou=people,dc=example,dc=org", "mccoy".reverse)
|
339
|
+
ldap.bind.should be_false
|
340
|
+
end
|
341
|
+
end
|
342
|
+
|
343
|
+
describe "with anonymous binding disabled" do
|
344
|
+
before do
|
345
|
+
@server = create_server(:allow_anonymous => false)
|
346
|
+
end
|
347
|
+
|
348
|
+
it "will not bind anonymously" do
|
349
|
+
with_ldap do |ldap|
|
350
|
+
# anonymous bind is successful even with anonymous access
|
351
|
+
# off, but searches fail appropriately
|
352
|
+
ldap.search(:filter => Net::LDAP::Filter.pres('uid'), :base => 'dc=example,dc=org')
|
353
|
+
ldap.get_operation_result.code.should == 50 # insufficient access
|
354
|
+
end
|
355
|
+
end
|
356
|
+
|
357
|
+
it "will bind with a username and valid password" do
|
358
|
+
with_ldap do |ldap|
|
359
|
+
ldap.authenticate("uid=kk891,ou=people,dc=example,dc=org", "enilk")
|
360
|
+
ldap.bind.should be_true
|
361
|
+
end
|
362
|
+
end
|
363
|
+
|
364
|
+
it "will not bind with a username and invalid password" do
|
365
|
+
with_ldap do |ldap|
|
366
|
+
ldap.authenticate("uid=kk891,ou=people,dc=example,dc=org", "kevin")
|
367
|
+
ldap.bind.should be_false
|
368
|
+
end
|
369
|
+
end
|
370
|
+
|
371
|
+
it "permits searches for authenticated users" do
|
372
|
+
with_ldap do |ldap|
|
373
|
+
ldap.authenticate("uid=kk891,ou=people,dc=example,dc=org", "enilk")
|
374
|
+
ldap.search(:filter => Net::LDAP::Filter.pres('uid'), :base => 'dc=example,dc=org').
|
375
|
+
should have(26).results
|
376
|
+
end
|
377
|
+
end
|
303
378
|
end
|
304
379
|
end
|
305
380
|
end
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ladle
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 25
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 1
|
9
|
-
-
|
10
|
-
version: 0.1.
|
9
|
+
- 1
|
10
|
+
version: 0.1.1
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Rhett Sutphin
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2010-10-
|
18
|
+
date: 2010-10-27 00:00:00 -05:00
|
19
19
|
default_executable:
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|
@@ -96,6 +96,21 @@ dependencies:
|
|
96
96
|
version: 0.0.4
|
97
97
|
type: :development
|
98
98
|
version_requirements: *id005
|
99
|
+
- !ruby/object:Gem::Dependency
|
100
|
+
name: ci_reporter
|
101
|
+
prerelease: false
|
102
|
+
requirement: &id006 !ruby/object:Gem::Requirement
|
103
|
+
none: false
|
104
|
+
requirements:
|
105
|
+
- - ~>
|
106
|
+
- !ruby/object:Gem::Version
|
107
|
+
hash: 3
|
108
|
+
segments:
|
109
|
+
- 1
|
110
|
+
- 6
|
111
|
+
version: "1.6"
|
112
|
+
type: :development
|
113
|
+
version_requirements: *id006
|
99
114
|
description: Provides an embedded LDAP server for BDD. The embedded server is built with ApacheDS.
|
100
115
|
email:
|
101
116
|
- rhett@detailedbalance.net
|