simplified sudo function
authorChris Koeritz <cak0l@virginia.edu>
Mon, 1 Jun 2020 14:19:23 +0000 (10:19 -0400)
committerChris Koeritz <cak0l@virginia.edu>
Mon, 1 Jun 2020 14:19:23 +0000 (10:19 -0400)
tossed out a lot of my changes after discovering the -i option to sudo, which starts a legitimate fresh shell of the type i needed.  now, the only weirdity i have to deal with is that the PATH variable still seems to be passed in from sudo even though i've asked for that fresh shell.  setting it to null prior to doing the sudo fixes that.  works a bit better now.

scripts/core/functions.sh
scripts/core/reconfigure_feisty_meow.sh
scripts/core/variables.sh

index baf8a1eab4f48d178ac86fd1f024968a9cbee592..3a2151b1f22a68814e360c62ecb334df16851911 100644 (file)
@@ -407,23 +407,44 @@ if [ -z "$skip_all" ]; then
   }
   
   # 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.
+  # label before we launch what they're passing to sudo.  we also preserve
+  # specific variables that enable the main user's ssh credentials to still
+  # be relied on for ssh forwarding, even if the '-i' flag is passed to cause
+  # a fresh shell (which normally doesn't get the launching user's environment
+  # variables).
+
+##questioning our approach: 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.
-    if [ ! -z "$DISPLAY" ]; then
+    # this can allow root to use our display to show X.org windows.
+    if [ -z "$IMPORTED_XAUTH" -a ! -z "$DISPLAY" ]; then
       export IMPORTED_XAUTH="$(xauth list $DISPLAY | head -n 1 | awk '{print $3}')"
     fi
+
+    # launch sudo with just the variables we want to reach the other side.
+    # we take an extra step to null out the PATH, since MacOS seems to want
+    # to pass that even for a login shell (-i) somehow.
+    PATH= /usr/bin/sudo --preserve-env=SSH_AUTH_SOCK,IMPORTED_XAUTH "$@"
+#"SSH_AUTH_SOCK='$SSH_AUTH_SOCK'" "IMPORTED_XAUTH='$IMPORTED_XAUTH'" "$@"
+    retval=$?
+
+    unset IMPORTED_XAUTH
+    restore_terminal_title
+    return $retval
+
+##potential boneyard:
     # prep a simple command string here, rather than messing with arguments
     # in the already complicated command below.  i was seeing some really
     # screwy behavior trying to expand $@ when embedded for the bash -c flag,
     # but making the variable ahead of time gets rid of that.
-    cmd="/usr/bin/sudo ""$@"
+    cmd="/usr/bin/sudo --preserve-env=SSH_AUTH_SOCK,IMPORTED_XAUTH ""$@"
 
     # 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
index 716e97be9982254051e47ee74a89a2b8e67dc331..b7e5dda07085f5c5fe0abb67c1bdff29d36dd8a2 100644 (file)
@@ -51,10 +51,9 @@ export PERLLIB=$(echo $PERLLIB | sed -e "s?\([:]*\)\([^:]*feisty_meow[^:]*\)\([:
 PERLLIB=$PERLLIB:"$FEISTY_MEOW_SCRIPTS/core":"$FEISTY_MEOW_SCRIPTS/files":"$FEISTY_MEOW_SCRIPTS/generator"
 PERL5LIB=$PERLLIB
 #echo PERLLIB after modification is $PERLLIB
+
 # make toast out of generated files right away, but leave any custom scripts.
-\rm "$FEISTY_MEOW_LOADING_DOCK"/fmc_*
-#NO! find "$FEISTY_MEOW_LOADING_DOCK" -maxdepth 1 -type f -exec perl "$FEISTY_MEOW_SCRIPTS/files/safedel.pl" "{}" ';'
-# &>/dev/null
+\rm -f "$FEISTY_MEOW_LOADING_DOCK"/fmc_*
 
 ## #no, old:
 ## if [ ! -d "$FEISTY_MEOW_LOADING_DOCK/custom" ]; then
index 333598add3883a36e6e44e062555b8639b169bff..8c21424f03e2333de834484c56a68f37101858e7 100644 (file)
@@ -288,7 +288,8 @@ define_yeti_variable DEFAULT_FEISTYMEOW_ORG_DIR=/opt/feistymeow.org
   
   # add to the PATH variables used for locating applications.  this step is taken after any
   # potential overrides from the user.
-  define_yeti_variable PATH="$(dos_to_unix_path $FEISTY_MEOW_LOADING_DOCK):$PATH:$(find /usr/local/games -maxdepth 1 -type d -exec echo -n {}: ';' 2>/dev/null)/sbin"
+#old:  define_yeti_variable PATH="$(dos_to_unix_path $FEISTY_MEOW_LOADING_DOCK):$PATH:$(find /usr/local/games -maxdepth 1 -type d -exec echo -n {}: ';' 2>/dev/null)/sbin"
+  define_yeti_variable PATH="$PATH:$(find /usr/local/games -maxdepth 1 -type d -exec echo -n {}: ';' 2>/dev/null)/sbin"
   
   ##############