CommandFilter should allow exec from full path
The current logic prevents from using a full path as argument. We can't just compare basename to basename as it would allow passing bogus paths. We need to make sure that passing a full path will compare to the config's full path. Closes-Bug: #1956606 Change-Id: I76094065de5b37f59a2500fbce7f500ada9915da
This commit is contained in:
parent
25fcff997b
commit
1b1b960d0d
@ -74,7 +74,11 @@ class CommandFilter(object):
|
||||
|
||||
def match(self, userargs):
|
||||
"""Only check that the first argument (command) matches exec_path."""
|
||||
return userargs and os.path.basename(self.exec_path) == userargs[0]
|
||||
if userargs:
|
||||
base_path_matches = os.path.basename(self.exec_path) == userargs[0]
|
||||
exact_path_matches = self.exec_path == userargs[0]
|
||||
return exact_path_matches or base_path_matches
|
||||
return False
|
||||
|
||||
def preexec(self):
|
||||
"""Setuid in subprocess right before command is invoked."""
|
||||
|
@ -89,6 +89,14 @@ later_install_cmd: CommandFilter, %s, root
|
||||
self.assertEqual(expect_out, out)
|
||||
self.assertEqual(expect_err, err)
|
||||
|
||||
def test_run_with_path(self):
|
||||
code, out, err = self.execute(['/bin/echo', 'teststr'])
|
||||
self.assertEqual(0, code)
|
||||
|
||||
def test_run_with_bogus_path(self):
|
||||
code, out, err = self.execute(['/home/bob/bin/echo', 'teststr'])
|
||||
self.assertEqual(cmd.RC_UNAUTHORIZED, code)
|
||||
|
||||
def test_run_command_not_found(self):
|
||||
code, out, err = self.execute(['unknown_cmd'])
|
||||
self.assertEqual(cmd.RC_NOEXECFOUND, code)
|
||||
|
Loading…
Reference in New Issue
Block a user