| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131 | --- 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 <net/if.h>-#if (__GLIBC__)-#include <netinet/if_ether.h>-#include <net/if_arp.h>+#include <stdio.h>+#include <errno.h>+#include <stdlib.h>+#include <netinet/in.h>+#include <sys/socket.h>+#include <features.h>    /* for the glibc version number */+#if __GLIBC__ >= 2 && __GLIBC_MINOR >= 1+#include <netpacket/packet.h>+#include <net/ethernet.h>     /* the L2 protocols */ #else-#include <linux/if_arp.h>-#include <linux/if_ether.h>+#include <asm/types.h>+#include <linux/if_packet.h>+#include <linux/if_ether.h>   /* The L2 protocols */ #endif-#if (PF_PACKET)+ #ifndef SOL_PACKET #define SOL_PACKET 263 #endif  /* SOL_PACKET */-#include <linux/if_packet.h>-#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 <stdio.h>@@ -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
 |