Skip to content

Commit

Permalink
Showing 3 changed files with 63 additions and 4 deletions.
2 changes: 0 additions & 2 deletions spec/truffle/tags/core/process/egid_tags.txt

This file was deleted.

2 changes: 0 additions & 2 deletions spec/truffle/tags/core/process/euid_tags.txt
Original file line number Diff line number Diff line change
@@ -1,5 +1,3 @@
fails:Process.euid also goes by Process::UID.eid
fails:Process.euid also goes by Process::Sys.geteuid
fails:Process.euid= raises TypeError if not passed an Integer
fails:Process.euid= raises Errno::ERPERM if run by a non superuser trying to set the superuser id
fails:Process.euid= raises Errno::ERPERM if run by a non superuser trying to set the superuser id from username
63 changes: 63 additions & 0 deletions truffle/src/main/ruby/core/rubinius/common/process.rb
Original file line number Diff line number Diff line change
@@ -400,6 +400,69 @@ def setresuid(rid, eid, sid)
end
end

module UID
class << self
def change_privilege(uid)
uid = Rubinius::Type.coerce_to uid, Integer, :to_int

ret = FFI::Platform::POSIX.setreuid(uid, uid)
Errno.handle if ret == -1
uid
end

def eid
ret = FFI::Platform::POSIX.geteuid
Errno.handle if ret == -1
ret
end

def eid=(uid)
uid = Rubinius::Type.coerce_to uid, Integer, :to_int

ret = FFI::Platform::POSIX.seteuid(uid)
Errno.handle if ret == -1
uid
end
alias_method :grant_privilege, :eid=

def re_exchange
real = FFI::Platform::POSIX.getuid
Errno.handle if real == -1
eff = FFI::Platform::POSIX.geteuid
Errno.handle if eff == -1
ret = FFI::Platform::POSIX.setreuid(eff, real)
Errno.handle if ret == -1
eff
end

def re_exchangeable?
true
end

def rid
ret = FFI::Platform::POSIX.getuid
Errno.handle if ret == -1
ret
end

def sid_available?
true
end

def switch
eff = re_exchange
if block_given?
ret = yield
re_exchange
return ret
else
return eff
end
end

end
end

module GID
class << self
def change_privilege(gid)

0 comments on commit fb73a1a

Please sign in to comment.