Make KillFilter to handle 'deleted' w/o rstrip.

The initial code for this fixed used rstrip incorrectly.
This implementation uses endswith and rindex instead
and should read a bit more easily.

Also added a unit test to test that 'deleted' exe's are
filtered correctly.

Fixes LP Bug #967931.

Change-Id: I1783a8e2d59edd35734673b23e295f5a0b80b988
This commit is contained in:
Dan Prince 2012-04-27 09:36:34 -04:00
parent 8972e9544d
commit 3d28e3d3f9
2 changed files with 16 additions and 1 deletions

View File

@ -119,7 +119,8 @@ class KillFilter(CommandFilter):
command = os.readlink("/proc/%d/exe" % int(args[1]))
# NOTE(dprince): /proc/PID/exe may have ' (deleted)' on
# the end if an executable is updated or deleted
command = command.rstrip(" (deleted)")
if command.endswith(" (deleted)"):
command = command[:command.rindex(" ")]
if command not in self.args[1]:
# Affected executable not in accepted list
return False

View File

@ -103,6 +103,20 @@ class RootwrapTestCase(test.TestCase):
usercmd = ['kill', 'notapid']
self.assertFalse(f.match(usercmd))
def test_KillFilter_deleted_exe(self):
"""Makes sure deleted exe's are killed correctly"""
# See bug #967931.
def fake_readlink(blah):
return '/bin/commandddddd (deleted)'
f = filters.KillFilter("/bin/kill", "root",
[""],
["/bin/commandddddd"])
usercmd = ['kill', 1234]
# Providing no signal should work
self.stubs.Set(os, 'readlink', fake_readlink)
self.assertTrue(f.match(usercmd))
def test_ReadFileFilter(self):
goodfn = '/good/file.name'
f = filters.ReadFileFilter(goodfn)