aboutsummaryrefslogtreecommitdiff
path: root/tools/Linux/packaging/debian/xbmc-live.postinst
blob: 6f5a02401355b79a73f7e1c464ff318c4a993510 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
#!/bin/sh
# postinst script for xbmc-live
#
# see: dh_installdeb(1)

set -e

case "$1" in
    configure)
	# TODO: What's the purpose of this line? As I see it, if 'xbmc' can't
	# get a console session going, we're in trouble anyway. ceros
	sed -i.bak-xbmc-live s/allowed_users=console/allowed_users=anybody/ /etc/X11/Xwrapper.config

	# Add the 'xbmc' user if the primary one is missing
	xbmcUser=$(getent passwd 1000 | sed -e 's/\:.*//')
	if [ ! -n "$xbmcUser" ]; then
		clearTextPWD=xbmc
		encryptedPWD=$(echo $clearTextPWD | mkpasswd -s)

		adduser --disabled-password --gecos "XBMC Live User" xbmc
		usermod -p $encryptedPWD xbmc

		xbmcUser=xbmc
	fi

	# Add 'xbmcUser' user to the appropriate groups
	# Below is a listing of groups and their purpose
	# adm - For reading system logs (minimal systems may have this user only)
	# sudo - allow optional passwordless sudo (with trivial intervention on /etc/sudoers)
	# cdrom - optical disc drive access
	# floppy - floppy drive access
	# audio - audio device access
	# video - video device access
	# plugdev - enable automatic notifications of new devices
	# netdev - managing network connections via NetworkManager
	# powerdev - to be able to hibernate/suspend
	# fuse - to be able to mount filesystems as normal user
	GROUPS="adm
		sudo
		cdrom
		floppy
		audio
		video
		plugdev
		netdev
		powerdev
		fuse"

	# TODO: this probably isn't necessary anymore as PolicyKit is now being
	# used
	for GROUP in $GROUPS; do
		if getent group $GROUP >/dev/null && \
			! getent group $GROUP | grep -q $xbmcUser; then
			adduser $xbmcUser $GROUP
		fi
	done

	# Add xbmc to the sudoers file (if not already done)
	if ! grep -i -q XBMC-specific /etc/sudoers ; then
		echo "" >> /etc/sudoers
		echo "# XBMC" >> /etc/sudoers
		echo "# XBMC-specific configuration" >> /etc/sudoers
		echo "# XBMC" >> /etc/sudoers
		echo "Cmnd_Alias SHUTDOWN_CMDS = /sbin/shutdown, /sbin/reboot, /sbin/halt # XBMC"  >> /etc/sudoers
		echo "Cmnd_Alias MOUNT_CMDS = /bin/mount, /bin/umount # XBMC" >> /etc/sudoers
		echo "$xbmcUser ALL=(ALL) ALL" >> /etc/sudoers
		echo "$xbmcUser ALL=NOPASSWD: SHUTDOWN_CMDS, MOUNT_CMDS # XBMC" >> /etc/sudoers
	fi

	# Our set of PolicyKit actions

	# This is a list of actions that the 'xbmc' user should be allowed to
	# do. If we missed one, or we have one that's not necessary, please
	# submit a bug report.
	POLKIT_ACTIONS="org.freedesktop.hal.dockstation.undock
		org.freedesktop.hal.wol.enabled
		org.freedesktop.hal.wol.enable
		org.freedesktop.hal.wol.supported
		org.freedesktop.hal.leds.brightness
		org.freedesktop.hal.device-access.audio-player
		org.freedesktop.hal.device-access.camera
		org.freedesktop.hal.device-access.cdrom
		org.freedesktop.hal.device-access.dvb
		org.freedesktop.hal.device-access.fingerprint-reader
		org.freedesktop.hal.device-access.floppy
		org.freedesktop.hal.device-access.ieee1394-avc
		org.freedesktop.hal.device-access.ieee1394-iidc
		org.freedesktop.hal.device-access.joystick
		org.freedesktop.hal.device-access.mouse
		org.freedesktop.hal.device-access.obex
		org.freedesktop.hal.device-access.pda
		org.freedesktop.hal.device-access.printer
		org.freedesktop.hal.device-access.scanner
		org.freedesktop.hal.device-access.sound
		org.freedesktop.hal.device-access.video
		org.freedesktop.hal.device-access.video4linux
		org.freedesktop.hal.lock
		org.freedesktop.hal.killswitch.bluetooth
		org.freedesktop.hal.killswitch.wlan
		org.freedesktop.hal.killswitch.wwan
		org.freedesktop.hal.storage.mount-removable
		org.freedesktop.hal.storage.eject
		org.freedesktop.hal.storage.crypto-setup-removable
		org.freedesktop.hal.power-management.shutdown
		org.freedesktop.hal.power-management.reboot
		org.freedesktop.hal.power-management.set-powersave
		org.freedesktop.hal.power-management.suspend
		org.freedesktop.hal.power-management.hibernate
		org.freedesktop.hal.power-management.cpufreq
		org.freedesktop.hal.power-management.lcd-panel
		org.freedesktop.hal.power-management.light-sensor
		org.freedesktop.hal.power-management.keyboard-backlight
		org.freedesktop.devicekit.power.suspend
		org.freedesktop.devicekit.power.Hibernate
		org.freedesktop.consolekit.system.stop"

	# Grant the 'xbmc' user each action from the list if not done already
	for ACTION in $POLKIT_ACTIONS; do
		if polkit-auth --user $xbmcUser --show-obtainable | \
			grep -q $ACTION; then
			polkit-auth --user $xbmcUser --grant $ACTION
		fi
	done
    ;;

    abort-upgrade|abort-remove|abort-deconfigure)
    ;;

    *)
        echo "postinst called with unknown argument \`$1'" >&2
        exit 1
    ;;
esac

# Upstart scripts tested on karmic only and not backward compatible ATM
if [ "$(lsb_release -c | grep karmic)" ]; then
	if [ -f "/etc/init.d/xbmc-live" ]; then
		rm /etc/init.d/xbmc-live >/dev/null
		update-rc.d -f xbmc-live remove >/dev/null
	fi

	ln -s /lib/init/upstart-job /etc/init.d/xbmc-live
else
	if [ -f "/etc/init/xbmc-live.conf" ]; then
		rm /etc/init/xbmc-live.conf >/dev/null
	fi
	if [ -f "/etc/init/xbmc-live-install" ]; then
		rm /etc/init/xbmc-live-install.conf >/dev/null
	fi

	if [ -x "/etc/init.d/xbmc-live" ]; then
		update-rc.d xbmc-live defaults >/dev/null
		if [ -x "`which invoke-rc.d 2>/dev/null`" ]; then
			invoke-rc.d xbmc-live start || exit $?
		else
			/etc/init.d/xbmc-live start || exit $?
		fi
	fi
fi

# dh_installdeb will replace this with shell code automatically
# generated by other debhelper scripts.

#DEBHELPER#

exit 0