Use dumpcap for ttcn3-tcpdump-*.sh if available

Check if dumpcap is installed (either as suid or with appropriate
capabilities) and use it for packet capture instead of
'sudo tcpdump' if available. This makes it easier to use TTCN-3
testsuite as regular user without altering sudoers.

Change-Id: I77df04d51a469c924cf727f0596cc33565909746
This commit is contained in:
Max 2019-03-18 14:18:31 +01:00
parent 59e0c6f764
commit 81487c8b36
2 changed files with 18 additions and 1 deletions

View File

@ -2,6 +2,7 @@
PIDFILE=/tmp/dumper.pid PIDFILE=/tmp/dumper.pid
TCPDUMP=/usr/sbin/tcpdump TCPDUMP=/usr/sbin/tcpdump
DUMPCAP=/usr/bin/dumpcap
TESTCASE=$1 TESTCASE=$1
echo "------ $TESTCASE ------" echo "------ $TESTCASE ------"
@ -23,6 +24,21 @@ else
# "laforge ALL=NOPASSWD: /usr/sbin/tcpdump, /bin/kill" in your sudoers file # "laforge ALL=NOPASSWD: /usr/sbin/tcpdump, /bin/kill" in your sudoers file
CMD="sudo $TCPDUMP -U" CMD="sudo $TCPDUMP -U"
fi fi
if [ -x $DUMPCAP ]; then
CAP_ERR="1"
if [ -x /sbin/setcap ]; then
# N. B: this check requires libcap2-bin package
setcap -q -v 'cap_net_admin,cap_net_raw=pie' $DUMPCAP
CAP_ERR="$?"
fi
if [ -u $DUMPCAP -o "$CAP_ERR" = "0" ]; then
CMD="$DUMPCAP -q"
else
echo "NOTE: unable to use dumpcap due to missing capabilities or suid bit"
fi
fi
$CMD -s 1500 -n -i any -w "$TTCN3_PCAP_PATH/$TESTCASE.pcap" >$TTCN3_PCAP_PATH/$TESTCASE.pcap.stdout 2>&1 & $CMD -s 1500 -n -i any -w "$TTCN3_PCAP_PATH/$TESTCASE.pcap" >$TTCN3_PCAP_PATH/$TESTCASE.pcap.stdout 2>&1 &
PID=$! PID=$!
echo $PID > $PIDFILE echo $PID > $PIDFILE

View File

@ -32,7 +32,8 @@ do
done done
if [ -e $PIDFILE ]; then if [ -e $PIDFILE ]; then
if [ "$(id -u)" = "0" ]; then DUMPER="$(ps -q "$(cat "$PIDFILE")" -o comm=)"
if [ "$DUMPER" != "sudo" ]; then
kill "$(cat "$PIDFILE")" kill "$(cat "$PIDFILE")"
else else
# NOTE: This requires you to be root or something like # NOTE: This requires you to be root or something like