class Kanrisuru::Mode
Attributes
group[R]
other[R]
owner[R]
Public Class Methods
new(mode)
click to toggle source
# File lib/kanrisuru/mode.rb, line 105 def initialize(mode) if mode.instance_of?(Integer) init_mode(mode.to_s(8)) elsif mode.instance_of?(String) init_mode(mode) else raise 'Invalid mode type' end end
Public Instance Methods
directory?()
click to toggle source
# File lib/kanrisuru/mode.rb, line 115 def directory? @directory == 'd' end
inspect()
click to toggle source
# File lib/kanrisuru/mode.rb, line 179 def inspect format('#<Kanrisuru::Mode:0x%<object_id>s @numeric=%<numeric>s @symbolic=%<symbolic>s>', object_id: object_id, numeric: numeric, symbolic: symbolic) end
numeric()
click to toggle source
# File lib/kanrisuru/mode.rb, line 160 def numeric @owner.numeric + @group.numeric + @other.numeric end
numeric=(numeric)
click to toggle source
# File lib/kanrisuru/mode.rb, line 164 def numeric=(numeric) string = if numeric.instance_of?(Integer) numeric.to_s(8) else numeric end tokens = string.chars @owner.numeric = tokens[0] @group.numeric = tokens[1] @other.numeric = tokens[2] end
symbolic()
click to toggle source
# File lib/kanrisuru/mode.rb, line 119 def symbolic @directory + @owner.symbolic + @group.symbolic + @other.symbolic end
symbolic=(string)
click to toggle source
# File lib/kanrisuru/mode.rb, line 123 def symbolic=(string) raise ArgumentErorr, 'Invalid symbolic type' if string.class != String if string.length == 10 && !string.include?(',') modes = string[1..-1] @owner.symbolic = modes[0..2] @group.symbolic = modes[3..5] @other.symbolic = modes[6..8] else operations = string.split(',') operations.each do |operation| flags = operation.split(/[=+-]/) commands = flags[0] == '' ? 'a' : flags[0] fields = flags[1] commands = commands.chars commands.each do |command| case command when 'a' apply_operation(operation, fields, @owner) apply_operation(operation, fields, @group) apply_operation(operation, fields, @other) when 'u' apply_operation(operation, fields, @owner) when 'g' apply_operation(operation, fields, @group) when 'o' apply_operation(operation, fields, @other) end end end end end
to_i()
click to toggle source
# File lib/kanrisuru/mode.rb, line 188 def to_i numeric.to_i(8) end
to_s()
click to toggle source
# File lib/kanrisuru/mode.rb, line 184 def to_s symbolic end
Private Instance Methods
apply_field_to_permission(fields, permission, boolean)
click to toggle source
# File lib/kanrisuru/mode.rb, line 214 def apply_field_to_permission(fields, permission, boolean) permission.read = boolean if fields.include?('r') permission.write = boolean if fields.include?('w') permission.execute = boolean if fields.include?('x') end
apply_operation(operation, fields, permission)
click to toggle source
# File lib/kanrisuru/mode.rb, line 194 def apply_operation(operation, fields, permission) if operation.include?('=') remaining_fields = 'rwx' fields.chars.each do |field| apply_field_to_permission(field, permission, true) ## remove any field that shouldn't be set to false remaining_fields = remaining_fields.gsub(field, '') end ## Apply false to any remaining fields apply_field_to_permission(remaining_fields, permission, false) elsif operation.include?('-') apply_field_to_permission(fields, permission, false) elsif operation.include?('+') apply_field_to_permission(fields, permission, true) end end
init_mode(string)
click to toggle source
# File lib/kanrisuru/mode.rb, line 220 def init_mode(string) string = parse_acl(string) if string.length == 3 @directory = '-' tokens = string.chars @owner = Kanrisuru::Mode::Permission.new(tokens[0], numeric_to_symbolic(tokens[0].to_i)) @group = Kanrisuru::Mode::Permission.new(tokens[1], numeric_to_symbolic(tokens[1].to_i)) @other = Kanrisuru::Mode::Permission.new(tokens[2], numeric_to_symbolic(tokens[2].to_i)) elsif string.length == 10 && !string.include?(',') @directory = string[0] modes = string[1..-1] @owner = Kanrisuru::Mode::Permission.new(symbolic_to_numeric(modes[0..2]), modes[0..2]) @group = Kanrisuru::Mode::Permission.new(symbolic_to_numeric(modes[3..5]), modes[3..5]) @other = Kanrisuru::Mode::Permission.new(symbolic_to_numeric(modes[6..8]), modes[6..8]) else raise ArgumentError, "Invalid format for mode #{string}" end end
numeric_to_symbolic(int)
click to toggle source
# File lib/kanrisuru/mode.rb, line 262 def numeric_to_symbolic(int) conversions = { 0 => '---', 1 => '--x', 2 => '-w-', 3 => '-wx', 4 => 'r--', 5 => 'r-x', 6 => 'rw-', 7 => 'rwx' } conversions[int] end
parse_acl(string)
click to toggle source
# File lib/kanrisuru/mode.rb, line 242 def parse_acl(string) @acl = string[-1] == '.' ? 'selinux' : 'general' string.gsub(/[.+]/, '') end
symbolic_to_numeric(ref)
click to toggle source
# File lib/kanrisuru/mode.rb, line 247 def symbolic_to_numeric(ref) conversions = { '---' => 0, '---x' => 1, '-w-' => 2, '-wx' => 3, 'r--' => 4, 'r-x' => 5, 'rw-' => 6, 'rwx' => 7 } conversions[ref] end