summary refs log tree commit diff
path: root/pkgs/os-specific/linux/dmtcp
diff options
context:
space:
mode:
authorMarco Maggesi <maggesi@math.unifi.it>2010-09-08 11:40:32 +0000
committerMarco Maggesi <maggesi@math.unifi.it>2010-09-08 11:40:32 +0000
commita280a31f56b34235678fcdc19ab304d142136d5a (patch)
treeb85d59b6bc93e96a6f00ff889a27e4bd0c7ab7b4 /pkgs/os-specific/linux/dmtcp
parentf802a70d8780a76a31bc5a74b1e71c6db1f181ce (diff)
downloadnixlib-a280a31f56b34235678fcdc19ab304d142136d5a.tar
nixlib-a280a31f56b34235678fcdc19ab304d142136d5a.tar.gz
nixlib-a280a31f56b34235678fcdc19ab304d142136d5a.tar.bz2
nixlib-a280a31f56b34235678fcdc19ab304d142136d5a.tar.lz
nixlib-a280a31f56b34235678fcdc19ab304d142136d5a.tar.xz
nixlib-a280a31f56b34235678fcdc19ab304d142136d5a.tar.zst
nixlib-a280a31f56b34235678fcdc19ab304d142136d5a.zip
Add a patch to dmtcp to allow the restart of checkpointed programs with a different uid.
(This is required in order to generate hol_light_binaries).

Also do a bit of cleanup.

svn path=/nixpkgs/trunk/; revision=23684
Diffstat (limited to 'pkgs/os-specific/linux/dmtcp')
-rw-r--r--pkgs/os-specific/linux/dmtcp/default.nix20
-rw-r--r--pkgs/os-specific/linux/dmtcp/dont_check_uid.patch35
2 files changed, 44 insertions, 11 deletions
diff --git a/pkgs/os-specific/linux/dmtcp/default.nix b/pkgs/os-specific/linux/dmtcp/default.nix
index ee32654cf8a5..39759b03496c 100644
--- a/pkgs/os-specific/linux/dmtcp/default.nix
+++ b/pkgs/os-specific/linux/dmtcp/default.nix
@@ -1,25 +1,21 @@
 {stdenv, fetchurl, perl, python}:
+# Perl and Python required by the test suite.
 
-# Perl and python are needed in order to run the test suite.
+stdenv.mkDerivation rec {
+  name = "dmtcp-${version}";
 
-let
-  pname = "dmtcp";
   version = "1.1.8";
-in
 
-stdenv.mkDerivation {
-  name = "${pname}-${version}";
+  buildInputs = [ perl python ];
 
   src = fetchurl {
-    url = "mirror://sourceforge/${pname}/${pname}_${version}.tar.gz";
+    url = "mirror://sourceforge/dmtcp/dmtcp_${version}.tar.gz";
     sha256 = "05klyml5maw3f5rxl3i20fqyvpmx69bh09h7a48y19q3r4nqd8f2";
   };
 
-  buildInputs = [ perl python ];
-
-  doCheck = true;
+  patches = [ ./dont_check_uid.patch ];
 
-  preCheck = ''
+  postPatch = ''
     substituteInPlace dmtcp/src/dmtcp_coordinator.cpp \
       --replace /bin/bash /bin/sh
     substituteInPlace utils/gdb-add-symbol-file \
@@ -31,6 +27,8 @@ stdenv.mkDerivation {
       --replace /usr/bin/python $(type -p python)
   '';
 
+  doCheck = true;
+
   meta = {
     description = "Distributed MultiThreaded Checkpointing";
     longDescription = ''
diff --git a/pkgs/os-specific/linux/dmtcp/dont_check_uid.patch b/pkgs/os-specific/linux/dmtcp/dont_check_uid.patch
new file mode 100644
index 000000000000..23f4a254037e
--- /dev/null
+++ b/pkgs/os-specific/linux/dmtcp/dont_check_uid.patch
@@ -0,0 +1,35 @@
+diff -Nuar dmtcp_1.1.8/dmtcp/src/dmtcp_restart.cpp dmtcp_1.1.8.dont_check_uid/dmtcp/src/dmtcp_restart.cpp
+--- dmtcp_1.1.8/dmtcp/src/dmtcp_restart.cpp	2010-07-01 06:42:54.000000000 +0200
++++ dmtcp_1.1.8.dont_check_uid/dmtcp/src/dmtcp_restart.cpp	2010-09-06 23:50:51.000000000 +0200
+@@ -662,14 +662,6 @@
+       sprintf(error_msg, "\ndmtcp_restart: ckpt image %s", restorename);
+       perror(error_msg);
+       doAbort = true;
+-    } else if (buf.st_uid != getuid()) { /*Could also run if geteuid() matches*/
+-      printf("\nProcess uid (%d) doesn't match uid (%d) of\n" \
+-             "checkpoint image (%s).\n" \
+-	     "This is dangerous.  Aborting for security reasons.\n" \
+-           "If you still want to do this (at your own risk),\n" \
+-           "  then modify dmtcp/src/%s:%d and re-compile.\n",
+-           getuid(), buf.st_uid, restorename, __FILE__, __LINE__ - 6);
+-      doAbort = true;
+     }
+     if (doAbort)
+       abort();
+diff -Nuar dmtcp_1.1.8/mtcp/mtcp_restart.c dmtcp_1.1.8.dont_check_uid/mtcp/mtcp_restart.c
+--- dmtcp_1.1.8/mtcp/mtcp_restart.c	2010-07-01 06:42:53.000000000 +0200
++++ dmtcp_1.1.8.dont_check_uid/mtcp/mtcp_restart.c	2010-09-07 01:49:20.000000000 +0200
+@@ -157,13 +157,6 @@
+       sprintf(error_msg, "\nmtcp_restart: ckpt image %s", restorename);
+       perror(error_msg);
+       abort();
+-    } else if (buf.st_uid != getuid()) { /*Could also run if geteuid() matches*/
+-      mtcp_printf("\nProcess uid (%d) doesn't match uid (%d) of\n" \
+-	          "checkpoint image (%s).\n" \
+-		  "This is dangerous.  Aborting for security reasons.\n" \
+-	   "If you still want to do this, modify mtcp/%s:%d and re-compile.\n",
+-	   getuid(), buf.st_uid, restorename, __FILE__, __LINE__ - 5);
+-      abort();
+     }
+   }
+