arehbein has submitted this change. ( https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/30310 )
Change subject: ttcn3-tcpdump*.sh: Fix scripts hanging on sudo prompt ......................................................................
ttcn3-tcpdump*.sh: Fix scripts hanging on sudo prompt
Related: OS#5736
Change-Id: I05687f9bc0bb87c6f1d5c42ba235dbb90a49aeb6 --- M ttcn3-tcpdump-start.sh M ttcn3-tcpdump-stop.sh 2 files changed, 23 insertions(+), 17 deletions(-)
Approvals: Jenkins Builder: Verified msuraev: Looks good to me, but someone else must approve laforge: Looks good to me, approved
diff --git a/ttcn3-tcpdump-start.sh b/ttcn3-tcpdump-start.sh index 8433c80..8bba72f 100755 --- a/ttcn3-tcpdump-start.sh +++ b/ttcn3-tcpdump-start.sh @@ -10,9 +10,19 @@
TESTCASE=$1
+ +SUDOSTR="" +if ! [ "$(id -u)" = "0" ]; then + SUDOSTR="sudo -n" + # Otherwise, if sudo /usr/bin/kill, sudo /usr/bin/tcpdump cannot be run without a password prompt, + # and this script will hang indefinitely +fi + kill_rm_pidfile() { - if [ -e $1 ]; then - kill "$(cat "$1")" + # NOTE: This requires you to be root or something like + # "laforge ALL=NOPASSWD: /usr/sbin/tcpdump, /bin/kill" in your sudoers file + if ! [ -e "$1" ] && [ -s "$1" ]; then + $SUDOSTR kill "$(cat "$1")" 2>&1 | grep -v "No such process" rm $1 fi } @@ -27,13 +37,7 @@ kill_rm_pidfile $PIDFILE_NETCAT kill_rm_pidfile $PIDFILE_PCAP
-if [ "$(id -u)" = "0" ]; then - CMD="$TCPDUMP -U" -else -# NOTE: This requires you to be root or something like -# "laforge ALL=NOPASSWD: /usr/sbin/tcpdump, /bin/kill" in your sudoers file - CMD="sudo $TCPDUMP -U" -fi +CMD="$SUDOSTR $TCPDUMP -U"
if [ -x "$DUMPCAP" ]; then CAP_ERR="1" diff --git a/ttcn3-tcpdump-stop.sh b/ttcn3-tcpdump-stop.sh index faf5b2b..6796612 100755 --- a/ttcn3-tcpdump-stop.sh +++ b/ttcn3-tcpdump-stop.sh @@ -5,18 +5,20 @@ TESTCASE=$1 VERDICT="$2"
+SUDOSTR="" +if ! [ "$(id -u)" = "0" ]; then + SUDOSTR="sudo -n" + # Otherwise, if sudo /usr/bin/kill, sudo /usr/bin/tcpdump cannot be run without a password prompt, + # and this script will hang indefinitely +fi + kill_rm_pidfile() { -if [ -e $1 ]; then - PSNAME="$(ps -q "$(cat "$1")" -o comm=)" - if [ "$PSNAME" != "sudo" ]; then - kill "$(cat "$1")" - else # NOTE: This requires you to be root or something like # "laforge ALL=NOPASSWD: /usr/sbin/tcpdump, /bin/kill" in your sudoers file - sudo kill "$(cat "$1")" + if ! [ -e "$1" ] && [ -s "$1" ]; then + $SUDOSTR kill "$(cat "$1")" 2>&1 | grep -v "No such process" + rm $1 fi - rm $1 -fi }
date