summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--debian/patches/exec_filename.patch (renamed from debian/patches/exec_filename_fs.patch)813
-rw-r--r--debian/patches/exec_filename_exec.patch317
-rw-r--r--debian/patches/exec_filename_fix.patch144
-rw-r--r--debian/patches/exec_filename_use.patch113
-rw-r--r--debian/patches/external.patch11
-rw-r--r--debian/patches/series5
-rw-r--r--debian/patches/xxx-fix-build.patch4
7 files changed, 478 insertions, 929 deletions
diff --git a/debian/patches/exec_filename_fs.patch b/debian/patches/exec_filename.patch
index 25070ef8..e980ed2d 100644
--- a/debian/patches/exec_filename_fs.patch
+++ b/debian/patches/exec_filename.patch
@@ -1,29 +1,5 @@
-From ba528e4a9db131112aa09edfdbb3449b55618578 Mon Sep 17 00:00:00 2001
-From: Emilio Pozuelo Monfort <pochu27@gmail.com>
-Date: Wed, 26 May 2010 01:27:40 +0200
-Subject: [PATCH 2/3] Add a file_exec_file_name RPC
-
-* hurd/fs.defs (file_exec): Deprecate in favor of...
-(file_exec_file_name): ...this new RPC.
-Change all implementations and forward old implementations to
-the new version. Change all callers but fallback to old version.
-Change comments and documentation.
----
- TODO | 2 +-
- doc/hurd.texi | 16 ++++----
- exec/hashexec.c | 32 ++++++++++----
- hurd/fs.defs | 28 +++++++++++--
- hurd/hurd_types.h | 9 ++--
- init/init.c | 81 ++++++++++++++++++++++++++----------
- libdiskfs/boot-start.c | 2 +-
- libdiskfs/file-exec.c | 75 ++++++++++++++++++++++++++++------
- libfshelp/start-translator-long.c | 21 +++++++---
- libnetfs/file-exec.c | 67 ++++++++++++++++++++++++++----
- libtrivfs/file-exec.c | 27 ++++++++++++-
- trans/fakeroot.c | 59 ++++++++++++++++++++++++---
- utils/login.c | 23 +++++++---
- 13 files changed, 350 insertions(+), 92 deletions(-)
-
+diff --git a/TODO b/TODO
+index d2500dc..297ac98 100644
--- a/TODO
+++ b/TODO
@@ -135,7 +135,7 @@ See `tasks', the exported task list.
@@ -35,8 +11,34 @@ Change comments and documentation.
*** Provide for the visible owner, etc., to be held in command-line args
instead of the underlying node, when it's important. !!
+diff --git a/configure.ac b/configure.ac
+index ecabfdf..6226e1a 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -160,8 +160,8 @@ else
+ fi
+ AC_SUBST(VERSIONING)
+
+-# Check if libc contains getgrouplist and/or uselocale.
+-AC_CHECK_FUNCS(getgrouplist uselocale)
++# Check if libc contains these functions.
++AC_CHECK_FUNCS(getgrouplist uselocale _hurd_exec_file_name)
+
+
+ # From glibc HEAD, 2007-11-07.
+diff --git a/doc/hurd.texi b/doc/hurd.texi
+index 07ddfb4..32a8194 100644
--- a/doc/hurd.texi
+++ b/doc/hurd.texi
+@@ -102,7 +102,7 @@ This file documents the GNU Hurd kernel component. This edition of the
+ documentation was last updated for version @value{VERSION} of the Hurd.
+
+ Copyright @copyright{} 1994, 1996, 1998, 1999, 2000, 2001, 2002, 2003,
+-2004, 2005, 2007, 2008, 2009 Free Software Foundation, Inc.
++2004, 2005, 2007, 2008, 2009, 2010 Free Software Foundation, Inc.
+
+ @quotation
+ Permission is granted to make and distribute verbatim copies of
@@ -2737,10 +2737,10 @@ write the file.
@node Program Execution
@subsection Program Execution
@@ -51,7 +53,7 @@ Change comments and documentation.
ports are necessary for setuid execution, and then invoke the standard
execserver found on @file{/servers/exec}.
-@@ -2752,13 +2752,13 @@ The file must be opened for execution; i
+@@ -2752,13 +2752,13 @@ The file must be opened for execution; if it is not, @code{EBADF} should
be returned. In addition, at least one of the execute bits must be on. A
failure of this check should result in @code{EACCES}---not
@code{ENOEXEC}. It is not proper for the fileserver ever to respond to
@@ -69,32 +71,251 @@ Change comments and documentation.
it is not acceptable to return an error; in such a case the server
should simply silently fail to implement the setuid/setgid semantics.
-@@ -2773,7 +2773,7 @@ will not share any file pointers with th
+@@ -2766,14 +2766,14 @@ If the setuid/setgid transformation adds a new uid or gid to the user's
+ authentication handle that was not previously present (as opposed to
+ merely reordering them), then the @code{EXEC_SECURE} and
+ @code{EXEC_NEWTASK} flags should both be added in the call to
+-@code{exec_exec}.
++@code{exec_exec_file_name}.
+
+ The server then needs to open a new port onto the executed file which
+ will not share any file pointers with the port the user passed in,
opened with @code{O_READ}. Finally, all the information (mutated
appropriately for setuid/setgid) should be sent to the execserver with
- @code{exec_exec_file_name}. Whatever error code @code{exec_exec_file_name}
--returns should be returned to the caller of @code{file_exec}.
+-@code{exec_exec}. Whatever error code @code{exec_exec} returns should
+-returned to the caller of @code{file_exec}.
++@code{exec_exec_file_name}. Whatever error code @code{exec_exec_file_name}
+returns should be returned to the caller of @code{file_exec_file_name}.
@node File Locking
@subsection File Locking
+diff --git a/exec/exec.c b/exec/exec.c
+index 935762e..3d12e09 100644
+--- a/exec/exec.c
++++ b/exec/exec.c
+@@ -1,6 +1,6 @@
+ /* GNU Hurd standard exec server.
+- Copyright (C) 1992,93,94,95,96,98,99,2000,01,02,04
+- Free Software Foundation, Inc.
++ Copyright (C) 1992 ,1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
++ 2002, 2004, 2010 Free Software Foundation, Inc.
+ Written by Roland McGrath.
+
+ Can exec ELF format directly.
+@@ -738,6 +738,7 @@ static error_t
+ do_exec (file_t file,
+ task_t oldtask,
+ int flags,
++ char *filename,
+ char *argv, mach_msg_type_number_t argvlen, boolean_t argv_copy,
+ char *envp, mach_msg_type_number_t envplen, boolean_t envp_copy,
+ mach_port_t *dtable, mach_msg_type_number_t dtablesize,
+@@ -796,7 +797,7 @@ do_exec (file_t file,
+ {
+ /* Check for a #! executable file. */
+ check_hashbang (&e,
+- file, oldtask, flags,
++ file, oldtask, flags, filename,
+ argv, argvlen, argv_copy,
+ envp, envplen, envp_copy,
+ dtable, dtablesize, dtable_copy,
+@@ -1371,6 +1372,7 @@ do_exec (file_t file,
+ return e.error;
+ }
+
++/* Deprecated. */
+ kern_return_t
+ S_exec_exec (struct trivfs_protid *protid,
+ file_t file,
+@@ -1387,13 +1389,51 @@ S_exec_exec (struct trivfs_protid *protid,
+ mach_port_t *deallocnames, mach_msg_type_number_t ndeallocnames,
+ mach_port_t *destroynames, mach_msg_type_number_t ndestroynames)
+ {
++ return S_exec_exec_file_name (protid,
++ file,
++ oldtask,
++ flags,
++ "",
++ argv, argvlen, argv_copy,
++ envp, envplen, envp_copy,
++ dtable, dtablesize,
++ dtable_copy,
++ portarray, nports,
++ portarray_copy,
++ intarray, nints,
++ intarray_copy,
++ deallocnames, ndeallocnames,
++ destroynames, ndestroynames);
++}
++
++kern_return_t
++S_exec_exec_file_name (struct trivfs_protid *protid,
++ file_t file,
++ task_t oldtask,
++ int flags,
++ char *filename,
++ char *argv, mach_msg_type_number_t argvlen,
++ boolean_t argv_copy,
++ char *envp, mach_msg_type_number_t envplen,
++ boolean_t envp_copy,
++ mach_port_t *dtable, mach_msg_type_number_t dtablesize,
++ boolean_t dtable_copy,
++ mach_port_t *portarray, mach_msg_type_number_t nports,
++ boolean_t portarray_copy,
++ int *intarray, mach_msg_type_number_t nints,
++ boolean_t intarray_copy,
++ mach_port_t *deallocnames,
++ mach_msg_type_number_t ndeallocnames,
++ mach_port_t *destroynames,
++ mach_msg_type_number_t ndestroynames)
++{
+ if (! protid)
+ return EOPNOTSUPP;
+
+ /* There were no user-specified exec servers,
+ or none of them could be found. */
+
+- return do_exec (file, oldtask, flags,
++ return do_exec (file, oldtask, flags, filename,
+ argv, argvlen, argv_copy,
+ envp, envplen, envp_copy,
+ dtable, dtablesize, dtable_copy,
+diff --git a/exec/hashexec.c b/exec/hashexec.c
+index 5641218..9a01f7d 100644
--- a/exec/hashexec.c
+++ b/exec/hashexec.c
-@@ -24,6 +24,9 @@ the Free Software Foundation, 675 Mass A
- #include <unistd.h>
- #include <envz.h>
- #include <sys/param.h>
-+#ifdef HAVE_FILE_EXEC_FILE_NAME
-+#include <hurd/fs_experimental.h>
-+#endif
+@@ -1,5 +1,6 @@
+ /* GNU Hurd standard exec server, #! script execution support.
+- Copyright (C) 1995,96,97,98,99,2000,02 Free Software Foundation, Inc.
++ Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2002, 2010,
++ 2014 Free Software Foundation, Inc.
+ Written by Roland McGrath.
+
+ This file is part of the GNU Hurd.
+@@ -35,6 +36,7 @@ check_hashbang (struct execdata *e,
+ file_t file,
+ task_t oldtask,
+ int flags,
++ char *file_name_exec,
+ char *argv, u_int argvlen, boolean_t argv_copy,
+ char *envp, u_int envplen, boolean_t envp_copy,
+ mach_port_t *dtable, u_int dtablesize, boolean_t dtable_copy,
+@@ -225,10 +227,13 @@ check_hashbang (struct execdata *e,
+ file_name = NULL;
+ else if (! (flags & EXEC_SECURE))
+ {
+- /* Try to figure out the file's name. We guess that if ARGV[0]
+- contains a slash, it might be the name of the file; and that
+- if it contains no slash, looking for files named by ARGV[0] in
+- the `PATH' environment variable might find it. */
++ /* Try to figure out the file's name. If FILE_NAME_EXEC
++ is not NULL and not the empty string, then it's the
++ file's name. Otherwise we guess that if ARGV[0]
++ contains a slash, it might be the name of the file;
++ and that if it contains no slash, looking for files
++ named by ARGV[0] in the `PATH' environment variable
++ might find it. */
+
+ error_t error;
+ char *name;
+@@ -264,49 +269,59 @@ check_hashbang (struct execdata *e,
+ return err;
+ }
+
+- error = io_identity (file, &fileid, &filefsid, &fileno);
+- if (error)
+- goto out;
+- mach_port_deallocate (mach_task_self (), filefsid);
+-
+- if (memchr (argv, '\0', argvlen) == NULL)
+- {
+- name = alloca (argvlen + 1);
+- bcopy (argv, name, argvlen);
+- name[argvlen] = '\0';
+- }
++ if (file_name_exec && file_name_exec[0] != '\0')
++ name = file_name_exec;
+ else
+- name = argv;
+-
+- if (strchr (name, '/') != NULL)
+- error = lookup (name, 0, &name_file);
+- else if ((error = hurd_catch_signal
+- (sigmask (SIGBUS) | sigmask (SIGSEGV),
+- (vm_address_t) envp, (vm_address_t) envp + envplen,
+- &search_path, SIG_ERR)))
+- name_file = MACH_PORT_NULL;
+-
+- if (!error && name_file != MACH_PORT_NULL)
+ {
+- mach_port_t id, fsid;
+- ino_t ino;
+- error = io_identity (name_file, &id, &fsid, &ino);
+- mach_port_deallocate (mach_task_self (), name_file);
+- if (!error)
++ /* Try to locate the file. */
++ error = io_identity (file, &fileid, &filefsid, &fileno);
++ if (error)
++ goto out;
++ mach_port_deallocate (mach_task_self (), filefsid);
++
++ if (memchr (argv, '\0', argvlen) == NULL)
+ {
+- mach_port_deallocate (mach_task_self (), fsid);
+- mach_port_deallocate (mach_task_self (), id);
++ name = alloca (argvlen + 1);
++ bcopy (argv, name, argvlen);
++ name[argvlen] = '\0';
+ }
+- if (!error && id == fileid)
++ else
++ name = argv;
++
++ if (strchr (name, '/') != NULL)
++ error = lookup (name, 0, &name_file);
++ else if ((error = hurd_catch_signal
++ (sigmask (SIGBUS) | sigmask (SIGSEGV),
++ (vm_address_t) envp, (vm_address_t) envp + envplen,
++ &search_path, SIG_ERR)))
++ name_file = MACH_PORT_NULL;
++
++ /* See whether we found the right file. */
++ if (!error && name_file != MACH_PORT_NULL)
+ {
+- file_name = name;
+- free_file_name = free_name;
++ mach_port_t id, fsid;
++ ino_t ino;
++ error = io_identity (name_file, &id, &fsid, &ino);
++ mach_port_deallocate (mach_task_self (), name_file);
++ if (!error)
++ {
++ mach_port_deallocate (mach_task_self (), fsid);
++ mach_port_deallocate (mach_task_self (), id);
++ if (id != fileid)
++ error = 1;
++ }
+ }
+- else if (free_name)
+- free (name);
++
++ mach_port_deallocate (mach_task_self (), fileid);
+ }
+
+- mach_port_deallocate (mach_task_self (), fileid);
++ if (!error)
++ {
++ file_name = name;
++ free_file_name = free_name;
++ }
++ else if (free_name)
++ free (name);
+ }
- /* This is called to check E for a #! interpreter specification. E has
- already been prepared (successfully) and checked (unsuccessfully). If
-@@ -421,16 +424,32 @@ check_hashbang (struct execdata *e,
- /* We cannot open the interpreter file to execute it. Lose! */
+ if (file_name == NULL)
+@@ -416,15 +431,29 @@ check_hashbang (struct execdata *e,
return;
-+#ifdef HAVE_FILE_EXEC_FILE_NAME
/* Execute the interpreter program. */
- e->error = file_exec (interp_file,
- oldtask, flags,
@@ -117,7 +338,6 @@ Change comments and documentation.
+ destroynames, ndestroynames);
+ /* For backwards compatibility. Just drop it when we kill file_exec. */
+ if (e->error == MIG_BAD_ID)
-+#endif
+ e->error = file_exec (interp_file,
+ oldtask, flags,
+ new_argv, new_argvlen, envp, envplen,
@@ -132,6 +352,70 @@ Change comments and documentation.
mach_port_deallocate (mach_task_self (), interp_file);
munmap (new_argv, new_argvlen);
+diff --git a/exec/priv.h b/exec/priv.h
+index 733f35c..862a33c 100644
+--- a/exec/priv.h
++++ b/exec/priv.h
+@@ -1,5 +1,6 @@
+ /* GNU Hurd standard exec server, private declarations.
+- Copyright (C) 1992,93,94,95,96,99,2000,02, 04 Free Software Foundation, Inc.
++ Copyright (C) 1992, 1993, 1994, 1995, 1996, 1999, 2000, 2002, 2004,
++ 2010 Free Software Foundation, Inc.
+ Written by Roland McGrath.
+
+ This file is part of the GNU Hurd.
+@@ -135,6 +136,7 @@ void check_hashbang (struct execdata *e,
+ file_t file,
+ task_t oldtask,
+ int flags,
++ char *filename,
+ char *argv, u_int argvlen, boolean_t argv_copy,
+ char *envp, u_int envplen, boolean_t envp_copy,
+ mach_port_t *dtable, u_int dtablesize,
+diff --git a/hurd/exec.defs b/hurd/exec.defs
+index 2888fb1..ae4143b 100644
+--- a/hurd/exec.defs
++++ b/hurd/exec.defs
+@@ -1,5 +1,6 @@
+ /* Interface definitions for the exec servers.
+- Copyright (C) 1991,92,93,94,95,2001 Free Software Foundation, Inc.
++ Copyright (C) 1991, 1992, 1993, 1994, 1995, 2001, 2010
++ Free Software Foundation, Inc.
+
+ This file is part of the GNU Hurd.
+
+@@ -29,6 +30,7 @@ EXEC_IMPORTS
+
+ INTR_INTERFACE
+
++/* Deprecated: use exec_exec_file_name instead. */
+ routine exec_exec (
+ execserver: file_t;
+ file: mach_port_send_t;
+@@ -42,7 +44,20 @@ routine exec_exec (
+ deallocnames: mach_port_name_array_t;
+ destroynames: mach_port_name_array_t);
+
+-skip; /* obsolete exec_startup */
++routine exec_exec_file_name (
++ execserver: file_t;
++ file: mach_port_send_t;
++ oldtask: task_t;
++ flags: int;
++ filename: string_t;
++ argv: data_t SCP;
++ envp: data_t SCP;
++ dtable: portarray_t SCP;
++ portarray: portarray_t SCP;
++ intarray: intarray_t SCP;
++ deallocnames: mach_port_name_array_t;
++ destroynames: mach_port_name_array_t);
++
+
+ /* This call is made by the bootstrapping filesystem to give the
+ execserver its auth handle. */
+diff --git a/hurd/fs.defs b/hurd/fs.defs
+index 2452682..c68fde0 100644
--- a/hurd/fs.defs
+++ b/hurd/fs.defs
@@ -1,5 +1,6 @@
@@ -163,6 +447,30 @@ Change comments and documentation.
written directly. */
routine file_check_access (
file: file_t;
+@@ -371,3 +373,21 @@ routine file_get_source (
+ file: file_t;
+ RPT
+ out source: string_t);
++
++/* Overlay a task with a file. Necessary initialization, including
++ authentication changes associated with set[ug]id execution must be
++ handled by the filesystem. Filesystems normally implement this by
++ using exec_newtask or exec_loadtask as appropriate. */
++routine file_exec_file_name (
++ exec_file: file_t;
++ RPT
++ exec_task: task_t;
++ flags: int;
++ filename: string_t;
++ argv: data_t SCP;
++ envp: data_t SCP;
++ fdarray: portarray_t SCP;
++ portarray: portarray_t SCP;
++ intarray: intarray_t SCP;
++ deallocnames: mach_port_name_array_t SCP;
++ destroynames: mach_port_name_array_t SCP);
+diff --git a/hurd/hurd_types.h b/hurd/hurd_types.h
+index d569454..bb66e2d 100644
--- a/hurd/hurd_types.h
+++ b/hurd/hurd_types.h
@@ -1,5 +1,6 @@
@@ -173,7 +481,7 @@ Change comments and documentation.
This file is part of the GNU Hurd.
-@@ -78,7 +79,7 @@ typedef struct timespec timespec_t;
+@@ -79,7 +80,7 @@ typedef struct timespec timespec_t;
/* Many such parameters and flags are also defined in various libc
headers. */
@@ -182,7 +490,7 @@ Change comments and documentation.
#define EXEC_NEWTASK 0x00000001 /* Create new task; kill old one. */
#define EXEC_SECURE 0x00000002 /* Use secure values of portarray, etc. */
#define EXEC_DEFAULTS 0x00000004 /* Use defaults for unspecified ports. */
-@@ -344,7 +345,7 @@ typedef int *procinfo_t;
+@@ -345,7 +346,7 @@ typedef int *procinfo_t;
#define FSTYPE_MEMFS 0x00000019 /* In-core filesystem */
#define FSTYPE_ISO9660 0x0000001a /* ISO9660 */
@@ -191,7 +499,7 @@ Change comments and documentation.
enum
{
INIT_PORT_CWDIR,
-@@ -358,7 +359,7 @@ enum
+@@ -359,7 +360,7 @@ enum
INIT_PORT_MAX
};
@@ -200,28 +508,21 @@ Change comments and documentation.
enum
{
INIT_UMASK,
+diff --git a/init/init.c b/init/init.c
+index b7b40bd..3fd4fe5 100644
--- a/init/init.c
+++ b/init/init.c
-@@ -1,7 +1,7 @@
+@@ -1,7 +1,8 @@
/* Start and maintain hurd core servers and system run state
Copyright (C) 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
- 2005, 2008, 2013 Free Software Foundation, Inc.
+ 2005, 2008, 2010, 2013 Free Software Foundation, Inc.
++
This file is part of the GNU Hurd.
The GNU Hurd is free software; you can redistribute it and/or modify
-@@ -24,6 +24,9 @@
- one file. */
- #include <hurd.h>
- #include <hurd/fs.h>
-+#ifdef HAVE_FILE_EXEC_FILE_NAME
-+#include <hurd/fs_experimental.h>
-+#endif
- #include <hurd/fsys.h>
- #include <device/device.h>
- #include <stdio.h>
-@@ -376,13 +379,28 @@ run (const char *server, mach_port_t *po
+@@ -376,13 +377,26 @@ run (const char *server, mach_port_t *ports, task_t *task)
printf ("Pausing for %s\n", prog);
getchar ();
}
@@ -232,7 +533,6 @@ Change comments and documentation.
- ports, MACH_MSG_TYPE_COPY_SEND, INIT_PORT_MAX,
- default_ints, INIT_INT_MAX,
- NULL, 0, NULL, 0);
-+#ifdef HAVE_FILE_EXEC_FILE_NAME
+ err = file_exec_file_name (file, *task, 0, (char *)prog,
+ (char *)prog,
+ strlen (prog) + 1, /* Args. */
@@ -246,7 +546,6 @@ Change comments and documentation.
+ /* For backwards compatibility. Just drop it when we kill
+ file_exec. */
+ if (err == MIG_BAD_ID)
-+#endif
+ err = file_exec (file, *task, 0,
+ (char *)prog, strlen (prog) + 1, /* Args. */
+ startup_envz, startup_envz_len,
@@ -257,7 +556,7 @@ Change comments and documentation.
if (!err)
break;
-@@ -469,14 +487,27 @@ run_for_real (char *filename, char *args
+@@ -469,14 +483,25 @@ run_for_real (char *filename, char *args, int arglen, mach_port_t ctty,
++progname;
else
progname = filename;
@@ -269,7 +568,6 @@ Change comments and documentation.
- INIT_PORT_MAX,
- default_ints, INIT_INT_MAX,
- NULL, 0, NULL, 0);
-+#ifdef HAVE_FILE_EXEC_FILE_NAME
+ err = file_exec_file_name (file, task, 0, filename,
+ args, arglen,
+ startup_envz, startup_envz_len,
@@ -280,7 +578,6 @@ Change comments and documentation.
+ NULL, 0, NULL, 0);
+ /* For backwards compatibility. Just drop it when we kill file_exec. */
+ if (err == MIG_BAD_ID)
-+#endif
+ err = file_exec (file, task, 0,
+ args, arglen,
+ startup_envz, startup_envz_len,
@@ -293,7 +590,7 @@ Change comments and documentation.
mach_port_deallocate (mach_task_self (), default_ports[INIT_PORT_PROC]);
mach_port_deallocate (mach_task_self (), task);
if (ctty != MACH_PORT_NULL)
-@@ -1068,13 +1099,26 @@ start_child (const char *prog, char **pr
+@@ -1068,14 +1093,25 @@ start_child (const char *prog, char **progargs)
getchar ();
}
@@ -304,7 +601,6 @@ Change comments and documentation.
- default_ports, MACH_MSG_TYPE_COPY_SEND, INIT_PORT_MAX,
- default_ints, INIT_INT_MAX,
- NULL, 0, NULL, 0);
-+#ifdef HAVE_FILE_EXEC_FILE_NAME
+ err = file_exec_file_name (file, child_task, 0, args,
+ args, arglen,
+ startup_envz, startup_envz_len,
@@ -315,7 +611,6 @@ Change comments and documentation.
+ NULL, 0, NULL, 0);
+ /* For backwards compatibility. Just drop it when we kill file_exec. */
+ if (err == MIG_BAD_ID)
-+#endif
+ err = file_exec (file, child_task, 0,
+ args, arglen,
+ startup_envz, startup_envz_len,
@@ -323,13 +618,16 @@ Change comments and documentation.
+ default_ports, MACH_MSG_TYPE_COPY_SEND, INIT_PORT_MAX,
+ default_ints, INIT_INT_MAX,
+ NULL, 0, NULL, 0);
-+
proc_mark_important (default_ports[INIT_PORT_PROC]);
++
mach_port_deallocate (mach_task_self (), default_ports[INIT_PORT_PROC]);
mach_port_deallocate (mach_task_self (), file);
+ if (err)
+diff --git a/libdiskfs/boot-start.c b/libdiskfs/boot-start.c
+index 9dd2751..4c79738 100644
--- a/libdiskfs/boot-start.c
+++ b/libdiskfs/boot-start.c
-@@ -208,7 +208,7 @@ diskfs_start_bootstrap ()
+@@ -196,7 +196,7 @@ diskfs_start_bootstrap ()
diskfs_exec_ctl = MACH_PORT_NULL; /* Not used after this. */
}
@@ -338,6 +636,8 @@ Change comments and documentation.
_hurd_port_set (&_diskfs_exec_portcell, diskfs_exec);
if (_diskfs_boot_command)
+diff --git a/libdiskfs/file-exec.c b/libdiskfs/file-exec.c
+index 9572dbe..671a860 100644
--- a/libdiskfs/file-exec.c
+++ b/libdiskfs/file-exec.c
@@ -1,5 +1,6 @@
@@ -349,22 +649,7 @@ Change comments and documentation.
This file is part of the GNU Hurd.
-@@ -21,10 +22,14 @@ the Free Software Foundation, 675 Mass A
-
- #include "priv.h"
- #include "fs_S.h"
-+#include "fs_experimental_S.h"
- #include <sys/stat.h>
- #include <fcntl.h>
- #include <hurd/exec.h>
- #include <hurd/paths.h>
-+#ifdef HAVE_EXEC_EXEC_FILE_NAME
-+#include <hurd/exec_experimental.h>
-+#endif
- #include <string.h>
- #include <idvec.h>
-
-@@ -47,6 +52,39 @@ diskfs_S_file_exec (struct protid *cred,
+@@ -47,6 +48,39 @@ diskfs_S_file_exec (struct protid *cred,
mach_port_t *destroynames,
size_t destroynameslen)
{
@@ -404,7 +689,7 @@ Change comments and documentation.
struct node *np;
uid_t uid;
gid_t gid;
-@@ -136,9 +174,9 @@ diskfs_S_file_exec (struct protid *cred,
+@@ -136,9 +170,9 @@ diskfs_S_file_exec (struct protid *cred,
if (! err)
/* Make a new peropen for the exec server to access the file, since any
@@ -417,7 +702,7 @@ Change comments and documentation.
authentication credentials.) The new peropen's openmodes must have
O_READ even if the caller had only O_EXEC privilege, so the exec
server can read the executable file. We also include O_EXEC so that
-@@ -159,14 +197,31 @@ diskfs_S_file_exec (struct protid *cred,
+@@ -159,14 +193,29 @@ diskfs_S_file_exec (struct protid *cred,
do
{
right = ports_get_send_right (newpi);
@@ -429,7 +714,6 @@ Change comments and documentation.
- intarray, intarraylen,
- deallocnames, deallocnameslen,
- destroynames, destroynameslen);
-+#ifdef HAVE_EXEC_EXEC_FILE_NAME
+ err = exec_exec_file_name (execserver,
+ right, MACH_MSG_TYPE_COPY_SEND,
+ task, flags, filename,
@@ -443,7 +727,6 @@ Change comments and documentation.
+ /* For backwards compatibility. Just drop it when we kill
+ exec_exec. */
+ if (err == MIG_BAD_ID)
-+#endif
+ err = exec_exec (execserver,
+ right, MACH_MSG_TYPE_COPY_SEND,
+ task, flags, argv, argvlen, envp, envplen,
@@ -457,6 +740,8 @@ Change comments and documentation.
mach_port_deallocate (mach_task_self (), right);
if (err == MACH_SEND_INVALID_DEST)
{
+diff --git a/libfshelp/start-translator-long.c b/libfshelp/start-translator-long.c
+index 64a20be..e519c6f 100644
--- a/libfshelp/start-translator-long.c
+++ b/libfshelp/start-translator-long.c
@@ -1,5 +1,6 @@
@@ -467,21 +752,9 @@ Change comments and documentation.
Written by Miles Bader and Michael I. Bushnell.
This file is part of the GNU Hurd.
-@@ -27,6 +28,9 @@
- #include <string.h>
- #include <assert.h>
- #include "fshelp.h"
-+#ifdef HAVE_FILE_EXEC_FILE_NAME
-+#include <hurd/fs_experimental.h>
-+#endif
-
-
- /* The data passed in the various messages we're interested in. */
-@@ -272,12 +276,22 @@ fshelp_start_translator_long (fshelp_ope
- saveport = ports[INIT_PORT_BOOTSTRAP];
+@@ -273,11 +274,19 @@ fshelp_start_translator_long (fshelp_open_fn_t underlying_open_fn,
ports[INIT_PORT_BOOTSTRAP] = bootstrap;
-+#ifdef HAVE_FILE_EXEC_FILE_NAME
/* Try and exec the translator in TASK... */
- err = file_exec (executable, task, EXEC_DEFAULTS,
- argz, argz_len, 0, 0,
@@ -495,7 +768,6 @@ Change comments and documentation.
+ ints, ints_len, 0, 0, 0, 0);
+ /* For backwards compatibility. Just drop it when we kill file_exec. */
+ if (err == MIG_BAD_ID)
-+#endif
+ err = file_exec (executable, task, EXEC_DEFAULTS,
+ argz, argz_len, 0, 0,
+ fds, fds_type, fds_len,
@@ -505,6 +777,8 @@ Change comments and documentation.
ports_moved = 1;
if (ports_type == MACH_MSG_TYPE_COPY_SEND)
+diff --git a/libnetfs/file-exec.c b/libnetfs/file-exec.c
+index 638f0ae..c1010f6 100644
--- a/libnetfs/file-exec.c
+++ b/libnetfs/file-exec.c
@@ -1,5 +1,6 @@
@@ -515,22 +789,7 @@ Change comments and documentation.
Written by Michael I. Bushnell, p/BSG.
This file is part of the GNU Hurd.
-@@ -23,10 +24,14 @@
- #include "netfs.h"
- #include "execserver.h"
- #include "fs_S.h"
-+#include "fs_experimental_S.h"
- #include <sys/stat.h>
- #include <fcntl.h>
- #include <hurd/exec.h>
- #include <hurd/paths.h>
-+#ifdef HAVE_EXEC_EXEC_FILE_NAME
-+#include <hurd/exec_experimental.h>
-+#endif
- #include <string.h>
- #include <idvec.h>
-
-@@ -49,6 +54,39 @@ netfs_S_file_exec (struct protid *cred,
+@@ -49,6 +50,39 @@ netfs_S_file_exec (struct protid *cred,
mach_port_t *destroynames,
size_t destroynameslen)
{
@@ -570,7 +829,7 @@ Change comments and documentation.
struct node *np;
error_t err;
uid_t uid;
-@@ -133,14 +171,31 @@ netfs_S_file_exec (struct protid *cred,
+@@ -133,14 +167,29 @@ netfs_S_file_exec (struct protid *cred,
if (newpi)
{
right = ports_get_send_right (newpi);
@@ -582,7 +841,6 @@ Change comments and documentation.
- intarray, intarraylen,
- deallocnames, deallocnameslen,
- destroynames, destroynameslen);
-+#ifdef HAVE_EXEC_EXEC_FILE_NAME
+ err = exec_exec_file_name (_netfs_exec,
+ right, MACH_MSG_TYPE_COPY_SEND,
+ task, flags, filename,
@@ -596,7 +854,6 @@ Change comments and documentation.
+ /* For backwards compatibility. Just drop it when we kill
+ exec_exec. */
+ if (err == MIG_BAD_ID)
-+#endif
+ err = exec_exec (_netfs_exec,
+ right, MACH_MSG_TYPE_COPY_SEND,
+ task, flags, argv, argvlen, envp, envplen,
@@ -610,6 +867,8 @@ Change comments and documentation.
mach_port_deallocate (mach_task_self (), right);
ports_port_deref (newpi);
}
+diff --git a/libtrivfs/file-exec.c b/libtrivfs/file-exec.c
+index a3ab048..f626955 100644
--- a/libtrivfs/file-exec.c
+++ b/libtrivfs/file-exec.c
@@ -1,5 +1,5 @@
@@ -619,7 +878,7 @@ Change comments and documentation.
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License as
-@@ -40,3 +40,28 @@ trivfs_S_file_exec (trivfs_protid_t exec
+@@ -40,3 +40,28 @@ trivfs_S_file_exec (trivfs_protid_t exec_file,
{
return EOPNOTSUPP;
}
@@ -648,6 +907,8 @@ Change comments and documentation.
+{
+ return EOPNOTSUPP;
+}
+diff --git a/trans/fakeroot.c b/trans/fakeroot.c
+index c519180..e439659 100644
--- a/trans/fakeroot.c
+++ b/trans/fakeroot.c
@@ -1,5 +1,5 @@
@@ -657,17 +918,7 @@ Change comments and documentation.
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License as
-@@ -28,6 +28,9 @@
- #include <pthread.h>
- #include <hurd/ihash.h>
- #include <hurd/paths.h>
-+#ifdef HAVE_FILE_EXEC_FILE_NAME
-+#include <hurd/fs_experimental.h>
-+#endif
-
- #include <version.h>
-
-@@ -778,6 +781,39 @@ netfs_S_file_exec (struct protid *user,
+@@ -784,6 +784,39 @@ netfs_S_file_exec (struct protid *user,
mach_port_t *destroynames,
size_t destroynameslen)
{
@@ -707,11 +958,8 @@ Change comments and documentation.
error_t err;
file_t file;
-@@ -794,13 +830,29 @@ netfs_S_file_exec (struct protid *user,
-
- if (!err)
+@@ -802,11 +835,25 @@ netfs_S_file_exec (struct protid *user,
{
-+#ifdef HAVE_FILE_EXEC_FILE_NAME
/* We cannot use MACH_MSG_TYPE_MOVE_SEND because we might need to
retry an interrupted call that would have consumed the rights. */
- err = file_exec (user->po->np->nn->file, task, flags, argv, argvlen,
@@ -732,7 +980,6 @@ Change comments and documentation.
+ /* For backwards compatibility. Just drop it when we kill
+ file_exec. */
+ if (err == MIG_BAD_ID)
-+#endif
+ err = file_exec (user->po->np->nn->file, task, flags, argv, argvlen,
+ envp, envplen, fds, MACH_MSG_TYPE_COPY_SEND, fdslen,
+ portarray, MACH_MSG_TYPE_COPY_SEND, portarraylen,
@@ -742,22 +989,41 @@ Change comments and documentation.
mach_port_deallocate (mach_task_self (), file);
}
-@@ -930,6 +982,7 @@ netfs_demuxer (mach_msg_header_t *inp,
- {
- mig_routine_t netfs_io_server_routine (mach_msg_header_t *);
- mig_routine_t netfs_fs_server_routine (mach_msg_header_t *);
-+ mig_routine_t netfs_fs_experimental_server_routine (mach_msg_header_t *);
- mig_routine_t ports_notify_server_routine (mach_msg_header_t *);
- mig_routine_t netfs_fsys_server_routine (mach_msg_header_t *);
- mig_routine_t ports_interrupt_server_routine (mach_msg_header_t *);
-@@ -937,6 +990,7 @@ netfs_demuxer (mach_msg_header_t *inp,
- mig_routine_t routine;
- if ((routine = netfs_io_server_routine (inp)) ||
- (routine = netfs_fs_server_routine (inp)) ||
-+ (routine = netfs_fs_experimental_server_routine (inp)) ||
- (routine = ports_notify_server_routine (inp)) ||
- (routine = netfs_fsys_server_routine (inp)) ||
- /* XXX we should intercept interrupt_operation and do
+diff --git a/utils/fakeauth.c b/utils/fakeauth.c
+index 590a421..851772c 100644
+--- a/utils/fakeauth.c
++++ b/utils/fakeauth.c
+@@ -1,5 +1,5 @@
+ /* fakeauth -- proxy auth server to lie to users about what their IDs are
+- Copyright (C) 2002 Free Software Foundation, Inc.
++ Copyright (C) 2002, 2010 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or
+ modify it under the terms of the GNU General Public License as
+@@ -397,7 +397,7 @@ believe it has restricted them to different identities or no identity at all.\
+ /* We cannot use fork because it doesn't do the right thing with our send
+ rights that point to our own receive rights, i.e. the new auth port.
+ Since posix_spawn might be implemented with fork (prior to glibc 2.3),
+- we cannot use that simple interface either. We use _hurd_exec
++ we cannot use that simple interface either. We use _hurd_exec_file_name
+ directly to effect what posix_spawn does in the simple case. */
+ {
+ task_t newtask;
+@@ -422,7 +422,12 @@ believe it has restricted them to different identities or no identity at all.\
+ if (err)
+ error (3, err, "proc_child");
+
++#ifdef HAVE__HURD_EXEC_FILE_NAME
++ err = _hurd_exec_file_name (newtask, execfile, argv[argi],
++ &argv[argi], environ);
++#else
+ err = _hurd_exec (newtask, execfile, &argv[argi], environ);
++#endif
+ mach_port_deallocate (mach_task_self (), newtask);
+ mach_port_deallocate (mach_task_self (), execfile);
+ if (err)
+diff --git a/utils/login.c b/utils/login.c
+index cad3b1e..7065a9e 100644
--- a/utils/login.c
+++ b/utils/login.c
@@ -1,6 +1,7 @@
@@ -769,17 +1035,7 @@ Change comments and documentation.
Written by Miles Bader <miles@gnu.org>
-@@ -46,6 +47,9 @@
- #include <error.h>
- #include <timefmt.h>
- #include <hurd/lookup.h>
-+#ifdef HAVE_FILE_EXEC_FILE_NAME
-+#include <hurd/fs_experimental.h>
-+#endif
- #include <ugids.h>
-
- const char *argp_program_version = STANDARD_HURD_VERSION (login);
-@@ -882,12 +886,22 @@ main(int argc, char *argv[])
+@@ -882,12 +883,20 @@ main(int argc, char *argv[])
}
}
@@ -789,7 +1045,6 @@ Change comments and documentation.
- ports, MACH_MSG_TYPE_COPY_SEND, INIT_PORT_MAX,
- ints, INIT_INT_MAX,
- 0, 0, 0, 0);
-+#ifdef HAVE_FILE_EXEC_FILE_NAME
+ err = file_exec_file_name (exec, mach_task_self (), EXEC_DEFAULTS, shell,
+ sh_args, sh_args_len, env, env_len,
+ fds, MACH_MSG_TYPE_COPY_SEND, 3,
@@ -798,7 +1053,6 @@ Change comments and documentation.
+ 0, 0, 0, 0);
+ /* Fallback in case the file server hasn't been restarted. */
+ if (err == MIG_BAD_ID)
-+#endif
+ err = file_exec (exec, mach_task_self (), EXEC_DEFAULTS,
+ sh_args, sh_args_len, env, env_len,
+ fds, MACH_MSG_TYPE_COPY_SEND, 3,
@@ -808,178 +1062,61 @@ Change comments and documentation.
if (err)
error(5, err, "%s", shell);
---- /dev/null
-+++ b/hurd/fs_experimental.defs
-@@ -0,0 +1,51 @@
-+/* Definitions for the filesystem interface.
-+ Copyright (C) 1994,95,96,97,98,99,2002 Free Software Foundation, Inc.
-+
-+This file is part of the GNU Hurd.
-+
-+The GNU Hurd is free software; you can redistribute it and/or modify
-+it under the terms of the GNU General Public License as published by
-+the Free Software Foundation; either version 2, or (at your option)
-+any later version.
-+
-+The GNU Hurd is distributed in the hope that it will be useful,
-+but WITHOUT ANY WARRANTY; without even the implied warranty of
-+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+GNU General Public License for more details.
-+
-+You should have received a copy of the GNU General Public License
-+along with the GNU Hurd; see the file COPYING. If not, write to
-+the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
-+
-+
-+/* All these objects also implement the generic IO facilities. */
-+
-+subsystem fs_experimental 444242;
-+
-+#include <hurd/hurd_types.defs>
-+
-+#ifdef FILE_IMPORTS
-+FILE_IMPORTS
+diff --git a/utils/rpctrace.c b/utils/rpctrace.c
+index d7ee203..17acb8d 100644
+--- a/utils/rpctrace.c
++++ b/utils/rpctrace.c
+@@ -1,7 +1,7 @@
+ /* Trace RPCs sent to selected ports
+
+- Copyright (C) 1998, 1999, 2001, 2002, 2003, 2005, 2006, 2009, 2011,
+- 2013 Free Software Foundation, Inc.
++ Copyright (C) 1998, 1999, 2001, 2002, 2003, 2005, 2006, 2009, 2010,
++ 2011, 2013 Free Software Foundation, Inc.
+
+ This file is part of the GNU Hurd.
+
+@@ -1734,7 +1734,11 @@ traced_spawn (char **argv, char **envp)
+ /* Now actually run the command they told us to trace. We do the exec on
+ the actual task, so the RPCs to map in the program itself do not get
+ traced. Could have an option to use TASK_WRAPPER here instead. */
++#ifdef HAVE__HURD_EXEC_FILE_NAME
++ err = _hurd_exec_file_name (traced_task, file, *argv, argv, envp);
++#else
+ err = _hurd_exec (traced_task, file, argv, envp);
+#endif
-+
-+/* Operations supported on all files */
-+
-+INTR_INTERFACE
-+
-+/* Overlay a task with a file. Necessary initialization, including
-+ authentication changes associated with set[ug]id execution must be
-+ handled by the filesystem. Filesystems normally implement this by
-+ using exec_newtask or exec_loadtask as appropriate. */
-+routine file_exec_file_name (
-+ exec_file: file_t;
-+ RPT
-+ exec_task: task_t;
-+ flags: int;
-+ filename: string_t;
-+ argv: data_t SCP;
-+ envp: data_t SCP;
-+ fdarray: portarray_t SCP;
-+ portarray: portarray_t SCP;
-+ intarray: intarray_t SCP;
-+ deallocnames: mach_port_name_array_t SCP;
-+ destroynames: mach_port_name_array_t SCP);
---- a/libdiskfs/Makefile
-+++ b/libdiskfs/Makefile
-@@ -56,7 +56,7 @@ OTHERSRCS = conch-fetch.c conch-set.c di
- SRCS = $(OTHERSRCS) $(FSSRCS) $(IOSRCS) $(FSYSSRCS) $(IFSOCKSRCS)
- installhdrs = diskfs.h diskfs-pager.h
-
--MIGSTUBS = fsServer.o ioServer.o fsysServer.o exec_startupServer.o \
-+MIGSTUBS = fsServer.o fs_experimentalServer.o ioServer.o fsysServer.o exec_startupServer.o \
- fsys_replyUser.o fs_notifyUser.o ifsockServer.o \
- startup_notifyServer.o
- OBJS = $(sort $(SRCS:.c=.o) $(MIGSTUBS))
-@@ -66,6 +66,7 @@ LDLIBS += -lpthread
-
- fsys-MIGSFLAGS = -imacros $(srcdir)/fsmutations.h -DREPLY_PORTS
- fs-MIGSFLAGS = -imacros $(srcdir)/fsmutations.h
-+fs_experimental-MIGSFLAGS = -imacros $(srcdir)/fsmutations.h
- io-MIGSFLAGS = -imacros $(srcdir)/fsmutations.h
- ifsock-MIGSFLAGS = -imacros $(srcdir)/fsmutations.h
- MIGCOMSFLAGS = -prefix diskfs_
---- a/libdiskfs/demuxer.c
-+++ b/libdiskfs/demuxer.c
-@@ -19,6 +19,7 @@
-
- #include "io_S.h"
- #include "fs_S.h"
-+#include "fs_experimental_S.h"
- #include "../libports/notify_S.h"
- #include "fsys_S.h"
- #include "../libports/interrupt_S.h"
-@@ -33,6 +34,7 @@ diskfs_demuxer (mach_msg_header_t *inp,
- mig_routine_t routine;
- if ((routine = diskfs_io_server_routine (inp)) ||
- (routine = diskfs_fs_server_routine (inp)) ||
-+ (routine = diskfs_fs_experimental_server_routine (inp)) ||
- (routine = ports_notify_server_routine (inp)) ||
- (routine = diskfs_fsys_server_routine (inp)) ||
- (routine = ports_interrupt_server_routine (inp)) ||
---- a/libnetfs/Makefile
-+++ b/libnetfs/Makefile
-@@ -59,12 +59,13 @@ SRCS= $(OTHERSRCS) $(FSSRCS) $(IOSRCS) $
-
- installhdrs=netfs.h
-
--MIGSTUBS= ioServer.o fsServer.o fsysServer.o fsys_replyUser.o ifsockServer.o
-+MIGSTUBS= ioServer.o fsServer.o fs_experimentalServer.o fsysServer.o fsys_replyUser.o ifsockServer.o
-
- OBJS=$(sort $(SRCS:.c=.o) $(MIGSTUBS))
-
- fsys-MIGSFLAGS = -imacros $(srcdir)/mutations.h -DREPLY_PORTS
- fs-MIGSFLAGS = -imacros $(srcdir)/mutations.h
-+fs_experimental-MIGSFLAGS = -imacros $(srcdir)/mutations.h
- io-MIGSFLAGS = -imacros $(srcdir)/mutations.h
- ifsock-MIGSFLAGS = -imacros $(srcdir)/mutations.h
- MIGCOMSFLAGS = -prefix netfs_
---- a/libnetfs/demuxer.c
-+++ b/libnetfs/demuxer.c
-@@ -22,6 +22,7 @@
-
- #include "io_S.h"
- #include "fs_S.h"
-+#include "fs_experimental_S.h"
- #include "../libports/notify_S.h"
- #include "fsys_S.h"
- #include "../libports/interrupt_S.h"
-@@ -34,6 +35,7 @@ netfs_demuxer (mach_msg_header_t *inp,
- mig_routine_t routine;
- if ((routine = netfs_io_server_routine (inp)) ||
- (routine = netfs_fs_server_routine (inp)) ||
-+ (routine = netfs_fs_experimental_server_routine (inp)) ||
- (routine = ports_notify_server_routine (inp)) ||
- (routine = netfs_fsys_server_routine (inp)) ||
- (routine = ports_interrupt_server_routine (inp)) ||
---- a/libtrivfs/Makefile
-+++ b/libtrivfs/Makefile
-@@ -44,7 +44,7 @@ OTHERSRCS=demuxer.c protid-clean.c proti
-
- SRCS=$(FSSRCS) $(IOSRCS) $(FSYSSRCS) $(OTHERSRCS)
-
--MIGSTUBS=fsServer.o ioServer.o fsysServer.o fsys_replyUser.o
-+MIGSTUBS=fsServer.o fs_experimentalServer.o ioServer.o fsysServer.o fsys_replyUser.o
-
- libname = libtrivfs
- HURDLIBS = fshelp iohelp ports shouldbeinlibc
-@@ -54,7 +54,7 @@ MIGCOMSFLAGS = -prefix trivfs_
- installhdrs := trivfs.h
- mig-sheader-prefix = trivfs_
- ifndef no_deps
--installhdrs += $(patsubst %,trivfs_%_S.h,fs io fsys)
-+installhdrs += $(patsubst %,trivfs_%_S.h,fs fs_experimental io fsys)
- endif
-
- include ../Makeconf
---- a/libtrivfs/demuxer.c
-+++ b/libtrivfs/demuxer.c
-@@ -23,6 +23,7 @@ the Free Software Foundation, 675 Mass A
-
- #include "trivfs_io_S.h"
- #include "trivfs_fs_S.h"
-+#include "trivfs_fs_experimental_S.h"
- #include "../libports/notify_S.h"
- #include "trivfs_fsys_S.h"
- #include "../libports/interrupt_S.h"
-@@ -34,6 +35,7 @@ trivfs_demuxer (mach_msg_header_t *inp,
- mig_routine_t routine;
- if ((routine = trivfs_io_server_routine (inp)) ||
- (routine = trivfs_fs_server_routine (inp)) ||
-+ (routine = trivfs_fs_experimental_server_routine (inp)) ||
- (routine = ports_notify_server_routine (inp)) ||
- (routine = trivfs_fsys_server_routine (inp)) ||
- (routine = ports_interrupt_server_routine (inp)))
---- a/configure.ac
-+++ b/configure.ac
-@@ -161,7 +161,7 @@ fi
- AC_SUBST(VERSIONING)
+ if (err)
+ error (2, err, "cannot exec `%s'", argv[0]);
- # Check if libc contains getgrouplist and/or uselocale.
--AC_CHECK_FUNCS(getgrouplist uselocale)
-+AC_CHECK_FUNCS(getgrouplist uselocale file_exec_file_name exec_exec_file_name)
+diff --git a/utils/shd.c b/utils/shd.c
+index a1a4b26..855284f 100644
+--- a/utils/shd.c
++++ b/utils/shd.c
+@@ -1,5 +1,5 @@
+ /*
+- Copyright (C) 1994,95,99,2002 Free Software Foundation
++ Copyright (C) 1994, 1995, 1999, 2002, 2010 Free Software Foundation
+ This program is free software; you can redistribute it and/or
+ modify it under the terms of the GNU General Public License as
+@@ -159,15 +159,18 @@ run (char **argv, int fd0, int fd1)
+ movefd (fd1, 1, &save1))
+ return -1;
- # From glibc HEAD, 2007-11-07.
++#ifdef HAVE__HURD_EXEC_FILE_NAME
++ err = _hurd_exec_file_name (task, file, program, argv, environ);
++#else
+ err = _hurd_exec (task, file, argv, environ);
+-
++#endif
+ if (restorefd (fd0, 0, &save0) ||
+ restorefd (fd1, 1, &save1))
+ return -1;
+
+ if (err)
+ {
+- error (0, err, "_hurd_exec");
++ error (0, err, "_hurd_exec_file_name");
+ err = task_terminate (task);
+ if (err)
+ error (0, err, "task_terminate");
diff --git a/debian/patches/exec_filename_exec.patch b/debian/patches/exec_filename_exec.patch
deleted file mode 100644
index 40452608..00000000
--- a/debian/patches/exec_filename_exec.patch
+++ /dev/null
@@ -1,317 +0,0 @@
-From 011df9d35eb68132cdb14a0f55e2435375e2cfce Mon Sep 17 00:00:00 2001
-From: Emilio Pozuelo Monfort <pochu27@gmail.com>
-Date: Wed, 26 May 2010 00:15:37 +0200
-Subject: [PATCH 1/3] Add a new exec_exec_file_name RPC
-
-* hurd/exec.defs (exec_exec_file_name): New RPC.
-(exec_exec): Label as deprecated.
-* doc/hurd.texi: Updated.
-* exec/exec.c (S_exec_exec_file_name): New function.
-(S_exec_exec): Label as deprecated.
-(do_exec): Add argument.
-* exec/hashexec.c (check_hashbang): Add argument.
-Don't guess the file name if file_name_exec is set.
-* exec/priv.h (check_hashbang): Add argument.
----
- doc/hurd.texi | 8 ++++----
- exec/exec.c | 50 +++++++++++++++++++++++++++++++++++++++++++++-----
- exec/hashexec.c | 18 ++++++++++++------
- exec/priv.h | 4 +++-
- hurd/exec.defs | 19 +++++++++++++++++--
- 5 files changed, 81 insertions(+), 18 deletions(-)
-
---- a/doc/hurd.texi
-+++ b/doc/hurd.texi
-@@ -102,7 +102,7 @@ This file documents the GNU Hurd kernel
- documentation was last updated for version @value{VERSION} of the Hurd.
-
- Copyright @copyright{} 1994, 1996, 1998, 1999, 2000, 2001, 2002, 2003,
--2004, 2005, 2007, 2008, 2009 Free Software Foundation, Inc.
-+2004, 2005, 2007, 2008, 2009, 2010 Free Software Foundation, Inc.
-
- @quotation
- Permission is granted to make and distribute verbatim copies of
-@@ -2766,14 +2766,14 @@ If the setuid/setgid transformation adds
- authentication handle that was not previously present (as opposed to
- merely reordering them), then the @code{EXEC_SECURE} and
- @code{EXEC_NEWTASK} flags should both be added in the call to
--@code{exec_exec}.
-+@code{exec_exec_file_name}.
-
- The server then needs to open a new port onto the executed file which
- will not share any file pointers with the port the user passed in,
- opened with @code{O_READ}. Finally, all the information (mutated
- appropriately for setuid/setgid) should be sent to the execserver with
--@code{exec_exec}. Whatever error code @code{exec_exec} returns should
--returned to the caller of @code{file_exec}.
-+@code{exec_exec_file_name}. Whatever error code @code{exec_exec_file_name}
-+returns should be returned to the caller of @code{file_exec}.
-
- @node File Locking
- @subsection File Locking
---- a/exec/exec.c
-+++ b/exec/exec.c
-@@ -1,6 +1,6 @@
- /* GNU Hurd standard exec server.
-- Copyright (C) 1992,93,94,95,96,98,99,2000,01,02,04
-- Free Software Foundation, Inc.
-+ Copyright (C) 1992 ,1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
-+ 2002, 2004, 2010 Free Software Foundation, Inc.
- Written by Roland McGrath.
-
- Can exec ELF format directly.
-@@ -738,6 +738,7 @@ static error_t
- do_exec (file_t file,
- task_t oldtask,
- int flags,
-+ char *filename,
- char *argv, mach_msg_type_number_t argvlen, boolean_t argv_copy,
- char *envp, mach_msg_type_number_t envplen, boolean_t envp_copy,
- mach_port_t *dtable, mach_msg_type_number_t dtablesize,
-@@ -796,7 +797,7 @@ do_exec (file_t file,
- {
- /* Check for a #! executable file. */
- check_hashbang (&e,
-- file, oldtask, flags,
-+ file, oldtask, flags, filename,
- argv, argvlen, argv_copy,
- envp, envplen, envp_copy,
- dtable, dtablesize, dtable_copy,
-@@ -1356,6 +1357,7 @@ do_exec (file_t file,
- return e.error;
- }
-
-+/* Deprecated. */
- kern_return_t
- S_exec_exec (struct trivfs_protid *protid,
- file_t file,
-@@ -1372,13 +1374,51 @@ S_exec_exec (struct trivfs_protid *proti
- mach_port_t *deallocnames, mach_msg_type_number_t ndeallocnames,
- mach_port_t *destroynames, mach_msg_type_number_t ndestroynames)
- {
-+ return S_exec_exec_file_name (protid,
-+ file,
-+ oldtask,
-+ flags,
-+ "",
-+ argv, argvlen, argv_copy,
-+ envp, envplen, envp_copy,
-+ dtable, dtablesize,
-+ dtable_copy,
-+ portarray, nports,
-+ portarray_copy,
-+ intarray, nints,
-+ intarray_copy,
-+ deallocnames, ndeallocnames,
-+ destroynames, ndestroynames);
-+}
-+
-+kern_return_t
-+S_exec_exec_file_name (struct trivfs_protid *protid,
-+ file_t file,
-+ task_t oldtask,
-+ int flags,
-+ char *filename,
-+ char *argv, mach_msg_type_number_t argvlen,
-+ boolean_t argv_copy,
-+ char *envp, mach_msg_type_number_t envplen,
-+ boolean_t envp_copy,
-+ mach_port_t *dtable, mach_msg_type_number_t dtablesize,
-+ boolean_t dtable_copy,
-+ mach_port_t *portarray, mach_msg_type_number_t nports,
-+ boolean_t portarray_copy,
-+ int *intarray, mach_msg_type_number_t nints,
-+ boolean_t intarray_copy,
-+ mach_port_t *deallocnames,
-+ mach_msg_type_number_t ndeallocnames,
-+ mach_port_t *destroynames,
-+ mach_msg_type_number_t ndestroynames)
-+{
- if (! protid)
- return EOPNOTSUPP;
-
- /* There were no user-specified exec servers,
- or none of them could be found. */
-
-- return do_exec (file, oldtask, flags,
-+ return do_exec (file, oldtask, flags, filename,
- argv, argvlen, argv_copy,
- envp, envplen, envp_copy,
- dtable, dtablesize, dtable_copy,
---- a/exec/hashexec.c
-+++ b/exec/hashexec.c
-@@ -1,5 +1,6 @@
- /* GNU Hurd standard exec server, #! script execution support.
-- Copyright (C) 1995,96,97,98,99,2000,02 Free Software Foundation, Inc.
-+ Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2002, 2010
-+ Free Software Foundation, Inc.
- Written by Roland McGrath.
-
- This file is part of the GNU Hurd.
-@@ -35,6 +36,7 @@ check_hashbang (struct execdata *e,
- file_t file,
- task_t oldtask,
- int flags,
-+ char *file_name_exec,
- char *argv, u_int argvlen, boolean_t argv_copy,
- char *envp, u_int envplen, boolean_t envp_copy,
- mach_port_t *dtable, u_int dtablesize, boolean_t dtable_copy,
-@@ -225,10 +227,12 @@ check_hashbang (struct execdata *e,
- file_name = NULL;
- else if (! (flags & EXEC_SECURE))
- {
-- /* Try to figure out the file's name. We guess that if ARGV[0]
-- contains a slash, it might be the name of the file; and that
-- if it contains no slash, looking for files named by ARGV[0] in
-- the `PATH' environment variable might find it. */
-+ /* Try to figure out the file's name. If FILE_NAME_EXEC
-+ is not NULL, then it's the file's name. Otherwise we
-+ guess that if ARGV[0] contains a slash, it might be
-+ the name of the file; and that if it contains no slash,
-+ looking for files named by ARGV[0] in the `PATH'
-+ environment variable might find it. */
-
- error_t error;
- char *name;
-@@ -278,7 +282,9 @@ check_hashbang (struct execdata *e,
- else
- name = argv;
-
-- if (strchr (name, '/') != NULL)
-+ if (file_name_exec && file_name_exec[0] != '\0')
-+ error = lookup (name = file_name_exec, 0, &name_file);
-+ else if (strchr (name, '/') != NULL)
- error = lookup (name, 0, &name_file);
- else if ((error = hurd_catch_signal
- (sigmask (SIGBUS) | sigmask (SIGSEGV),
---- a/exec/priv.h
-+++ b/exec/priv.h
-@@ -1,5 +1,6 @@
- /* GNU Hurd standard exec server, private declarations.
-- Copyright (C) 1992,93,94,95,96,99,2000,02, 04 Free Software Foundation, Inc.
-+ Copyright (C) 1992, 1993, 1994, 1995, 1996, 1999, 2000, 2002, 2004,
-+ 2010 Free Software Foundation, Inc.
- Written by Roland McGrath.
-
- This file is part of the GNU Hurd.
-@@ -32,6 +33,7 @@ the Free Software Foundation, 675 Mass A
- #include <link.h> /* This gives us the ElfW macro. */
- #include <fcntl.h>
- #include "exec_S.h"
-+#include "exec_experimental_S.h"
-
-
- #ifndef exec_priv_h
-@@ -134,6 +136,7 @@ void check_hashbang (struct execdata *e,
- file_t file,
- task_t oldtask,
- int flags,
-+ char *filename,
- char *argv, u_int argvlen, boolean_t argv_copy,
- char *envp, u_int envplen, boolean_t envp_copy,
- mach_port_t *dtable, u_int dtablesize,
---- a/hurd/exec.defs
-+++ b/hurd/exec.defs
-@@ -1,5 +1,6 @@
- /* Interface definitions for the exec servers.
-- Copyright (C) 1991,92,93,94,95,2001 Free Software Foundation, Inc.
-+ Copyright (C) 1991, 1992, 1993, 1994, 1995, 2001, 2010
-+ Free Software Foundation, Inc.
-
- This file is part of the GNU Hurd.
-
-@@ -29,6 +30,7 @@ EXEC_IMPORTS
-
- INTR_INTERFACE
-
-+/* Deprecated: use exec_exec_file_name instead. */
- routine exec_exec (
- execserver: file_t;
- file: mach_port_send_t;
---- /dev/null
-+++ b/hurd/exec_experimental.defs
-@@ -0,0 +1,46 @@
-+/* Interface definitions for the exec servers.
-+ Copyright (C) 1991, 1992, 1993, 1994, 1995, 2001, 2010, 2012
-+ Free Software Foundation, Inc.
-+
-+This file is part of the GNU Hurd.
-+
-+The GNU Hurd is free software; you can redistribute it and/or modify
-+it under the terms of the GNU General Public License as published by
-+the Free Software Foundation; either version 2, or (at your option)
-+any later version.
-+
-+The GNU Hurd is distributed in the hope that it will be useful,
-+but WITHOUT ANY WARRANTY; without even the implied warranty of
-+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+GNU General Public License for more details.
-+
-+You should have received a copy of the GNU General Public License
-+along with the GNU Hurd; see the file COPYING. If not, write to
-+the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
-+
-+/* Written by Michael I. Bushnell and Roland McGrath. */
-+
-+subsystem exec_experimental 434242;
-+
-+#include <hurd/hurd_types.defs>
-+
-+#ifdef EXEC_IMPORTS
-+EXEC_IMPORTS
-+#endif
-+
-+INTR_INTERFACE
-+
-+routine exec_exec_file_name (
-+ execserver: file_t;
-+ file: mach_port_send_t;
-+ oldtask: task_t;
-+ flags: int;
-+ filename: string_t;
-+ argv: data_t SCP;
-+ envp: data_t SCP;
-+ dtable: portarray_t SCP;
-+ portarray: portarray_t SCP;
-+ intarray: intarray_t SCP;
-+ deallocnames: mach_port_name_array_t;
-+ destroynames: mach_port_name_array_t);
-+
---- a/exec/Makefile
-+++ b/exec/Makefile
-@@ -22,7 +22,7 @@ makemode := server
-
- SRCS = exec.c main.c hashexec.c hostarch.c
- OBJS = main.o hostarch.o exec.o hashexec.o \
-- execServer.o exec_startupServer.o
-+ execServer.o exec_startupServer.o exec_experimentalServer.o
-
- target = exec
- #targets = exec exec.static
-@@ -30,7 +30,8 @@ HURDLIBS = trivfs fshelp iohelp ports ih
- OTHERLIBS = -lpthread
-
- exec-MIGSFLAGS = -imacros $(srcdir)/execmutations.h
- exec_startup-MIGSFLAGS = -imacros $(srcdir)/execmutations.h
-+exec_experimental-MIGSFLAGS = -imacros $(srcdir)/execmutations.h
-
- include ../Makeconf
-
---- a/exec/main.c
-+++ b/exec/main.c
-@@ -47,6 +47,7 @@ char **save_argv;
-
-
- #include "exec_S.h"
-+#include "exec_experimental_S.h"
- #include "exec_startup_S.h"
-
- static int
-@@ -54,6 +55,7 @@ exec_demuxer (mach_msg_header_t *inp, ma
- {
- mig_routine_t routine;
- if ((routine = exec_server_routine (inp)) ||
-+ (routine = exec_experimental_server_routine (inp)) ||
- (routine = NULL, trivfs_demuxer (inp, outp)) ||
- (routine = exec_startup_server_routine (inp)))
- {
diff --git a/debian/patches/exec_filename_fix.patch b/debian/patches/exec_filename_fix.patch
deleted file mode 100644
index 71836d9b..00000000
--- a/debian/patches/exec_filename_fix.patch
+++ /dev/null
@@ -1,144 +0,0 @@
-From: Justus Winter <4winter@informatik.uni-hamburg.de>
-
-This patch is an amendment of exec_filename_exec.patch.
-
-If file_name_exec is not given, check_hashbang will try to locate the
-file. If argv[0] contains a '/', the file path is assumed to be
-absolute and it will try to open the file. Otherwise, the file is
-searched in the PATH. In either case, the resulting file identity port
-is compared to the identity port of the original file handle passed to
-check_hashbang.
-
-exec_filename_exec.patch explicitly provides the script files path in
-file_name_exec. According to the comment, if this path is provided, it
-is assumed to be the path to the script file and no attempt at
-locating the script file is done. However, the identity ports are
-still compared. This cannot succeed if fakeroot or chroot is used,
-because the process doing the exec and thus the initial file lookup is
-running in the chrooted environment, while the exec server is not.
-
-Fix this by skipping the identity test if file_name_exec is provided.
-
-* exec/hashexec.c (check_hashbang): Skip the file identity test if the
- file_name_exec is provided.
----
- exec/hashexec.c | 91 ++++++++++++++++++++++++++++++-------------------------
- 1 file changed, 50 insertions(+), 41 deletions(-)
-
---- a/exec/hashexec.c
-+++ b/exec/hashexec.c
-@@ -231,11 +231,12 @@ check_hashbang (struct execdata *e,
- else if (! (flags & EXEC_SECURE))
- {
- /* Try to figure out the file's name. If FILE_NAME_EXEC
-- is not NULL, then it's the file's name. Otherwise we
-- guess that if ARGV[0] contains a slash, it might be
-- the name of the file; and that if it contains no slash,
-- looking for files named by ARGV[0] in the `PATH'
-- environment variable might find it. */
-+ is not NULL and not the empty string, then it's the
-+ file's name. Otherwise we guess that if ARGV[0]
-+ contains a slash, it might be the name of the file;
-+ and that if it contains no slash, looking for files
-+ named by ARGV[0] in the `PATH' environment variable
-+ might find it. */
-
- error_t error;
- char *name;
-@@ -271,51 +272,59 @@ check_hashbang (struct execdata *e,
- return err;
- }
-
-- error = io_identity (file, &fileid, &filefsid, &fileno);
-- if (error)
-- goto out;
-- mach_port_deallocate (mach_task_self (), filefsid);
--
-- if (memchr (argv, '\0', argvlen) == NULL)
-- {
-- name = alloca (argvlen + 1);
-- bcopy (argv, name, argvlen);
-- name[argvlen] = '\0';
-- }
-- else
-- name = argv;
--
- if (file_name_exec && file_name_exec[0] != '\0')
-- error = lookup (name = file_name_exec, 0, &name_file);
-- else if (strchr (name, '/') != NULL)
-- error = lookup (name, 0, &name_file);
-- else if ((error = hurd_catch_signal
-- (sigmask (SIGBUS) | sigmask (SIGSEGV),
-- (vm_address_t) envp, (vm_address_t) envp + envplen,
-- &search_path, SIG_ERR)))
-- name_file = MACH_PORT_NULL;
--
-- if (!error && name_file != MACH_PORT_NULL)
-+ name = file_name_exec;
-+ else
- {
-- mach_port_t id, fsid;
-- ino_t ino;
-- error = io_identity (name_file, &id, &fsid, &ino);
-- mach_port_deallocate (mach_task_self (), name_file);
-- if (!error)
-+ /* Try to locate the file. */
-+ error = io_identity (file, &fileid, &filefsid, &fileno);
-+ if (error)
-+ goto out;
-+ mach_port_deallocate (mach_task_self (), filefsid);
-+
-+ if (memchr (argv, '\0', argvlen) == NULL)
- {
-- mach_port_deallocate (mach_task_self (), fsid);
-- mach_port_deallocate (mach_task_self (), id);
-+ name = alloca (argvlen + 1);
-+ bcopy (argv, name, argvlen);
-+ name[argvlen] = '\0';
- }
-- if (!error && id == fileid)
-+ else
-+ name = argv;
-+
-+ if (strchr (name, '/') != NULL)
-+ error = lookup (name, 0, &name_file);
-+ else if ((error = hurd_catch_signal
-+ (sigmask (SIGBUS) | sigmask (SIGSEGV),
-+ (vm_address_t) envp, (vm_address_t) envp + envplen,
-+ &search_path, SIG_ERR)))
-+ name_file = MACH_PORT_NULL;
-+
-+ /* See whether we found the right file. */
-+ if (!error && name_file != MACH_PORT_NULL)
- {
-- file_name = name;
-- free_file_name = free_name;
-+ mach_port_t id, fsid;
-+ ino_t ino;
-+ error = io_identity (name_file, &id, &fsid, &ino);
-+ mach_port_deallocate (mach_task_self (), name_file);
-+ if (!error)
-+ {
-+ mach_port_deallocate (mach_task_self (), fsid);
-+ mach_port_deallocate (mach_task_self (), id);
-+ if (id != fileid)
-+ error = 1;
-+ }
- }
-- else if (free_name)
-- free (name);
-+
-+ mach_port_deallocate (mach_task_self (), fileid);
- }
-
-- mach_port_deallocate (mach_task_self (), fileid);
-+ if (!error)
-+ {
-+ file_name = name;
-+ free_file_name = free_name;
-+ }
-+ else if (free_name)
-+ free (name);
- }
-
- if (file_name == NULL)
diff --git a/debian/patches/exec_filename_use.patch b/debian/patches/exec_filename_use.patch
deleted file mode 100644
index c806aea2..00000000
--- a/debian/patches/exec_filename_use.patch
+++ /dev/null
@@ -1,113 +0,0 @@
-From bbce8439190738efc9260490fa52f9dfe9600306 Mon Sep 17 00:00:00 2001
-From: Emilio Pozuelo Monfort <pochu27@gmail.com>
-Date: Wed, 26 May 2010 23:32:16 +0200
-Subject: [PATCH 3/3] Use the new _hurd_exec_file_name function
-
-* configure.in: Check for _hurd_exec_file_name.
-* utils/fakeauth.c: Call _hurd_exec_file_name instead of
-_hurd_exec if it's available.
-* utils/rpctrace.c: Likewise.
-* utils/shd.c: Likewise.
----
- configure.in | 4 ++--
- utils/fakeauth.c | 9 +++++++--
- utils/rpctrace.c | 6 +++++-
- utils/shd.c | 9 ++++++---
- 4 files changed, 20 insertions(+), 8 deletions(-)
-
-Index: hurd-debian/configure.ac
-===================================================================
---- hurd-debian.orig/configure.ac 2012-06-05 00:38:18.000000000 +0000
-+++ hurd-debian/configure.ac 2012-06-05 00:38:18.000000000 +0000
-@@ -160,8 +160,8 @@
- fi
- AC_SUBST(VERSIONING)
-
--# Check if libc contains getgrouplist and/or uselocale.
--AC_CHECK_FUNCS(getgrouplist uselocale file_exec_file_name exec_exec_file_name)
-+# Check if libc contains these functions.
-+AC_CHECK_FUNCS(getgrouplist uselocale file_exec_file_name exec_exec_file_name _hurd_exec_file_name)
-
-
- # From glibc HEAD, 2007-11-07.
-Index: hurd-debian/utils/fakeauth.c
-===================================================================
---- hurd-debian.orig/utils/fakeauth.c 2012-06-05 00:35:35.000000000 +0000
-+++ hurd-debian/utils/fakeauth.c 2012-06-05 01:48:00.000000000 +0000
-@@ -1,5 +1,5 @@
- /* fakeauth -- proxy auth server to lie to users about what their IDs are
-- Copyright (C) 2002 Free Software Foundation, Inc.
-+ Copyright (C) 2002, 2010 Free Software Foundation, Inc.
-
- This program is free software; you can redistribute it and/or
- modify it under the terms of the GNU General Public License as
-@@ -388,7 +388,7 @@
- /* We cannot use fork because it doesn't do the right thing with our send
- rights that point to our own receive rights, i.e. the new auth port.
- Since posix_spawn might be implemented with fork (prior to glibc 2.3),
-- we cannot use that simple interface either. We use _hurd_exec
-+ we cannot use that simple interface either. We use _hurd_exec_file_name
- directly to effect what posix_spawn does in the simple case. */
- {
- task_t newtask;
-@@ -413,7 +413,12 @@
- if (err)
- error (3, err, "proc_child");
-
-+#ifdef HAVE__HURD_EXEC_FILE_NAME
-+ err = _hurd_exec_file_name (newtask, execfile, argv[argi],
-+ &argv[argi], environ);
-+#else
- err = _hurd_exec (newtask, execfile, &argv[argi], environ);
-+#endif
- mach_port_deallocate (mach_task_self (), newtask);
- mach_port_deallocate (mach_task_self (), execfile);
- if (err)
-Index: hurd-debian/utils/rpctrace.c
-===================================================================
---- hurd-debian.orig/utils/rpctrace.c 2012-06-05 00:35:35.000000000 +0000
-+++ hurd-debian/utils/rpctrace.c 2012-06-05 01:48:00.000000000 +0000
-@@ -1069,7 +1069,11 @@
- /* Now actually run the command they told us to trace. We do the exec on
- the actual task, so the RPCs to map in the program itself do not get
- traced. Could have an option to use TASK_WRAPPER here instead. */
-+#ifdef HAVE__HURD_EXEC_FILE_NAME
-+ err = _hurd_exec_file_name (traced_task, file, *argv, argv, envp);
-+#else
- err = _hurd_exec (traced_task, file, argv, envp);
-+#endif
- if (err)
- error (2, err, "cannot exec `%s'", argv[0]);
-
-Index: hurd-debian/utils/shd.c
-===================================================================
---- hurd-debian.orig/utils/shd.c 2012-06-05 00:35:35.000000000 +0000
-+++ hurd-debian/utils/shd.c 2012-06-05 01:48:00.000000000 +0000
-@@ -1,5 +1,5 @@
- /*
-- Copyright (C) 1994,95,99,2002 Free Software Foundation
-+ Copyright (C) 1994, 1995, 1999, 2002, 2010 Free Software Foundation
-
- This program is free software; you can redistribute it and/or
- modify it under the terms of the GNU General Public License as
-@@ -159,15 +159,18 @@
- movefd (fd1, 1, &save1))
- return -1;
-
-+#ifdef HAVE__HURD_EXEC_FILE_NAME
-+ err = _hurd_exec_file_name (task, file, program, argv, environ);
-+#else
- err = _hurd_exec (task, file, argv, environ);
--
-+#endif
- if (restorefd (fd0, 0, &save0) ||
- restorefd (fd1, 1, &save1))
- return -1;
-
- if (err)
- {
-- error (0, err, "_hurd_exec");
-+ error (0, err, "_hurd_exec_file_name");
- err = task_terminate (task);
- if (err)
- error (0, err, "task_terminate");
diff --git a/debian/patches/external.patch b/debian/patches/external.patch
index a594eb4e..185f0ebe 100644
--- a/debian/patches/external.patch
+++ b/debian/patches/external.patch
@@ -23,17 +23,6 @@ Index: hurd-debian/Makefile
ifeq ($(HAVE_SUN_RPC),yes)
prog-subdirs += nfs nfsd
---- hurd-debian.orig/Makeconf
-+++ hurd-debian/Makeconf
-@@ -548,7 +548,7 @@ vpath %.defs $(top_srcdir)/hurd
- # These we want to find in the libc include directory...
- mach_defs_names = bootstrap exc mach mach4 \
- mach_host mach_port mach_timer_reply memory_object \
-- memory_object_default notify
-+ memory_object_default notify experimental
- device_defs_names = dev_forward device device_reply device_request
-
- mach_defs = $(addsuffix .defs,$(mach_defs_names))
diff --git a/configure.ac b/configure.ac
index 05b959b..68ec159 100644
--- a/configure.ac
diff --git a/debian/patches/series b/debian/patches/series
index bef18f73..587ec3bd 100644
--- a/debian/patches/series
+++ b/debian/patches/series
@@ -1,3 +1,4 @@
+exec_filename.patch
diskfs_no_inherit_dir_group.patch
init_try_runsystem.gnu.patch
makedev.diff
@@ -34,10 +35,6 @@ libdde_pr_cont.patch
libdde_rx_queue.patch
libdde_rcu.patch
libmachdev.patch
-exec_filename_exec.patch
-exec_filename_fs.patch
-exec_filename_use.patch
-exec_filename_fix.patch
mount.patch
proc_set_init_task.patch
newRPC.patch
diff --git a/debian/patches/xxx-fix-build.patch b/debian/patches/xxx-fix-build.patch
index c68e268d..0e0e8871 100644
--- a/debian/patches/xxx-fix-build.patch
+++ b/debian/patches/xxx-fix-build.patch
@@ -6,8 +6,8 @@ index 3ef742d..a9ae914 100644
SRCS = exec.c main.c hashexec.c hostarch.c
OBJS = main.o hostarch.o exec.o hashexec.o \
-- execServer.o exec_startupServer.o exec_experimentalServer.o
-+ execServer.o exec_startupServer.o exec_experimentalServer.o gnumachUser.o
+- execServer.o exec_startupServer.o
++ execServer.o exec_startupServer.o gnumachUser.o
target = exec
#targets = exec exec.static