Update BSD::Control::Feature#sysdef!
This commit is contained in:
parent
04af09b700
commit
b6e28f02b0
4 changed files with 34 additions and 8 deletions
|
@ -50,12 +50,16 @@ VALUE
|
|||
ffi_sysdef(VALUE self, VALUE rb_feature, VALUE rb_path)
|
||||
{
|
||||
struct Options options;
|
||||
int r;
|
||||
|
||||
int result;
|
||||
errno = 0;
|
||||
options = __options_init(rb_feature, rb_path);
|
||||
r = hbsdcontrol_extattr_rm_attr(options.path, options.disable_flag);
|
||||
r &= hbsdcontrol_extattr_rm_attr(options.path, options.enable_flag);
|
||||
return (r == 0 ? Qtrue : Qfalse);
|
||||
result = hbsdcontrol_extattr_rm_attr(options.path, options.disable_flag) == 0 &&
|
||||
hbsdcontrol_extattr_rm_attr(options.path, options.enable_flag) == 0;
|
||||
if (result) {
|
||||
return (Qtrue);
|
||||
} else {
|
||||
rb_syserr_fail(errno, "hbsdcontrol_extattr_rm_attr");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -46,8 +46,8 @@ module BSD::Control
|
|||
# @param [String] path
|
||||
# The path to a file.
|
||||
#
|
||||
# @raise [BSD::Control::Error]
|
||||
# When the operation fails.
|
||||
# @raise [SystemCallError]
|
||||
# Might raise a number of Errno exceptions.
|
||||
#
|
||||
# @return [Boolean]
|
||||
# Returns true on success.
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
require_relative "../setup"
|
||||
module BSD::Control
|
||||
class FeatureBangTest < Test::Unit::TestCase
|
||||
class FeatureTest < Test::Unit::TestCase
|
||||
def test_mprotect_feature
|
||||
assert_instance_of BSD::Control::Feature,
|
||||
BSD::Control.feature(:mprotect)
|
||||
|
|
22
test/unprivileged/sysdef_test.rb
Normal file
22
test/unprivileged/sysdef_test.rb
Normal file
|
@ -0,0 +1,22 @@
|
|||
require_relative "../setup"
|
||||
module BSD::Control
|
||||
class SysDefTest < Test::Unit::TestCase
|
||||
require "fileutils"
|
||||
include FileUtils
|
||||
|
||||
def test_sysdef!_lacks_privileges
|
||||
touch(file)
|
||||
assert_raises(Errno::EPERM) do
|
||||
BSD::Control.feature(:mprotect).sysdef!(file)
|
||||
end
|
||||
ensure
|
||||
rm(file)
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def file
|
||||
File.join(__dir__, "file")
|
||||
end
|
||||
end
|
||||
end
|
Loading…
Reference in a new issue