key_control 0.0.3 → 0.0.4

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: e1ae894b32a61b12e85b7ba01c280974f6bcca55
4
- data.tar.gz: 687ea1f4369b0753b879e61dfe875742a121fbf5
3
+ metadata.gz: a226c9ceecfaba7c34e789b1b075803b1c31fda1
4
+ data.tar.gz: f5205dc20534d1be565527d3905ac2e51a6b0853
5
5
  SHA512:
6
- metadata.gz: e8608272a5c149c1b536fb888645508236c14ea1f546302dbf8b26c262e01cc6cf738f8f2e05df45948934a42f92305fd84b73af5f67c5c694ce6364fa9b24e3
7
- data.tar.gz: 83d071c944ecdecd8ded2653bd268ef002344d151706b501fe03dc29bf1529da9488679b2c32cfb09f71ce36839aa2779847ce50408392ede965e1c55aaaf320
6
+ metadata.gz: c7f52114b183f8c1be55fd2e9c49ae3f81cf2bde49e8d2940e4bd1b1deeba0bdba811634c2ed1258e0afe9599efc2d0aeed10b5751e60ce1790d64a7208c07e6
7
+ data.tar.gz: 73b9a063cfe17fdda8ccce6dfb1d61cc5838a0f8130c345d96e4e7a1a9bc4cc66a6097610f4e1c44865a8e6a0cbeb212ef3fc780798916fc6f1f3b84be8fe2ad
@@ -2,6 +2,8 @@ module KeyControl
2
2
 
3
3
  class KeyRing
4
4
 
5
+ attr_reader :system
6
+
5
7
  # Public: Get a new KeyControl::KeyRing instance with the specified keyring
6
8
  # identifier.
7
9
  #
@@ -20,7 +22,7 @@ module KeyControl
20
22
  #
21
23
  # Returns nothing.
22
24
  def []=(name, data)
23
- execute(:add, "user", name, data, data.length, @keyring)
25
+ system.run(:add, "user", name, data, data.length, @keyring)
24
26
  end
25
27
 
26
28
  # Public: Get the data matching the passed description from the keychain.
@@ -29,26 +31,17 @@ module KeyControl
29
31
  #
30
32
  # Returns the requested data or nil.
31
33
  def [](name)
32
- handle = execute(:search, "user", name, nil, @keyring)
34
+ handle = system.run(:search, "user", name, nil, @keyring)
33
35
  return nil if handle == -1
34
36
 
35
- length = execute(:read, handle, "", 0)
36
- buffer = "\x00" * length
37
- execute(:read, handle, buffer, length)
38
-
39
- buffer
37
+ system.get(:read, handle)
40
38
  end
41
39
 
42
- private
43
-
44
- # Private: Execute the requested action in keyctl.
45
- #
46
- # action - The action to perform.
47
- # args - A list of arguments which should be passed to the action.
40
+ # Public: Inspect the structure of and data stored in the current keyring.
48
41
  #
49
- # Returns the stdout value returned by the call.
50
- def execute(action, *args)
51
- @system.send(action).call(*args)
42
+ # Returns
43
+ def inspect
44
+ system.get(:describe, @keyring)
52
45
  end
53
46
  end
54
47
  end
@@ -4,7 +4,59 @@ module KeyControl
4
4
 
5
5
  class System
6
6
 
7
- # Public: Get a proc representing the add_key system call.
7
+ # Public: Execute the requested action in keyctl.
8
+ #
9
+ # action - The action to perform.
10
+ # args - A list of arguments which should be passed to the action.
11
+ #
12
+ # Returns the stdout value returned by the call.
13
+ def run(action, *args)
14
+ send(action).call(*args)
15
+ end
16
+
17
+ # Public: Execute the requested keyctl action, buffering the output into a
18
+ # string in multiple passes.
19
+ #
20
+ # action - The action to perform.
21
+ # args - A list of arguments which should be passed to the action.
22
+ #
23
+ # Returns a String containing the buffered output.
24
+ def get(action, *args)
25
+ length = run(action, *args, "", 0)
26
+ buffer = "\x00" * length
27
+ run(action, *args, buffer, length)
28
+
29
+ buffer
30
+ end
31
+
32
+ # Public: Get a symbol representing the reason for the last error set by a
33
+ # system call.
34
+ #
35
+ # Returns a Symbol or nil.
36
+ def error
37
+ Errno.constants.detect do |error_name|
38
+ errno = Errno.const_get(error_name)
39
+ errno::Errno == Fiddle.last_error
40
+ end
41
+ end
42
+
43
+ private
44
+
45
+ # Private: Get a handle representing the system calls available through
46
+ # libkeyutils.so.
47
+ #
48
+ # Returns a Fiddle::Handle.
49
+ def keyutils
50
+ @keyutils ||= KeyControl::LIBRARIES.detect do |library|
51
+ begin
52
+ break Fiddle::Handle.new(library)
53
+ rescue Fiddle::DLError
54
+ nil
55
+ end
56
+ end
57
+ end
58
+
59
+ # Private: Get a proc representing the add_key system call.
8
60
  #
9
61
  # Returns a Fiddle::Function.
10
62
  def add
@@ -18,7 +70,7 @@ module KeyControl
18
70
  Fiddle::TYPE_INT )
19
71
  end
20
72
 
21
- # Public: Get a proc representing the request_key system call.
73
+ # Private: Get a proc representing the request_key system call.
22
74
  #
23
75
  # Returns a Fiddle::Function.
24
76
  def search
@@ -31,7 +83,7 @@ module KeyControl
31
83
  Fiddle::TYPE_INT )
32
84
  end
33
85
 
34
- # Public: Get a proc representing the keyctl_read system call.
86
+ # Private: Get a proc representing the keyctl_read system call.
35
87
  #
36
88
  # Returns a Fiddle::Function.
37
89
  def read
@@ -43,20 +95,16 @@ module KeyControl
43
95
  Fiddle::TYPE_LONG )
44
96
  end
45
97
 
46
- private
47
-
48
- # Private: Get a handle representing the system calls available through
49
- # libkeyutils.so.
98
+ # Private: Get a proc representing the keyctl_describe system call.
50
99
  #
51
- # Returns a Fiddle::Handle.
52
- def keyutils
53
- @keyutils ||= KeyControl::LIBRARIES.detect do |library|
54
- begin
55
- break Fiddle::Handle.new(library)
56
- rescue Fiddle::DLError
57
- nil
58
- end
59
- end
100
+ # Returns a Fiddle::Function.
101
+ def describe
102
+ @describe ||= Fiddle::Function.new(
103
+ keyutils["keyctl_describe"],
104
+ [ Fiddle::TYPE_INT,
105
+ Fiddle::ALIGN_CHAR,
106
+ Fiddle::TYPE_SIZE_T ],
107
+ Fiddle::TYPE_INT )
60
108
  end
61
109
  end
62
110
  end
@@ -1,3 +1,3 @@
1
1
  module KeyControl
2
- VERSION = "0.0.3"
2
+ VERSION = "0.0.4"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: key_control
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: 0.0.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andrew Horner
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-03-29 00:00:00.000000000 Z
11
+ date: 2014-04-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -81,7 +81,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
81
81
  version: '0'
82
82
  requirements: []
83
83
  rubyforge_project:
84
- rubygems_version: 2.2.2
84
+ rubygems_version: 2.0.6
85
85
  signing_key:
86
86
  specification_version: 4
87
87
  summary: A simple wrapper for the `keyctl` utility.