about summary refs log tree commit diff
path: root/pkgs/tools
diff options
context:
space:
mode:
Diffstat (limited to 'pkgs/tools')
-rw-r--r--pkgs/tools/backup/bup/default.nix12
-rw-r--r--pkgs/tools/backup/obnam/default.nix10
-rw-r--r--pkgs/tools/filesystems/btrfsprogs/btrfs-progs-Fix-the-receive-code-pathing.patch146
-rw-r--r--pkgs/tools/filesystems/btrfsprogs/btrfs-receive-help-text.patch13
-rw-r--r--pkgs/tools/filesystems/btrfsprogs/btrfs-receive-lchown.patch12
-rw-r--r--pkgs/tools/filesystems/btrfsprogs/btrfs-set-received-uuid.c109
-rw-r--r--pkgs/tools/filesystems/btrfsprogs/default.nix19
-rw-r--r--pkgs/tools/filesystems/btrfsprogs/subvol-listing.patch34
-rw-r--r--pkgs/tools/misc/youtube-dl/default.nix12
-rw-r--r--pkgs/tools/networking/httpie/default.nix20
-rw-r--r--pkgs/tools/networking/maildrop/default.nix20
-rw-r--r--pkgs/tools/networking/maildrop/maildrop.configure.hack.patch13
-rw-r--r--pkgs/tools/networking/network-manager/default.nix8
13 files changed, 411 insertions, 17 deletions
diff --git a/pkgs/tools/backup/bup/default.nix b/pkgs/tools/backup/bup/default.nix
index 6bc828bc60fe..177daf7b8603 100644
--- a/pkgs/tools/backup/bup/default.nix
+++ b/pkgs/tools/backup/bup/default.nix
@@ -3,12 +3,12 @@
 with stdenv.lib;
 
 stdenv.mkDerivation {
-  name = "bup-0.25git20120722";
+  name = "bup-0.25git20121224";
 
   src = fetchgit {
-    url = "https://github.com/apenwarr/bup.git";
-    sha256 = "3ad232d7f23071ed34f920bd4c3137583f1adffbe23c022896289bc0a03fe7aa";
-    rev = "02bd2b566ea5eec2fd656e0ae572b4c7b6b9550a";
+    url = "https://github.com/bup/bup.git";
+    sha256 = "f0e0c835ab83f00b28920d493e4150d2247113aad3a74385865c2a8c6f1ba7b8";
+    rev = "458e92da32ddd3c18fc1c3e52a76e9f0b48b832f";
   };
 
   nativeBuildInputs = [ pandoc perl makeWrapper ];
@@ -26,8 +26,6 @@ stdenv.mkDerivation {
       substituteInPlace $f --replace "/usr/bin/env python" "${python}/bin/python"
     done
     substituteInPlace Makefile --replace "./format-subst.pl" "perl ./format-subst.pl"
-    substituteInPlace lib/bup/csetup.py \
-      --replace "'bupsplit.c'])" "'bupsplit.c'], library_dirs=['${python}/lib'])"
   '';
 
   makeFlags = [
@@ -42,6 +40,6 @@ stdenv.mkDerivation {
       Highly efficient file backup system based on the git packfile format.
       Capable of doing *fast* incremental backups of virtual machine images.
     '';
-    homepage = "https://github.com/apenwarr/bup";
+    homepage = "https://github.com/bup/bup";
   };
 }
diff --git a/pkgs/tools/backup/obnam/default.nix b/pkgs/tools/backup/obnam/default.nix
index 07b86c2e41ed..dcac235c6703 100644
--- a/pkgs/tools/backup/obnam/default.nix
+++ b/pkgs/tools/backup/obnam/default.nix
@@ -1,12 +1,14 @@
 { stdenv, fetchurl, python, pythonPackages, pycrypto, attr }:
 
-pythonPackages.buildPythonPackage {
-  name = "obnam-1.2";
+pythonPackages.buildPythonPackage rec {
+  name = "obnam-${version}";
+  version = "1.3";
+
   namePrefix = "";
 
   src = fetchurl rec {
-    url = "http://code.liw.fi/debian/pool/main/o/obnam/obnam_1.2.orig.tar.gz";
-    sha256 = "33457452726d5c393d98c565b8e1ab3ac11276cc42bf67c4eee6c4e4ac9976d6";
+    url = "http://code.liw.fi/debian/pool/main/o/obnam/obnam_${version}.orig.tar.gz";
+    sha256 = "1hmi58knv7qjw6jr5m28sip5gwzavk87i3s77xk72anaxhvf4g8w";
   };
 
   buildInputs = [ pythonPackages.sphinx attr ];
diff --git a/pkgs/tools/filesystems/btrfsprogs/btrfs-progs-Fix-the-receive-code-pathing.patch b/pkgs/tools/filesystems/btrfsprogs/btrfs-progs-Fix-the-receive-code-pathing.patch
new file mode 100644
index 000000000000..6dd0639c607e
--- /dev/null
+++ b/pkgs/tools/filesystems/btrfsprogs/btrfs-progs-Fix-the-receive-code-pathing.patch
@@ -0,0 +1,146 @@
+diff --git a/cmds-receive.c b/cmds-receive.c
+index a8be6fa..6b7cf12 100644
+--- a/cmds-receive.c
++++ b/cmds-receive.c
+@@ -52,11 +52,13 @@ static int g_verbose = 0;
+ struct btrfs_receive
+ {
+ 	int mnt_fd;
++	int dest_dir_fd;
+
+ 	int write_fd;
+ 	char *write_path;
+
+ 	char *root_path;
++	char *dest_dir_path; /* relative to root_path */
+ 	char *full_subvol_path;
+
+ 	struct subvol_info *cur_subvol;
+@@ -150,8 +152,11 @@ static int process_subvol(const char *path, const u8 *uuid, u64 ctransid,
+ 	r->cur_subvol = calloc(1, sizeof(*r->cur_subvol));
+ 	r->parent_subvol = NULL;
+
+-	r->cur_subvol->path = strdup(path);
+-	r->full_subvol_path = path_cat(r->root_path, path);
++	if (strlen(r->dest_dir_path) == 0)
++		r->cur_subvol->path = strdup(path);
++	else
++		r->cur_subvol->path = path_cat(r->dest_dir_path, path);
++	r->full_subvol_path = path_cat3(r->root_path, r->dest_dir_path, path);
+
+ 	fprintf(stderr, "At subvol %s\n", path);
+
+@@ -167,7 +172,7 @@ static int process_subvol(const char *path, const u8 *uuid, u64 ctransid,
+
+ 	memset(&args_v1, 0, sizeof(args_v1));
+ 	strcpy(args_v1.name, path);
+-	ret = ioctl(r->mnt_fd, BTRFS_IOC_SUBVOL_CREATE, &args_v1);
++	ret = ioctl(r->dest_dir_fd, BTRFS_IOC_SUBVOL_CREATE, &args_v1);
+ 	if (ret < 0) {
+ 		ret = -errno;
+ 		fprintf(stderr, "ERROR: creating subvolume %s failed. "
+@@ -195,8 +200,11 @@ static int process_snapshot(const char *path, const u8 *uuid, u64 ctransid,
+ 	r->cur_subvol = calloc(1, sizeof(*r->cur_subvol));
+ 	r->parent_subvol = NULL;
+
+-	r->cur_subvol->path = strdup(path);
+-	r->full_subvol_path = path_cat(r->root_path, path);
++	if (strlen(r->dest_dir_path) == 0)
++		r->cur_subvol->path = strdup(path);
++	else
++		r->cur_subvol->path = path_cat(r->dest_dir_path, path);
++	r->full_subvol_path = path_cat3(r->root_path, r->dest_dir_path, path);
+
+ 	fprintf(stderr, "At snapshot %s\n", path);
+
+@@ -243,7 +251,7 @@ static int process_snapshot(const char *path, const u8 *uuid, u64 ctransid,
+ 		goto out;
+ 	}
+
+-	ret = ioctl(r->mnt_fd, BTRFS_IOC_SNAP_CREATE_V2, &args_v2);
++	ret = ioctl(r->dest_dir_fd, BTRFS_IOC_SNAP_CREATE_V2, &args_v2);
+ 	close(args_v2.fd);
+ 	if (ret < 0) {
+ 		ret = -errno;
+@@ -790,17 +798,48 @@ struct btrfs_send_ops send_ops = {
+ int do_receive(struct btrfs_receive *r, const char *tomnt, int r_fd)
+ {
+ 	int ret;
++	char *dest_dir_full_path;
+ 	int end = 0;
+
+-	r->root_path = strdup(tomnt);
+-	r->mnt_fd = open(tomnt, O_RDONLY | O_NOATIME);
++	dest_dir_full_path = realpath(tomnt, NULL);
++	if (!dest_dir_full_path) {
++		ret = -errno;
++		fprintf(stderr, "ERROR: realpath(%s) failed. %s\n", tomnt,
++				strerror(-ret));
++		goto out;
++	}
++	r->dest_dir_fd = open(dest_dir_full_path, O_RDONLY | O_NOATIME);
++	if (r->dest_dir_fd < 0) {
++		ret = -errno;
++		fprintf(stderr, "ERROR: failed to open destination directory %s. %s\n",
++			    dest_dir_full_path, strerror(-ret));
++		goto out;
++	}
++
++	ret = find_mount_root(dest_dir_full_path, &r->root_path);
++	if (ret < 0) {
++		ret = -EINVAL;
++		fprintf(stderr, "ERROR: failed to determine mount point "
++				"for %s\n", dest_dir_full_path);
++		goto out;
++	}
++	r->mnt_fd = open(r->root_path, O_RDONLY | O_NOATIME);
+ 	if (r->mnt_fd < 0) {
+ 		ret = -errno;
+-		fprintf(stderr, "ERROR: failed to open %s. %s\n", tomnt,
++		fprintf(stderr, "ERROR: failed to open %s. %s\n", r->root_path,
+ 				strerror(-ret));
+ 		goto out;
+ 	}
+
++	/*
++	 * find_mount_root returns a root_path that is a subpath of
++	 * dest_dir_full_path. Now get the other part of root_path,
++	 * which is the destination dir relative to root_path.
++	 */
++	r->dest_dir_path = dest_dir_full_path + strlen(r->root_path);
++	if (r->dest_dir_path[0] == '/')
++		r->dest_dir_path++;
++
+ 	ret = subvol_uuid_search_init(r->mnt_fd, &r->sus);
+ 	if (ret < 0)
+ 		return ret;
+diff --git a/cmds-send.c b/cmds-send.c
+index 9b47e70..c408bc7 100644
+--- a/cmds-send.c
++++ b/cmds-send.c
+@@ -81,6 +81,14 @@ int find_mount_root(const char *path, char **mount_root)
+ 		}
+ 	}
+
++	if (!longest_match) {
++		fprintf(stderr, "ERROR: Failed to find mount root for path %s.\n",
++			    path);
++		fprintf(stderr, "Please make sure that you have a valid \
++			/etc/mtab file.\n");
++		return -ENOENT;
++	}
++
+ 	*mount_root = realpath(longest_match, NULL);
+ 	free(longest_match);
+
+diff --git a/send-utils.h b/send-utils.h
+index da407eb..a3e038b 100644
+--- a/send-utils.h
++++ b/send-utils.h
+@@ -65,5 +65,6 @@ void subvol_uuid_search_add(struct subvol_uuid_search *s,
+ char *path_cat(const char *p1, const char *p2);
+ char *path_cat3(const char *p1, const char *p2, const char *p3);
+
++int find_mount_root(const char *path, char **mount_root);
+
+ #endif /* SEND_UTILS_H_ */
diff --git a/pkgs/tools/filesystems/btrfsprogs/btrfs-receive-help-text.patch b/pkgs/tools/filesystems/btrfsprogs/btrfs-receive-help-text.patch
new file mode 100644
index 000000000000..a9892cc780ed
--- /dev/null
+++ b/pkgs/tools/filesystems/btrfsprogs/btrfs-receive-help-text.patch
@@ -0,0 +1,13 @@
+diff --git a/cmds-receive.c b/cmds-receive.c
+index a8be6fa..c182175 100644
+--- a/cmds-receive.c
++++ b/cmds-receive.c
+@@ -880,7 +880,7 @@ static const char * const receive_cmd_group_usage[] = {
+ };
+
+ static const char * const cmd_receive_usage[] = {
+-	"btrfs receive [-v] [-i <infile>] <mount>",
++	"btrfs receive [-v] [-f <infile>] <mount>",
+ 	"Receive subvolumes from stdin.",
+ 	"Receives one or more subvolumes that were previously ",
+ 	"sent with btrfs send. The received subvolumes are stored",
diff --git a/pkgs/tools/filesystems/btrfsprogs/btrfs-receive-lchown.patch b/pkgs/tools/filesystems/btrfsprogs/btrfs-receive-lchown.patch
new file mode 100644
index 000000000000..3abb1ba25d32
--- /dev/null
+++ b/pkgs/tools/filesystems/btrfsprogs/btrfs-receive-lchown.patch
@@ -0,0 +1,12 @@
+diff --git a/cmds-receive.c b/cmds-receive.c
+index 6b7cf12..a6a6a5b 100644
+--- a/cmds-receive.c
++++ b/cmds-receive.c
+@@ -731,7 +731,7 @@  static int process_chown(const char *path, u64 uid, u64 gid, void *user)
+ 		fprintf(stderr, "chown %s - uid=%llu, gid=%llu\n", path,
+ 				uid, gid);
+
+-	ret = chown(full_path, uid, gid);
++	ret = lchown(full_path, uid, gid);
+ 	if (ret < 0) {
+ 		ret = -errno;
diff --git a/pkgs/tools/filesystems/btrfsprogs/btrfs-set-received-uuid.c b/pkgs/tools/filesystems/btrfsprogs/btrfs-set-received-uuid.c
new file mode 100644
index 000000000000..483ec5f84155
--- /dev/null
+++ b/pkgs/tools/filesystems/btrfsprogs/btrfs-set-received-uuid.c
@@ -0,0 +1,109 @@
+/*
+btrfs receive currently mandates that incremental receives can only be performed on a parent subvolume
+that was also received. This means you cannot apply it to (snapshotted) subvolumes you still have on disk, 
+as they were not received themselves.
+
+This small utility allows you to set the received_uuid of a subvolume, tricking btrfs receive into using it.
+
+found on btrfs mailing list
+read the discussion here: http://comments.gmane.org/gmane.comp.file-systems.btrfs/21922
+*/
+
+#define _GNU_SOURCE
+
+#include <unistd.h>
+#include <stdlib.h>
+#include <errno.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+#include <stdio.h>
+#include <string.h>
+#include <uuid/uuid.h>
+#include <sys/ioctl.h>
+
+#include "ctree.h"
+#include "ioctl.h"
+#include "send-utils.h"
+
+#define CLEAR(var) memset(&var, 0, sizeof(var))
+
+
+int main(int argc, char **argv) {
+	int ret, fd;
+	struct subvol_uuid_search sus;
+	struct btrfs_ioctl_received_subvol_args rs_args;
+	struct subvol_info *si;
+	char uuidbuf[37], parent_uuidbuf[37], received_uuidbuf[37];
+
+
+	if (argc != 3 && argc != 4) {
+		printf("usage: btrfs-set-received-uuid btrfs-mountpoint src-subvolume-path-relative-to-mountpoint [dest-absolute-subvolume-path]\n");
+		exit(1);
+	}
+
+	printf("opening srcmnt %s\n", argv[1]);
+	fd = open(argv[1], O_RDONLY | O_NOATIME);
+	if (fd < 0) {
+		printf("failed to open srcmnt %s! %s\n", argv[1], strerror(errno));
+		exit(2);
+	}
+
+	puts("initializing sub search");
+	CLEAR(sus);
+	ret = subvol_uuid_search_init(fd, &sus);
+	if (ret < 0) {
+		printf("failed to initialize sub search! %s\n", strerror(-ret));
+		exit(3);
+	}
+	
+	printf("searching srcsub %s\n", argv[2]);
+	si = subvol_uuid_search(&sus, 0, NULL, 0, argv[2], subvol_search_by_path);
+	if (!si) {
+		puts("srcsub not found!");
+		exit(4);
+	}
+
+	uuid_unparse(si->uuid,                   uuidbuf);
+	uuid_unparse(si->parent_uuid,     parent_uuidbuf);
+	uuid_unparse(si->received_uuid, received_uuidbuf);
+
+	printf("\nsrcsub found:\n"
+	       "         uuid=%s\n"
+	       "  parent_uuid=%s\n"
+	       "received_uuid=%s\n"
+	       "ctransid=%Lu otransid=%Lu stransid=%Lu rtransid=%Lu\n\n",
+	       uuidbuf, parent_uuidbuf, received_uuidbuf,
+	       (unsigned long long)(si->ctransid),
+	       (unsigned long long)(si->otransid),
+	       (unsigned long long)(si->stransid),
+	       (unsigned long long)(si->rtransid));
+
+	if (argc == 3)
+		goto done;
+
+	printf("opening dst subvol %s\n", argv[3]);
+	fd = open(argv[3], O_RDONLY | O_NOATIME);
+	if (fd < 0) {
+		printf("failed to open dst subvol %s. %s\n", argv[3], strerror(errno));
+		exit(5);
+	}
+
+	printf("\nhere we go with BTRFS_IOC_SET_RECEIVED_SUBVOL:\n"
+	       "dstsub.received_uuid = srcsub.uuid == %s\n"
+	       "dstsub.stransid = srcsub.ctransid == %Lu\n\n",
+	       uuidbuf, (unsigned long long)(si->ctransid));
+
+	CLEAR(rs_args);
+	memcpy(rs_args.uuid, si->uuid, BTRFS_UUID_SIZE);
+	rs_args.stransid = si->ctransid;
+
+	ret = ioctl(fd, BTRFS_IOC_SET_RECEIVED_SUBVOL, &rs_args);
+	if (ret < 0) {
+		printf("BTRFS_IOC_SET_RECEIVED_SUBVOL failed: %s", strerror(-ret));
+		exit(6);
+	}
+
+done:
+	printf("done.\n");
+	exit(0);
+}
diff --git a/pkgs/tools/filesystems/btrfsprogs/default.nix b/pkgs/tools/filesystems/btrfsprogs/default.nix
index 4c1963f46332..a42c6aa7a7ec 100644
--- a/pkgs/tools/filesystems/btrfsprogs/default.nix
+++ b/pkgs/tools/filesystems/btrfsprogs/default.nix
@@ -11,8 +11,27 @@ stdenv.mkDerivation {
     sha256 = "72d4cd4fb23d876a17146d6231ad40a2151fa47c648485c54cf7478239b43764";
   };
 
+  patches = [
+    ./subvol-listing.patch
+    ./btrfs-receive-help-text.patch
+    ./btrfs-progs-Fix-the-receive-code-pathing.patch
+    ./btrfs-receive-lchown.patch
+  ];
+
   buildInputs = [ zlib libuuid acl attr e2fsprogs ];
 
+  postPatch = ''
+    cp ${./btrfs-set-received-uuid.c} btrfs-set-received-uuid.c
+  '';
+
+  postBuild = ''
+    gcc -O2 -luuid -o btrfs-set-received-uuid send-utils.o rbtree.o btrfs-list.o btrfs-set-received-uuid.c
+  '';
+
+  postInstall = ''
+    cp btrfs-set-received-uuid $out/bin
+  '';
+
   makeFlags = "prefix=$(out)";
 
   meta = {
diff --git a/pkgs/tools/filesystems/btrfsprogs/subvol-listing.patch b/pkgs/tools/filesystems/btrfsprogs/subvol-listing.patch
new file mode 100644
index 000000000000..1c113ddefbe3
--- /dev/null
+++ b/pkgs/tools/filesystems/btrfsprogs/subvol-listing.patch
@@ -0,0 +1,34 @@
+--- a/btrfs-list.c	2012-12-30 12:20:01.394137593 +0100
++++ b/btrfs-list.c	2012-12-30 12:22:47.242452906 +0100
+@@ -1004,6 +1004,23 @@
+ 	return 0;
+ }
+ 
++static void __drop_deleting_roots(struct root_lookup *root_lookup)
++{
++	struct rb_node *n;
++
++again:
++	n = rb_first(&root_lookup->root);
++	while (n) {
++		struct root_info *entry = rb_entry(n, struct root_info, rb_node);
++		if (!entry->ref_tree) {
++			rb_erase(n, &root_lookup->root);
++			free(entry);
++			goto again;
++		}
++		n = rb_next(n);
++	}
++}
++
+ static int __list_subvol_search(int fd, struct root_lookup *root_lookup)
+ {
+ 	int ret;
+@@ -1123,6 +1140,8 @@
+ 			break;
+ 	}
+ 
++	__drop_deleting_roots(root_lookup);
++
+ 	return 0;
+ }
diff --git a/pkgs/tools/misc/youtube-dl/default.nix b/pkgs/tools/misc/youtube-dl/default.nix
index cb5d8ed06968..52c8e493fdcc 100644
--- a/pkgs/tools/misc/youtube-dl/default.nix
+++ b/pkgs/tools/misc/youtube-dl/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, python, pandoc }:
+{ stdenv, fetchurl, python, pandoc, zip }:
 
 let
   version = "2012.12.11";
@@ -11,7 +11,13 @@ stdenv.mkDerivation {
     sha256 = "03zv3z8p0fi122nqj7ff8hkgqscir4s7psm03rq7dfpg1z35klmn";
   };
 
-  buildInputs = [ python pandoc ];
+  buildInputs = [ python ];
+  buildNativeInputs = [ pandoc zip ];
+
+  patchPhase = ''
+    rm youtube-dl
+    substituteInPlace Makefile --replace "#!/usr/bin/env python" "#!${python}/bin/python"
+  '';
 
   configurePhase = ''
     makeFlagsArray=( PREFIX=$out SYSCONFDIR=$out/etc )
@@ -20,6 +26,6 @@ stdenv.mkDerivation {
   meta = {
     homepage = "http://rg3.github.com/youtube-dl/";
     description = "Command-line tool to download videos from YouTube.com and other sites";
-    maintainers = [ stdenv.lib.maintainers.bluescreen303 stdenv.lib.maintainers.simons ];
+    maintainers = with stdenv.lib.maintainers; [ bluescreen303 simons ];
   };
 }
diff --git a/pkgs/tools/networking/httpie/default.nix b/pkgs/tools/networking/httpie/default.nix
new file mode 100644
index 000000000000..200bac53086a
--- /dev/null
+++ b/pkgs/tools/networking/httpie/default.nix
@@ -0,0 +1,20 @@
+{ stdenv, fetchurl, buildPythonPackage }:
+
+buildPythonPackage {
+  name = "httpie-0.3.1";
+  namePrefix = "";
+
+  src = fetchurl {
+    url = "http://pypi.python.org/packages/source/h/httpie/httpie-0.3.1.tar.gz";
+    sha256 = "0abjkwcirmp6qa190qgbgj5fmmkmk5aa3fdiyayl2indh6304x7a";
+  };
+
+  doCheck = false;
+
+  meta = {
+    description = "A command line HTTP client whose goal is to make CLI human-friendly";
+    homepage = http://httpie.org/;
+    license = "BSD";
+    maintainers = [ stdenv.lib.maintainers.antono ];
+  };
+}
diff --git a/pkgs/tools/networking/maildrop/default.nix b/pkgs/tools/networking/maildrop/default.nix
new file mode 100644
index 000000000000..b91282c9a2b4
--- /dev/null
+++ b/pkgs/tools/networking/maildrop/default.nix
@@ -0,0 +1,20 @@
+{ fetchurl, stdenv, pkgconfig, pcre, perl }:
+
+stdenv.mkDerivation rec {
+  name = "maildrop-2.6.0";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/courier/maildrop/2.6.0/maildrop-2.6.0.tar.bz2";
+    sha256 = "1a94p2b41iy334cwfwmzi19557dn5j61abh0cp2rfc9dkc8ibhdg";
+  };
+
+  buildInputs = [ pkgconfig pcre perl ];
+
+  patches = [ ./maildrop.configure.hack.patch ]; # for building in chroot
+
+  meta = {
+    homepage = http://www.courier-mta.org/maildrop/;
+    description = "Mail filter/mail delivery agent that is used by the Courier Mail Server";
+    licenses = [ "GPLv3" ];
+  };
+}
diff --git a/pkgs/tools/networking/maildrop/maildrop.configure.hack.patch b/pkgs/tools/networking/maildrop/maildrop.configure.hack.patch
new file mode 100644
index 000000000000..08988f6cde50
--- /dev/null
+++ b/pkgs/tools/networking/maildrop/maildrop.configure.hack.patch
@@ -0,0 +1,13 @@
+--- a/maildrop/configure	2012-09-06 01:52:13.000000000 +0100
++++ b/maildrop/configure	2013-01-04 03:00:57.095628327 +0000
+@@ -17562,8 +17562,8 @@
+ check_spooldir() {
+   if test "$CHECKED_SPOOLDIR" != 1
+   then
+-     get_spooldir
+-     MBOX_DIR="$SPOOLDIR"
++     MBOX_DIR="/var/spool/mail"
++     MBOX_RESET_GID=0
+      CHECKED_SPOOLDIR=1
+   fi
+ }
diff --git a/pkgs/tools/networking/network-manager/default.nix b/pkgs/tools/networking/network-manager/default.nix
index 443e4182a777..2a86d416e166 100644
--- a/pkgs/tools/networking/network-manager/default.nix
+++ b/pkgs/tools/networking/network-manager/default.nix
@@ -4,11 +4,11 @@
 
 stdenv.mkDerivation rec {
   name = "network-manager-${version}";
-  version = "0.9.4.0";
+  version = "0.9.6.4";
 
   src = fetchurl {
     url = "mirror://gnome/sources/NetworkManager/0.9/NetworkManager-${version}.tar.xz";
-    sha256 = "eb4f124008b3d855a37205d03ef035b7218639cd7332bdae5567095977e93e0f";
+    sha256 = "1sx7h29j9h13qszcppja1p27zq2m7vdrylbcyb47n62x0lg426si";
   };
 
   preConfigure = ''
@@ -29,7 +29,9 @@ stdenv.mkDerivation rec {
     "--without-resolvconf"
     "--sysconfdir=/etc" "--localstatedir=/var"
     "--with-dbus-sys-dir=\${out}/etc/dbus-1/system.d"
-    "--with-crypto=gnutls" "--disable-more-warnings" ];
+    "--with-crypto=gnutls" "--disable-more-warnings"
+    "--with-systemdsystemunitdir=$(out)/etc/systemd/system"
+    "--with-kernel-firmware-dir=/run/current-system/firmware" ];
 
   buildInputs = [ wirelesstools udev libnl libuuid polkit ppp xz ];