diff --git a/krebs/5pkgs/exim.nix b/krebs/5pkgs/exim.nix deleted file mode 100644 index 4bb69267c..000000000 --- a/krebs/5pkgs/exim.nix +++ /dev/null @@ -1,19 +0,0 @@ -diff --git a/pkgs/servers/mail/exim/default.nix b/pkgs/servers/mail/exim/default.nix -index 0918e30..5b7a587 100644 ---- a/pkgs/servers/mail/exim/default.nix -+++ b/pkgs/servers/mail/exim/default.nix -@@ -1,11 +1,11 @@ - { coreutils, fetchurl, db, openssl, pcre, perl, pkgconfig, stdenv }: - - stdenv.mkDerivation rec { -- name = "exim-4.87"; -+ name = "exim-4.88"; - - src = fetchurl { -- url = "http://mirror.switch.ch/ftp/mirror/exim/exim/exim4/${name}.tar.bz2"; -- sha256 = "1jbxn13shq90kpn0s73qpjnx5xm8jrpwhcwwgqw5s6sdzw6iwsbl"; -+ url = "ftp://ftp.exim.org/pub/exim/exim4/${name}.tar.bz2"; -+ sha256 = "0bca3wb45hl7h8m8bpvsmrmqa07jhbhqyigs9pl29hhzwgbmz78i"; - }; - - buildInputs = [ coreutils db openssl pcre perl pkgconfig ]; diff --git a/lib/types.nix b/lib/types.nix index edd48c35b..8a3c76483 100644 --- a/lib/types.nix +++ b/lib/types.nix @@ -5,7 +5,7 @@ let all any concatMapStringsSep concatStringsSep const filter flip genid hasSuffix head isInt isString length match mergeOneOption mkOption mkOptionType optional optionalAttrs optionals range splitString - stringLength tail typeOf; + stringLength substring typeOf; inherit (lib.types) attrsOf bool either enum int listOf nullOr path str string submodule; in @@ -430,23 +430,23 @@ rec { }; # POSIX.1‐2013, 3.2 Absolute Pathname - # TODO normalize slashes - # TODO two slashes absolute-pathname = mkOptionType { name = "POSIX absolute pathname"; - check = x: let xs = splitString "/" x; xa = head xs; in - isString x - && stringLength x > 0 - && (xa == "/" || (xa == "" && all filename.check (tail xs))); + check = x: isString x && substring 0 1 x == "/" && pathname.check x; merge = mergeOneOption; }; # POSIX.1‐2013, 3.267 Pathname - # TODO normalize slashes pathname = mkOptionType { name = "POSIX pathname"; - check = x: let xs = splitString "/" x; in - isString x && all filename.check (if head xs == "" then tail xs else xs); + check = x: + let + # The filter is used to normalize paths, i.e. to remove duplicated and + # trailing slashes. It also removes leading slashes, thus we have to + # check for "/" explicitly below. + xs = filter (s: stringLength s > 0) (splitString "/" x); + in + isString x && (x == "/" || (length xs > 0 && all filename.check xs)); merge = mergeOneOption; };