blob: 0b067ee221c011784565c08297c9c6d6cfa0c993 [file] [log] [blame]
#!/bin/sh
#---------------------------------------------
# xdg-su
#
# Utility script to run a command as an alternate user, generally
# the root user, with a graphical prompt for the root
# password if needed
#
# Refer to the usage() function below for usage.
#
# Copyright 2009-2010, Fathi Boudra <fabo@freedesktop.org>
# Copyright 2009-2010, Rex Dieter <rdieter@fedoraproject.org>
# Copyright 2006, Jeremy White <jwhite@codeweavers.com>
# Copyright 2006, Kevin Krammer <kevin.krammer@gmx.at>
#
# LICENSE:
#
#---------------------------------------------
manualpage()
{
cat << _MANUALPAGE
_MANUALPAGE
}
usage()
{
cat << _USAGE
_USAGE
}
#@xdg-utils-common@
su_kde()
{
if [ x"$KDE_SESSION_VERSION" = x"4" ]; then
KDESU=`kde4-config --locate kdesu --path exe 2>/dev/null`
else
KDESU=`which kdesu 2>/dev/null`
fi
if [ $? -eq 0 ] ; then
if [ -z "$user" ] ; then
$KDESU -c "$cmd"
else
$KDESU -u "$user" -c "$cmd"
fi
if [ $? -eq 0 ]; then
exit_success
else
exit_failure_operation_failed
fi
else
su_generic
fi
}
su_gnome()
{
GSU=`which gnomesu 2>/dev/null`
if [ $? -ne 0 ] ; then
GSU=`which xsu 2>/dev/null`
fi
if [ $? -eq 0 ] ; then
if [ -z "$user" ] ; then
$GSU -c "$cmd"
else
$GSU -u "$user" -c "$cmd"
fi
if [ $? -eq 0 ]; then
exit_success
else
exit_failure_operation_failed
fi
else
su_generic
fi
}
su_generic()
{
if [ -z "$user" ] ; then
xterm -geom 60x5 -T "xdg-su: $cmd" -e su -c "$cmd"
else
xterm -geom 60x5 -T "xdg-su: $cmd" -e su -c "$cmd" "$user"
fi
if [ $? -eq 0 ]; then
exit_success
else
exit_failure_operation_failed
fi
}
[ x"$1" != x"" ] || exit_failure_syntax
user=
cmd=
while [ $# -gt 0 ] ; do
parm="$1"
shift
case "$parm" in
-u)
if [ -z "$1" ] ; then
exit_failure_syntax "user argument missing for -u"
fi
user="$1"
shift
;;
-c)
if [ -z "$1" ] ; then
exit_failure_syntax "command argument missing for -c"
fi
cmd="$1"
shift
;;
-*)
exit_failure_syntax "unexpected option '$parm'"
;;
*)
exit_failure_syntax "unexpected argument '$parm'"
;;
esac
done
if [ -z "${cmd}" ] ; then
exit_failure_syntax "command missing"
fi
detectDE
if [ x"$DE" = x"" ]; then
XSU=`which xsu 2>/dev/null`
if [ $? -eq 0 ] ; then
DE=generic
fi
fi
case "$DE" in
kde)
su_kde
;;
gnome|lxde)
su_gnome
;;
generic)
su_generic
;;
*)
[ x"$user" = x"" ] && user=root
exit_failure_operation_impossible "no graphical method available for invoking '$cmd' as '$user'"
;;
esac