ruby-ldap 0.9.17 → 0.9.18
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/ChangeLog +5 -0
- data/NOTES +6 -0
- data/README +1 -1
- data/TODO +3 -0
- data/entry.c +105 -0
- data/extconf.rb +4 -3
- data/rbldap.h +15 -2
- data/test/add.rb +2 -3
- data/test/add2.rb +2 -3
- data/test/add3.rb +2 -3
- data/test/compare.rb +3 -5
- data/test/conf.rb +0 -2
- data/test/search.rb +8 -6
- metadata +8 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b6924c44fe913f0e2f2886a6d867e315a4c4d1d2
|
4
|
+
data.tar.gz: 78eb5ced76910731afc0ef06aed0f47440f5e943
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e8550110a3097ed2c36dc787dfe392de3c6b7bec9de5887729cff903ca390e82d34a3dd403098684d61f0db056ce637837a968ae1507f91467e705221daa3858
|
7
|
+
data.tar.gz: 3bff7856fbeec9d8b091d94571b9b396f110dfcfa8ed931fd26ef6e24d3db2ff4daa3bc43591b9221e0fbce3bdc582ee67dfab52b5baa0d8375b250b9a43d835
|
data/ChangeLog
CHANGED
@@ -1,3 +1,8 @@
|
|
1
|
+
Fri Mar 4 11:17:21 UTC 2016 Alexey Chebotar <alexey.chebotar@gmail.com>
|
2
|
+
* Version 0.9.18
|
3
|
+
* backout issue32 to compile for ruby-1.8.x.
|
4
|
+
Thanks to SUENAGA Hiroki.
|
5
|
+
|
1
6
|
Fri Feb 6 08:51:09 UTC 2015 Alexey Chebotar <alexey.chebotar@gmail.com>
|
2
7
|
* Version 0.9.17
|
3
8
|
* Use ruby object to keep LDAP search result instead of libldap's data structure.
|
data/NOTES
CHANGED
data/README
CHANGED
@@ -228,7 +228,7 @@ Here are some URLs that contain useful information about LDAP:
|
|
228
228
|
* Netscape Communications
|
229
229
|
http://developer.netscape.com/docs/manuals/communicator/ldap45.htm
|
230
230
|
* Netscape Directory SDK
|
231
|
-
|
231
|
+
https://wiki.mozilla.org/Directory
|
232
232
|
* Active Directory Service Interfaces Overview
|
233
233
|
http://www.microsoft.com/windows2000/techinfo/howitworks/activedirectory/
|
234
234
|
adsilinks.asp
|
data/TODO
CHANGED
data/entry.c
CHANGED
@@ -8,6 +8,7 @@
|
|
8
8
|
|
9
9
|
VALUE rb_cLDAP_Entry;
|
10
10
|
|
11
|
+
#if RUBY_VERSION_CODE >= 190
|
11
12
|
static void
|
12
13
|
rb_ldap_entry_mark(RB_LDAPENTRY_DATA *edata)
|
13
14
|
{
|
@@ -72,6 +73,7 @@ rb_ldap_entry_load_attr(LDAP *ldap, LDAPMessage *msg)
|
|
72
73
|
|
73
74
|
return hash;
|
74
75
|
}
|
76
|
+
#endif
|
75
77
|
|
76
78
|
void
|
77
79
|
rb_ldap_entry_free (RB_LDAPENTRY_DATA * edata)
|
@@ -86,13 +88,21 @@ rb_ldap_entry_new (LDAP * ldap, LDAPMessage * msg)
|
|
86
88
|
{
|
87
89
|
VALUE val;
|
88
90
|
RB_LDAPENTRY_DATA *edata;
|
91
|
+
#if RUBY_VERSION_CODE >= 190
|
89
92
|
char *c_dn;
|
93
|
+
#endif
|
90
94
|
|
95
|
+
#if RUBY_VERSION_CODE >= 190
|
91
96
|
val = Data_Make_Struct (rb_cLDAP_Entry, RB_LDAPENTRY_DATA,
|
92
97
|
rb_ldap_entry_mark, rb_ldap_entry_free, edata);
|
98
|
+
#else
|
99
|
+
val = Data_Make_Struct (rb_cLDAP_Entry, RB_LDAPENTRY_DATA,
|
100
|
+
0, rb_ldap_entry_free, edata);
|
101
|
+
#endif
|
93
102
|
edata->ldap = ldap;
|
94
103
|
edata->msg = msg;
|
95
104
|
|
105
|
+
#if RUBY_VERSION_CODE >= 190
|
96
106
|
/* get dn */
|
97
107
|
c_dn = ldap_get_dn(ldap, msg);
|
98
108
|
if (c_dn) {
|
@@ -105,6 +115,7 @@ rb_ldap_entry_new (LDAP * ldap, LDAPMessage * msg)
|
|
105
115
|
|
106
116
|
/* get attributes */
|
107
117
|
edata->attr = rb_ldap_entry_load_attr(ldap, msg);
|
118
|
+
#endif
|
108
119
|
return val;
|
109
120
|
}
|
110
121
|
|
@@ -117,10 +128,29 @@ VALUE
|
|
117
128
|
rb_ldap_entry_get_dn (VALUE self)
|
118
129
|
{
|
119
130
|
RB_LDAPENTRY_DATA *edata;
|
131
|
+
#if RUBY_VERSION_CODE < 190
|
132
|
+
char *cdn;
|
133
|
+
VALUE dn;
|
134
|
+
#endif
|
120
135
|
|
121
136
|
GET_LDAPENTRY_DATA (self, edata);
|
122
137
|
|
138
|
+
#if RUBY_VERSION_CODE < 190
|
139
|
+
cdn = ldap_get_dn (edata->ldap, edata->msg);
|
140
|
+
if (cdn)
|
141
|
+
{
|
142
|
+
dn = rb_tainted_str_new2 (cdn);
|
143
|
+
ldap_memfree (cdn);
|
144
|
+
}
|
145
|
+
else
|
146
|
+
{
|
147
|
+
dn = Qnil;
|
148
|
+
}
|
149
|
+
|
150
|
+
return dn;
|
151
|
+
#else
|
123
152
|
return edata->dn;
|
153
|
+
#endif
|
124
154
|
}
|
125
155
|
|
126
156
|
/*
|
@@ -136,10 +166,40 @@ VALUE
|
|
136
166
|
rb_ldap_entry_get_values (VALUE self, VALUE attr)
|
137
167
|
{
|
138
168
|
RB_LDAPENTRY_DATA *edata;
|
169
|
+
#if RUBY_VERSION_CODE < 190
|
170
|
+
char *c_attr;
|
171
|
+
struct berval **c_vals;
|
172
|
+
int i;
|
173
|
+
int count;
|
174
|
+
VALUE vals;
|
175
|
+
#endif
|
139
176
|
|
140
177
|
GET_LDAPENTRY_DATA (self, edata);
|
178
|
+
#if RUBY_VERSION_CODE < 190
|
179
|
+
c_attr = StringValueCStr (attr);
|
180
|
+
|
181
|
+
c_vals = ldap_get_values_len (edata->ldap, edata->msg, c_attr);
|
182
|
+
if (c_vals)
|
183
|
+
{
|
184
|
+
vals = rb_ary_new ();
|
185
|
+
count = ldap_count_values_len (c_vals);
|
186
|
+
for (i = 0; i < count; i++)
|
187
|
+
{
|
188
|
+
VALUE str;
|
189
|
+
str = rb_tainted_str_new (c_vals[i]->bv_val, c_vals[i]->bv_len);
|
190
|
+
rb_ary_push (vals, str);
|
191
|
+
}
|
192
|
+
ldap_value_free_len (c_vals);
|
193
|
+
}
|
194
|
+
else
|
195
|
+
{
|
196
|
+
vals = Qnil;
|
197
|
+
}
|
141
198
|
|
199
|
+
return vals;
|
200
|
+
#else
|
142
201
|
return rb_hash_aref(edata->attr, attr);
|
202
|
+
#endif
|
143
203
|
}
|
144
204
|
|
145
205
|
/*
|
@@ -153,16 +213,41 @@ VALUE
|
|
153
213
|
rb_ldap_entry_get_attributes (VALUE self)
|
154
214
|
{
|
155
215
|
RB_LDAPENTRY_DATA *edata;
|
216
|
+
#if RUBY_VERSION_CODE < 190
|
217
|
+
VALUE vals;
|
218
|
+
char *attr;
|
219
|
+
BerElement *ber = NULL;
|
220
|
+
#else
|
156
221
|
VALUE attrs;
|
222
|
+
#endif
|
157
223
|
|
158
224
|
GET_LDAPENTRY_DATA (self, edata);
|
159
225
|
|
226
|
+
#if RUBY_VERSION_CODE < 190
|
227
|
+
vals = rb_ary_new ();
|
228
|
+
for (attr = ldap_first_attribute (edata->ldap, edata->msg, &ber);
|
229
|
+
attr != NULL;
|
230
|
+
attr = ldap_next_attribute (edata->ldap, edata->msg, ber))
|
231
|
+
{
|
232
|
+
rb_ary_push (vals, rb_tainted_str_new2 (attr));
|
233
|
+
ldap_memfree(attr);
|
234
|
+
}
|
235
|
+
|
236
|
+
#if !defined(USE_OPENLDAP1)
|
237
|
+
if( ber != NULL ){
|
238
|
+
ber_free(ber, 0);
|
239
|
+
}
|
240
|
+
#endif
|
241
|
+
|
242
|
+
return vals;
|
243
|
+
#else
|
160
244
|
attrs = rb_funcall(edata->attr, rb_intern("keys"), 0);
|
161
245
|
if (TYPE(attrs) != T_ARRAY) {
|
162
246
|
return Qnil;
|
163
247
|
}
|
164
248
|
|
165
249
|
return attrs;
|
250
|
+
#endif
|
166
251
|
}
|
167
252
|
|
168
253
|
/*
|
@@ -174,13 +259,33 @@ rb_ldap_entry_get_attributes (VALUE self)
|
|
174
259
|
VALUE
|
175
260
|
rb_ldap_entry_to_hash (VALUE self)
|
176
261
|
{
|
262
|
+
#if RUBY_VERSION_CODE < 190
|
263
|
+
VALUE attrs = rb_ldap_entry_get_attributes (self);
|
264
|
+
VALUE hash = rb_hash_new ();
|
265
|
+
VALUE attr, vals;
|
266
|
+
int i;
|
267
|
+
#else
|
177
268
|
RB_LDAPENTRY_DATA *edata;
|
178
269
|
VALUE hash, dn_ary;
|
270
|
+
#endif
|
179
271
|
|
272
|
+
#if RUBY_VERSION_CODE < 190
|
273
|
+
Check_Type (attrs, T_ARRAY);
|
274
|
+
rb_hash_aset (hash, rb_tainted_str_new2 ("dn"),
|
275
|
+
rb_ary_new3 (1, rb_ldap_entry_get_dn (self)));
|
276
|
+
for (i = 0; i < RARRAY_LEN (attrs); i++)
|
277
|
+
{
|
278
|
+
attr = rb_ary_entry (attrs, i);
|
279
|
+
vals = rb_ldap_entry_get_values (self, attr);
|
280
|
+
rb_hash_aset (hash, attr, vals);
|
281
|
+
}
|
282
|
+
#else
|
180
283
|
GET_LDAPENTRY_DATA (self, edata);
|
181
284
|
hash = rb_hash_dup(edata->attr);
|
182
285
|
dn_ary = rb_ary_new3(1, edata->dn);
|
183
286
|
rb_hash_aset(hash, rb_tainted_str_new2("dn"), dn_ary);
|
287
|
+
#endif
|
288
|
+
|
184
289
|
return hash;
|
185
290
|
}
|
186
291
|
|
data/extconf.rb
CHANGED
@@ -235,6 +235,7 @@ for l in [$libcrypto, $libssl, $libnsl, $libpthread, $libresolv,
|
|
235
235
|
end
|
236
236
|
|
237
237
|
have_func("ldap_init", 'ldap.h')
|
238
|
+
have_func('rb_hash_dup')
|
238
239
|
have_func("ldap_set_option")
|
239
240
|
have_func("ldap_get_option")
|
240
241
|
have_func("ldap_start_tls_s") if $use_openldap2
|
@@ -260,12 +261,12 @@ $defs << "-DRUBY_VERSION_CODE=#{RUBY_VERSION.gsub(/\D/, '')}"
|
|
260
261
|
create_makefile("ldap")
|
261
262
|
|
262
263
|
|
263
|
-
$slapd = ldap_with_config("slapd") || File.join(
|
264
|
+
$slapd = ldap_with_config("slapd") || File.join("/usr","libexec","slapd")
|
264
265
|
$schema_dir = ldap_with_config("schema-dir")
|
265
266
|
if( !$schema_dir )
|
266
|
-
$schema_dir = File.join(
|
267
|
+
$schema_dir = File.join("/etc","openldap","schema")
|
267
268
|
if( !File.exist?($schema_dir) )
|
268
|
-
$schema_dir = File.join(
|
269
|
+
$schema_dir = File.join("/etc","openldap")
|
269
270
|
end
|
270
271
|
end
|
271
272
|
|
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 18
|
31
|
+
#define RB_LDAP_VERSION "0.9.18"
|
32
32
|
|
33
33
|
#define LDAP_GET_OPT_MAX_BUFFER_SIZE (1024) /* >= sizeof(LDAPAPIInfo) */
|
34
34
|
|
@@ -55,8 +55,10 @@ typedef struct rb_ldapentry_data
|
|
55
55
|
{
|
56
56
|
LDAP *ldap;
|
57
57
|
LDAPMessage *msg;
|
58
|
+
#if RUBY_VERSION_CODE >= 190
|
58
59
|
VALUE dn;
|
59
60
|
VALUE attr;
|
61
|
+
#endif
|
60
62
|
} RB_LDAPENTRY_DATA;
|
61
63
|
|
62
64
|
typedef struct rb_ldapmod_data
|
@@ -171,9 +173,20 @@ VALUE rb_ldap_mod_vals (VALUE);
|
|
171
173
|
}; \
|
172
174
|
}
|
173
175
|
|
176
|
+
#if RUBY_VERSION_CODE < 190
|
174
177
|
#define GET_LDAPENTRY_DATA(obj,ptr) { \
|
175
178
|
Data_Get_Struct(obj, struct rb_ldapentry_data, ptr); \
|
179
|
+
if( ! ptr->msg ){ \
|
180
|
+
VALUE value = rb_inspect(obj); \
|
181
|
+
rb_raise(rb_eLDAP_InvalidEntryError, "%s is not a valid entry", \
|
182
|
+
StringValuePtr(value)); \
|
183
|
+
}; \
|
176
184
|
}
|
185
|
+
#else
|
186
|
+
#define GET_LDAPENTRY_DATA(obj,ptr) { \
|
187
|
+
Data_Get_Struct(obj, struct rb_ldapentry_data, ptr); \
|
188
|
+
}
|
189
|
+
#endif
|
177
190
|
|
178
191
|
#define GET_LDAPMOD_DATA(obj,ptr) {\
|
179
192
|
Data_Get_Struct(obj, struct rb_ldapmod_data, ptr); \
|
data/test/add.rb
CHANGED
@@ -1,9 +1,8 @@
|
|
1
1
|
# -*- ruby -*-
|
2
2
|
# This file is a part of test scripts of LDAP extension module.
|
3
3
|
|
4
|
-
|
5
|
-
require
|
6
|
-
require "./ldap"
|
4
|
+
require './ldap'
|
5
|
+
require './test/conf'
|
7
6
|
|
8
7
|
conn = LDAP::Conn.new($HOST, $PORT)
|
9
8
|
conn.bind('cn=root, dc=localhost, dc=localdomain','secret'){
|
data/test/add2.rb
CHANGED
@@ -1,9 +1,8 @@
|
|
1
1
|
# -*- ruby -*-
|
2
2
|
# This file is a part of test scripts of LDAP extension module.
|
3
3
|
|
4
|
-
|
5
|
-
require
|
6
|
-
require "./ldap"
|
4
|
+
require './ldap'
|
5
|
+
require './test/conf'
|
7
6
|
|
8
7
|
conn = LDAP::Conn.new($HOST, $PORT)
|
9
8
|
conn.bind('cn=root, dc=localhost, dc=localdomain','secret'){
|
data/test/add3.rb
CHANGED
data/test/compare.rb
CHANGED
@@ -1,15 +1,13 @@
|
|
1
1
|
# -*- ruby -*-
|
2
2
|
# This file is a part of test scripts of LDAP extension module.
|
3
3
|
|
4
|
-
|
5
|
-
require
|
6
|
-
require "./ldap"
|
4
|
+
require './ldap'
|
5
|
+
require './test/conf'
|
7
6
|
|
8
7
|
LDAP::Conn.new($HOST, $PORT).bind{|conn|
|
9
8
|
conn.perror("bind")
|
10
9
|
begin
|
11
|
-
conn.compare("cn=Takaaki Tateishi, dc=localhost, dc=localdomain",
|
12
|
-
"cn", "Takaaki Tateishi")
|
10
|
+
conn.compare("cn=Takaaki Tateishi, dc=localhost, dc=localdomain", "cn", "Takaaki Tateishi")
|
13
11
|
rescue LDAP::ResultError
|
14
12
|
exit(0)
|
15
13
|
end
|
data/test/conf.rb
CHANGED
data/test/search.rb
CHANGED
@@ -5,16 +5,18 @@ $test = File.dirname($0)
|
|
5
5
|
require "#{$test}/conf"
|
6
6
|
require "./ldap"
|
7
7
|
|
8
|
-
LDAP::Conn.new($HOST, $PORT).bind
|
8
|
+
LDAP::Conn.new($HOST, $PORT).bind do |conn|
|
9
9
|
conn.perror("bind")
|
10
10
|
begin
|
11
|
-
conn.search(
|
12
|
-
|
13
|
-
|
11
|
+
conn.search(
|
12
|
+
"dc=localhost, dc=localdomain",
|
13
|
+
LDAP::LDAP_SCOPE_SUBTREE,
|
14
|
+
"(objectclass=*)"
|
15
|
+
) do |e|
|
14
16
|
p e.vals("cn")
|
15
17
|
p e.to_hash()
|
16
|
-
|
18
|
+
end
|
17
19
|
rescue LDAP::ResultError => msg
|
18
20
|
$stderr.print(msg)
|
19
21
|
end
|
20
|
-
|
22
|
+
end
|
metadata
CHANGED
@@ -1,17 +1,20 @@
|
|
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.18
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Alexey Chebotar
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2016-03-04 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
|
-
description:
|
14
|
-
|
13
|
+
description: 'It provides the interface to some LDAP libraries (e.g. OpenLDAP, Netscape
|
14
|
+
SDK and Active Directory). The common API for application development is described
|
15
|
+
in RFC1823 and is supported by Ruby/LDAP.
|
16
|
+
|
17
|
+
'
|
15
18
|
email: alexey.chebotar@gmail.com
|
16
19
|
executables: []
|
17
20
|
extensions:
|
@@ -84,9 +87,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
84
87
|
version: '0'
|
85
88
|
requirements: []
|
86
89
|
rubyforge_project: ruby-ldap
|
87
|
-
rubygems_version: 2.
|
90
|
+
rubygems_version: 2.5.1
|
88
91
|
signing_key:
|
89
92
|
specification_version: 4
|
90
93
|
summary: Ruby/LDAP is an extension module for Ruby
|
91
94
|
test_files: []
|
92
|
-
has_rdoc: true
|