My favorites | Sign in
Project Home Downloads Wiki Issues Source
Checkout   Browse   Changes    
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
#!/usr/bin/env ruby
require "socket"
require "etc"

if ARGV.length < 4
puts "Usage: $0 [host]:port user group command [arg1 ...]"
exit 1
end

address = ARGV.shift
user = ARGV.shift
group = ARGV.shift

# Setup the socket
addrdata = address.split(":")
if addrdata.length == 1
host = "0.0.0.0"
port = addrdata[0]
else
host, port = addrdata
end
include Socket::Constants
socket = Socket.new( AF_INET, SOCK_STREAM, 0 )
sockaddr = Socket.pack_sockaddr_in( port, host )
socket.bind( sockaddr )

# setuid
pw = Etc.getpwnam(user)
gr = Etc.getgrnam(group)

puts "setgid: #{gr.gid} (#{group})"
Process::Sys.setgid(gr.gid)
puts "setuid: #{pw.uid} (#{user})"
Process::Sys.setuid(pw.uid)

ENV["BINDFD"] = socket.fileno.to_s
ENV["BINDPORT"] = port
ENV["LD_PRELOAD"] = "/home/jls/projects/liboverride/bindandswitch.so"

puts "Exec: #{ARGV.inspect}"

exec *ARGV

Change log

r2269 by jordansissel on Sep 24, 2009   Diff
[No log message]
Go to: 
Project members, sign in to write a code review

Older revisions

All revisions of this file

File info

Size: 855 bytes, 42 lines

File properties

svn:executable
*
Powered by Google Project Hosting