Revert of Remove OneClickSigninHelper since it is no longer used. (patchset #5 id...
[chromium-blink-merge.git] / remoting / host / installer / mac / Scripts / remoting_postflight.sh
blob2790e470c07eb5ef19f651be43035725abdf5a35
1 #!/bin/sh
3 # Copyright (c) 2012 The Chromium Authors. All rights reserved.
4 # Use of this source code is governed by a BSD-style license that can be
5 # found in the LICENSE file.
7 # Version = @@VERSION@@
9 HELPERTOOLS=/Library/PrivilegedHelperTools
10 SERVICE_NAME=org.chromium.chromoting
11 CONFIG_FILE="$HELPERTOOLS/$SERVICE_NAME.json"
12 SCRIPT_FILE="$HELPERTOOLS/$SERVICE_NAME.me2me.sh"
13 USERS_TMP_FILE="$SCRIPT_FILE.users"
14 PLIST=/Library/LaunchAgents/org.chromium.chromoting.plist
15 PAM_CONFIG=/etc/pam.d/chrome-remote-desktop
16 ENABLED_FILE="$HELPERTOOLS/$SERVICE_NAME.me2me_enabled"
17 ENABLED_FILE_BACKUP="$ENABLED_FILE.backup"
18 LOG_FILE=/var/log/org.chromium.chromoting.log
20 KSADMIN=/Library/Google/GoogleSoftwareUpdate/GoogleSoftwareUpdate.bundle/Contents/MacOS/ksadmin
21 KSUPDATE=https://tools.google.com/service/update2
22 KSPID=com.google.chrome_remote_desktop
23 KSPVERSION=@@VERSION@@
25 function on_error {
26 logger An error occurred during Chrome Remote Desktop setup.
27 exit 1
30 function find_login_window_for_user {
31 # This function mimics the behaviour of pgrep, which may not be installed
32 # on Mac OS X.
33 local user=$1
34 ps -ec -u "$user" -o comm,pid | awk '$1 == "loginwindow" { print $2; exit }'
37 trap on_error ERR
38 trap 'rm -f "$USERS_TMP_FILE"' EXIT
40 logger Running Chrome Remote Desktop postflight script @@VERSION@@
42 # Register a ticket with Keystone to keep this package up to date.
43 $KSADMIN --register --productid "$KSPID" --version "$KSPVERSION" \
44 --xcpath "$PLIST" --url "$KSUPDATE"
46 # If there is a backup _enabled file, re-enable the service.
47 if [[ -f "$ENABLED_FILE_BACKUP" ]]; then
48 mv "$ENABLED_FILE_BACKUP" "$ENABLED_FILE"
51 # Create the PAM configuration unless it already exists and has been edited.
52 update_pam=1
53 CONTROL_LINE="# If you edit this file, please delete this line."
54 if [[ -f "$PAM_CONFIG" ]] && ! grep -qF "$CONTROL_LINE" "$PAM_CONFIG"; then
55 update_pam=0
58 if [[ "$update_pam" == "1" ]]; then
59 logger Creating PAM config.
60 cat > "$PAM_CONFIG" <<EOF
61 # Copyright (c) 2012 The Chromium Authors. All rights reserved.
62 # Use of this source code is governed by a BSD-style license that can be
63 # found in the LICENSE file.
65 auth required pam_deny.so
66 account required pam_permit.so
67 password required pam_deny.so
68 session required pam_deny.so
70 # This file is auto-updated by the Chrome Remote Desktop installer.
71 $CONTROL_LINE
72 EOF
73 else
74 logger PAM config has local edits. Not updating.
77 # Create the log file (if this isn't created ahead of time
78 # then directing output from the service there won't work).
79 # Make sure admins have write privileges (CRD users are
80 # typically admins)
81 touch "$LOG_FILE"
82 chown :admin "$LOG_FILE"
83 chmod 660 "$LOG_FILE"
85 # Load the service for each user for whom the service was unloaded in the
86 # preflight script (this includes the root user, in case only the login screen
87 # is being remoted and this is a Keystone-triggered update).
88 # Also, in case this is a fresh install, load the service for the user running
89 # the installer, so they don't have to log out and back in again.
90 if [[ -n "$USER" && "$USER" != "root" ]]; then
91 id -u "$USER" >> "$USERS_TMP_FILE"
94 if [[ -r "$USERS_TMP_FILE" ]]; then
95 for uid in $(sort "$USERS_TMP_FILE" | uniq); do
96 logger Starting service for user "$uid".
98 if [[ "$uid" = "0" ]]; then
99 context="LoginWindow"
100 else
101 context="Aqua"
104 # Load the launchd agent in the bootstrap context of user $uid's graphical
105 # session, so that screen-capture and input-injection can work. To do this,
106 # find the PID of a process which is running in that context. The
107 # loginwindow process is a good candidate since the user (if logged in to
108 # a session) will definitely be running it.
109 pid="$(find_login_window_for_user "$uid")"
110 if [[ -n "$pid" ]]; then
111 launchctl bsexec "$pid" sudo -u "#$uid" launchctl load -w -S Aqua "$PLIST"
112 launchctl bsexec "$pid" sudo -u "#$uid" launchctl start "$SERVICE_NAME"
114 done