biome: 1.9.2 -> 1.9.3
[NixPkgs.git] / pkgs / tools / networking / miniupnpd / default.nix
blobddaee847c44f67f8babaeea8060bbdc3726d4e8d
1 { stdenv, lib, fetchurl, iptables-legacy, libuuid, openssl, pkg-config
2 , which, iproute2, gnused, coreutils, gnugrep, gawk, makeWrapper
3 , nixosTests
4 , firewall ? "iptables", nftables, libmnl, libnftnl
5 }:
7 let
8   scriptBinEnv = lib.makeBinPath {
9     iptables = [
10       # needed for dirname in ip{,6}tables_*.sh
11       coreutils
12       # used in miniupnpd_functions.sh:
13       which
14       iproute2
15       iptables-legacy
16       gnused
17       gnugrep
18       gawk
19     ];
20     nftables = [
21       # needed for dirname in nft_*.sh & cat in nft_init.sh
22       coreutils
23       # used in miniupnpd_functions.sh:
24       which
25       nftables
26     ];
27   }.${firewall};
29 stdenv.mkDerivation rec {
30   pname = "miniupnpd";
31   version = "2.3.7";
33   src = fetchurl {
34     url = "https://miniupnp.tuxfamily.org/files/miniupnpd-${version}.tar.gz";
35     sha256 = "sha256-+91VAQOXMPBKhCDqL49Ut99j+fBM3i3Gf6c3HoBHe74=";
36   };
38   buildInputs = [ iptables-legacy libuuid openssl ]
39     ++ lib.optionals (firewall == "nftables") [ libmnl libnftnl ];
40   nativeBuildInputs= [ pkg-config makeWrapper ];
42   # ./configure is not a standard configure file, errors with:
43   # Option not recognized : --prefix=
44   dontAddPrefix = true;
45   configureFlags = [
46     "--firewall=${firewall}"
47     # allow using various config options
48     "--ipv6"
49     "--leasefile"
50     "--regex"
51     "--vendorcfg"
52     # hardening
53     "--portinuse"
54   ];
56   installFlags = [ "PREFIX=$(out)" "INSTALLPREFIX=$(out)" ];
58   postFixup = {
59     # Ideally we'd prefer using system's config.firewall.package here for iptables,
60     # however for some reason switching --prefix to --suffix breaks the script
61     iptables = ''
62       for script in $out/etc/miniupnpd/ip{,6}tables_{init,removeall}.sh
63       do
64         wrapProgram $script --prefix PATH : '${scriptBinEnv}:$PATH'
65       done
66     '';
67     nftables = ''
68       for script in $out/etc/miniupnpd/nft_{delete_chain,flush,init,removeall}.sh
69       do
70         wrapProgram $script --suffix PATH : '${scriptBinEnv}:$PATH'
71       done
72     '';
73   }.${firewall};
75   passthru.tests = {
76     bittorrent-integration = nixosTests.bittorrent;
77     inherit (nixosTests) upnp;
78   };
80   meta = with lib; {
81     homepage = "https://miniupnp.tuxfamily.org/";
82     description = "Daemon that implements the UPnP Internet Gateway Device (IGD) specification";
83     platforms = platforms.linux;
84     license = licenses.bsd3;
85     mainProgram = "miniupnpd";
86   };