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):
|
def match(self, userargs):
|
||||||
"""Only check that the first argument (command) matches exec_path."""
|
"""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):
|
def preexec(self):
|
||||||
"""Setuid in subprocess right before command is invoked."""
|
"""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_out, out)
|
||||||
self.assertEqual(expect_err, err)
|
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):
|
def test_run_command_not_found(self):
|
||||||
code, out, err = self.execute(['unknown_cmd'])
|
code, out, err = self.execute(['unknown_cmd'])
|
||||||
self.assertEqual(cmd.RC_NOEXECFOUND, code)
|
self.assertEqual(cmd.RC_NOEXECFOUND, code)
|
||||||
|
Loading…
Reference in New Issue
Block a user