PATCH: shared library support

James Ralston <[email protected]> Sun, 09 Jan 2005 02:11:43 -0500
Newsgroups gmane.comp.security.libnet
Message-ID <[email protected]>
--==========319D51ABCC01D668ED3E==========
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit
Content-Disposition: inline

qAttached is a patch for libnet 1.1.2.1 that adds support (via libtool)
for building libnet as a shared library.

Before applying it, rename configure.in to configure.ac, and remove
acconfig.h.  Then apply the patch and run autoreconf.

I used autoconf 2.59, automake 1.9.2, and libtool 1.5.6.  Using
automake 1.8.3 did *not* work (perl bombed out with an error).

I tested the resulting shared library on Linux (i386) by linking
tcptraceroute against it; I've had no problems.

Someone with better knowledge of the libnet code should correct my
AC_DEFINE descriptions; most of them are just dummy text.

-- 
James Ralston, Information Technology
Software Engineering Institute
Carnegie Mellon University, Pittsburgh, PA, USA

--==========319D51ABCC01D668ED3E==========
Content-Type: text/plain; charset=us-ascii; name="libnet-1.1.2.1-shared.patch"
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment; filename="libnet-1.1.2.1-shared.patch";
 size=13984

--- libnet/src/Makefile.am.shared	2004-03-11 13:50:20.000000000 -0500
+++ libnet/src/Makefile.am	2005-01-08 22:58:37.206866684 -0500
@@ -8,9 +8,9 @@
 
 include $(top_srcdir)/Makefile.am.common
 
-lib_LIBRARIES = libnet.a
+lib_LTLIBRARIES = libnet.la
 
-libnet_a_SOURCES = libnet_asn1.c \
+libnet_la_SOURCES = libnet_asn1.c \
 			libnet_build_802.1q.c \
 			libnet_build_802.1x.c \
 			libnet_build_802.2.c \
@@ -57,15 +57,7 @@
 			libnet_version.c \
 			libnet_write.c
 
-EXTRA_libnet_a_SOURCES = libnet_link_bpf.c \
-			libnet_link_dlpi.c \
-			libnet_link_linux.c \
-			libnet_link_nit.c \
- 			libnet_link_none.c \
-			libnet_link_pf.c \
-			libnet_link_snit.c \
-			libnet_link_snoop.c \
-			libnet_link_win32.c
+libnet_la_LDFLAGS = -version-info 1:0:0
 
-libnet_a_LIBADD = @LIBOBJS@
+libnet_la_LIBADD = $(LTLIBOBJS)
 
--- libnet/sample/Makefile.am.shared	2004-03-11 13:50:20.000000000 -0500
+++ libnet/sample/Makefile.am	2005-01-08 23:29:38.008689373 -0500
@@ -17,47 +17,88 @@
                   synflood6_frag tftp ip_link ip_raw sebek
 
 arp_SOURCES             = arp.c
+arp_LDADD               = $(top_srcdir)/src/libnet.la
 cdp_SOURCES             = cdp.c
+cdp_LDADD               = $(top_srcdir)/src/libnet.la
 dot1x_SOURCES           = dot1x.c
+dot1x_LDADD             = $(top_srcdir)/src/libnet.la
 dhcp_discover_SOURCES   = dhcp_discover.c
+dhcp_discover_LDADD     = $(top_srcdir)/src/libnet.la
 dns_SOURCES             = dns.c
+dns_LDADD               = $(top_srcdir)/src/libnet.la
 fddi_tcp1_SOURCES       = fddi_tcp1.c
+fddi_tcp1_LDADD         = $(top_srcdir)/src/libnet.la
 fddi_tcp2_SOURCES       = fddi_tcp2.c
+fddi_tcp2_LDADD         = $(top_srcdir)/src/libnet.la
 tring_tcp1_SOURCES      = tring_tcp1.c
+tring_tcp1_LDADD        = $(top_srcdir)/src/libnet.la
 tring_tcp2_SOURCES      = tring_tcp2.c
+tring_tcp2_LDADD        = $(top_srcdir)/src/libnet.la
 get_addr_SOURCES        = get_addr.c
+get_addr_LDADD          = $(top_srcdir)/src/libnet.la
 icmp_echo_cq_SOURCES    = icmp_echo_cq.c
+icmp_echo_cq_LDADD      = $(top_srcdir)/src/libnet.la
 icmp_redirect_SOURCES   = icmp_redirect.c
+icmp_redirect_LDADD     = $(top_srcdir)/src/libnet.la
 icmp_timestamp_SOURCES  = icmp_timestamp.c
+icmp_timestamp_LDADD    = $(top_srcdir)/src/libnet.la
 icmp_timeexceed_SOURCES = icmp_timeexceed.c
+icmp_timeexceed_LDADD   = $(top_srcdir)/src/libnet.la
 icmp_unreach_SOURCES    = icmp_unreach.c
+icmp_unreach_LDADD      = $(top_srcdir)/src/libnet.la
 ieee_SOURCES            = ieee.c
+ieee_LDADD              = $(top_srcdir)/src/libnet.la
 isl_SOURCES             = isl.c
+isl_LDADD               = $(top_srcdir)/src/libnet.la
 ntp_SOURCES             = ntp.c
+ntp_LDADD               = $(top_srcdir)/src/libnet.la
 ospf_hello_SOURCES      = ospf_hello.c
+ospf_hello_LDADD        = $(top_srcdir)/src/libnet.la
 ospf_lsa_SOURCES        = ospf_lsa.c
+ospf_lsa_LDADD          = $(top_srcdir)/src/libnet.la
 ping_of_death_SOURCES   = ping_of_death.c
+ping_of_death_LDADD     = $(top_srcdir)/src/libnet.la
 mpls_SOURCES            = mpls.c
+mpls_LDADD              = $(top_srcdir)/src/libnet.la
 rpc_tcp_SOURCES         = rpc_tcp.c
+rpc_tcp_LDADD           = $(top_srcdir)/src/libnet.la
 rpc_udp_SOURCES         = rpc_udp.c
+rpc_udp_LDADD           = $(top_srcdir)/src/libnet.la
 stp_SOURCES             = stp.c
+stp_LDADD               = $(top_srcdir)/src/libnet.la
 synflood_SOURCES        = synflood.c
+synflood_LDADD          = $(top_srcdir)/src/libnet.la
 tcp1_SOURCES            = tcp1.c
+tcp1_LDADD              = $(top_srcdir)/src/libnet.la
 tcp2_SOURCES            = tcp2.c
+tcp2_LDADD              = $(top_srcdir)/src/libnet.la
 tftp_SOURCES            = tftp.c
+tftp_LDADD              = $(top_srcdir)/src/libnet.la
 udp1_SOURCES            = udp1.c
+udp1_LDADD              = $(top_srcdir)/src/libnet.la
 udp2_SOURCES            = udp2.c
+udp2_LDADD              = $(top_srcdir)/src/libnet.la
 icmp6_echoreq_SOURCES   = icmp6_echoreq.c
+icmp6_echoreq_LDADD     = $(top_srcdir)/src/libnet.la
 smurf_SOURCES           = smurf.c
+smurf_LDADD             = $(top_srcdir)/src/libnet.la
 synflood6_SOURCES       = synflood6.c
+synflood6_LDADD         = $(top_srcdir)/src/libnet.la
 synflood6_frag_SOURCES  = synflood6_frag.c
+synflood6_frag_LDADD    = $(top_srcdir)/src/libnet.la
 bgp4_hdr_SOURCES        = bgp4_hdr.c
+bgp4_hdr_LDADD          = $(top_srcdir)/src/libnet.la
 bgp4_open_SOURCES       = bgp4_open.c
+bgp4_open_LDADD         = $(top_srcdir)/src/libnet.la
 bgp4_update_SOURCES     = bgp4_update.c
+bgp4_update_LDADD       = $(top_srcdir)/src/libnet.la
 bgp4_notification_SOURCES = bgp4_notification.c
+bgp4_notification_LDADD = $(top_srcdir)/src/libnet.la
 gre_SOURCES		= gre.c
+gre_LDADD               = $(top_srcdir)/src/libnet.la
 ip_raw_SOURCES          = ip_raw.c
+ip_raw_LDADD            = $(top_srcdir)/src/libnet.la
 ip_link_SOURCES		= ip_link.c
+ip_link_LDADD           = $(top_srcdir)/src/libnet.la
 sebek_SOURCES           = sebek.c
-
-LDADD = $(top_srcdir)/src/libnet.a
+sebek_LDADD             = $(top_srcdir)/src/libnet.la
--- libnet/configure.ac.shared	2004-03-01 15:26:11.000000000 -0500
+++ libnet/configure.ac	2005-01-08 22:14:56.676997061 -0500
@@ -7,12 +7,13 @@
 dnl Process this file with autoconf to produce a configure script.
 
 
-AC_INIT(src/libnet_build_ip.c)
+AC_INIT(libnet, 1.1.2.1)
 LIBNET_VERSION=`cat VERSION`
 AC_MSG_RESULT(beginning autoconfiguration process for libnet-$LIBNET_VERSION...)
 AC_CANONICAL_SYSTEM
 
-AM_INIT_AUTOMAKE(libnet, $LIBNET_VERSION)
+AM_INIT_AUTOMAKE
+AC_PROG_LIBTOOL
 AM_CONFIG_HEADER(include/config.h)
 AM_MAINTAINER_MODE
 
@@ -21,7 +22,6 @@
 dnl
 AC_PROG_CC
 AC_PROG_INSTALL
-AC_PROG_RANLIB
 
 AC_CHECK_HEADERS(sys/sockio.h)
 
@@ -85,7 +85,7 @@
 elif test -r /usr/include/sys/dlpi.h ; then
     AC_LIBOBJ([libnet_link_dlpi])
     AC_MSG_RESULT(found dlpi)
-    AC_DEFINE(HAVE_DLPI)
+    AC_DEFINE(HAVE_DLPI, 1, [I don't know what this does.])
 elif test -r /usr/include/linux/socket.h ; then
     AC_LIBOBJ([libnet_link_linux])
     AC_MSG_RESULT(found linux primitives)
@@ -122,58 +122,58 @@
 case "$target_os" in
 
 *linux*)
-    AC_DEFINE(_BSD_SOURCE)
-    AC_DEFINE(__BSD_SOURCE)
-    AC_DEFINE(__FAVOR_BSD)
+    AC_DEFINE(_BSD_SOURCE, 1, [Define to 1 if you want BSD definitions to take precedence over POSIX definitions.])
+    AC_DEFINE(__BSD_SOURCE, 1, [Define to 1 if you want BSD definitions to take precedence over POSIX definitions.])
+    AC_DEFINE(__FAVOR_BSD, 1, [Define to 1 if you want BSD definitions to take precedence over POSIX definitions.])
     LIBNET_CONFIG_DEFINES="-D_BSD_SOURCE -D__BSD_SOURCE -D__FAVOR_BSD"
     AC_CHECK_HEADERS(net/ethernet.h, \
         LIBNET_CONFIG_DEFINES="$LIBNET_CONFIG_DEFINES -DHAVE_NET_ETHERNET_H")
     ;;
 
 *freebsd*)
-    AC_DEFINE(LIBNET_BSDISH_OS)
-    AC_DEFINE(LIBNET_BSD_BYTE_SWAP)
-    AC_DEFINE(HAVE_SOCKADDR_SA_LEN)
+    AC_DEFINE(LIBNET_BSDISH_OS, 1, [Define to 1 if you have a BSD-ish OS.])
+    AC_DEFINE(LIBNET_BSD_BYTE_SWAP, 1, [Define to 1 if the ip_len and ip_off fields need to be in host byte order.])
+    AC_DEFINE(HAVE_SOCKADDR_SA_LEN, 1, [I don't know what this does.])
     LIBNET_CONFIG_DEFINES="-DLIBNET_BSDISH_OS -DLIBNET_BSD_BYTE_SWAP -DHAVE_SOCKADDR_SA_LEN"
     ;;
 
 *netbsd*)
-    AC_DEFINE(LIBNET_BSDISH_OS)
-    AC_DEFINE(LIBNET_BSD_BYTE_SWAP)
+    AC_DEFINE(LIBNET_BSDISH_OS, 1, [Define to 1 if you have a BSD-ish OS.])
+    AC_DEFINE(LIBNET_BSD_BYTE_SWAP, 1, [Define to 1 if the ip_len and ip_off fields need to be in host byte order.])
     LIBNET_CONFIG_DEFINES="-DLIBNET_BSDISH_OS -DLIBNET_BSD_BYTE_SWAP"
     ;;
 
 *openbsd*)
-    AC_DEFINE(LIBNET_BSDISH_OS)
-    AC_DEFINE(HAVE_SOCKADDR_SA_LEN)
+    AC_DEFINE(LIBNET_BSDISH_OS, 1, [Define to 1 if you have a BSD-ish OS.])
+    AC_DEFINE(HAVE_SOCKADDR_SA_LEN, 1, [I don't know what this does.])
     LIBNET_CONFIG_DEFINES="-DLIBNET_BSDISH_OS"
     ;;
 
 *bsdi*)
-    AC_DEFINE(LIBNET_BSDISH_OS)
-    AC_DEFINE(LIBNET_BSD_BYTE_SWAP)
+    AC_DEFINE(LIBNET_BSDISH_OS, 1, [Define to 1 if you have a BSD-ish OS.])
+    AC_DEFINE(LIBNET_BSD_BYTE_SWAP, 1, [Define to 1 if the ip_len and ip_off fields need to be in host byte order.])
     LIBNET_CONFIG_DEFINES="-DLIBNET_BSDISH_OS -DLIBNET_BSD_BYTE_SWAP"
     ;;
 
 *darwin*)
-    AC_DEFINE(HAVE_SOCKADDR_SA_LEN)
+    AC_DEFINE(HAVE_SOCKADDR_SA_LEN, 1, [I don't know what this does.])
     LIBNET_CONFIG_DEFINES="-DHAVE_SOCKADDR_SA_LEN"
     ;;
 
 *solaris*)
-    AC_DEFINE(HAVE_SOLARIS)
+    AC_DEFINE(HAVE_SOLARIS, 1, [I don't know what this does.])
     AC_CHECK_HEADERS(sys/bufmod.h sys/dlpi_ext.h)
     AC_MSG_CHECKING(for /dev/dlpi device)
     if test -c /dev/dlpi; then
         AC_MSG_RESULT(yes)
-        AC_DEFINE(HAVE_DEV_DLPI)
+        AC_DEFINE(HAVE_DEV_DLPI, 1, [I don't know what this does.])
     else
         AC_MSG_RESULT(no)
         dir="/dev/dlpi"
         AC_MSG_CHECKING(for $dir directory)
         if test -d $dir ; then
             AC_MSG_RESULT(yes)
-            AC_DEFINE_UNQUOTED(DLPI_DEV_PREFIX, "$dir")
+            AC_DEFINE_UNQUOTED(DLPI_DEV_PREFIX, "$dir", [I don't know what this does.])
         else
             AC_MSG_RESULT(no)
         fi
@@ -186,18 +186,18 @@
 dnl
     case "`uname -r`" in
     5.4)
-        AC_DEFINE(STUPID_SOLARIS_CHECKSUM_BUG)
+        AC_DEFINE(STUPID_SOLARIS_CHECKSUM_BUG, 1, [I don't know what this does.])
         ;;
     5.5*)
-        AC_DEFINE(STUPID_SOLARIS_CHECKSUM_BUG)
+        AC_DEFINE(STUPID_SOLARIS_CHECKSUM_BUG, 1, [I don't know what this does.])
         ;;
     5.8)
-        AC_DEFINE(STUPID_SOLARIS_CHECKSUM_BUG)
-    	AC_DEFINE(HAVE_SOLARIS_IPV6)
+        AC_DEFINE(STUPID_SOLARIS_CHECKSUM_BUG, 1, [I don't know what this does.])
+    	AC_DEFINE(HAVE_SOLARIS_IPV6, 1, [I don't know what this does.])
         ;;
     5.9)
-        AC_DEFINE(STUPID_SOLARIS_CHECKSUM_BUG)
-    	AC_DEFINE(HAVE_SOLARIS_IPV6)
+        AC_DEFINE(STUPID_SOLARIS_CHECKSUM_BUG, 1, [I don't know what this does.])
+    	AC_DEFINE(HAVE_SOLARIS_IPV6, 1, [I don't know what this does.])
         ;;
 
     esac
@@ -207,13 +207,13 @@
     ;;
 
 *hpux11*)
-    AC_DEFINE(HAVE_HPUX11)
+    AC_DEFINE(HAVE_HPUX11, 1, [I don't know what this does.])
     AC_CHECK_HEADERS(sys/dlpi_ext.h)
     ;;
 
 *cygwin*)
-     AC_DEFINE(LIBNET_BSDISH_OS)
-     AC_DEFINE(NO_SNPRINTF)
+     AC_DEFINE(LIBNET_BSDISH_OS, 1, [Define to 1 if you have a BSD-ish OS.])
+     AC_DEFINE(NO_SNPRINTF, 1, [I don't know what this does.])
      LIBNET_CONFIG_DEFINES="-DLIBNET_BSDISH_OS -DNO_SNPRINTF"
      CFLAGS="$CFLAGS -mno-cygwin -O0 -fnative-struct -DNO_SNPRINTF -I/usr/include/pcap"
      AC_CHECK_LIB(packet, PacketSetMode, ,AC_MSG_ERROR(packet lib not found.))
--- libnet/acinclude.m4.shared	2004-01-15 18:53:06.000000000 -0500
+++ libnet/acinclude.m4	2005-01-08 22:31:39.227589490 -0500
@@ -11,7 +11,7 @@
 dnl usage:      AC_LIBNET_LINUX_PROCFS
 dnl results:    HAVE_LINUX_PROCFS
 dnl
-AC_DEFUN(AC_LIBNET_LINUX_PROCFS,
+AC_DEFUN([AC_LIBNET_LINUX_PROCFS],
     [AC_MSG_CHECKING(for Linux proc filesystem)
     AC_CACHE_VAL(ac_cv_libnet_linux_procfs,
         if test "x`cat /proc/sys/kernel/ostype 2>&-`" = "xLinux" ; then
@@ -37,7 +37,7 @@
 dnl     HAVE_PACKET_SOCKET (DEFINED)
 dnl
 
-AC_DEFUN(AC_LIBNET_CHECK_PF_PACKET,
+AC_DEFUN([AC_LIBNET_CHECK_PF_PACKET],
 [
     AC_MSG_CHECKING(for packet socket (PF_SOCKET))
     AC_CACHE_VAL(ac_libnet_have_packet_socket,
@@ -113,7 +113,7 @@
     esac])
 
     if test $ac_libnet_have_packet_socket = yes -o $ac_libnet_have_packet_socket = probably; then
-        AC_DEFINE(HAVE_PACKET_SOCKET)
+        AC_DEFINE(HAVE_PACKET_SOCKET, 1, [I don't know what this does.])
     fi
 ])
 
@@ -131,7 +131,7 @@
 dnl
 dnl
 
-AC_DEFUN(AC_LIBNET_CHECK_LIBNET_VER,
+AC_DEFUN([AC_LIBNET_CHECK_LIBNET_VER],
 [
     AC_CHECK_LIB(net, libnet_build_ip, AC_MSG_CHECKING(version) \
 
@@ -166,7 +166,7 @@
 dnl     HAVE_STRUCT_IP_CSUM (DEFINED)
 dnl
 
-AC_DEFUN(AC_LIBNET_CHECK_IP_CSUM,
+AC_DEFUN([AC_LIBNET_CHECK_IP_CSUM],
 [
     AC_MSG_CHECKING([struct ip contains ip_csum])
     AC_TRY_COMPILE([
@@ -181,7 +181,7 @@
             ip.ip_csum = 0;
         ],
         [AC_MSG_RESULT(yes);
-        AC_DEFINE(HAVE_STRUCT_IP_CSUM)],
+        AC_DEFINE(HAVE_STRUCT_IP_CSUM, 1, [I don't know what this does.])],
         [AC_MSG_RESULT(no);
     ])
 ])
@@ -199,7 +199,7 @@
 dnl     LBL_ALIGN (DEFINED)
 dnl
 
-AC_DEFUN(AC_LBL_UNALIGNED_ACCESS,
+AC_DEFUN([AC_LBL_UNALIGNED_ACCESS],
     [AC_MSG_CHECKING(if unaligned accesses fail)
     AC_CACHE_VAL(ac_cv_lbl_unaligned_fail,
         [case "$target_cpu" in
@@ -260,7 +260,7 @@
         esac])
     AC_MSG_RESULT($ac_cv_lbl_unaligned_fail)
     if test $ac_cv_lbl_unaligned_fail = yes ; then
-            AC_DEFINE(LBL_ALIGN)
+            AC_DEFINE(LBL_ALIGN, 1, [I don't know what this does.])
     fi
 ])
 
@@ -278,7 +278,7 @@
 dnl     LIBNET_LIL_ENDIAN = 1
 dnl
 
-AC_DEFUN(AC_LIBNET_ENDIAN_CHECK,
+AC_DEFUN([AC_LIBNET_ENDIAN_CHECK],
     [AC_MSG_CHECKING(machine endianess)
 
     cat > conftest.c << EOF
@@ -336,11 +336,11 @@
         AC_MSG_RESULT($ac_cv_libnet_endianess)
 
         if test $ac_cv_libnet_endianess = big ; then
-            AC_DEFINE(LIBNET_BIG_ENDIAN)
+            AC_DEFINE(LIBNET_BIG_ENDIAN, 1, [I don't know what this does.])
             ENDIANESS="LIBNET_BIG_ENDIAN"
             LIBNET_CONFIG_DEFINES="$LIBNET_CONFIG_DEFINES -DLIBNET_BIG_ENDIAN"
         elif test $ac_cv_libnet_endianess = lil ; then
-            AC_DEFINE(LIBNET_LIL_ENDIAN)
+            AC_DEFINE(LIBNET_LIL_ENDIAN, 1, [I don't know what this does.])
             ENDIANESS="LIBNET_LIL_ENDIAN"
             LIBNET_CONFIG_DEFINES="$LIBNET_CONFIG_DEFINES -DLIBNET_LIL_ENDIAN"
         fi
@@ -439,7 +439,7 @@
 dnl statically and happen to have a libresolv.a lying around (and no
 dnl libnsl.a).
 dnl
-AC_DEFUN(AC_LBL_LIBRARY_NET, [
+AC_DEFUN([AC_LBL_LIBRARY_NET], [
     # Most operating systems have gethostbyname() in the default searched
     # libraries (i.e. libc):
     AC_CHECK_FUNC(gethostbyname, ,

--==========319D51ABCC01D668ED3E==========--