File: should_run_command_as_user.rb

package info (click to toggle)
puppet-agent 8.10.0-6
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 27,404 kB
  • sloc: ruby: 286,820; sh: 492; xml: 116; makefile: 88; cs: 68
file content (58 lines) | stat: -rw-r--r-- 1,794 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
test_name "The exec resource should be able to run commands as a different user" do
  confine :except, :platform => 'windows'

  tag 'audit:high',
      'audit:acceptance'

  require 'puppet/acceptance/common_utils'
  extend Puppet::Acceptance::BeakerUtils

  def random_username
    "pl#{rand(999999).to_i}"
  end

  def exec_resource_manifest(params = {})
    default_params = {
      :logoutput => true,
      :path      => '/usr/bin:/usr/sbin:/bin:/sbin',
      :command   => 'echo Hello'
    }
    params = default_params.merge(params)

    params_str = params.map do |param, value|
      value_str = value.to_s
      value_str = "'#{value_str}'" if value.is_a?(String)
      "  #{param} => #{value_str}"
    end.join(",\n")

    <<-MANIFEST
exec { 'run_test_command':
  #{params_str}
}
MANIFEST
  end

  agents.each do |agent|
    username = random_username

    # Create our user. Ensure that we start with a clean slate.
    agent.user_absent(username)
    agent.user_present(username)
    teardown { agent.user_absent(username) }

    tmpdir = agent.tmpdir("forbidden")
    on(agent, "chmod 700 #{tmpdir}")

    step "Runs the command even when the user doesn't have permissions to access the pwd" do
      # Can't use apply_manifest_on here because that does not take the :cwd
      # as an option.
      tmpfile = agent.tmpfile("exec_user_perms_manifest")
      create_remote_file(agent, tmpfile, exec_resource_manifest(user: username))
      on(agent, "cd #{tmpdir} && puppet apply #{tmpfile} --detailed-exitcodes", acceptable_exit_codes: [0, 2])
    end

    step "Runs the command even when the user doesn't have permission to access the specified cwd" do
      apply_manifest_on(agent, exec_resource_manifest(user: username, cwd: tmpdir), catch_failures: true)
    end
  end
end