From 02b482b6d150116d0c581b9a46ceacc374f2e0eb Mon Sep 17 00:00:00 2001 From: Iain Patterson Date: Tue, 26 Apr 2016 17:28:03 +0100 Subject: [PATCH] Handle case where become script is unreadable. If the profile directory is not accessible to the target user it won't be possible to run became. Use the -d flag to specify an alternative directory in which became can be found. --- opt/bin/become | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/opt/bin/become b/opt/bin/become index 4b1c0dc..ea4926d 100755 --- a/opt/bin/become +++ b/opt/bin/become @@ -3,21 +3,29 @@ chdir=0 kerberos=0 x11=0 -while getopts ":kx" opt; do +dir= +while getopts ":cd:kx" opt; do case $opt in c) chdir=1;; + d) dir=$OPTARG;; k) kerberos=1;; x) x11=1;; esac done shift $((OPTIND-1)) +if [ -z "$dir" ]; then + dir=${0%/*} + [ "$dir" = "$0" -o "$dir" = "." ] && dir=$PWD +fi + user="$1"; shift if [ -z "$user" ]; then - echo >&2 "Usage: become [-c] [-k] [-x] " - echo >&2 "Options: -c Stay in current directory even if target user is not root." - echo >&2 " -k Delegate Kerberos credentials even if target user is not root." - echo >&2 " -x Delegate X11 cookie even if target user is not root." + echo >&2 "Usage: become [-c] [-d ] [-k] [-x] " + echo >&2 "Options: -c Stay in current directory even if target user is not root." + echo >&2 " -d Look for \"became\" script in given directory." + echo >&2 " -k Delegate Kerberos credentials even if target user is not root." + echo >&2 " -x Delegate X11 cookie even if target user is not root." exit 1 fi @@ -129,7 +137,5 @@ done [ $chdir = 1 ] && echo >&3 2>/dev/null "cd - &>/dev/null" exec 3>&- -dir=$(dirname "$0") -[ "$dir" = "." ] && dir="$PWD" exec sudo -H -u "$user" "$dir/became" exit 111 -- 2.20.1