1require_relative '../../spec_helper' 2 3describe "Process.euid" do 4 it "returns the effective user ID for this process" do 5 Process.euid.should be_kind_of(Fixnum) 6 end 7 8 it "also goes by Process::UID.eid" do 9 Process::UID.eid.should == Process.euid 10 end 11 12 it "also goes by Process::Sys.geteuid" do 13 Process::Sys.geteuid.should == Process.euid 14 end 15end 16 17describe "Process.euid=" do 18 19 platform_is_not :windows do 20 it "raises TypeError if not passed an Integer" do 21 lambda { Process.euid = Object.new }.should raise_error(TypeError) 22 end 23 24 as_user do 25 it "raises Errno::ERPERM if run by a non superuser trying to set the superuser id" do 26 lambda { (Process.euid = 0)}.should raise_error(Errno::EPERM) 27 end 28 29 it "raises Errno::ERPERM if run by a non superuser trying to set the superuser id from username" do 30 lambda { Process.euid = "root" }.should raise_error(Errno::EPERM) 31 end 32 end 33 34 as_superuser do 35 describe "if run by a superuser" do 36 with_feature :fork do 37 it "sets the effective user id for the current process if run by a superuser" do 38 read, write = IO.pipe 39 pid = Process.fork do 40 begin 41 read.close 42 Process.euid = 1 43 write << Process.euid 44 write.close 45 rescue Exception => e 46 write << e << e.backtrace 47 end 48 Process.exit! 49 end 50 write.close 51 euid = read.gets 52 euid.should == "1" 53 Process.wait pid 54 end 55 end 56 end 57 end 58 end 59end 60