class InstanceAgent::Plugins::CodeDeployPlugin::ApplicationSpecification::LinuxPermissionInfo

Helper Class for storing data parsed from permissions list

Attributes

acls[R]
context[R]
except[R]
group[R]
mode[R]
object[R]
owner[R]
pattern[R]
type[R]

Public Class Methods

new(object, opts = {}) click to toggle source
# File lib/instance_agent/plugins/codedeploy/application_specification/linux_permission_info.rb, line 9
def initialize(object, opts = {})
  object = object.to_s
  if (object.empty?)
    raise AppSpecValidationException, 'Permission needs a object value'
  end
  @object = object
  @pattern = opts[:pattern] || "**"
  @except = opts[:except] || []
  @type = opts[:type] || ["file", "directory"]
  @owner = opts[:owner]
  @group = opts[:group]
  @mode = opts[:mode]
  @acls = opts[:acls]
  @context = opts[:context]
end

Public Instance Methods

matches_except?(name) click to toggle source
# File lib/instance_agent/plugins/codedeploy/application_specification/linux_permission_info.rb, line 61
def matches_except?(name)
  name = name.chomp(File::SEPARATOR)
  base_object = sanitize_dir_path(@object)
  if !base_object.end_with?(File::SEPARATOR)
    base_object = base_object + File::SEPARATOR
  end
  if name.start_with?(base_object)
    rel_name = name[base_object.length..name.length]
    @except.each do |item|
      if matches_simple_glob(rel_name, item)
        return true
      end
    end
  end
  false
end
matches_pattern?(name) click to toggle source
# File lib/instance_agent/plugins/codedeploy/application_specification/linux_permission_info.rb, line 45
def matches_pattern?(name)
  name = name.chomp(File::SEPARATOR)
  base_object = sanitize_dir_path(@object)
  if !base_object.end_with?(File::SEPARATOR)
    base_object = base_object + File::SEPARATOR
  end
  if name.start_with?(base_object)
    if ("**".eql?(@pattern))
      return true
    end
    rel_name = name[base_object.length..name.length]
    return matches_simple_glob(rel_name, @pattern)
  end
  false
end
validate_file_acl(object) click to toggle source
# File lib/instance_agent/plugins/codedeploy/application_specification/linux_permission_info.rb, line 36
def validate_file_acl(object)
  if !@acls.nil?
    default_acl = @acls.get_default_ace
    if !default_acl.nil?
      raise "Attempt to set default acl #{default_acl} on file #{object}"
    end
  end
end
validate_file_permission() click to toggle source
# File lib/instance_agent/plugins/codedeploy/application_specification/linux_permission_info.rb, line 25
def validate_file_permission()
  if @type.include?("file")
    if !"**".eql?(@pattern)
      raise AppSpecValidationException, "Attempt to use pattern #{@pattern} when assigning permissions to file #{@object}"
    end
    if !@except.empty?
      raise AppSpecValidationException, "Attempt to use except #{@except} when assigning permissions to file #{@object}"
    end
  end
end

Private Instance Methods

expand(option) click to toggle source
# File lib/instance_agent/plugins/codedeploy/application_specification/linux_permission_info.rb, line 103
def expand(option)
  previous_option = nil
  while "*".eql?(option[0]) do
    previous_option = Array.new(option)
    option.shift
  end
  previous_option.nil? ? [option] : [previous_option, option]
end
matches_simple_glob(name, pattern) click to toggle source
# File lib/instance_agent/plugins/codedeploy/application_specification/linux_permission_info.rb, line 79
def matches_simple_glob(name, pattern)
  if name.include?(File::SEPARATOR)
    return false
  end
  options = expand(pattern.chars.entries)
  name.chars.each do |char|
    new_options = []
    options.each do |option|
      if option[0].eql?("*")
        new_options.concat(expand(option))
      elsif option[0].eql?(char)
        option.shift
        new_options.concat(expand(option))
      end
    end
    options = new_options
    if (options.include?(["*"]))
      return true
    end
  end
  options.include?([])
end
sanitize_dir_path(path) click to toggle source
# File lib/instance_agent/plugins/codedeploy/application_specification/linux_permission_info.rb, line 113
def sanitize_dir_path(path)
  File.expand_path(path)
end