traut 1.0.0 → 1.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (3) hide show
  1. data/lib/traut/spawn.rb +24 -25
  2. data/lib/traut/version.rb +1 -1
  3. metadata +8 -8
@@ -17,23 +17,35 @@ module Traut
17
17
  end
18
18
 
19
19
  def spawn(uid, gid, command, payload, block)
20
- runas(uid, gid) do
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
- Process.fork do
24
- puts Process.pid
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
- # If you have an answer for that, consider enabling the following code,
30
- # keeping in mind that you need to figure out a way to get stderr back
31
- # as well.
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
- # EM.system command, proc{ |p| msg(p, payload) } do |stdout,status|
34
- # @log.debug("#{stdout} :: #{status}")
35
- # end
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
@@ -1,3 +1,3 @@
1
1
  module Traut
2
- VERSION = "1.0.0"
2
+ VERSION = "1.0.1"
3
3
  end
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.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-11 00:00:00.000000000 Z
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: &83468870 !ruby/object:Gem::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: *83468870
24
+ version_requirements: *80947250
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: systemu
27
- requirement: &83467490 !ruby/object:Gem::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: *83467490
35
+ version_requirements: *80946760
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: json
38
- requirement: &83466860 !ruby/object:Gem::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: *83466860
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.