Add lib/capsicum/libc.rb

This commit is contained in:
0x1eef 2024-06-25 00:07:00 -03:00
parent d59fdef28e
commit 9341ba2ccf
2 changed files with 35 additions and 35 deletions

View file

@ -4,40 +4,7 @@ require "capsicum/version"
require "fiddle"
module Capsicum
# @api private
module LibC
module_function
##
# Provides a Ruby interface for cap_enter(2)
# @return [Integer]
def cap_enter
Fiddle::Function.new(
libc["cap_enter"],
[],
Fiddle::Types::INT
).call
end
##
# Provides a Ruby interface for cap_getmode(2)
# @param [Fiddle::Pointer] uintp
# @return [Integer]
def cap_getmode(uintp)
Fiddle::Function.new(
libc["cap_getmode"],
[Fiddle::Types::INTPTR_T],
Fiddle::Types::INT
).call(uintp)
end
##
# @api private
def libc
@libc ||= Fiddle.dlopen Dir["/lib/libc.*"].first
end
end
require_relative "capsicum/libc"
module_function
##
@ -47,7 +14,7 @@ module Capsicum
# @raise [SystemCallError]
# Might raise a subclass of SystemCallError
# @return [Boolean]
# Returns true if the current process is in capability mode
# Returns true when the current process is in capability mode
def in_capability_mode?
uintp = Fiddle::Pointer.malloc(Fiddle::SIZEOF_UINT)
ret = LibC.cap_getmode(uintp)

33
lib/capsicum/libc.rb Normal file
View file

@ -0,0 +1,33 @@
# @api private
module Capsicum::LibC
module_function
##
# Provides a Ruby interface for cap_enter(2)
# @return [Integer]
def cap_enter
Fiddle::Function.new(
libc["cap_enter"],
[],
Fiddle::Types::INT
).call
end
##
# Provides a Ruby interface for cap_getmode(2)
# @param [Fiddle::Pointer] uintp
# @return [Integer]
def cap_getmode(uintp)
Fiddle::Function.new(
libc["cap_getmode"],
[Fiddle::Types::INTPTR_T],
Fiddle::Types::INT
).call(uintp)
end
##
# @api private
def libc
@libc ||= Fiddle.dlopen Dir["/lib/libc.*"].first
end
end