-
Notifications
You must be signed in to change notification settings - Fork 0
/
yadsu
52 lines (42 loc) · 1.06 KB
/
yadsu
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
#! /bin/bash
# some defaults
user="root"
suargs="-p"
force="no"
# parse commandline
if [[ $# -eq 0 ]]; then
echo "Usage: ${0##*/} [-f] [-u user] [--] "
exit 1
fi
OPTIND=1
while getopts u: opt; do
case "$opt" in
f) force="yes" ;;
u) user="$OPTARG" ;;
esac
done
shift $((OPTIND - 1))
cmd="$*"
if [[ $force != "no" ]]; then
# check for sudo
sudo_check=$(sudo -H -S -- echo SUDO_OK 2>&1 &)
if [[ $sudo_check == "SUDO_OK" ]]; then
eval sudo $cmd
exit $?
fi
fi
# get password
pass=$(yad --class="GSu" \
--title="Password" \
--text="Enter password for <b>$user</b>:" \
--image="dialog-password" \
--entry --hide-text)
[[ -z "$pass" ]] && exit 1
# grant access to xserver for specified user
xhost +${user}@ &> /dev/null
# run command
fifo_in="$(mktemp -u --tmpdir gsu.empty.in.XXXXXXXXX)"
fifo_out="$(mktemp -u --tmpdir gsu.empty.out.XXXXXXXXX)"
LC_MESSAGES=C empty -f -i $fifo_in -o $fifo_out su $suargs $user -c "$cmd"
[[ $? -eq 0 ]] && empty -w -i $fifo_out -o $fifo_in "word:" "$pass\n"
exit $?