From 5cf92aab81bd652d22783e0cf3725e1bd9722526 Mon Sep 17 00:00:00 2001 From: Chris Koeritz Date: Tue, 26 May 2020 23:05:46 -0400 Subject: [PATCH] vital fixes to sudo function not sure the initial thrust is done yet, of having root not get a pile of wrong feisty meow variables when i sudo to it with -E flag, but this does at least get the shell options to not still expand for the one case we need. we will fix that to be more specific to enable mac to participate, since mac does actually need aliases expanded. this also crucially fixes the IMPORTED_XAUTH variable which may never have been working right before? saw a multi-line answer on my host, so taking just the first line of output. not sure that's right yet, but we can't have multiple lines when we add the things in xauth the way we do it now. --- scripts/core/functions.sh | 36 ++++++++++++++++++++++-------- scripts/core/launch_feisty_meow.sh | 2 +- 2 files changed, 28 insertions(+), 10 deletions(-) diff --git a/scripts/core/functions.sh b/scripts/core/functions.sh index e56d8c5f..24b162ef 100644 --- a/scripts/core/functions.sh +++ b/scripts/core/functions.sh @@ -199,7 +199,7 @@ if [ -z "$skip_all" ]; then # wraps secure shell with some parameters we like, most importantly to enable X forwarding. function ssh() { - local args=($*) + local args=($@) # we remember the old terminal title, then force the TERM variable to a more generic # version for the other side (just 'linux'); we don't want the remote side still # thinking it's running xterm. @@ -447,20 +447,38 @@ if [ -z "$skip_all" ]; then fi } - # sudo function wraps the normal sudo by ensuring we replace the terminal - # label if they're doing an su with the sudo. + # this function wraps the normal sudo by ensuring we replace the terminal + # label before we launch what they're passing to sudo. we also ensure that + # the feisty meow environment is recreated; normal subshells don't need + # this, but when switching identity with sudo, it seems important. yet, + # we also don't want to hose up their normal sudo actions, such as passing + # along the current environment, should the user choose. function sudo() { save_terminal_title # hoist our X authorization info in case environment is passed along; # this can allow root to use our display to show Xorg windows. - export IMPORTED_XAUTH="$(xauth list $DISPLAY)" - /usr/bin/sudo "$@" + if [ ! -z "$DISPLAY" ]; then + export IMPORTED_XAUTH="$(xauth list $DISPLAY | head -n 1 | awk '{print $3}')" + fi + # prep a simple string here, rather than messing with arguments in the + # already complicated command below. + cmd="/usr/bin/sudo ""$@" + + # omit any variables that are either wrong for a different user or used + # to shield the feisty meow scripts from reconfiguring. when we do the + # sudo, we want a fresh start for feisty meow at least. this approach + # is complicated by our sentinel alias, which normally is passed to any + # subshells. + BUILD_VARS_LOADED= \ + CORE_VARIABLES_LOADED= \ + FEISTY_MEOW_SCRIPTS_LOADED= \ + function_sentinel= \ + MAIL= \ + bash +O expand_aliases -c "$cmd" + # the above does cause an extra shell, but we need it to work + # identically to the normal sudo syntax, and that gets us this. retval=$? restore_terminal_title -# if [ "$first_command" == "su" ]; then -# # yep, they were doing an su, but they're back now. -# label_terminal_with_info -# fi return $retval } diff --git a/scripts/core/launch_feisty_meow.sh b/scripts/core/launch_feisty_meow.sh index aef7f199..1e7e6c99 100644 --- a/scripts/core/launch_feisty_meow.sh +++ b/scripts/core/launch_feisty_meow.sh @@ -104,7 +104,7 @@ if [ "$NO_REPAIRS_NEEDED" == "true" ]; then # this allows root or other su'd identities to create windows with same # display variable. if [ ! -z "$DISPLAY" -a ! -z "$IMPORTED_XAUTH" ]; then - xauth add $IMPORTED_XAUTH + xauth add $DISPLAY . $IMPORTED_XAUTH fi ############## -- 2.34.1