nixpkgs/pkgs/tools/networking/dsniff/default.nix
Alyssa Ross 12d2821bf5
treewide: remove -ldl linker flags
With all libcs I'm aware of, libdl is now either empty (Glibc, musl,
uclibc, illumos), a symlink to libc or equivalent (Apple), or does not
exist (FreeBSD, NetBSD).  So explicitly linking libdl now does nothing
for the former platforms, and breaks the build for the latter
platforms.

With this patch I've removed -ldl from all overridden linker flags for
all free packages in Nixpkgs.  Everything still seems to build.
2023-01-23 15:34:53 +00:00

90 lines
3.2 KiB
Nix

{ gcc9Stdenv, lib, fetchFromGitLab, autoreconfHook, libpcap, db, glib, libnet, libnids, symlinkJoin, openssl
, rpcsvc-proto, libtirpc, libnsl
}:
# We compile with GCC 9 since GCC 10 segfaults on the code
# (see https://bugzilla.redhat.com/show_bug.cgi?id=1862809).
let
/*
dsniff's build system unconditionnaly wants static libraries and does not
support multi output derivations. We do some overriding to give it
satisfaction.
*/
staticdb = symlinkJoin {
inherit (db) name;
paths = with db.overrideAttrs(old: { dontDisableStatic = true; }); [ out dev ];
postBuild = ''
rm $out/lib/*.so*
'';
};
pcap = symlinkJoin {
inherit (libpcap) name;
paths = [ (libpcap.overrideAttrs(old: { dontDisableStatic = true; })) ];
postBuild = ''
cp -rs $out/include/pcap $out/include/net
# prevent references to libpcap
rm $out/lib/*.so*
'';
};
net = symlinkJoin {
inherit (libnet) name;
paths = [ (libnet.overrideAttrs(old: { dontDisableStatic = true; })) ];
postBuild = ''
# prevent dynamic linking, now that we have a static library
rm $out/lib/*.so*
'';
};
nids = libnids.overrideAttrs(old: {
dontDisableStatic = true;
});
ssl = symlinkJoin {
inherit (openssl) name;
paths = with openssl.override { static = true; }; [ out dev ];
};
in gcc9Stdenv.mkDerivation rec {
pname = "dsniff";
version = "2.4b1";
# upstream is so old that nearly every distribution packages the beta version.
# Also, upstream only serves the latest version, so we use debian's sources.
# this way we can benefit the numerous debian patches to be able to build
# dsniff with recent libraries.
src = fetchFromGitLab {
domain = "salsa.debian.org";
owner = "pkg-security-team";
repo = "dsniff";
rev = "debian/${version}+debian-30";
sha256 = "1fk2k0sfdp5g27i11g0sbzm7al52raz5yr1aibzssnysv7l9xgzh";
name = "dsniff.tar.gz";
};
nativeBuildInputs = [ autoreconfHook rpcsvc-proto ];
buildInputs = [ glib pcap libtirpc libnsl ];
NIX_CFLAGS_LINK = "-lglib-2.0 -lpthread -ltirpc";
NIX_CFLAGS_COMPILE = [ "-I${libtirpc.dev}/include/tirpc" ];
postPatch = ''
for patch in debian/patches/*.patch; do
patch < $patch
done;
'';
configureFlags = [
"--with-db=${staticdb}"
"--with-libpcap=${pcap}"
"--with-libnet=${net}"
"--with-libnids=${nids}"
"--with-openssl=${ssl}"
];
meta = with lib; {
description = "collection of tools for network auditing and penetration testing";
longDescription = ''
dsniff, filesnarf, mailsnarf, msgsnarf, urlsnarf, and webspy passively monitor a network for interesting data (passwords, e-mail, files, etc.). arpspoof, dnsspoof, and macof facilitate the interception of network traffic normally unavailable to an attacker (e.g, due to layer-2 switching). sshmitm and webmitm implement active monkey-in-the-middle attacks against redirected SSH and HTTPS sessions by exploiting weak bindings in ad-hoc PKI.
'';
homepage = "https://www.monkey.org/~dugsong/dsniff/";
license = licenses.bsd3;
maintainers = [ maintainers.symphorien ];
# bsd and solaris should work as well
platforms = platforms.linux;
};
}