Chromium Code Reviews| OLD | NEW |
|---|---|
| (Empty) | |
| 1 #!/bin/bash | |
| 2 | |
| 3 suid-python <<END | |
| 4 | |
| 5 import Foundation | |
| 6 import os | |
| 7 import subprocess | |
| 8 import tempfile | |
| 9 import time | |
| 10 | |
| 11 SERVICE_NAME = "org.chromium.chromoting" | |
|
garykac
2012/07/31 00:25:11
This is pretty much exactly the same as mock_pref_
yihongg1
2012/08/03 00:40:06
Done.
| |
| 12 | |
| 13 def is_job_running(): | |
| 14 process = subprocess.Popen(["launchctl", "list"], stdout=subprocess.PIPE) | |
| 15 is_running = False | |
| 16 for line in process.stdout: | |
| 17 # Format is: | |
| 18 # 12345 - my.job (if my.job is running, number is job's PID) | |
| 19 # - 0 my.other.job (if my.other.job is not running) | |
| 20 print "*** %s ***" % line | |
| 21 fields = line.strip().split('\t') | |
| 22 print "*** field 2=%s, field 0=%s ***" % (fields[2], fields[0]) | |
| 23 if fields[2] == SERVICE_NAME and fields[0] != "-": | |
| 24 is_running = True | |
| 25 break | |
| 26 process.wait() | |
| 27 return is_running | |
| 28 | |
| 29 print "*** Started mock pref pane ***" | |
| 30 print "*** EUID=%d, UID=%d ***" % (os.geteuid(), os.getuid()) | |
| 31 | |
| 32 config_file = os.path.join(tempfile.gettempdir(), | |
| 33 "%s.json" % SERVICE_NAME) | |
| 34 | |
| 35 print "*** config_file=%s" % config_file | |
| 36 | |
| 37 tool_script = "/Library/PrivilegedHelperTools/%s.me2me.sh" % SERVICE_NAME | |
| 38 | |
| 39 real_user_id = os.getuid() | |
| 40 | |
| 41 # Elevate privileges, otherwise tool_script executes with EUID != 0. | |
| 42 os.setuid(0) | |
| 43 subprocess.call([tool_script, "--enable"], stdin=open(config_file)) | |
| 44 | |
| 45 # Drop privileges, in order to start the launchd job as the logged-in user. | |
| 46 os.setuid(real_user_id) | |
| 47 subprocess.call(["launchctl", "start", SERVICE_NAME]) | |
| 48 | |
| 49 # Starting a launchd job is an asynchronous operation that typically takes | |
| 50 # a couple of seconds, so poll until the job has started. | |
| 51 is_running = False | |
| 52 for i in range(1, 10): | |
| 53 if is_job_running(): | |
| 54 is_running = True | |
| 55 break | |
| 56 time.sleep(2) | |
| 57 | |
| 58 print "*** is_runnning = %d" % is_running | |
| 59 | |
| 60 notification_center = Foundation.NSDistributedNotificationCenter.defaultCenter() | |
| 61 notification_center.postNotificationName_object_userInfo_( | |
| 62 SERVICE_NAME + ".update_succeeded", None, None) | |
| 63 | |
| 64 time.sleep(10) | |
| 65 | |
| 66 END | |
| OLD | NEW |