| OLD | NEW |
| 1 # Copyright (c) 2010 The Chromium OS Authors. All rights reserved. | 1 # Copyright (c) 2010 The Chromium OS Authors. All rights reserved. |
| 2 # Use of this source code is governed by a BSD-style license that can be | 2 # Use of this source code is governed by a BSD-style license that can be |
| 3 # found in the LICENSE file. | 3 # found in the LICENSE file. |
| 4 | 4 |
| 5 import time | 5 import time |
| 6 from autotest_lib.client.bin import site_login, test, utils | 6 from autotest_lib.client.bin import site_login, site_ui_test, utils |
| 7 from autotest_lib.client.common_lib import error | 7 from autotest_lib.client.common_lib import error |
| 8 | 8 |
| 9 class platform_ProcessPrivileges(test.test): | 9 class platform_ProcessPrivileges(site_ui_test.UITest): |
| 10 version = 1 | 10 version = 1 |
| 11 | 11 |
| 12 def setup(self): | 12 auto_login = False |
| 13 site_login.setup_autox(self) | |
| 14 | |
| 15 | 13 |
| 16 def run_once(self, process='X', user=None, run_as_root=False, | 14 def run_once(self, process='X', user=None, run_as_root=False, |
| 17 do_login=False, any=False): | 15 do_login=False, any=False): |
| 18 """Check if the process is running as the specified user / root. | 16 """Check if the process is running as the specified user / root. |
| 19 | 17 |
| 20 Args: | 18 Args: |
| 21 process: Process name to check. | 19 process: Process name to check. |
| 22 user: User process must run as; ignored if None. | 20 user: User process must run as; ignored if None. |
| 23 run_as_root: Is process allowed to run as root? | 21 run_as_root: Is process allowed to run as root? |
| 24 do_login: login before getting process information? | 22 do_login: login before getting process information? |
| 25 any: Test succeeds if any of processes satisfy the conditions. | 23 any: Test succeeds if any of processes satisfy the conditions. |
| 26 """ | 24 """ |
| 27 logged_in = site_login.logged_in() | 25 if do_login: |
| 28 | 26 self.login() |
| 29 if do_login and not logged_in: | |
| 30 # Test account information embedded into json file. | |
| 31 site_login.attempt_login(self, 'autox_script.json') | |
| 32 # Wait for processes for user-session are started. | 27 # Wait for processes for user-session are started. |
| 33 time.sleep(10) | 28 time.sleep(10) |
| 34 | 29 |
| 35 try: | 30 # Get the process information |
| 36 # Get the process information | 31 pscmd = 'ps -o f,euser,ruser,suser,fuser,comm -C %s --no-headers' |
| 37 pscmd = 'ps -o f,euser,ruser,suser,fuser,comm -C %s --no-headers' | 32 ps = utils.system_output(pscmd % process, retain_output=True) |
| 38 ps = utils.system_output(pscmd % process, retain_output=True) | |
| 39 | 33 |
| 40 pslines = ps.splitlines() | 34 pslines = ps.splitlines() |
| 41 | 35 |
| 42 # Fail if process is not running | 36 # Fail if process is not running |
| 43 if not len(pslines): | 37 if not len(pslines): |
| 44 raise error.TestFail('Process %s is not running' % process) | 38 raise error.TestFail('Process %s is not running' % process) |
| 45 | 39 |
| 46 # Check all instances of the process | 40 # Check all instances of the process |
| 47 for psline in pslines: | 41 for psline in pslines: |
| 48 ps = psline.split() | 42 ps = psline.split() |
| 49 | 43 |
| 50 # Assume process meets conditions until proven otherwise | 44 # Assume process meets conditions until proven otherwise |
| 51 user_satisfied = True | 45 user_satisfied = True |
| 52 run_as_root_satisfied = True | 46 run_as_root_satisfied = True |
| 53 | 47 |
| 54 # Fail if not running as the specified user | 48 # Fail if not running as the specified user |
| 55 if user is not None: | 49 if user is not None: |
| 56 for uid in ps[1:5]: | 50 for uid in ps[1:5]: |
| 57 if uid != user: | 51 if uid != user: |
| 58 if any: | 52 if any: |
| 59 user_satisfied = False | 53 user_satisfied = False |
| 60 break | 54 break |
| 61 raise error.TestFail( | 55 raise error.TestFail( |
| 62 'Process %s running as %s; expected %s' % | 56 'Process %s running as %s; expected %s' % |
| 63 (process, uid, user)) | 57 (process, uid, user)) |
| 64 | 58 |
| 65 # Check if process has super-user privileges | 59 # Check if process has super-user privileges |
| 66 if not run_as_root: | 60 if not run_as_root: |
| 67 # TODO(yusukes): Uncomment this once issue 2253 is resolved | 61 # TODO(yusukes): Uncomment this once issue 2253 is resolved |
| 68 # if int(ps[0]) & 0x04: | 62 # if int(ps[0]) & 0x04: |
| 69 # raise error.TestFail( | 63 # raise error.TestFail( |
| 70 # 'Process %s running with super-user flag' % | 64 # 'Process %s running with super-user flag' % |
| 71 # process) | 65 # process) |
| 72 if 'root' in ps: | 66 if 'root' in ps: |
| 73 if any: | 67 if any: |
| 74 run_as_root_satisfied = False | 68 run_as_root_satisfied = False |
| 75 continue | 69 continue |
| 76 raise error.TestFail( | 70 raise error.TestFail( |
| 77 'Process %s running as root' % process) | 71 'Process %s running as root' % process) |
| 78 | 72 |
| 79 # Check if conditions are met for "any" mode. | 73 # Check if conditions are met for "any" mode. |
| 80 if any and user_satisfied and run_as_root_satisfied: | 74 if any and user_satisfied and run_as_root_satisfied: |
| 81 break | 75 break |
| 82 else: | 76 else: |
| 83 if any: | 77 if any: |
| 84 raise error.TestFail( | 78 raise error.TestFail( |
| 85 'Conditions are not met for any process %s' % process) | 79 'Conditions are not met for any process %s' % process) |
| 86 | |
| 87 finally: | |
| 88 # If we started logged out, log back out. | |
| 89 if do_login and not logged_in: | |
| 90 site_login.attempt_logout() | |
| OLD | NEW |