X-Git-Url: https://feistymeow.org/gitweb/?a=blobdiff_plain;f=scripts%2Fcore%2Ffunctions.sh;h=d392c23410c996b9c5d9273e17eb6cb330c6eb70;hb=60f032e75addcfbffaf0399b512bf37c10ebc8c6;hp=7b72855c47cfe7aa04e041c082d66bcab77f1dec;hpb=aaebc44a16ce6b28dc18f2a5329f4b1e3de340c7;p=feisty_meow.git diff --git a/scripts/core/functions.sh b/scripts/core/functions.sh index 7b72855c..d392c234 100644 --- a/scripts/core/functions.sh +++ b/scripts/core/functions.sh @@ -33,6 +33,20 @@ if [ -z "$skip_all" ]; then date +"%Y$sep%m$sep%d$sep%H%M$sep%S" | tr -d '/\n/' } + # a wrapper for the which command that finds items on the path. some OSes + # do not provide which, so we want to not be spewing errors when that + # happens. + function whichable() + { + to_find="$1"; shift + local WHICHER="$(\which which 2>/dev/null)" + if [ $? -ne 0 ]; then + # there is no which command here. we produce nothing due to this. + echo + fi + echo $($WHICHER $to_find 2>/dev/null) + } + # makes a directory of the name specified and then tries to change the # current directory to that directory. function mcd() { @@ -211,7 +225,7 @@ if [ -z "$skip_all" ]; then # local oldterm="$TERM" # export TERM=linux - /usr/bin/ssh -X -C "${args[@]}" + /usr/bin/ssh -Y -C "${args[@]}" # # restore the terminal variable also. # TERM="$oldterm" @@ -355,22 +369,6 @@ if [ -z "$skip_all" ]; then done } -#hmmm: not really doing anything yet; ubuntu seems to have changed from pulseaudio in 17.04? - # restarts the sound driver. - function fix_sound_driver() { - # stop bash complaining about blank function body. - local nothing= -#if alsa something -# sudo service alsasound restart -#elif pulse something -# sudo pulseaudio -k -# sudo pulseaudio -D -#else -# something else...? -#fi - - } - function screen() { save_terminal_title #hmmm: ugly absolute path here. @@ -422,62 +420,35 @@ if [ -z "$skip_all" ]; then fi } -#bork # su function: makes su perform a login. -#bork # for some OSes, this transfers the X authority information to the new login. -#bork function su() { -#bork if debian_like; then -#bork # debian currently requires the full version which imports X authority -#bork # information for su. -#bork -#bork # get the x authority info for our current user. -#bork source "$FEISTY_MEOW_SCRIPTS/security/get_x_auth.sh" -#bork -#bork if [ -z "$X_auth_info" ]; then -#bork # if there's no authentication info to pass along, we just do a normal su. -#bork /bin/su -l $* -#bork else -#bork # under X, we update the new login's authority info with the previous -#bork # user's info. -#bork (unset XAUTHORITY; /bin/su -l $* -c "$X_auth_info ; export DISPLAY=$DISPLAY ; bash") -#bork fi -#bork else -#bork # non-debian supposedly doesn't need the extra overhead any more. -#bork # or at least suse doesn't, which is the other one we've tested on. -#bork /bin/su -l $* -#bork fi -#bork } - # 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). 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}')" + local REMOVE_IMP_XAUTH=true 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. + + # 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. + local varmods="PATH= " + if [ ! -z "$IMPORTED_XAUTH" ]; then varmods+="IMPORTED_XAUTH=$IMPORTED_XAUTH "; fi + if [ ! -z "$SSH_AUTH_SOCK" ]; then varmods+="SSH_AUTH_SOCK=$SSH_AUTH_SOCK"; fi + /usr/bin/sudo $varmods "$@" retval=$? + + # take the xauth info away again if it wasn't set already. + if [ ! -z "$REMOVE_IMP_XAUTH" ]; then + unset IMPORTED_XAUTH + fi restore_terminal_title return $retval } @@ -492,7 +463,7 @@ if [ -z "$skip_all" ]; then # overlay for nechung binary so that we can complain less grossly about it when it's missing. function nechung() { - local wheres_nechung=$(which nechung 2>/dev/null) + local wheres_nechung=$(whichable nechung) if [ -z "$wheres_nechung" ]; then echo "The nechung oracle program cannot be found. You may want to consider" echo "rebuilding the feisty meow applications with this command:" @@ -608,20 +579,6 @@ automatic if there is even a small amount of doubt about the issue." echo } - # a wrapper for the which command that finds items on the path. some OSes - # do not provide which, so we want to not be spewing errors when that - # happens. - function whichable() - { - to_find="$1"; shift - which which &>/dev/null - if [ $? -ne 0 ]; then - # there is no which command here. we produce nothing due to this. - echo - fi - echo $(which $to_find) - } - function add_cygwin_drive_mounts() { for i in c d e f g h q z ; do #hmmm: improve this by not adding the link if already there, or if the drive is not valid. @@ -877,7 +834,7 @@ return 0 this_host=$(hostname) elif [ ! -z "$(echo $MACHTYPE | grep suse)" ]; then this_host=$(hostname --long) - elif [ -x "$(which hostname 2>/dev/null)" ]; then + elif [ -x "$(whichable hostname)" ]; then this_host=$(hostname) fi echo "$this_host" @@ -986,6 +943,28 @@ return 0 ############## + # you have hit the borderline functional zone... + +#hmmm: not really doing anything yet; ubuntu seems to have changed from pulseaudio in 17.04? + # restarts the sound driver. + function fix_sound_driver() { + # stop bash complaining about blank function body. + local nothing= +#if alsa something +# sudo service alsasound restart +#elif pulse something +# sudo pulseaudio -k +# sudo pulseaudio -D +#else +# something else...? +#fi + + } + + # ...and here's the end of the borderline functional zone. + + ############## + # NOTE: no more function definitions are allowed after this point. function function_sentinel()