exec_sandbox 0.1.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/.document +5 -0
- data/.project +18 -0
- data/.rspec +1 -0
- data/Gemfile +17 -0
- data/Gemfile.lock +39 -0
- data/LICENSE.txt +20 -0
- data/README.rdoc +19 -0
- data/Rakefile +42 -0
- data/VERSION +1 -0
- data/lib/exec_sandbox/sandbox.rb +169 -0
- data/lib/exec_sandbox/spawn.rb +143 -0
- data/lib/exec_sandbox/users.rb +156 -0
- data/lib/exec_sandbox/wait4.rb +85 -0
- data/lib/exec_sandbox.rb +23 -0
- data/spec/exec_sandbox/sandbox_spec.rb +138 -0
- data/spec/exec_sandbox/spawn_spec.rb +327 -0
- data/spec/exec_sandbox/users_spec.rb +125 -0
- data/spec/exec_sandbox/wait4_spec.rb +24 -0
- data/spec/fixtures/buffer.rb +10 -0
- data/spec/fixtures/churn.rb +16 -0
- data/spec/fixtures/duplicate.rb +7 -0
- data/spec/fixtures/exit_arg.rb +5 -0
- data/spec/fixtures/fork.rb +18 -0
- data/spec/fixtures/pwd.rb +8 -0
- data/spec/fixtures/write_arg.rb +8 -0
- data/spec/spec_helper.rb +12 -0
- data/spec/support/code_fixture.rb +7 -0
- metadata +165 -0
@@ -0,0 +1,24 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
|
2
|
+
|
3
|
+
describe ExecSandbox::Wait4 do
|
4
|
+
describe '#wait4' do
|
5
|
+
describe 'write_arg.rb' do
|
6
|
+
before do
|
7
|
+
pid = Kernel.fork { Process.exec bin_fixture(:exit_arg), '42' }
|
8
|
+
@status = ExecSandbox::Wait4.wait4 pid
|
9
|
+
end
|
10
|
+
|
11
|
+
it 'should have the correct exit status' do
|
12
|
+
@status[:exit_code].should == 42
|
13
|
+
end
|
14
|
+
|
15
|
+
it 'should not take more than 1s of user time' do
|
16
|
+
@status[:user_time].should < 1
|
17
|
+
end
|
18
|
+
|
19
|
+
it 'should not take more than 1s of system time' do
|
20
|
+
@status[:system_time].should < 1
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
# Churns away at math for a number of seconds indicated by the second argument,
|
4
|
+
# then outputs a '+' and exists.
|
5
|
+
|
6
|
+
start = Time.now
|
7
|
+
File.open(ARGV[0], 'wb') do |f|
|
8
|
+
f.sync = true
|
9
|
+
loop do
|
10
|
+
j = 0
|
11
|
+
1.upto(1_000_000) { |i| j = i * i + 100 }
|
12
|
+
break if Time.now - start >= ARGV[1].to_i
|
13
|
+
end
|
14
|
+
f.write '+'
|
15
|
+
f.flush
|
16
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
# Forks a number of processes matching second argument, each process writes a
|
4
|
+
# + to the file pointed by the first argument.
|
5
|
+
|
6
|
+
proc_count = ARGV[1].to_i
|
7
|
+
pids = Array.new proc_count
|
8
|
+
|
9
|
+
File.open(ARGV[0], 'wb') do |f|
|
10
|
+
f.sync = true
|
11
|
+
0.upto(proc_count - 1) do |i|
|
12
|
+
pids[i] = fork do
|
13
|
+
f.write '+'
|
14
|
+
sleep 1
|
15
|
+
end
|
16
|
+
end
|
17
|
+
0.upto(proc_count - 1) { |i| Process.waitpid(pids[i]) }
|
18
|
+
end
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,12 @@
|
|
1
|
+
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
|
2
|
+
$LOAD_PATH.unshift(File.dirname(__FILE__))
|
3
|
+
require 'rspec'
|
4
|
+
require 'exec_sandbox'
|
5
|
+
|
6
|
+
# Requires supporting files with custom matchers and macros, etc,
|
7
|
+
# in ./support/ and its subdirectories.
|
8
|
+
Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each {|f| require f}
|
9
|
+
|
10
|
+
RSpec.configure do |config|
|
11
|
+
|
12
|
+
end
|
@@ -0,0 +1,7 @@
|
|
1
|
+
# Path to one of the fixture code files.
|
2
|
+
#
|
3
|
+
# @param [Symbol] fixture_id the name of the code file
|
4
|
+
# @return [String] fully-qualified path to the code file
|
5
|
+
def bin_fixture(fixture_id)
|
6
|
+
File.expand_path "#{File.dirname(__FILE__)}/../fixtures/#{fixture_id.to_s}.rb"
|
7
|
+
end
|
metadata
ADDED
@@ -0,0 +1,165 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: exec_sandbox
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Victor Costan
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2011-10-13 00:00:00.000000000Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: ffi
|
16
|
+
requirement: &23606780 !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: 1.0.9
|
22
|
+
type: :runtime
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: *23606780
|
25
|
+
- !ruby/object:Gem::Dependency
|
26
|
+
name: rdoc
|
27
|
+
requirement: &23606160 !ruby/object:Gem::Requirement
|
28
|
+
none: false
|
29
|
+
requirements:
|
30
|
+
- - ! '>='
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: '3.10'
|
33
|
+
type: :development
|
34
|
+
prerelease: false
|
35
|
+
version_requirements: *23606160
|
36
|
+
- !ruby/object:Gem::Dependency
|
37
|
+
name: rspec
|
38
|
+
requirement: &23605400 !ruby/object:Gem::Requirement
|
39
|
+
none: false
|
40
|
+
requirements:
|
41
|
+
- - ! '>='
|
42
|
+
- !ruby/object:Gem::Version
|
43
|
+
version: 2.6.0
|
44
|
+
type: :development
|
45
|
+
prerelease: false
|
46
|
+
version_requirements: *23605400
|
47
|
+
- !ruby/object:Gem::Dependency
|
48
|
+
name: yard
|
49
|
+
requirement: &23604760 !ruby/object:Gem::Requirement
|
50
|
+
none: false
|
51
|
+
requirements:
|
52
|
+
- - ! '>='
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: 0.7.2
|
55
|
+
type: :development
|
56
|
+
prerelease: false
|
57
|
+
version_requirements: *23604760
|
58
|
+
- !ruby/object:Gem::Dependency
|
59
|
+
name: yard-rspec
|
60
|
+
requirement: &23604040 !ruby/object:Gem::Requirement
|
61
|
+
none: false
|
62
|
+
requirements:
|
63
|
+
- - ! '>='
|
64
|
+
- !ruby/object:Gem::Version
|
65
|
+
version: '0.1'
|
66
|
+
type: :development
|
67
|
+
prerelease: false
|
68
|
+
version_requirements: *23604040
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: bundler
|
71
|
+
requirement: &23603320 !ruby/object:Gem::Requirement
|
72
|
+
none: false
|
73
|
+
requirements:
|
74
|
+
- - ! '>='
|
75
|
+
- !ruby/object:Gem::Version
|
76
|
+
version: 1.0.21
|
77
|
+
type: :development
|
78
|
+
prerelease: false
|
79
|
+
version_requirements: *23603320
|
80
|
+
- !ruby/object:Gem::Dependency
|
81
|
+
name: jeweler
|
82
|
+
requirement: &23602620 !ruby/object:Gem::Requirement
|
83
|
+
none: false
|
84
|
+
requirements:
|
85
|
+
- - ! '>='
|
86
|
+
- !ruby/object:Gem::Version
|
87
|
+
version: 1.6.4
|
88
|
+
type: :development
|
89
|
+
prerelease: false
|
90
|
+
version_requirements: *23602620
|
91
|
+
- !ruby/object:Gem::Dependency
|
92
|
+
name: rcov
|
93
|
+
requirement: &23601780 !ruby/object:Gem::Requirement
|
94
|
+
none: false
|
95
|
+
requirements:
|
96
|
+
- - ! '>='
|
97
|
+
- !ruby/object:Gem::Version
|
98
|
+
version: '0'
|
99
|
+
type: :development
|
100
|
+
prerelease: false
|
101
|
+
version_requirements: *23601780
|
102
|
+
description: Temporary users and groups, rlimits
|
103
|
+
email: costan@gmail.com
|
104
|
+
executables: []
|
105
|
+
extensions: []
|
106
|
+
extra_rdoc_files:
|
107
|
+
- LICENSE.txt
|
108
|
+
- README.rdoc
|
109
|
+
files:
|
110
|
+
- .document
|
111
|
+
- .project
|
112
|
+
- .rspec
|
113
|
+
- Gemfile
|
114
|
+
- Gemfile.lock
|
115
|
+
- LICENSE.txt
|
116
|
+
- README.rdoc
|
117
|
+
- Rakefile
|
118
|
+
- VERSION
|
119
|
+
- lib/exec_sandbox.rb
|
120
|
+
- lib/exec_sandbox/sandbox.rb
|
121
|
+
- lib/exec_sandbox/spawn.rb
|
122
|
+
- lib/exec_sandbox/users.rb
|
123
|
+
- lib/exec_sandbox/wait4.rb
|
124
|
+
- spec/exec_sandbox/sandbox_spec.rb
|
125
|
+
- spec/exec_sandbox/spawn_spec.rb
|
126
|
+
- spec/exec_sandbox/users_spec.rb
|
127
|
+
- spec/exec_sandbox/wait4_spec.rb
|
128
|
+
- spec/fixtures/buffer.rb
|
129
|
+
- spec/fixtures/churn.rb
|
130
|
+
- spec/fixtures/duplicate.rb
|
131
|
+
- spec/fixtures/exit_arg.rb
|
132
|
+
- spec/fixtures/fork.rb
|
133
|
+
- spec/fixtures/pwd.rb
|
134
|
+
- spec/fixtures/write_arg.rb
|
135
|
+
- spec/spec_helper.rb
|
136
|
+
- spec/support/code_fixture.rb
|
137
|
+
homepage: http://github.com/pwnall/exec_sandbox
|
138
|
+
licenses:
|
139
|
+
- MIT
|
140
|
+
post_install_message:
|
141
|
+
rdoc_options: []
|
142
|
+
require_paths:
|
143
|
+
- lib
|
144
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
145
|
+
none: false
|
146
|
+
requirements:
|
147
|
+
- - ! '>='
|
148
|
+
- !ruby/object:Gem::Version
|
149
|
+
version: '0'
|
150
|
+
segments:
|
151
|
+
- 0
|
152
|
+
hash: -3535790192517307381
|
153
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
154
|
+
none: false
|
155
|
+
requirements:
|
156
|
+
- - ! '>='
|
157
|
+
- !ruby/object:Gem::Version
|
158
|
+
version: '0'
|
159
|
+
requirements: []
|
160
|
+
rubyforge_project:
|
161
|
+
rubygems_version: 1.8.11
|
162
|
+
signing_key:
|
163
|
+
specification_version: 3
|
164
|
+
summary: Run foreign binaries using POSIX sandboxing features
|
165
|
+
test_files: []
|