aboutsummaryrefslogtreecommitdiff
blob: c187336acc2c9c28341d118731e571f29eb33830 (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
#!/bin/bash
#
# $Header: /var/cvsroot/gentoo/src/installer/bin/installer,v 1.4 2006/07/19 23:43:25 wolf31o2 Exp $
#
# This is the installer script that we will use to determine whether or not
# we are running in X or as root.  A good portion of this script was ripped
# from the loki_setup setup.sh script, as it already did most of what I was
# looking to do.

installer_root=/opt/installer

# Allow X
xhost +localhost 2>/dev/null

# patching utf-8 locales
if test ! ${UTF8FIX} ; then
LANG=`echo ${LANG} | sed 's/[\@\.].*$//'`
fi

# Go to the proper setup directory (if not already there)
#cd `dirname $0`
cd $installer_root/bin

# call installer with -auth when ran through su/xsu/sudo
auth=0
if [ "${1}" == "-auth" ]; then
	auth=1
	shift
fi

# we see if we were called with a specific front-end
launch=
if [ "${1}" == "gtk" ]; then
	launch=gtk
	shift
elif [ "${1}" == "dialog" ]; then
	launch=dialog
	shift
fi

# Find the installation program
# try_run INSTALLER_NAME [PARAMETERS_PASSED]
#   INSTALLER_NAME: installer-gtk or installer-dialog
#   PARAMETERS_PASSED: additional arguments passed to the setup script
try_run() {
	setup=$1
	shift

	failed=0
	"$setup" "$@" 2>/dev/null
	failed="$?"
	return "$failed"
}

if [ "$auth" -eq 0 ]; then
	GOT_ROOT=`id -u`
	if [ "$GOT_ROOT" != "0" ]; then
		# first we try sudo
		try_run /usr/bin/sudo env DISPLAY=":0.0" su -c "$installer_root/bin/installer -auth ${launch}"
		status="$?"
		if [ "$status" -eq 0 ]; then
			exit 0
		elif [ "$status" -eq 1 ]; then
			try_run /usr/bin/gnomesu -u root -c "sh $installer_root/bin/installer -auth ${launch}"
			status="$?"
			# If try_run successfully executed gnomesu, it will return gnomesu's
			# exit code.
			if [ "$status" -eq 0 ]; then
				exit 0
			elif [ "$status" -eq 1 ]; then
				try_run /usr/bin/xsu -e -a -u root -c "sh $installer_root/bin/installer -auth ${launch}"
				status="$?"
				# xsu returns 2 if ran and cancelled (i.e. the user 'doesn't
				# want' to auth).  it will return 0 if the command was executed
				# correctly
				# summing up, if we get 1, something failed
				if [ "$status" -eq 0 ]; then
					exit 0
				elif [ "$status" -eq 1 ]; then
					# xsu wasn't found, or failed to run
					# if xsu actually ran and the auth was cancelled,
					# $status is 2
					echo "You need to run this installation as the super user."
					echo "Please enter the root password."
					try_run /bin/su root -c "export DISPLAY=$DISPLAY;sh $installer_root/bin/installer -auth ${launch}"
					status="$?"
					if [ "$status" -eq 0 ]; then
						# the auth command was properly executed
						exit 0
					else
						exit 1
					fi
				elif [ "$status" -eq 3 ]; then
					# the auth failed or was canceled
					# we don't want to even start the setup if not root
					echo "Please run this installation as the super user"
					exit 1
				fi
			elif [ "$status" -eq 3 ]; then
				echo "Please run this installation as the super user"
				exit 1
			fi
		fi
	fi
fi
if [ -z "${launch}" ]; then
	# Try to run the gtk installer
	try_run /usr/bin/installer-gtk $args $*
	status=$?
	if [ $status -eq 1 ]; then
		try_run /usr/bin/installer-dialog $args $* || {
			if [ $status -ne 2 ]; then
				echo "The setup program seems to have failed"
			fi
			status=1
		}
	fi
else
	# Try to run the installer script asked for when launched
	try_run /usr/bin/installer-${launch} $args $* || {
		if [ $status -ne 2 ]; then
			echo "The setup program seems to have failed"
		fi
		status=1
	}
fi
exit $status