--- Libnet-1.0.2a.orig/acinclude.m4 2000-12-12 19:31:54.000000000 +0100 +++ Libnet-1.0.2a/acinclude.m4 2009-06-12 21:48:27.000000000 +0200 @@ -30,65 +30,43 @@ AC_DEFUN(AC_LIBNET_CHECK_PF_PACKET, *) cat > pf_packet-test.c << EOF -#include -#if (__GLIBC__) -#include -#include +#include +#include +#include +#include +#include +#include /* for the glibc version number */ +#if __GLIBC__ >= 2 && __GLIBC_MINOR >= 1 +#include +#include /* the L2 protocols */ #else -#include -#include +#include +#include +#include /* The L2 protocols */ #endif -#if (PF_PACKET) + #ifndef SOL_PACKET #define SOL_PACKET 263 #endif /* SOL_PACKET */ -#include -#endif -#include "./include/libnet.h" int main() { -#if (PF_PACKET) int fd; - struct sockaddr_ll sa; - struct ifreq ifr; - struct packet_mreq mr; - char *device ="lo"; fd = socket(PF_PACKET, SOCK_RAW, htons(ETH_P_ALL)); if (fd == -1) { - printf("choked"); - exit (EXIT_FAILURE); - } - - memset(&sa, 0, sizeof(sa)); - strcpy(ifr.ifr_name, device); - if (ioctl(fd, SIOCGIFINDEX, &ifr) < 0) - { - printf("choked"); - exit (EXIT_FAILURE); - } - sa.sll_family = AF_PACKET; - sa.sll_ifindex = ifr.ifr_ifindex; - sa.sll_protocol = htons(ETH_P_ALL); - - memset(&mr, 0, sizeof (mr)); - mr.mr_ifindex = sa.sll_ifindex; - mr.mr_type = PACKET_MR_ALLMULTI; - - if (setsockopt(fd, SOL_PACKET, PACKET_ADD_MEMBERSHIP, (char *)&mr, - sizeof (mr)) < 0) - { - printf("choked\n"); + if (errno == EPERM) + { + /* user's UID != 0 */ + printf("probably"); + exit (EXIT_FAILURE); + } + printf("no"); exit (EXIT_FAILURE); } - /* yay. we made it and it workz! */ printf("yes"); -#else /* PF_PACKET */ - printf("no"); -#endif exit (EXIT_SUCCESS); } EOF @@ -104,16 +82,21 @@ EOF if test $ac_libnet_have_pf_packet = choked; then AC_MSG_RESULT(test program choked... assuming no) elif test $ac_libnet_have_pf_packet = yes; then - AC_DEFINE(HAVE_PF_PACKET) + AC_MSG_RESULT(yes) LIBNET_CONFIG_DEFINES="$LIBNET_CONFIG_DEFINES -DHAVE_PF_PACKET" + elif test $ac_libnet_have_pf_packet = probably; then + AC_MSG_RESULT(test program got EPERM... assuming yes) + elif test $ac_libnet_have_pf_packet = no; then + AC_MSG_RESULT(no) fi - if test $ac_libnet_have_pf_packet != choked; then - AC_MSG_RESULT($ac_libnet_have_pf_packet) - fi rm -f pf_packet-test* core core.pf_packet-test ;; esac]) + + if test $ac_libnet_have_pf_packet = yes -o $ac_libnet_have_pf_packet = probably; then + AC_DEFINE(HAVE_PF_PACKET) + fi ]) dnl @@ -279,6 +262,8 @@ dnl AC_DEFUN(AC_LIBNET_ENDIAN_CHECK, [AC_MSG_CHECKING(machine endianess) + AC_CACHE_VAL(ac_cv_libnet_endianess, + [ cat > conftest.c << EOF # include @@ -332,6 +317,7 @@ dnl failed to compile for some reason fi rm -f conftest* core core.conftest + ]) AC_MSG_RESULT($ac_cv_libnet_endianess) if test $ac_cv_libnet_endianess = big ; then