uncommited
This commit is contained in:
117
arch-user/bin/wsudo
Executable file
117
arch-user/bin/wsudo
Executable file
@@ -0,0 +1,117 @@
|
||||
#!/bin/bash
|
||||
|
||||
parse() {
|
||||
sudo_user="root"
|
||||
sudo_command=""
|
||||
sudo_login_shell=""
|
||||
local args=("$@")
|
||||
local i=0
|
||||
local arg_count=${#args[@]}
|
||||
while [[ $i -lt $arg_count ]]; do
|
||||
case "${args[$i]}" in
|
||||
-u|--user)
|
||||
((i++))
|
||||
if [[ $i -lt $arg_count ]]; then
|
||||
sudo_user="${args[$i]}"
|
||||
fi
|
||||
((i++))
|
||||
;;
|
||||
-i|--login)
|
||||
sudo_login_shell=true
|
||||
((i++))
|
||||
;;
|
||||
-s|--shell)
|
||||
((i++))
|
||||
;;
|
||||
--)
|
||||
((i++))
|
||||
sudo_command="${args[*]:$i}"
|
||||
break
|
||||
;;
|
||||
-*)
|
||||
((i++))
|
||||
;;
|
||||
su)
|
||||
((i++))
|
||||
local su_user=""
|
||||
while [[ $i -lt $arg_count ]]; do
|
||||
case "${args[$i]}" in
|
||||
-|-l|--login)
|
||||
sudo_login_shell=true
|
||||
((i++))
|
||||
;;
|
||||
-c|--command)
|
||||
((i++))
|
||||
if [[ $i -lt $arg_count ]]; then
|
||||
sudo_command="${args[$i]}"
|
||||
((i++))
|
||||
fi
|
||||
;;
|
||||
--session-command=*)
|
||||
sudo_command="${args[$i]#*=}"
|
||||
((i++))
|
||||
;;
|
||||
-m|-p|--preserve-environment)
|
||||
((i++))
|
||||
;;
|
||||
-s|--shell)
|
||||
((i++))
|
||||
if [[ $i -lt $arg_count && "${args[$i]}" != -* ]]; then
|
||||
((i++))
|
||||
fi
|
||||
;;
|
||||
-*)
|
||||
((i++))
|
||||
;;
|
||||
*)
|
||||
if [[ -z "$su_user" ]]; then
|
||||
su_user="${args[$i]}"
|
||||
((i++))
|
||||
else
|
||||
((i++))
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
done
|
||||
if [[ -n "$su_user" ]]; then
|
||||
sudo_user="$su_user"
|
||||
fi
|
||||
break
|
||||
;;
|
||||
*)
|
||||
sudo_command="${args[*]:$i}"
|
||||
break
|
||||
;;
|
||||
esac
|
||||
done
|
||||
}
|
||||
parse "$@"
|
||||
|
||||
[ -z "$WSCOMPAT_MASTER" ] && WSCOMPAT_MASTER="$(whoami)"
|
||||
read -r -d '' init_cmd << WSCOMPAT_EOF_9oqn7IVF || true
|
||||
export WS_IS_COMPAT=1
|
||||
export WSCOMPAT_MASTER="$WSCOMPAT_MASTER"
|
||||
export WSCOMPAT_DIR="/tmp/wscompat_${WSCOMPAT_MASTER}_\$(whoami)"
|
||||
rm -rf "\$WSCOMPAT_DIR" && mkdir -p "\$WSCOMPAT_DIR" && chmod 700 "\$WSCOMPAT_DIR"
|
||||
cat << 'WSCOMPAT_EOF_84EbM3la' > "\$WSCOMPAT_DIR/profile"
|
||||
$(
|
||||
sed 's/WSCOMPAT_EOF_/WSCOMPAT_EOF__/g' "$WSCOMPAT_DIR/profile"
|
||||
for file in "$WSCOMPAT_DIR.profile"*.sh; do
|
||||
if [ -f "$file" ]; then
|
||||
sed 's/WSCOMPAT_EOF_/WSCOMPAT_EOF__/g' "$file"
|
||||
fi
|
||||
done
|
||||
)
|
||||
WSCOMPAT_EOF_84EbM3la
|
||||
. \$WSCOMPAT_DIR/profile
|
||||
WSCOMPAT_EOF_9oqn7IVF
|
||||
|
||||
if [ -z "$sudo_command" ]; then
|
||||
sudo_command="exec /bin/bash --rcfile \"\$WSCOMPAT_DIR/bashrc\""
|
||||
fi
|
||||
if [ "$sudo_login_shell" ]; then
|
||||
bash_flags="--login --noprofile --norc";
|
||||
else
|
||||
bash_flags="--noprofile --norc";
|
||||
fi
|
||||
exec /bin/sudo -u "$sudo_user" /bin/bash $bash_flags -c "$init_cmd; $sudo_command"
|
||||
Reference in New Issue
Block a user