net-smb 0.0.4 → 0.0.5
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/.gitignore +4 -0
- data/CHANGES +3 -0
- data/README.md +1 -1
- data/ext/net_smb/rb_smb.h +3 -1
- data/ext/net_smb/smb.c +22 -2
- data/ext/net_smb/smbdir.c +14 -6
- data/ext/net_smb/smbdirentry.c +1 -1
- data/ext/net_smb/smbfile.c +17 -7
- data/ext/net_smb/smbstat.c +5 -5
- data/lib/net/smb/version.rb +1 -1
- data/test/etc/smb.conf +1 -0
- data/test/test_net_smb.rb +18 -0
- metadata +2 -2
data/.gitignore
CHANGED
data/CHANGES
CHANGED
data/README.md
CHANGED
@@ -23,7 +23,7 @@ Development Resources
|
|
23
23
|
Copyright
|
24
24
|
----------------------------------------------------------------------
|
25
25
|
|
26
|
-
Copyright (C) 2013 SATOH Fumiyas @ OSS Technology Corp., Japan
|
26
|
+
Copyright (C) 2012-2013 SATOH Fumiyas @ OSS Technology Corp., Japan
|
27
27
|
|
28
28
|
Licensed under the GNU General Public License version 3
|
29
29
|
|
data/ext/net_smb/rb_smb.h
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
/*
|
2
2
|
* Ruby/Net::SMB - SMB/CIFS client (Samba libsmbclient binding) for Ruby
|
3
3
|
* Common header for Net::SMB
|
4
|
-
* Copyright (C) 2012 SATOH Fumiyas @ OSS Technology Corp., Japan
|
4
|
+
* Copyright (C) 2012-2013 SATOH Fumiyas @ OSS Technology Corp., Japan
|
5
5
|
*
|
6
6
|
* This program is free software; you can redistribute it and/or modify
|
7
7
|
* it under the terms of the GNU General Public License as published by
|
@@ -112,6 +112,8 @@ void Init_net_smbdir(void);
|
|
112
112
|
void Init_net_smbdirentry(void);
|
113
113
|
void Init_net_smbfile(void);
|
114
114
|
|
115
|
+
VALUE rb_smb_xattr_get(VALUE self, VALUE url_obj, VALUE name_obj);
|
116
|
+
|
115
117
|
#define _RB_SMB_H_
|
116
118
|
|
117
119
|
#endif /* _RB_SMB_H_ */
|
data/ext/net_smb/smb.c
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
/*
|
2
2
|
* Ruby/Net::SMB - SMB/CIFS client (Samba libsmbclient binding) for Ruby
|
3
3
|
* Net::SMB class
|
4
|
-
* Copyright (C) 2012 SATOH Fumiyas @ OSS Technology Corp., Japan
|
4
|
+
* Copyright (C) 2012-2013 SATOH Fumiyas @ OSS Technology Corp., Japan
|
5
5
|
*
|
6
6
|
* This program is free software; you can redistribute it and/or modify
|
7
7
|
* it under the terms of the GNU General Public License as published by
|
@@ -23,6 +23,8 @@
|
|
23
23
|
VALUE rb_cSMB;
|
24
24
|
VALUE rb_eSMBError;
|
25
25
|
|
26
|
+
static ID id_call;
|
27
|
+
|
26
28
|
/* ====================================================================== */
|
27
29
|
|
28
30
|
static void smbcctx_auth_fn(SMBCCTX *smbcctx,
|
@@ -43,7 +45,7 @@ static void smbcctx_auth_fn(SMBCCTX *smbcctx,
|
|
43
45
|
}
|
44
46
|
|
45
47
|
cred_obj = rb_funcall(data->auth_callback,
|
46
|
-
|
48
|
+
id_call, 2,
|
47
49
|
rb_str_new2(server),
|
48
50
|
rb_str_new2(share));
|
49
51
|
|
@@ -268,6 +270,21 @@ static VALUE rb_smb_open(int argc, VALUE *argv, VALUE self)
|
|
268
270
|
return smbfile;
|
269
271
|
}
|
270
272
|
|
273
|
+
VALUE rb_smb_xattr_get(VALUE self, VALUE url_obj, VALUE name_obj)
|
274
|
+
{
|
275
|
+
RB_SMB_DATA_FROM_OBJ(self, data);
|
276
|
+
const char *url = RSTRING_PTR(url_obj);
|
277
|
+
const char *name = RSTRING_PTR(name_obj);
|
278
|
+
char value[1024];
|
279
|
+
|
280
|
+
smbc_getxattr_fn fn = smbc_getFunctionGetxattr(data->smbcctx);
|
281
|
+
|
282
|
+
if ((*fn)(data->smbcctx, url, name, value, sizeof(value)) < 0) {
|
283
|
+
rb_sys_fail_str(url_obj);
|
284
|
+
}
|
285
|
+
|
286
|
+
return rb_str_new2(value);
|
287
|
+
}
|
271
288
|
|
272
289
|
/* ====================================================================== */
|
273
290
|
|
@@ -288,10 +305,13 @@ void Init_net_smb(void)
|
|
288
305
|
rb_define_method(rb_cSMB, "stat", rb_smb_stat, 1);
|
289
306
|
rb_define_method(rb_cSMB, "opendir", rb_smb_opendir, 1);
|
290
307
|
rb_define_method(rb_cSMB, "open", rb_smb_open, -1);
|
308
|
+
rb_define_method(rb_cSMB, "xattr", rb_smb_xattr_get, 2);
|
291
309
|
|
292
310
|
/* Net::SMB::Error */
|
293
311
|
rb_eSMBError = rb_define_class_under(rb_cSMB, "Error", rb_eStandardError);
|
294
312
|
|
313
|
+
id_call = rb_intern("call");
|
314
|
+
|
295
315
|
const char *smbc_ver = smbc_version();
|
296
316
|
int smbc_ver_major = atoi(smbc_ver);
|
297
317
|
int smbc_ver_minor = (smbc_ver = strchr(smbc_ver, '.')) ? atoi(++smbc_ver) : 0;
|
data/ext/net_smb/smbdir.c
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
/*
|
2
2
|
* Ruby/Net::SMB - SMB/CIFS client (Samba libsmbclient binding) for Ruby
|
3
3
|
* Net::SMB::Dir class
|
4
|
-
* Copyright (C) 2012 SATOH Fumiyas @ OSS Technology Corp., Japan
|
4
|
+
* Copyright (C) 2012-2013 SATOH Fumiyas @ OSS Technology Corp., Japan
|
5
5
|
*
|
6
6
|
* This program is free software; you can redistribute it and/or modify
|
7
7
|
* it under the terms of the GNU General Public License as published by
|
@@ -41,7 +41,7 @@ static void rb_smbdir_close_by_data(RB_SMBFILE_DATA *data)
|
|
41
41
|
smbc_closedir_fn fn = smbc_getFunctionClosedir(data->smbcctx);
|
42
42
|
|
43
43
|
if ((*fn)(data->smbcctx, data->smbcfile) != 0) {
|
44
|
-
rb_sys_fail(
|
44
|
+
rb_sys_fail(data->url);
|
45
45
|
}
|
46
46
|
}
|
47
47
|
|
@@ -94,7 +94,7 @@ static VALUE rb_smbdir_initialize(VALUE self, VALUE smb_obj, VALUE url_obj)
|
|
94
94
|
fn = smbc_getFunctionOpendir(smb_data->smbcctx);
|
95
95
|
data->smbcfile = (*fn)(smb_data->smbcctx, url);
|
96
96
|
if (data->smbcfile == NULL) {
|
97
|
-
|
97
|
+
rb_sys_fail_str(url_obj);
|
98
98
|
}
|
99
99
|
|
100
100
|
/* FIXME: Take encoding from argument */
|
@@ -156,6 +156,13 @@ static VALUE rb_smbdir_stat(VALUE self)
|
|
156
156
|
return rb_class_new_instance(1, &self, rb_cSMBStat);
|
157
157
|
}
|
158
158
|
|
159
|
+
static VALUE rb_smbdir_xattr_get(VALUE self, VALUE name_obj)
|
160
|
+
{
|
161
|
+
RB_SMBFILE_DATA_FROM_OBJ(self, data);
|
162
|
+
|
163
|
+
return rb_smb_xattr_get(data->smb_obj, rb_str_new2(data->url), name_obj);
|
164
|
+
}
|
165
|
+
|
159
166
|
static VALUE rb_smbdir_tell(VALUE self)
|
160
167
|
{
|
161
168
|
RB_SMBFILE_DATA_FROM_OBJ(self, data);
|
@@ -169,7 +176,7 @@ static VALUE rb_smbdir_tell(VALUE self)
|
|
169
176
|
offset = (*fn)(data->smbcctx, data->smbcfile);
|
170
177
|
if (offset == (off_t)-1) {
|
171
178
|
if (errno != 0) {
|
172
|
-
rb_sys_fail(
|
179
|
+
rb_sys_fail(data->url);
|
173
180
|
}
|
174
181
|
}
|
175
182
|
|
@@ -187,7 +194,7 @@ static VALUE rb_smbdir_seek(VALUE self, VALUE offset_num)
|
|
187
194
|
|
188
195
|
errno = 0;
|
189
196
|
if ((*fn)(data->smbcctx, data->smbcfile, offset) == -1) {
|
190
|
-
rb_sys_fail(
|
197
|
+
rb_sys_fail(data->url);
|
191
198
|
}
|
192
199
|
|
193
200
|
return self;
|
@@ -212,7 +219,7 @@ static VALUE rb_smbdir_read(VALUE self)
|
|
212
219
|
|
213
220
|
if (smbcdent == NULL) {
|
214
221
|
if (errno) {
|
215
|
-
rb_sys_fail(
|
222
|
+
rb_sys_fail(data->url);
|
216
223
|
}
|
217
224
|
|
218
225
|
return Qnil;
|
@@ -259,6 +266,7 @@ void Init_net_smbdir(void)
|
|
259
266
|
rb_define_method(rb_cSMBDir, "close", rb_smbdir_close, 0);
|
260
267
|
rb_define_method(rb_cSMBDir, "closed?", rb_smbdir_closed_p, 0);
|
261
268
|
rb_define_method(rb_cSMBDir, "stat", rb_smbdir_stat, 0);
|
269
|
+
rb_define_method(rb_cSMBDir, "xattr", rb_smbdir_xattr_get, 1);
|
262
270
|
rb_define_method(rb_cSMBDir, "tell", rb_smbdir_tell, 0);
|
263
271
|
rb_define_alias(rb_cSMBDir, "pos", "tell");
|
264
272
|
rb_define_method(rb_cSMBDir, "seek", rb_smbdir_seek, 1);
|
data/ext/net_smb/smbdirentry.c
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
/*
|
2
2
|
* Ruby/Net::SMB - SMB/CIFS client (Samba libsmbclient binding) for Ruby
|
3
3
|
* Net::SMB::DirEntry class
|
4
|
-
* Copyright (C) 2012 SATOH Fumiyas @ OSS Technology Corp., Japan
|
4
|
+
* Copyright (C) 2012-2013 SATOH Fumiyas @ OSS Technology Corp., Japan
|
5
5
|
*
|
6
6
|
* This program is free software; you can redistribute it and/or modify
|
7
7
|
* it under the terms of the GNU General Public License as published by
|
data/ext/net_smb/smbfile.c
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
/*
|
2
2
|
* Ruby/Net::SMB - SMB/CIFS client (Samba libsmbclient binding) for Ruby
|
3
3
|
* Net::SMB::File class
|
4
|
-
* Copyright (C) 2012 SATOH Fumiyas @ OSS Technology Corp., Japan
|
4
|
+
* Copyright (C) 2012-2013 SATOH Fumiyas @ OSS Technology Corp., Japan
|
5
5
|
*
|
6
6
|
* This program is free software; you can redistribute it and/or modify
|
7
7
|
* it under the terms of the GNU General Public License as published by
|
@@ -42,7 +42,7 @@ static void rb_smbfile_close_by_data(RB_SMBFILE_DATA *data)
|
|
42
42
|
smbc_close_fn fn = smbc_getFunctionClose(data->smbcctx);
|
43
43
|
|
44
44
|
if ((*fn)(data->smbcctx, data->smbcfile) != 0) {
|
45
|
-
rb_sys_fail(
|
45
|
+
rb_sys_fail(data->url);
|
46
46
|
}
|
47
47
|
}
|
48
48
|
|
@@ -86,7 +86,7 @@ static void rb_smbfile_open_by_data(RB_SMBFILE_DATA *data)
|
|
86
86
|
|
87
87
|
data->smbcfile = (*fn)(data->smbcctx, data->url, data->oflags, 0);
|
88
88
|
if (data->smbcfile == NULL) {
|
89
|
-
rb_sys_fail(
|
89
|
+
rb_sys_fail(data->url);
|
90
90
|
}
|
91
91
|
|
92
92
|
RB_SMB_DEBUG("smbcctx=%p smbcfile=%p\n", data->smbcctx, data->smbcfile);
|
@@ -97,7 +97,7 @@ static void rb_smbfile_seek_by_data(RB_SMBFILE_DATA *data)
|
|
97
97
|
smbc_lseek_fn fn = smbc_getFunctionLseek(data->smbcctx);
|
98
98
|
|
99
99
|
if ((*fn)(data->smbcctx, data->smbcfile, data->pos, SEEK_SET) == -1) {
|
100
|
-
rb_sys_fail(
|
100
|
+
rb_sys_fail(data->url);
|
101
101
|
}
|
102
102
|
|
103
103
|
data->buffer_used_size = 0;
|
@@ -240,6 +240,13 @@ static VALUE rb_smbfile_stat(VALUE self)
|
|
240
240
|
return rb_class_new_instance(1, &self, rb_cSMBStat);
|
241
241
|
}
|
242
242
|
|
243
|
+
static VALUE rb_smbfile_xattr_get(VALUE self, VALUE name_obj)
|
244
|
+
{
|
245
|
+
RB_SMBFILE_DATA_FROM_OBJ(self, data);
|
246
|
+
|
247
|
+
return rb_smb_xattr_get(data->smb_obj, rb_str_new2(data->url), name_obj);
|
248
|
+
}
|
249
|
+
|
243
250
|
static VALUE rb_smbfile_pos(VALUE self)
|
244
251
|
{
|
245
252
|
RB_SMBFILE_DATA_FROM_OBJ(self, data);
|
@@ -265,15 +272,17 @@ static VALUE rb_smbfile_seek(int argc, VALUE *argv, VALUE self)
|
|
265
272
|
case SEEK_CUR:
|
266
273
|
if (offset < 0 && offset < -data->pos) {
|
267
274
|
errno = EINVAL;
|
268
|
-
rb_sys_fail(
|
275
|
+
rb_sys_fail(data->url);
|
269
276
|
}
|
270
277
|
data->pos += offset;
|
271
278
|
break;
|
272
279
|
case SEEK_END:
|
273
|
-
|
280
|
+
/* FIXME */
|
281
|
+
rb_raise(rb_eNotImpError, "SEEK_END");
|
274
282
|
break;
|
275
283
|
default:
|
276
|
-
|
284
|
+
errno = EINVAL;
|
285
|
+
rb_sys_fail(data->url);
|
277
286
|
break;
|
278
287
|
}
|
279
288
|
|
@@ -388,6 +397,7 @@ void Init_net_smbfile(void)
|
|
388
397
|
rb_define_method(rb_cSMBFile, "close", rb_smbfile_close, 0);
|
389
398
|
rb_define_method(rb_cSMBFile, "closed?", rb_smbfile_closed_p, 0);
|
390
399
|
rb_define_method(rb_cSMBFile, "stat", rb_smbfile_stat, 0);
|
400
|
+
rb_define_method(rb_cSMBFile, "xattr", rb_smbfile_xattr_get, 1);
|
391
401
|
rb_define_method(rb_cSMBFile, "pos", rb_smbfile_pos, 0);
|
392
402
|
rb_define_alias(rb_cSMBFile, "tell", "pos");
|
393
403
|
rb_define_method(rb_cSMBFile, "seek", rb_smbfile_seek, -1);
|
data/ext/net_smb/smbstat.c
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
/*
|
2
2
|
* Ruby/Net::SMB - SMB/CIFS client (Samba libsmbclient binding) for Ruby
|
3
3
|
* Net::SMB::Stat class
|
4
|
-
* Copyright (C) 2012 SATOH Fumiyas @ OSS Technology Corp., Japan
|
4
|
+
* Copyright (C) 2012-2013 SATOH Fumiyas @ OSS Technology Corp., Japan
|
5
5
|
*
|
6
6
|
* This program is free software; you can redistribute it and/or modify
|
7
7
|
* it under the terms of the GNU General Public License as published by
|
@@ -70,7 +70,7 @@ static VALUE rb_smbstat_initialize(int argc, VALUE *argv, VALUE self)
|
|
70
70
|
const char *url = StringValueCStr(url_obj);
|
71
71
|
smbc_stat_fn fn = smbc_getFunctionStat(smb_data->smbcctx);
|
72
72
|
if ((*fn)(smb_data->smbcctx, url, &data->stat)) {
|
73
|
-
|
73
|
+
rb_sys_fail_str(url_obj);
|
74
74
|
}
|
75
75
|
}
|
76
76
|
else if (rb_obj_is_kind_of(smb_or_file_obj, rb_cSMBFile)) {
|
@@ -78,7 +78,7 @@ static VALUE rb_smbstat_initialize(int argc, VALUE *argv, VALUE self)
|
|
78
78
|
smbc_fstat_fn fn = smbc_getFunctionFstat(smbfile_data->smbcctx);
|
79
79
|
|
80
80
|
if ((*fn)(smbfile_data->smbcctx, smbfile_data->smbcfile, &data->stat)) {
|
81
|
-
rb_sys_fail(
|
81
|
+
rb_sys_fail(smbfile_data->url);
|
82
82
|
}
|
83
83
|
}
|
84
84
|
else if (rb_obj_is_kind_of(smb_or_file_obj, rb_cSMBDir)) {
|
@@ -91,12 +91,12 @@ static VALUE rb_smbstat_initialize(int argc, VALUE *argv, VALUE self)
|
|
91
91
|
smbc_fstatdir_fn fn = smbc_getFunctionFstatdir(smbfile_data->smbcctx);
|
92
92
|
|
93
93
|
if ((*fn)(smbfile_data->smbcctx, smbfile_data->smbcfile, &data->stat)) {
|
94
|
-
rb_sys_fail(
|
94
|
+
rb_sys_fail(smbfile_data->url);
|
95
95
|
}
|
96
96
|
#else
|
97
97
|
smbc_stat_fn fn = smbc_getFunctionStat(smbfile_data->smbcctx);
|
98
98
|
if ((*fn)(smbfile_data->smbcctx, smbfile_data->url, &data->stat)) {
|
99
|
-
rb_sys_fail(
|
99
|
+
rb_sys_fail(smbfile_data->url);
|
100
100
|
}
|
101
101
|
#endif
|
102
102
|
}
|
data/lib/net/smb/version.rb
CHANGED
data/test/etc/smb.conf
CHANGED
data/test/test_net_smb.rb
CHANGED
@@ -415,6 +415,24 @@ class SMBTest < Test::Unit::TestCase
|
|
415
415
|
end
|
416
416
|
end
|
417
417
|
|
418
|
+
def test_smb_xattr
|
419
|
+
smb = self.smb
|
420
|
+
|
421
|
+
owner = "LOCALHOST\\#{@@username}"
|
422
|
+
|
423
|
+
smb.opendir(@@share_public) do |smbdir|
|
424
|
+
while dent = smbdir.read
|
425
|
+
next if (dent.name =~ /^\.\.?$/)
|
426
|
+
next if (dent.name =~ /\.noaccess$/)
|
427
|
+
|
428
|
+
assert_equal(owner, smb.xattr(dent.url, 'system.nt_sec_desc.owner+'))
|
429
|
+
assert_raise(Errno::EINVAL) do
|
430
|
+
assert_equal(owner, smb.xattr(dent.url, 'invalid-xattr-name'))
|
431
|
+
end
|
432
|
+
end
|
433
|
+
end
|
434
|
+
end
|
435
|
+
|
418
436
|
def test_file_open_read_close
|
419
437
|
smb = self.smb
|
420
438
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: net-smb
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.5
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-
|
12
|
+
date: 2013-03-08 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rake-compiler
|