summary refs log tree commit diff
path: root/pkgs/tools/misc
diff options
context:
space:
mode:
authorVladimír Čunát <vcunat@gmail.com>2016-01-15 13:43:57 +0100
committerVladimír Čunát <vcunat@gmail.com>2016-01-15 13:43:57 +0100
commit2d0893088fff99e1c0c438ba7b4c42ac6769af75 (patch)
tree771ce9e6e1020b623ea4c65b84bf05bd7ee24821 /pkgs/tools/misc
parent4e9575c314baab5e45a95785918c721f7fed45e3 (diff)
parentc29df5f8a7122fbc9411765156ab42c12baadbbb (diff)
downloadnixlib-2d0893088fff99e1c0c438ba7b4c42ac6769af75.tar
nixlib-2d0893088fff99e1c0c438ba7b4c42ac6769af75.tar.gz
nixlib-2d0893088fff99e1c0c438ba7b4c42ac6769af75.tar.bz2
nixlib-2d0893088fff99e1c0c438ba7b4c42ac6769af75.tar.lz
nixlib-2d0893088fff99e1c0c438ba7b4c42ac6769af75.tar.xz
nixlib-2d0893088fff99e1c0c438ba7b4c42ac6769af75.tar.zst
nixlib-2d0893088fff99e1c0c438ba7b4c42ac6769af75.zip
Merge branch 'master' into staging
Diffstat (limited to 'pkgs/tools/misc')
-rw-r--r--pkgs/tools/misc/diffoscope/default.nix21
-rw-r--r--pkgs/tools/misc/grub4dos/default.nix6
-rw-r--r--pkgs/tools/misc/ltunify/default.nix21
-rw-r--r--pkgs/tools/misc/mcrypt/default.nix12
-rw-r--r--pkgs/tools/misc/mcrypt/format-string.patch31
-rw-r--r--pkgs/tools/misc/mcrypt/overflow.patch24
-rw-r--r--pkgs/tools/misc/mcrypt/segv.patch39
-rw-r--r--pkgs/tools/misc/mcrypt/sprintf.patch108
-rw-r--r--pkgs/tools/misc/pg_top/default.nix14
-rw-r--r--pkgs/tools/misc/screenfetch/default.nix6
-rw-r--r--pkgs/tools/misc/testdisk/default.nix6
-rw-r--r--pkgs/tools/misc/tlp/default.nix4
-rw-r--r--pkgs/tools/misc/tmate/default.nix12
-rw-r--r--pkgs/tools/misc/ttylog/default.nix6
-rw-r--r--pkgs/tools/misc/txtw/default.nix25
-rw-r--r--pkgs/tools/misc/xfstests/default.nix86
-rw-r--r--pkgs/tools/misc/xmltv/default.nix16
-rw-r--r--pkgs/tools/misc/youtube-dl/default.nix8
18 files changed, 389 insertions, 56 deletions
diff --git a/pkgs/tools/misc/diffoscope/default.nix b/pkgs/tools/misc/diffoscope/default.nix
index 7fe21e8b3474..6715f1ac38fd 100644
--- a/pkgs/tools/misc/diffoscope/default.nix
+++ b/pkgs/tools/misc/diffoscope/default.nix
@@ -1,20 +1,29 @@
-{ stdenv, fetchgit, pythonPackages, docutils
+{ lib, stdenv, fetchgit, fetchpatch, pythonPackages, docutils
 , acl, binutils, bzip2, cbfstool, cdrkit, cpio, diffutils, e2fsprogs, file, fpc, gettext, ghc, gnupg1
 , gzip, jdk, libcaca, mono, pdftk, poppler_utils, rpm, sng, sqlite, squashfsTools, unzip, vim, xz
+, enableBloat ? false
 }:
 
 pythonPackages.buildPythonPackage rec {
   name = "diffoscope-${version}";
-  version = "44";
+  version = "45";
 
   namePrefix = "";
 
   src = fetchgit {
     url = "git://anonscm.debian.org/reproducible/diffoscope.git";
     rev = "refs/tags/${version}";
-    sha256 = "1sisdmh1bl62b16yfjy9mxxdfzhskrabp0l3pl1kxn7db0c4vpac";
+    sha256 = "1wdphcmr2n0pyg7zwvczy7ik1bzjlrjb76jwbzk971lwba3ajazk";
   };
 
+  patches =
+    [ # Ignore different link counts and inode change times.
+      (fetchpatch {
+        url = https://github.com/edolstra/diffoscope/commit/367f77bba8df0dbc89e63c9f66f05736adf5ec59.patch;
+        sha256 = "0mnp7icdrjn02dr6f5dwqvvr848jzgkv3cg69a24234y9gxd30ww";
+      })
+    ];
+
   postPatch = ''
     # Upstream doesn't provide a PKG-INFO file
     sed -i setup.py -e "/'rpm-python',/d"
@@ -22,9 +31,11 @@ pythonPackages.buildPythonPackage rec {
 
   # Still missing these tools: enjarify otool(maybe OS X only) showttf
   # Also these libraries: python3-guestfs
+  # FIXME: move xxd into a separate package so we don't have to pull in all of vim.
   propagatedBuildInputs = (with pythonPackages; [ debian libarchive-c python_magic tlsh ]) ++
-    [ acl binutils bzip2 cbfstool cdrkit cpio diffutils e2fsprogs file fpc gettext ghc gnupg1
-      gzip jdk libcaca mono pdftk poppler_utils rpm sng sqlite squashfsTools unzip vim xz ];
+    [ acl binutils bzip2 cbfstool cdrkit cpio diffutils e2fsprogs file gettext
+      gzip libcaca poppler_utils rpm sng sqlite squashfsTools unzip vim xz
+    ] ++ lib.optionals enableBloat [ jdk ghc fpc gnupg1 pdftk mono ];
 
   doCheck = false; # Calls 'mknod' in squashfs tests, which needs root
 
diff --git a/pkgs/tools/misc/grub4dos/default.nix b/pkgs/tools/misc/grub4dos/default.nix
index 18464574d440..c59869c0dc7e 100644
--- a/pkgs/tools/misc/grub4dos/default.nix
+++ b/pkgs/tools/misc/grub4dos/default.nix
@@ -5,11 +5,11 @@ let arch =
   else if stdenv.isx86_64 then "x86_64"
   else abort "Unknown architecture";
 in stdenv.mkDerivation {
-  name = "grub4dos-0.4.6a";
+  name = "grub4dos-0.4.6a-2015-12-31";
 
   src = fetchurl {
-    url = https://github.com/chenall/grub4dos/archive/e855b293432bd4d155e42d48356f9aa1974ec385.zip;
-    sha256 = "1vihzllsdshd5dyr7i7dp5ragyg77gg8r279pz954p7lkcda4kx7";
+    url = https://github.com/chenall/grub4dos/archive/a8024743c61cc4909514b27df07b7cc4bc89d1fb.zip;
+    sha256 = "1m5d7klb12qz5sa09919z7jchfafgh84cmpwilp52qnbpi3zh2fd";
   };
 
   nativeBuildInputs = [ unzip nasm ];
diff --git a/pkgs/tools/misc/ltunify/default.nix b/pkgs/tools/misc/ltunify/default.nix
new file mode 100644
index 000000000000..0329581bfaab
--- /dev/null
+++ b/pkgs/tools/misc/ltunify/default.nix
@@ -0,0 +1,21 @@
+{ stdenv, fetchgit }:
+
+stdenv.mkDerivation rec {
+  name = "ltunify-20140331";
+
+  src = fetchgit {
+    url = "https://git.lekensteyn.nl/ltunify.git";
+    rev = "c3a263ff97bcd31e96abbfed33d066f8d2778f58";
+    sha256 = "0zjw064fl9f73ppl9c37wsfhp6296yx65m1gis2n2ia6arlnh45q";
+  };
+
+  makeFlags = [ "DESTDIR=$(out)" "bindir=/bin" ];
+
+  meta = with stdenv.lib; {
+    description = "Tool for working with Logitech Unifying receivers and devices";
+    homepage = https://lekensteyn.nl/logitech-unifying.html;
+    license = licenses.gpl3Plus;
+    platforms = platforms.linux;
+    maintainers = [ maintainers.abbradar ];
+  };
+}
diff --git a/pkgs/tools/misc/mcrypt/default.nix b/pkgs/tools/misc/mcrypt/default.nix
index ffd8966a80eb..52c96fda1973 100644
--- a/pkgs/tools/misc/mcrypt/default.nix
+++ b/pkgs/tools/misc/mcrypt/default.nix
@@ -1,16 +1,18 @@
 { stdenv, fetchurl, libmcrypt, libmhash }:
- 
+
 stdenv.mkDerivation rec {
   version = "2.6.8";
   name = "mcrypt-${version}";
-  
+
   src = fetchurl {
     url = "mirror://sourceforge/mcrypt/MCrypt/${version}/${name}.tar.gz";
     sha256 = "5145aa844e54cca89ddab6fb7dd9e5952811d8d787c4f4bf27eb261e6c182098";
   };
- 
-  buildInputs = [libmcrypt libmhash];
- 
+
+  patches = [ ./format-string.patch ./overflow.patch ./segv.patch ./sprintf.patch ];
+
+  buildInputs = [ libmcrypt libmhash ];
+
   meta = {
     description = "Replacement for old UNIX crypt(1)";
     longDescription = ''
diff --git a/pkgs/tools/misc/mcrypt/format-string.patch b/pkgs/tools/misc/mcrypt/format-string.patch
new file mode 100644
index 000000000000..322ab473811f
--- /dev/null
+++ b/pkgs/tools/misc/mcrypt/format-string.patch
@@ -0,0 +1,31 @@
+--- mcrypt-2.6.8/src/errors.c
++++ mcrypt-2.6.8/src/errors.c
+@@ -25,24 +25,24 @@
+
+ void err_quit(char *errmsg)
+ {
+-	fprintf(stderr, errmsg);
++	fprintf(stderr, "%s", errmsg);
+ 	exit(-1);
+ }
+
+ void err_warn(char *errmsg)
+ {
+ 	if (quiet <= 1)
+-		fprintf(stderr, errmsg);
++		fprintf(stderr, "%s", errmsg);
+ }
+
+ void err_info(char *errmsg)
+ {
+ 	if (quiet == 0)
+-		fprintf(stderr, errmsg);
++		fprintf(stderr, "%s", errmsg);
+ }
+
+ void err_crit(char *errmsg)
+ {
+ 	if (quiet <= 2)
+-		fprintf(stderr, errmsg);
++		fprintf(stderr, "%s", errmsg);
+ }
diff --git a/pkgs/tools/misc/mcrypt/overflow.patch b/pkgs/tools/misc/mcrypt/overflow.patch
new file mode 100644
index 000000000000..bf747a58266a
--- /dev/null
+++ b/pkgs/tools/misc/mcrypt/overflow.patch
@@ -0,0 +1,24 @@
+From 3efb40e17ce4f76717ae17a1ce1e1f747ddf59fd Mon Sep 17 00:00:00 2001
+From: Alon Bar-Lev <alon.barlev@gmail.com>
+Date: Sat, 22 Dec 2012 22:37:06 +0200
+Subject: [PATCH] cleanup: buffer overflow
+
+---
+ mcrypt-2.6.8/src/extra.c |    2 ++
+ 1 files changed, 2 insertions(+), 0 deletions(-)
+
+diff --git a/mcrypt-2.6.8/src/extra.c b/mcrypt-2.6.8/src/extra.c
+index 3082f82..c7a1ac0 100644
+--- a/src/extra.c
++++ b/src/extra.c
+@@ -241,6 +241,8 @@ int check_file_head(FILE * fstream, char *algorithm, char *mode,
+ 		if (m_getbit(6, flags) == 1) { /* if the salt bit is set */
+ 			if (m_getbit(0, sflag) != 0) { /* if the first bit is set */
+ 				*salt_size = m_setbit(0, sflag, 0);
++				if (*salt_size > sizeof(tmp_buf))
++					err_quit(_("Salt is too long\n"));
+ 				if (*salt_size > 0) {
+ 					fread(tmp_buf, 1, *salt_size,
+ 					      fstream);
+--
+1.7.8.6
diff --git a/pkgs/tools/misc/mcrypt/segv.patch b/pkgs/tools/misc/mcrypt/segv.patch
new file mode 100644
index 000000000000..6796163418f5
--- /dev/null
+++ b/pkgs/tools/misc/mcrypt/segv.patch
@@ -0,0 +1,39 @@
+From 5bee29fae8f0e936ad4c957aef6035d09532a57a Mon Sep 17 00:00:00 2001
+From: Alon Bar-Lev <alon.barlev@gmail.com>
+Date: Sat, 22 Dec 2012 22:04:27 +0200
+Subject: [PATCH] cleanup: fixup segv on buffer access
+
+use exact buffer size instead of guess.
+
+do not copy out of source buffer.
+
+Signed-off-by: Alon Bar-Lev <alon.barlev@gmail.com>
+---
+ mcrypt-2.6.8/src/rfc2440.c |    5 +++--
+ 1 files changed, 3 insertions(+), 2 deletions(-)
+
+diff --git a/mcrypt-2.6.8/src/rfc2440.c b/mcrypt-2.6.8/src/rfc2440.c
+index 5a1f296..929b9ab 100644
+--- a/src/rfc2440.c
++++ b/src/rfc2440.c
+@@ -497,7 +497,7 @@ plaintext_encode(const USTRING dat)
+     time_t t;
+
+     assert(dat->len > 0);
+-    result = make_ustring( NULL,  2 * dat->len); /* xxx */
++    result = make_ustring( NULL,  dat->len + 12); /* xxx */
+     newdat = (USTRING)dat;
+     result->d[pos++] = (0x80 | 0x40 | PKT_PLAINTEXT);
+
+@@ -810,7 +810,8 @@ encrypted_encode(const USTRING pt, const DEK *dek)
+     _mcrypt_encrypt(dek->hd, rndpref, dek->blocklen + 2, NULL, 0);
+     _mcrypt_sync(dek->hd, rndpref, dek->blocklen);
+
+-    ct = make_ustring( rndpref,   2 * pt->len); /* xxx */
++    ct = make_ustring( NULL, dek->blocklen + 2 + pt->len + 12); /* xxx */
++    memcpy(ct->d, rndpref, dek->blocklen + 2);
+     pos = dek->blocklen + 2;
+
+     _mcrypt_encrypt(dek->hd, ct->d + pos, pt->len, pt->d, pt->len);
+--
+1.7.8.6
diff --git a/pkgs/tools/misc/mcrypt/sprintf.patch b/pkgs/tools/misc/mcrypt/sprintf.patch
new file mode 100644
index 000000000000..1c9ade807778
--- /dev/null
+++ b/pkgs/tools/misc/mcrypt/sprintf.patch
@@ -0,0 +1,108 @@
+Description: [CVE-2012-4527] Stack-based buffer overflow with long file names
+ .
+ A buffer overflow in mcrypt version 2.6.8 and earlier due to long filenames.
+ If a user were tricked into attempting to encrypt/decrypt specially crafted
+ long filename(s), this flaw would cause a stack-based buffer overflow that
+ could potentially lead to arbitrary code execution.
+ .
+ Note that this is caught by FORTIFY_SOURCE, which makes this a crash-only
+ bug on wheezy.
+Author: Attila Bogar, Jean-Michel Vourgère <jmv_deb@nirgal.com>
+Origin: https://bugzilla.redhat.com/show_bug.cgi?id=CVE-2012-4527
+Bug: CVE-2012-4527
+Bug-Debian: http://bugs.debian.org/690924
+Forwarded: no
+Last-Update: 2012-11-01
+Index: mcrypt-2.6.8/src/mcrypt.c
+===================================================================
+--- mcrypt-2.6.8.orig/src/mcrypt.c
++++ mcrypt-2.6.8/src/mcrypt.c
+@@ -41,4 +41,6 @@
+
++/* Temporary error message can contain one file name and 1k of text */
++#define ERRWIDTH ((PATH_MAX)+1024)
+-char tmperr[128];
++char tmperr[ERRWIDTH];
+ unsigned int stream_flag = FALSE;
+ char *keymode = NULL;
+ char *mode = NULL;
+@@ -482,7 +485,7 @@
+ #ifdef HAVE_STAT
+       if (stream_flag == FALSE) {
+ 	 if (is_normal_file(file[i]) == FALSE) {
+-	    sprintf(tmperr,
++	    snprintf(tmperr, ERRWIDTH,
+ 		    _
+ 		    ("%s: %s is not a regular file. Skipping...\n"),
+ 		    program_name, file[i]);
+@@ -501,7 +504,7 @@
+ 	    dinfile = file[i];
+ 	 if ((isatty(fileno((FILE *) (stdin))) == 1)
+ 	     && (stream_flag == TRUE) && (force == 0)) {	/* not a tty */
+-	    sprintf(tmperr,
++	    snprintf(tmperr, ERRWIDTH,
+ 		    _
+ 		    ("%s: Encrypted data will not be read from a terminal.\n"),
+ 		    program_name);
+@@ -520,7 +523,7 @@
+ 	    einfile = file[i];
+ 	 if ((isatty(fileno((FILE *) (stdout))) == 1)
+ 	     && (stream_flag == TRUE) && (force == 0)) {	/* not a tty */
+-	    sprintf(tmperr,
++	    snprintf(tmperr, ERRWIDTH,
+ 		    _
+ 		    ("%s: Encrypted data will not be written to a terminal.\n"),
+ 		    program_name);
+@@ -544,7 +547,7 @@
+ 	    strcpy(outfile, einfile);
+ 	    /* if file has already the .nc ignore it */
+ 	    if (strstr(outfile, ".nc") != NULL) {
+-	       sprintf(tmperr,
++	       snprintf(tmperr, ERRWIDTH,
+ 		       _
+ 		       ("%s: file %s has the .nc suffix... skipping...\n"),
+ 		       program_name, outfile);
+@@ -590,10 +593,10 @@
+
+ 	 if (x == 0) {
+ 	    if (stream_flag == FALSE) {
+-	       sprintf(tmperr, _("File %s was decrypted.\n"), dinfile);
++	       snprintf(tmperr, ERRWIDTH, _("File %s was decrypted.\n"), dinfile);
+ 	       err_warn(tmperr);
+ 	    } else {
+-	       sprintf(tmperr, _("Stdin was decrypted.\n"));
++	       snprintf(tmperr, ERRWIDTH, _("Stdin was decrypted.\n"));
+ 	       err_warn(tmperr);
+ 	    }
+ #ifdef HAVE_STAT
+@@ -610,7 +613,7 @@
+
+ 	 } else {
+ 	    if (stream_flag == FALSE) {
+-	       sprintf(tmperr,
++	       snprintf(tmperr, ERRWIDTH,
+ 		       _
+ 		       ("File %s was NOT decrypted successfully.\n"),
+ 		       dinfile);
+@@ -636,10 +639,10 @@
+
+ 	 if (x == 0) {
+ 	    if (stream_flag == FALSE) {
+-	       sprintf(tmperr, _("File %s was encrypted.\n"), einfile);
++	       snprintf(tmperr, ERRWIDTH, _("File %s was encrypted.\n"), einfile);
+ 	       err_warn(tmperr);
+ 	    } else {
+-	       sprintf(tmperr, _("Stdin was encrypted.\n"));
++	       snprintf(tmperr, ERRWIDTH, _("Stdin was encrypted.\n"));
+ 	       err_warn(tmperr);
+ 	    }
+ #ifdef HAVE_STAT
+@@ -655,7 +658,7 @@
+
+ 	 } else {
+ 	    if (stream_flag == FALSE) {
+-	       sprintf(tmperr,
++	       snprintf(tmperr, ERRWIDTH,
+ 		       _
+ 		       ("File %s was NOT encrypted successfully.\n"),
+ 		       einfile);
diff --git a/pkgs/tools/misc/pg_top/default.nix b/pkgs/tools/misc/pg_top/default.nix
index 0d379cd11d4a..4de334331158 100644
--- a/pkgs/tools/misc/pg_top/default.nix
+++ b/pkgs/tools/misc/pg_top/default.nix
@@ -1,16 +1,16 @@
-{stdenv, fetchurl, ncurses, postgresql}:
+{ stdenv, fetchurl, ncurses, postgresql }:
 
-stdenv.mkDerivation {
+stdenv.mkDerivation rec {
   name = "pg_top-3.7.0";
 
   src = fetchurl {
-    url = http://pgfoundry.org/frs/download.php/1781/pg_top-3.7.0.tar.gz;
+    url = "http://pgfoundry.org/frs/download.php/1781/${name}.tar.gz";
     sha256 = "17xrv0l58rv3an06gkajzw0gg6v810xx6vl137an1iykmhvfh7h2";
   };
 
-  buildInputs = [ncurses postgresql]; 
+  buildInputs = [ ncurses postgresql ];
 
-  meta = {
+  meta = with stdenv.lib; {
     description = "A 'top' like tool for PostgreSQL";
     longDescription = '' 
       pg_top allows you to: 
@@ -21,8 +21,10 @@ stdenv.mkDerivation {
         <listitem>View user table statistics.</listitem>
         <listitem>View user index statistics.</listitem>
       </itemizedlist>
-    ''; 
+    '';
 
     homepage = http://ptop.projects.postgresql.org/;
+    platforms = platforms.linux;
+    license = licenses.free; # see commands.c
   };
 }
diff --git a/pkgs/tools/misc/screenfetch/default.nix b/pkgs/tools/misc/screenfetch/default.nix
index 92cc800d83d3..972e10492784 100644
--- a/pkgs/tools/misc/screenfetch/default.nix
+++ b/pkgs/tools/misc/screenfetch/default.nix
@@ -3,12 +3,12 @@
 }:
 
 stdenv.mkDerivation {
-  name = "screenFetch-2015-04-20";
+  name = "screenFetch-2016-01-13";
 
   src = fetchgit {
     url = git://github.com/KittyKatt/screenFetch.git;
-    rev = "53e1c0cccacf648e846057938a68dda914f532a1";
-    sha256 = "1wyvy1sn7vnclwrzd32jqlq6iirjkhp2ak55brhkpp9rj1qxk3q6";
+    rev = "22e5bee7647453d45ec82f543f37b8a6a062835d";
+    sha256 = "0xdiz02bqg7ajj547j496qq9adysm1f6zymcy3yyfgw3prnzvdir";
   };
 
   nativeBuildInputs = [ makeWrapper ];
diff --git a/pkgs/tools/misc/testdisk/default.nix b/pkgs/tools/misc/testdisk/default.nix
index a80e560b5ebc..312c0ae6db5a 100644
--- a/pkgs/tools/misc/testdisk/default.nix
+++ b/pkgs/tools/misc/testdisk/default.nix
@@ -1,11 +1,11 @@
 { stdenv, fetchurl, ncurses, libjpeg, e2fsprogs, zlib, openssl, libuuid, ntfs3g }:
 
 stdenv.mkDerivation {
-  name = "testdisk-6.14";
+  name = "testdisk-7.0";
 
   src = fetchurl {
-    url = http://www.cgsecurity.org/testdisk-6.14.tar.bz2;
-    sha256 = "0v1jap83f5h99zv01v3qmqm160d36n4ysi0gyq7xzb3mqgmw75x5";
+    url = http://www.cgsecurity.org/testdisk-7.0.tar.bz2;
+    sha256 = "00bb3b6b22e6aba88580eeb887037aef026968c21a87b5f906c6652cbee3442d";
   };
 
   buildInputs = [ ncurses libjpeg zlib openssl libuuid ]
diff --git a/pkgs/tools/misc/tlp/default.nix b/pkgs/tools/misc/tlp/default.nix
index d21b4fb2f3f8..7b57458bd3f4 100644
--- a/pkgs/tools/misc/tlp/default.nix
+++ b/pkgs/tools/misc/tlp/default.nix
@@ -1,5 +1,5 @@
 { stdenv, lib, fetchFromGitHub, makeWrapper, perl, systemd, iw, rfkill, hdparm, ethtool, inetutils
-, module_init_tools, pciutils, smartmontools, x86_energy_perf_policy
+, module_init_tools, pciutils, smartmontools, x86_energy_perf_policy, gawk, gnugrep, coreutils
 , enableRDW ? false, networkmanager
 }:
 
@@ -28,7 +28,7 @@ in stdenv.mkDerivation {
 
   paths = lib.makeSearchPath "bin"
           ([ iw rfkill hdparm ethtool inetutils systemd module_init_tools pciutils smartmontools
-             x86_energy_perf_policy
+             x86_energy_perf_policy gawk gnugrep coreutils
            ]
            ++ lib.optional enableRDW networkmanager
           );
diff --git a/pkgs/tools/misc/tmate/default.nix b/pkgs/tools/misc/tmate/default.nix
index 881c9f1c54f8..b50091657995 100644
--- a/pkgs/tools/misc/tmate/default.nix
+++ b/pkgs/tools/misc/tmate/default.nix
@@ -1,26 +1,22 @@
-{ stdenv, fetchFromGitHub, autoconf, automake110x, libtool, pkgconfig, zlib, openssl, libevent, ncurses, cmake, ruby }:
+{ stdenv, fetchFromGitHub, autoconf, automake, libtool, pkgconfig, zlib, openssl, libevent, ncurses, cmake, ruby, libmsgpack, libssh }:
 
 stdenv.mkDerivation rec {
   name = "tmate-${version}";
-  version = "1.8.10";
+  version = "2.2.0";
 
   src = fetchFromGitHub {
     owner  = "nviennot";
     repo   = "tmate";
     rev    = version;
-    sha256 = "1bd9mi8fx40608zlady9dbv21kbdwc3kqrgz012m529f6cbysmzc";
+    sha256 = "1w3a7na0yj1y0x24qckc7s2y9xfak5iv6vyqrd0iibn3b7dxarli";
   };
 
-  buildInputs = [ autoconf automake110x pkgconfig libtool zlib openssl libevent ncurses cmake ruby ];
+  buildInputs = [ autoconf automake pkgconfig libtool zlib openssl libevent ncurses cmake ruby libmsgpack libssh ];
 
   dontUseCmakeConfigure=true;
 
   preConfigure = "./autogen.sh";
 
-  postPatch = stdenv.lib.optionalString stdenv.isDarwin ''
-    substituteInPlace msgpack/bootstrap --replace glibtoolize libtoolize
-  '';
-
   meta = {
     homepage = http://tmate.io/;
     description = "Instant Terminal Sharing";
diff --git a/pkgs/tools/misc/ttylog/default.nix b/pkgs/tools/misc/ttylog/default.nix
index 16db6b62eb7a..ab7ab2b68c34 100644
--- a/pkgs/tools/misc/ttylog/default.nix
+++ b/pkgs/tools/misc/ttylog/default.nix
@@ -15,7 +15,11 @@ stdenv.mkDerivation rec {
 
   meta = with stdenv.lib; {
     homepage = "http://ttylog.sourceforg.net";
-    description = "a serial port logger which can be used to print everything to stdout that comes from a serial device";
+    description = "Simple serial port logger";
+    longDescription = ''
+      A serial port logger which can be used to print everything to stdout
+      that comes from a serial device.
+    '';
     license = licenses.gpl2;
     platforms = platforms.linux;
     maintainers = with maintainers; [ wkennington ];
diff --git a/pkgs/tools/misc/txtw/default.nix b/pkgs/tools/misc/txtw/default.nix
new file mode 100644
index 000000000000..90a9e0fa66ff
--- /dev/null
+++ b/pkgs/tools/misc/txtw/default.nix
@@ -0,0 +1,25 @@
+{ stdenv, fetchFromGitHub, cairo }:
+
+stdenv.mkDerivation rec {
+  version = "0.4";
+  name = "txtw-${version}";
+
+  src = fetchFromGitHub {
+    owner = "baskerville";
+    repo = "txtw";
+    rev = "${version}";
+    sha256 = "17yjdgdd080fsf5r1wzgk6vvzwsa15gcwc9z64v7x588jm1ryy3k";
+  };
+
+  buildInputs = [ cairo ];
+
+  prePatch = ''sed -i "s@/usr/local@$out@" Makefile'';
+
+  meta = with stdenv.lib; {
+    description = "Compute text widths";
+    homepage = https://github.com/baskerville/txtw;
+    maintainers = with maintainers; [ lihop ];
+    license = licenses.unlicense;
+    platforms = platforms.linux;
+  };
+}
diff --git a/pkgs/tools/misc/xfstests/default.nix b/pkgs/tools/misc/xfstests/default.nix
new file mode 100644
index 000000000000..b7c1795c0372
--- /dev/null
+++ b/pkgs/tools/misc/xfstests/default.nix
@@ -0,0 +1,86 @@
+{ stdenv, acl, attr, autoreconfHook, bash, bc, coreutils, e2fsprogs, fetchgit, fio, gawk
+, lib, libaio, libcap_progs, libuuid, libxfs, lvm2, openssl, perl, procps, psmisc, su
+, time, utillinux, which, writeScript, xfsprogs }:
+
+stdenv.mkDerivation {
+  name = "xfstests-2016-01-11";
+
+  src = fetchgit {
+    url = "git://oss.sgi.com/xfs/cmds/xfstests.git";
+    rev = "dfe582dd396f16ddce1909baab7376e00af07792";
+    sha256 = "0hbgccmhcxn5nm87nq13kpi3rcbjadlj65kd03bfjqxhm4gx732q";
+  };
+
+  buildInputs = [ acl autoreconfHook attr gawk libaio libuuid libxfs openssl perl ];
+
+  patchPhase = ''
+    # Patch the destination directory
+    sed -i include/builddefs.in -e "s|^PKG_LIB_DIR\s*=.*|PKG_LIB_DIR=$out/lib/xfstests|"
+
+    # Don't canonicalize path to mkfs (in util-linux) - otherwise e.g. mkfs.ext4 isn't found
+    sed -i common/config -e 's|^export MKFS_PROG=.*|export MKFS_PROG=mkfs|'
+
+    for f in common/* tools/* tests/*/*; do
+      sed -i $f -e 's|/bin/bash|${bash}/bin/bash|'
+      sed -i $f -e 's|/bin/true|true|'
+      sed -i $f -e 's|/usr/sbin/filefrag|${e2fsprogs}/bin/filefrag|'
+      sed -i $f -e 's|hostname -s|hostname|'   # `hostname -s` seems problematic on NixOS
+      sed -i $f -e 's|$(_yp_active)|1|'        # NixOS won't ever have Yellow Pages enabled
+    done
+
+    for f in src/*.c src/*.sh; do
+      sed -e 's|/bin/rm|${coreutils}/bin/rm|' -i $f
+      sed -e 's|/usr/bin/time|${time}/bin/time|' -i $f
+    done
+
+    patchShebangs .
+  '';
+
+  preConfigure = ''
+    # The configure scripts really don't like looking in PATH at all...
+    export AWK=$(type -P awk)
+    export ECHO=$(type -P sort)
+    export LIBTOOL=$(type -P libtool)
+    export MAKE=$(type -P make)
+    export SED=$(type -P sed)
+    export SORT=$(type -P sort)
+  '';
+
+  postInstall = ''
+    patchShebangs $out/lib/xfstests
+
+    mkdir -p $out/bin
+    substitute $wrapperScript $out/bin/xfstests-check --subst-var out
+    chmod a+x $out/bin/xfstests-check
+  '';
+
+  # The upstream package is pretty hostile to packaging; it looks up
+  # various paths relative to current working directory, and also
+  # wants to write temporary files there. So create a temporary
+  # to run from and symlink the runtime files to it.
+  wrapperScript = writeScript "xfstests-check" ''
+    #!/bin/sh
+    set -e
+    export RESULT_BASE="$(pwd)/results"
+
+    dir=$(mktemp --tmpdir -d xfstests.XXXXXX)
+    trap "rm -rf $dir" EXIT
+
+    chmod a+rx "$dir"
+    cd "$dir"
+    for f in check common ltp src tests; do
+      ln -s @out@/lib/xfstests/$f $f
+    done
+
+    export PATH=${lib.makeSearchPath "bin" [acl attr bc e2fsprogs fio gawk libcap_progs lvm2 perl procps psmisc su utillinux which xfsprogs]}:$PATH
+    exec ./check "$@"
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Torture test suite for filesystems";
+    homepage = "http://oss.sgi.com/cgi-bin/gitweb.cgi?p=xfs/cmds/xfstests.git";
+    license = licenses.gpl2;
+    maintainers = [ maintainers.dezgeg ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/pkgs/tools/misc/xmltv/default.nix b/pkgs/tools/misc/xmltv/default.nix
deleted file mode 100644
index 9d3939406066..000000000000
--- a/pkgs/tools/misc/xmltv/default.nix
+++ /dev/null
@@ -1,16 +0,0 @@
-{ fetchurl, perl, perlPackages }:
-
-import ../../../development/perl-modules/generic perl {
-  name = "xmltv-0.5.51";
-  src = fetchurl {
-    url = mirror://sourceforge/xmltv/xmltv-0.5.51.tar.bz2;
-    sha256 = "0vgc167y6y847m18vg3qwjy3df12bryjy9par01n5b9mjalx9jpd";
-  };
-  #makeMakerFlags = "-components tv_grab_nl";
-  buildInputs = [
-    perlPackages.TermReadKey perlPackages.XMLTwig perlPackages.XMLWriter
-    perlPackages.DateManip perlPackages.HTMLTree perlPackages.HTMLParser
-    perlPackages.HTMLTagset perlPackages.URI perlPackages.LWP
-  ];
-  meta.broken = true;
-}
diff --git a/pkgs/tools/misc/youtube-dl/default.nix b/pkgs/tools/misc/youtube-dl/default.nix
index cdd213b0eba5..09328c8d8aba 100644
--- a/pkgs/tools/misc/youtube-dl/default.nix
+++ b/pkgs/tools/misc/youtube-dl/default.nix
@@ -1,5 +1,6 @@
 { stdenv, fetchurl, buildPythonPackage, makeWrapper, ffmpeg, zip
-, pandoc ? null }:
+, pandoc ? null
+}:
 
 # Pandoc is required to build the package's man page. Release tarballs
 # contain a formatted man page already, though, so it's fine to pass
@@ -10,10 +11,10 @@
 
 buildPythonPackage rec {
 
-  name = "youtube-dl-${meta.version}";
+  name = "youtube-dl-2016.01.01";
 
   src = fetchurl {
-    url = "http://yt-dl.org/downloads/${meta.version}/${name}.tar.gz";
+    url = "http://yt-dl.org/downloads/${stdenv.lib.getVersion name}/${name}.tar.gz";
     sha256 = "0b0pk8h2iswdiyf65c0zcwcad9dm2hid67fnfafj7d3ikp4kfbvk";
   };
 
@@ -24,7 +25,6 @@ buildPythonPackage rec {
     ''wrapProgram $out/bin/youtube-dl --prefix PATH : "${ffmpeg}/bin"'';
 
   meta = with stdenv.lib; {
-    version = "2016.01.01";
     homepage = http://rg3.github.io/youtube-dl/;
     repositories.git = https://github.com/rg3/youtube-dl.git;
     description = "Command-line tool to download videos from YouTube.com and other sites";