rkeychain 0.1.0 → 0.2.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.
- data/CHANGELOG +6 -0
- data/VERSION +1 -1
- data/ext/rkeychain.c +44 -8
- metadata +48 -41
data/CHANGELOG
CHANGED
@@ -1,5 +1,11 @@
|
|
1
1
|
= CHANGELOG
|
2
2
|
|
3
|
+
== Version 0.2.0
|
4
|
+
* Use rb_str_new to avoid problems with strings that are not null-terminated.
|
5
|
+
* Support for secure notes.
|
6
|
+
|
7
|
+
Thanks to Dave Vasilevsky (djvasi |at| gmail.com) for these new features!
|
8
|
+
|
3
9
|
== Version 0.1.0
|
4
10
|
|
5
11
|
Initial release.
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
0.2.0
|
data/ext/rkeychain.c
CHANGED
@@ -34,7 +34,7 @@ static VALUE __s_generic_passwd(VALUE self,
|
|
34
34
|
&passwordLength, &passwordData, NULL);
|
35
35
|
|
36
36
|
if (status == noErr) {
|
37
|
-
str =
|
37
|
+
str = rb_str_new(passwordData, passwordLength);
|
38
38
|
SecKeychainItemFreeContent(NULL, passwordData);
|
39
39
|
}
|
40
40
|
else {
|
@@ -81,9 +81,40 @@ static VALUE s_lookup_generic_passwd(VALUE self, VALUE hash)
|
|
81
81
|
return __s_generic_passwd(self, keychain, serviceName, accountName);
|
82
82
|
}
|
83
83
|
|
84
|
+
/*
|
85
|
+
* On success the lookup returns the *first* secure note which
|
86
|
+
* matches the specified query else it returns nil.
|
87
|
+
* Unless you granted the application permanent access to a keychain,
|
88
|
+
* a dialog window will appear, asking for permission to read
|
89
|
+
* the password information from it.
|
90
|
+
*
|
91
|
+
* A hash with the following key/values is accepted:
|
92
|
+
* "keychain" => <path to keychain> (default: login.keychain)
|
93
|
+
* "name" => <secure note name> (mandatory)
|
94
|
+
*/
|
95
|
+
static VALUE s_lookup_secure_note(VALUE self, VALUE hash)
|
96
|
+
{
|
97
|
+
VALUE keychain = rb_hash_aref(hash, rb_str_new2("keychain"));
|
98
|
+
VALUE name = rb_hash_aref(hash, rb_str_new2("name"));
|
99
|
+
|
100
|
+
if (name == Qnil) {
|
101
|
+
rb_raise(rb_eArgError, "no name provided");
|
102
|
+
}
|
103
|
+
|
104
|
+
/* A secure note is just a weird generic password */
|
105
|
+
VALUE ret = __s_generic_passwd(self, keychain, name, rb_str_new2(""));
|
106
|
+
|
107
|
+
if (ret != Qnil) {
|
108
|
+
/* Keychain forces CR, change to NL */
|
109
|
+
rb_funcall(ret, rb_intern("gsub!"), 2, rb_str_new2("\r"),
|
110
|
+
rb_str_new2("\n"));
|
111
|
+
}
|
112
|
+
|
113
|
+
return ret;
|
114
|
+
}
|
84
115
|
|
85
|
-
static VALUE __s_internet_passwd(VALUE self, VALUE keychain, VALUE serverName, VALUE accountName)
|
86
116
|
|
117
|
+
static VALUE __s_internet_passwd(VALUE self, VALUE keychain, VALUE serverName, VALUE accountName)
|
87
118
|
{
|
88
119
|
VALUE str;
|
89
120
|
|
@@ -116,7 +147,7 @@ static VALUE __s_internet_passwd(VALUE self, VALUE keychain, VALUE serverName, V
|
|
116
147
|
|
117
148
|
|
118
149
|
if (status == noErr) {
|
119
|
-
str =
|
150
|
+
str = rb_str_new(passwordData, passwordLength);
|
120
151
|
SecKeychainItemFreeContent(NULL, passwordData);
|
121
152
|
}
|
122
153
|
else {
|
@@ -127,9 +158,7 @@ static VALUE __s_internet_passwd(VALUE self, VALUE keychain, VALUE serverName, V
|
|
127
158
|
CFRelease(s_keychain);
|
128
159
|
}
|
129
160
|
|
130
|
-
return str;
|
131
|
-
|
132
|
-
|
161
|
+
return str;
|
133
162
|
}
|
134
163
|
|
135
164
|
/*
|
@@ -173,7 +202,14 @@ VALUE cKeychain;
|
|
173
202
|
void Init_rkeychain()
|
174
203
|
{
|
175
204
|
cKeychain = rb_define_module("Keychain");
|
176
|
-
|
177
|
-
rb_define_module_function(cKeychain, "
|
205
|
+
|
206
|
+
rb_define_module_function(cKeychain, "lookup_generic_passwd",
|
207
|
+
s_lookup_generic_passwd, 1);
|
208
|
+
|
209
|
+
rb_define_module_function(cKeychain, "lookup_internet_passwd",
|
210
|
+
s_lookup_internet_passwd, 1);
|
211
|
+
|
212
|
+
rb_define_module_function(cKeychain, "lookup_secure_note",
|
213
|
+
s_lookup_secure_note, 1);
|
178
214
|
}
|
179
215
|
|
metadata
CHANGED
@@ -1,65 +1,72 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
|
-
rubygems_version: 0.9.1
|
3
|
-
specification_version: 1
|
4
2
|
name: rkeychain
|
5
3
|
version: !ruby/object:Gem::Version
|
6
|
-
version: 0.
|
7
|
-
date: 2007-03-02 00:00:00 +13:00
|
8
|
-
summary: rkeychain provides access to MacOS X' keychain facilities.
|
9
|
-
require_paths:
|
10
|
-
- libext
|
11
|
-
email: olohmann@gmail.com
|
12
|
-
homepage: http://rkeychain.rubyforge.org
|
13
|
-
rubyforge_project: rkeychain
|
14
|
-
description: rkeychain provides access to MacOS X' keychain facilities which are part of the security framework.
|
15
|
-
autorequire:
|
16
|
-
default_executable:
|
17
|
-
bindir: bin
|
18
|
-
has_rdoc: true
|
19
|
-
required_ruby_version: !ruby/object:Gem::Version::Requirement
|
20
|
-
requirements:
|
21
|
-
- - ">"
|
22
|
-
- !ruby/object:Gem::Version
|
23
|
-
version: 0.0.0
|
24
|
-
version:
|
4
|
+
version: 0.2.0
|
25
5
|
platform: ruby
|
26
|
-
signing_key:
|
27
|
-
cert_chain:
|
28
|
-
post_install_message:
|
29
6
|
authors:
|
30
7
|
- Oliver Lohmann
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
|
12
|
+
date: 2008-09-07 00:00:00 +02:00
|
13
|
+
default_executable:
|
14
|
+
dependencies: []
|
15
|
+
|
16
|
+
description: rkeychain provides access to MacOS X' keychain facilities which are part of the security framework.
|
17
|
+
email: olohmann@gmail.com
|
18
|
+
executables: []
|
19
|
+
|
20
|
+
extensions:
|
21
|
+
- ext/extconf.rb
|
22
|
+
extra_rdoc_files:
|
23
|
+
- README
|
24
|
+
- INSTALL
|
25
|
+
- TODO
|
26
|
+
- CHANGELOG
|
27
|
+
- LICENSE
|
28
|
+
- ext/rkeychain.c
|
31
29
|
files:
|
32
30
|
- CHANGELOG
|
33
|
-
- example
|
34
|
-
- ext
|
35
31
|
- INSTALL
|
36
32
|
- LICENSE
|
37
|
-
- Rakefile
|
38
33
|
- README
|
34
|
+
- Rakefile
|
39
35
|
- TODO
|
40
36
|
- VERSION
|
37
|
+
- example
|
41
38
|
- example/example.rb
|
39
|
+
- ext
|
42
40
|
- ext/extconf.rb
|
43
41
|
- ext/rkeychain.c
|
44
|
-
|
45
|
-
|
42
|
+
has_rdoc: true
|
43
|
+
homepage: http://rkeychain.rubyforge.org
|
44
|
+
post_install_message:
|
46
45
|
rdoc_options:
|
47
46
|
- --title
|
48
47
|
- Keychain Documentation
|
49
48
|
- --main
|
50
49
|
- README
|
51
|
-
|
52
|
-
-
|
53
|
-
|
54
|
-
|
55
|
-
-
|
56
|
-
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
-
|
50
|
+
require_paths:
|
51
|
+
- libext
|
52
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
53
|
+
requirements:
|
54
|
+
- - ">="
|
55
|
+
- !ruby/object:Gem::Version
|
56
|
+
version: "0"
|
57
|
+
version:
|
58
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
59
|
+
requirements:
|
60
|
+
- - ">="
|
61
|
+
- !ruby/object:Gem::Version
|
62
|
+
version: "0"
|
63
|
+
version:
|
62
64
|
requirements: []
|
63
65
|
|
64
|
-
|
66
|
+
rubyforge_project: rkeychain
|
67
|
+
rubygems_version: 1.0.1
|
68
|
+
signing_key:
|
69
|
+
specification_version: 2
|
70
|
+
summary: rkeychain provides access to MacOS X' keychain facilities.
|
71
|
+
test_files: []
|
65
72
|
|