traut 1.0.0 → 1.0.1
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/lib/traut/spawn.rb +24 -25
- data/lib/traut/version.rb +1 -1
- metadata +8 -8
data/lib/traut/spawn.rb
CHANGED
@@ -17,23 +17,35 @@ module Traut
|
|
17
17
|
end
|
18
18
|
|
19
19
|
def spawn(uid, gid, command, payload, block)
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
20
|
+
@log.debug "Running #{command} as #{uid}:#{gid}"
|
21
|
+
# Why do I use systemu? Have a look at this:
|
22
|
+
## http://stackoverflow.com/questions/8998097/how-do-i-close-eventmachine-systems-side-of-an-stdin-pipe
|
23
|
+
pid = Process.fork do
|
24
|
+
begin
|
25
|
+
@log.debug("As group #{Process::GID.eid} requesting priv change to #{gid}")
|
26
|
+
Process::GID.change_privilege(gid)
|
27
|
+
@log.debug("As user #{Process::UID.eid} requesting priv change to #{uid}")
|
28
|
+
Process::UID.change_privilege(uid)
|
29
|
+
|
30
|
+
@log.debug("Feeding #{command} stdin '#{payload}'")
|
25
31
|
status, stdout, stderr = systemu command, 0=>payload
|
26
32
|
block.call(status, stdout, stderr)
|
33
|
+
|
34
|
+
@log.info("#{command} exited with #{status}, stderr #{stderr}")
|
35
|
+
rescue => err
|
36
|
+
@log.fatal("Caught exception is subprocess")
|
37
|
+
@log.fatal(err)
|
27
38
|
end
|
39
|
+
end
|
40
|
+
Process.detach pid
|
28
41
|
|
29
|
-
|
30
|
-
|
31
|
-
|
42
|
+
# If you have an answer for that, consider enabling something like
|
43
|
+
# following code, keeping in mind that you need to figure out a way to get
|
44
|
+
# stderr back as well.
|
32
45
|
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
end
|
46
|
+
# EM.system command, proc{ |p| msg(p, payload) } do |stdout,status|
|
47
|
+
# @log.debug("#{stdout} :: #{status}")
|
48
|
+
# end
|
37
49
|
end
|
38
50
|
|
39
51
|
private
|
@@ -41,18 +53,5 @@ module Traut
|
|
41
53
|
process.send_data(m + "\n")
|
42
54
|
end
|
43
55
|
|
44
|
-
def runas(uid, gid, &block)
|
45
|
-
cur_uid = Process::UID.eid
|
46
|
-
cur_gid = Process::GID.eid
|
47
|
-
|
48
|
-
begin
|
49
|
-
Process::UID.change_privilege(uid)
|
50
|
-
Process::GID.change_privilege(gid)
|
51
|
-
block.call
|
52
|
-
ensure
|
53
|
-
Process::UID.change_privilege(cur_uid)
|
54
|
-
Process::GID.change_privilege(cur_gid)
|
55
|
-
end
|
56
|
-
end
|
57
56
|
end
|
58
57
|
end
|
data/lib/traut/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: traut
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.1
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-02-
|
12
|
+
date: 2012-02-20 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: amqp
|
16
|
-
requirement: &
|
16
|
+
requirement: &80947250 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ! '>='
|
@@ -21,10 +21,10 @@ dependencies:
|
|
21
21
|
version: 0.9.2
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *80947250
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: systemu
|
27
|
-
requirement: &
|
27
|
+
requirement: &80946760 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ~>
|
@@ -32,10 +32,10 @@ dependencies:
|
|
32
32
|
version: '2.4'
|
33
33
|
type: :runtime
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *80946760
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: json
|
38
|
-
requirement: &
|
38
|
+
requirement: &80946390 !ruby/object:Gem::Requirement
|
39
39
|
none: false
|
40
40
|
requirements:
|
41
41
|
- - ~>
|
@@ -43,7 +43,7 @@ dependencies:
|
|
43
43
|
version: 1.6.5
|
44
44
|
type: :runtime
|
45
45
|
prerelease: false
|
46
|
-
version_requirements: *
|
46
|
+
version_requirements: *80946390
|
47
47
|
description: Unix cron is a venerable program that turns the passage of time into
|
48
48
|
program invokation. Traut does the same, but using AMQP events to trigger execution.
|
49
49
|
AMQP message payloads are written to the stdin of invoked commands.
|