ruby-ldap 0.9.10 → 0.9.11
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.
- data/ChangeLog +5 -1
- data/NOTES +14 -1
- data/README +1 -2
- data/rbldap.h +2 -2
- data/saslconn.c +85 -32
- data/test/setup.rb +2 -2
- metadata +28 -28
data/ChangeLog
CHANGED
@@ -1,9 +1,13 @@
|
|
1
|
+
Mon Mar 15 19:15:49 UTC 2010 Alexey Chebotar <alexey.chebotar@gmail.com>
|
2
|
+
* Version 0.9.11
|
3
|
+
* Allow passing SASL interaction options.
|
4
|
+
Thanks to Anthony M. Martinez.
|
5
|
+
|
1
6
|
Fri Jan 29 07:50:30 UTC 2010 Alexey Chebotar <alexey.chebotar@gmail.com>
|
2
7
|
* Version 0.9.10
|
3
8
|
* Added controls and referral extraction to #search_ext and
|
4
9
|
#search_ext2. Thanks to Michael Granger.
|
5
10
|
|
6
|
-
|
7
11
|
Thu Jun 11 06:51:30 UTC 2009 Alexey Chebotar <alexey.chebotar@gmail.com>
|
8
12
|
* Version 0.9.9
|
9
13
|
* Fixed LDAP::VERSION. Thanks to Kouhei Sutou
|
data/NOTES
CHANGED
@@ -1,4 +1,17 @@
|
|
1
|
-
|
1
|
+
0.9.11
|
2
|
+
-----
|
3
|
+
|
4
|
+
Allow passing SASL interaction options
|
5
|
+
|
6
|
+
This adds a hash parameter "options" to LDAP::Conn.sasl_bind, which
|
7
|
+
can take :authzid, :authcid, and :realm (and corresponding strings),
|
8
|
+
for SASL authentication.
|
9
|
+
|
10
|
+
Also, refactored the rb_scan_args inside rb_ldap_conn_sasl_bind to use
|
11
|
+
C's case fallthrough, leading to less code repetition.
|
12
|
+
|
13
|
+
Tnahks to Anthony M. Martinez.
|
14
|
+
|
2
15
|
|
3
16
|
0.9.10
|
4
17
|
-----
|
data/README
CHANGED
@@ -1,7 +1,5 @@
|
|
1
1
|
Ruby/LDAP -- A Ruby extension library for LDAP
|
2
2
|
|
3
|
-
$Id: README,v 1.19 2009/03/19 15:25:20 alexey.chebotar Exp $
|
4
|
-
|
5
3
|
Copyright (C) 2000-2004 Takaaki Tateishi <ttate@users.sourceforge.net>
|
6
4
|
Copyright (C) 2005-2006 Ian Macdonald <ian@caliban.org>
|
7
5
|
Copyright (C) 2009 Alexey Chebotar <alexey.chebotar@gmail.com>
|
@@ -265,3 +263,4 @@ This list maybe not correct. If you notice mistakes of this list, please point o
|
|
265
263
|
* S. Potter [mbbx6spp]: Gem Packaging Support
|
266
264
|
* Kouhei Sutou
|
267
265
|
* Michael Granger: Patch.
|
266
|
+
* Anthony M. Martinez: Patch.
|
data/rbldap.h
CHANGED
@@ -27,8 +27,8 @@
|
|
27
27
|
|
28
28
|
#define RB_LDAP_MAJOR_VERSION 0
|
29
29
|
#define RB_LDAP_MINOR_VERSION 9
|
30
|
-
#define RB_LDAP_PATCH_VERSION
|
31
|
-
#define RB_LDAP_VERSION "0.9.
|
30
|
+
#define RB_LDAP_PATCH_VERSION 11
|
31
|
+
#define RB_LDAP_VERSION "0.9.11"
|
32
32
|
|
33
33
|
#define LDAP_GET_OPT_MAX_BUFFER_SIZE (1024) /* >= sizeof(LDAPAPIInfo) */
|
34
34
|
|
data/saslconn.c
CHANGED
@@ -16,17 +16,76 @@ extern VALUE rb_ldap_conn_initialize (int argc, VALUE argv[], VALUE self);
|
|
16
16
|
extern VALUE rb_ldap_conn_rebind (VALUE self);
|
17
17
|
|
18
18
|
#if defined(HAVE_LDAP_SASL_BIND_S)
|
19
|
+
#include <sasl/sasl.h>
|
20
|
+
VALUE
|
21
|
+
rb_ldap_indifferent_hash_aref(VALUE hash, const char *key)
|
22
|
+
{
|
23
|
+
VALUE symval = rb_hash_aref(hash, ID2SYM(rb_intern(key)));
|
24
|
+
if (!NIL_P(symval))
|
25
|
+
{
|
26
|
+
return symval;
|
27
|
+
}
|
28
|
+
return rb_hash_aref(hash, rb_str_new2(key)); /* this could be Qnil */
|
29
|
+
}
|
30
|
+
|
19
31
|
int
|
20
|
-
rb_ldap_sasl_interaction (LDAP * ld, unsigned flags, void *
|
32
|
+
rb_ldap_sasl_interaction (LDAP * ld, unsigned flags, void *de, void *in)
|
21
33
|
{
|
22
|
-
|
34
|
+
sasl_interact_t *interact = in;
|
35
|
+
VALUE options = (VALUE)de;
|
36
|
+
|
37
|
+
VALUE defvalue;
|
38
|
+
const char *dflt = NULL;
|
39
|
+
|
40
|
+
if (ld == NULL)
|
41
|
+
{
|
42
|
+
return LDAP_PARAM_ERROR;
|
43
|
+
}
|
44
|
+
if (flags == LDAP_SASL_INTERACTIVE)
|
45
|
+
{
|
46
|
+
rb_raise (rb_eLDAP_Error, "interactive bind not supported.");
|
47
|
+
}
|
48
|
+
while (!NIL_P(options) && interact->id != SASL_CB_LIST_END)
|
49
|
+
{
|
50
|
+
dflt = interact->defresult;
|
51
|
+
switch (interact->id)
|
52
|
+
{
|
53
|
+
case SASL_CB_GETREALM:
|
54
|
+
if (!NIL_P(defvalue = rb_ldap_indifferent_hash_aref(options, "realm")))
|
55
|
+
{
|
56
|
+
dflt = StringValuePtr(defvalue);
|
57
|
+
}
|
58
|
+
break;
|
59
|
+
case SASL_CB_AUTHNAME:
|
60
|
+
if (!NIL_P(defvalue = rb_ldap_indifferent_hash_aref(options, "authcid")))
|
61
|
+
{
|
62
|
+
dflt = StringValuePtr(defvalue);
|
63
|
+
}
|
64
|
+
break;
|
65
|
+
case SASL_CB_USER:
|
66
|
+
if (!NIL_P(defvalue = rb_ldap_indifferent_hash_aref(options, "authzid")))
|
67
|
+
{
|
68
|
+
dflt = StringValuePtr(defvalue);
|
69
|
+
}
|
70
|
+
break;
|
71
|
+
default:
|
72
|
+
/* Nothing. */
|
73
|
+
break;
|
74
|
+
}
|
75
|
+
if (dflt != NULL)
|
76
|
+
{
|
77
|
+
interact->result = dflt;
|
78
|
+
interact->len = strlen(dflt);
|
79
|
+
}
|
80
|
+
interact++;
|
81
|
+
}
|
23
82
|
return LDAP_SUCCESS;
|
24
83
|
}
|
25
84
|
|
26
85
|
/*
|
27
86
|
* call-seq:
|
28
|
-
* conn.sasl_bind(dn=nil, mech=nil, cred=nil, sctrls=nil, cctrls=nil) => self
|
29
|
-
* conn.sasl_bind(dn=nil, mech=nil, cred=nil, sctrls=nil, cctrls=nil)
|
87
|
+
* conn.sasl_bind(dn=nil, mech=nil, cred=nil, sctrls=nil, cctrls=nil, sasl_options=nil) => self
|
88
|
+
* conn.sasl_bind(dn=nil, mech=nil, cred=nil, sctrls=nil, cctrls=nil, sasl_options=nil)
|
30
89
|
* { |conn| } => nil
|
31
90
|
*
|
32
91
|
* Bind an LDAP connection, using the DN, +dn+, the mechanism, +mech+, and the
|
@@ -35,15 +94,19 @@ rb_ldap_sasl_interaction (LDAP * ld, unsigned flags, void *defaults, void *in)
|
|
35
94
|
* +sctrls+ is an array of server controls, whilst +cctrls+ is an array of
|
36
95
|
* client controls.
|
37
96
|
*
|
38
|
-
*
|
39
|
-
*
|
97
|
+
* sasl_options is a hash which should have the following keys:
|
98
|
+
*
|
99
|
+
* - +:authcid+ and +:authzid+ for alternate SASL authentication
|
100
|
+
* - +realm+ to specify the SASL realm
|
101
|
+
*
|
102
|
+
* If a block is given, +self+ is yielded to the block.
|
40
103
|
*/
|
41
104
|
VALUE
|
42
105
|
rb_ldap_conn_sasl_bind (int argc, VALUE argv[], VALUE self)
|
43
106
|
{
|
44
107
|
RB_LDAP_DATA *ldapdata;
|
45
108
|
|
46
|
-
VALUE arg1, arg2, arg3, arg4, arg5;
|
109
|
+
VALUE arg1, arg2, arg3, arg4, arg5, sasl_options = Qnil;
|
47
110
|
int version;
|
48
111
|
char *dn = NULL;
|
49
112
|
char *mechanism = NULL;
|
@@ -81,36 +144,26 @@ rb_ldap_conn_sasl_bind (int argc, VALUE argv[], VALUE self)
|
|
81
144
|
{
|
82
145
|
rb_raise (rb_eLDAP_Error, "already bound.");
|
83
146
|
};
|
84
|
-
|
147
|
+
|
148
|
+
switch (rb_scan_args (argc, argv, "24", &arg1, &arg2, &arg3, &arg4, &arg5, &sasl_options))
|
85
149
|
{
|
86
|
-
case
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
if (rb_iv_get (self, "@sasl_quiet") == Qtrue)
|
92
|
-
sasl_flags = LDAP_SASL_QUIET;
|
93
|
-
break;
|
94
|
-
case 3:
|
95
|
-
dn = StringValuePtr (arg1);
|
96
|
-
mechanism = StringValuePtr (arg2);
|
97
|
-
cred->bv_val = StringValueCStr (arg3);
|
98
|
-
cred->bv_len = RSTRING_LEN (arg3);
|
99
|
-
break;
|
150
|
+
case 6:
|
151
|
+
/* nothing. this requires credentials to be parsed first. we'll get defaults after arg-scanning */
|
152
|
+
case 5:
|
153
|
+
clientctrls = rb_ldap_get_controls (arg5);
|
154
|
+
/* down seems more likely */
|
100
155
|
case 4:
|
101
|
-
|
102
|
-
|
156
|
+
serverctrls = rb_ldap_get_controls (arg4);
|
157
|
+
/* down seems more likely */
|
158
|
+
case 3:
|
103
159
|
cred->bv_val = StringValueCStr (arg3);
|
104
160
|
cred->bv_len = RSTRING_LEN (arg3);
|
105
|
-
|
106
|
-
|
107
|
-
case 5:
|
161
|
+
/* down seems more likely */
|
162
|
+
case 2: /* don't need the cred for GSSAPI */
|
108
163
|
dn = StringValuePtr (arg1);
|
109
164
|
mechanism = StringValuePtr (arg2);
|
110
|
-
|
111
|
-
|
112
|
-
serverctrls = rb_ldap_get_controls (arg4);
|
113
|
-
clientctrls = rb_ldap_get_controls (arg5);
|
165
|
+
if (rb_iv_get (self, "@sasl_quiet") == Qtrue)
|
166
|
+
sasl_flags = LDAP_SASL_QUIET;
|
114
167
|
break;
|
115
168
|
default:
|
116
169
|
rb_bug ("rb_ldap_conn_bind_s");
|
@@ -129,7 +182,7 @@ rb_ldap_conn_sasl_bind (int argc, VALUE argv[], VALUE self)
|
|
129
182
|
ldapdata->err =
|
130
183
|
ldap_sasl_interactive_bind_s (ldapdata->ldap, dn, mechanism,
|
131
184
|
serverctrls, clientctrls, sasl_flags,
|
132
|
-
rb_ldap_sasl_interaction,
|
185
|
+
rb_ldap_sasl_interaction, (void*)sasl_options);
|
133
186
|
|
134
187
|
if (ldapdata->err == LDAP_SASL_BIND_IN_PROGRESS)
|
135
188
|
{
|
data/test/setup.rb
CHANGED
@@ -13,7 +13,7 @@ class TC_LDAPTest < Test::Unit::TestCase
|
|
13
13
|
# Get the LDAP host and base DN from /etc/ldap.conf.
|
14
14
|
def setup
|
15
15
|
unless @@conn && @@conn.bound?
|
16
|
-
File.open( '/etc/
|
16
|
+
File.open( '/etc/openldap/slapd.conf' ) do |f|
|
17
17
|
while line = f.gets
|
18
18
|
if line =~ /^host\s+(\S+)$/
|
19
19
|
@@host = $1
|
@@ -33,6 +33,6 @@ class TC_LDAPTest < Test::Unit::TestCase
|
|
33
33
|
end
|
34
34
|
end
|
35
35
|
|
36
|
-
undef_method :default_test
|
36
|
+
#undef_method :default_test
|
37
37
|
|
38
38
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ruby-ldap
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.9.
|
4
|
+
version: 0.9.11
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Alexey Chebotar
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2010-
|
12
|
+
date: 2010-03-15 00:00:00 +01:00
|
13
13
|
default_executable:
|
14
14
|
dependencies: []
|
15
15
|
|
@@ -30,44 +30,44 @@ files:
|
|
30
30
|
- NOTES
|
31
31
|
- README
|
32
32
|
- TODO
|
33
|
-
-
|
34
|
-
-
|
35
|
-
-
|
36
|
-
- test/
|
37
|
-
- test/
|
33
|
+
- lib/ldap/schema.rb
|
34
|
+
- lib/ldap/ldif.rb
|
35
|
+
- lib/ldap/control.rb
|
36
|
+
- test/add.rb
|
37
|
+
- test/misc1.rb
|
38
|
+
- test/modrdn.rb
|
39
|
+
- test/search3.rb
|
40
|
+
- test/add2.rb
|
38
41
|
- test/ts_ldap.rb
|
39
|
-
- test/
|
42
|
+
- test/delete.rb
|
40
43
|
- test/bind-ldaps.rb
|
41
|
-
- test/
|
42
|
-
- test/
|
44
|
+
- test/conf.rb
|
45
|
+
- test/tc_conn.rb
|
46
|
+
- test/search2.rb
|
47
|
+
- test/bind-sasl.rb
|
43
48
|
- test/tc_schema.rb
|
44
|
-
- test/tc_ldif.rb
|
45
|
-
- test/compare.rb
|
46
|
-
- test/search.rb
|
47
49
|
- test/ext.rb
|
48
|
-
- test/
|
49
|
-
- test/add2.rb
|
50
|
+
- test/setup.rb
|
50
51
|
- test/misc2.rb
|
52
|
+
- test/bind.rb
|
51
53
|
- test/subschema.rb
|
54
|
+
- test/search.rb
|
55
|
+
- test/tc_search.rb
|
56
|
+
- test/tc_ldif.rb
|
57
|
+
- test/compare.rb
|
58
|
+
- test/add3.rb
|
52
59
|
- test/bind-ssl.rb
|
53
|
-
-
|
54
|
-
- test/misc1.rb
|
55
|
-
- test/add.rb
|
56
|
-
- test/bind-sasl.rb
|
57
|
-
- test/modrdn.rb
|
58
|
-
- lib/ldap/control.rb
|
59
|
-
- lib/ldap/schema.rb
|
60
|
-
- lib/ldap/ldif.rb
|
61
|
-
- win/winldap.h
|
62
|
-
- win/winlber.h
|
60
|
+
- extconf.rb
|
63
61
|
- rbldap.h
|
64
|
-
-
|
62
|
+
- win/winlber.h
|
63
|
+
- win/winldap.h
|
64
|
+
- sslconn.c
|
65
65
|
- ldap.c
|
66
|
-
- entry.c
|
67
66
|
- conn.c
|
67
|
+
- entry.c
|
68
68
|
- mod.c
|
69
69
|
- saslconn.c
|
70
|
-
-
|
70
|
+
- misc.c
|
71
71
|
has_rdoc: true
|
72
72
|
homepage: http://ruby-ldap.sourceforge.net/
|
73
73
|
licenses: []
|