From cf8c450ed5f9c8e9f767509fa156cf2368aaebe6 Mon Sep 17 00:00:00 2001 From: arehbein Date: Sun, 13 Nov 2022 17:52:48 +0100 Subject: [PATCH] ttcn3-tcpdump*.sh: Fix scripts hanging on sudo prompt Related: OS#5736 Change-Id: I05687f9bc0bb87c6f1d5c42ba235dbb90a49aeb6 --- ttcn3-tcpdump-start.sh | 22 +++++++++++++--------- ttcn3-tcpdump-stop.sh | 18 ++++++++++-------- 2 files changed, 23 insertions(+), 17 deletions(-) diff --git a/ttcn3-tcpdump-start.sh b/ttcn3-tcpdump-start.sh index 8433c80c5..8bba72f92 100755 --- a/ttcn3-tcpdump-start.sh +++ b/ttcn3-tcpdump-start.sh @@ -10,9 +10,19 @@ GSMTAP_PORT=4729 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 @@ fi 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 faf5b2b24..679661254 100755 --- a/ttcn3-tcpdump-stop.sh +++ b/ttcn3-tcpdump-stop.sh @@ -5,18 +5,20 @@ PIDFILE_NETCAT=/tmp/netcat.pid 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