Hi all, as a first attempt at testing "ping" without requiring root, the following patch works for me. Do we need to add a check if "cut" is available? Since the "id -G" is only used on systems with the kernel Linux, it may be OK without a check, or should we add one?
Any additional comments? Br, Erik --- diff --git a/tests/ping-localhost.sh b/tests/ping-localhost.sh index 65802810..ddaff188 100755 --- a/tests/ping-localhost.sh +++ b/tests/ping-localhost.sh @@ -56,11 +56,28 @@ if test "$TEST_IPV4" = "no" && test "$TEST_IPV6" = "no"; then exit 77 fi -if test `func_id_uid` != 0; then +have_root="yes" +test `func_id_uid` != 0 && have_root="no" + +need_root="yes" +if test `uname -s` = "Linux" && test -f "/proc/sys/net/ipv4/ping_group_range" +then + low=`cut -f1 "/proc/sys/net/ipv4/ping_group_range"` + high=`cut -f2 "/proc/sys/net/ipv4/ping_group_range"` + for grp_id in `id -G`; do + test "$low" -le "$grp_id" && test "$high" -ge "$grp_id" && + need_root="no" && break + done +fi + +if test "$need_root" = "yes" && test "$have_root" = "no"; then echo "ping needs to run as root" exit 77 fi +# ping6 requires root +test "$need_root" = "no" && test "$have_root" = "no" && TEST_IPV6="no" + errno=0 errno2=0