summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--debian/patches/exec_filename0001-Add-a-new-exec_exec_file_name-RPC.patch340
-rw-r--r--debian/patches/exec_filename0002-Add-a-file_exec_file_name-RPC.patch1017
-rw-r--r--debian/patches/exec_filename0003-Use-the-new-_hurd_exec_file_name-function.patch114
-rw-r--r--debian/patches/exec_filename0004-This-patch-is-an-amendment-of-exec_filename_exec.pat.patch151
-rw-r--r--debian/patches/series4
5 files changed, 0 insertions, 1626 deletions
diff --git a/debian/patches/exec_filename0001-Add-a-new-exec_exec_file_name-RPC.patch b/debian/patches/exec_filename0001-Add-a-new-exec_exec_file_name-RPC.patch
deleted file mode 100644
index ddbb1788..00000000
--- a/debian/patches/exec_filename0001-Add-a-new-exec_exec_file_name-RPC.patch
+++ /dev/null
@@ -1,340 +0,0 @@
-From 8ec005706bcb8afdf5c956b6bc8608aeb05d0d60 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 hurd 1/4] 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/Makefile | 3 ++-
- exec/exec.c | 48 +++++++++++++++++++++++++++++++++++++++++----
- exec/hashexec.c | 18 +++++++++++------
- exec/main.c | 2 ++
- exec/priv.h | 5 ++++-
- hurd/exec.defs | 4 +++-
- hurd/exec_experimental.defs | 46 +++++++++++++++++++++++++++++++++++++++++++
- 8 files changed, 117 insertions(+), 17 deletions(-)
- create mode 100644 hurd/exec_experimental.defs
-
-diff --git a/doc/hurd.texi b/doc/hurd.texi
-index 2f36bdc..f36caf8 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
-@@ -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}. 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
-diff --git a/exec/Makefile b/exec/Makefile
-index d332f36..c32d65e 100644
---- 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
-@@ -31,6 +31,7 @@ OTHERLIBS = -lpthread
-
- exec-MIGSFLAGS = -imacros $(srcdir)/execmutations.h
- exec_startup-MIGSFLAGS = -imacros $(srcdir)/execmutations.h
-+exec_experimental-MIGSFLAGS = -imacros $(srcdir)/execmutations.h
-
- include ../Makeconf
-
-diff --git a/exec/exec.c b/exec/exec.c
-index 3b63b7f..b825cc5 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.
-@@ -764,6 +764,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,
-@@ -822,7 +823,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,
-@@ -1405,6 +1406,7 @@ do_exec (file_t file,
- return e.error;
- }
-
-+/* Deprecated. */
- kern_return_t
- S_exec_exec (struct trivfs_protid *protid,
- file_t file,
-@@ -1421,13 +1423,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 e53d2ee..118360f 100644
---- 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),
-diff --git a/exec/main.c b/exec/main.c
-index c86c000..4b33916 100644
---- a/exec/main.c
-+++ b/exec/main.c
-@@ -49,6 +49,7 @@ mach_port_t opt_device_master;
-
-
- #include "exec_S.h"
-+#include "exec_experimental_S.h"
- #include "exec_startup_S.h"
-
- static int
-@@ -56,6 +57,7 @@ exec_demuxer (mach_msg_header_t *inp, mach_msg_header_t *outp)
- {
- 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/exec/priv.h b/exec/priv.h
-index 733f35c..daa7075 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.
-@@ -32,6 +33,7 @@ the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
- #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
-@@ -135,6 +137,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..7433cc2 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;
-diff --git a/hurd/exec_experimental.defs b/hurd/exec_experimental.defs
-new file mode 100644
-index 0000000..ff2e02f
---- /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);
-+
---
-2.1.4
-
diff --git a/debian/patches/exec_filename0002-Add-a-file_exec_file_name-RPC.patch b/debian/patches/exec_filename0002-Add-a-file_exec_file_name-RPC.patch
deleted file mode 100644
index b3efb235..00000000
--- a/debian/patches/exec_filename0002-Add-a-file_exec_file_name-RPC.patch
+++ /dev/null
@@ -1,1017 +0,0 @@
-From 587f6f79cd2273907dc6ddacf287c2e13d2d813a 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 hurd 2/4] 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 +-
- configure.ac | 2 +
- doc/hurd.texi | 16 +++---
- exec/hashexec.c | 37 ++++++++++----
- hurd/fs.defs | 10 ++--
- hurd/hurd_types.h | 9 ++--
- libdiskfs/Makefile | 3 +-
- libdiskfs/boot-start.c | 2 +-
- libdiskfs/demuxer.c | 2 +
- libdiskfs/file-exec.c | 81 +++++++++++++++++++++++++-----
- libfshelp/start-translator-long.c | 26 +++++++---
- libnetfs/Makefile | 3 +-
- libnetfs/demuxer.c | 2 +
- libnetfs/file-exec.c | 73 ++++++++++++++++++++++++----
- libtrivfs/Makefile | 6 ++-
- libtrivfs/demuxer.c | 2 +
- libtrivfs/file-exec.c | 27 +++++++++-
- startup/startup.c | 91 +++++++++++++++++++++++++---------
- trans/fakeroot.c | 100 +++++++++++++++++++++++++++++---------
- utils/login.c | 28 ++++++++---
- 20 files changed, 410 insertions(+), 112 deletions(-)
-
-diff --git a/TODO b/TODO
-index de2a199..9fdb86f 100644
---- a/TODO
-+++ b/TODO
-@@ -131,7 +131,7 @@ See `tasks', the exported task list.
-
- ** libtrivfs
- *** Allow for read/write/exec to be passed down.
--*** Implement file_exec when appropriate. !!
-+*** Implement file_exec_file_name when appropriate. !!
- *** 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 b03057b..b3abe1a 100644
---- a/configure.ac
-+++ b/configure.ac
-@@ -162,6 +162,8 @@ else
- VERSIONING=no
- fi
- AC_SUBST(VERSIONING)
-+# Check if libc contains these functions.
-+AC_CHECK_FUNCS(file_exec_file_name exec_exec_file_name)
-
-
- # From glibc HEAD, 2007-11-07.
-diff --git a/doc/hurd.texi b/doc/hurd.texi
-index f36caf8..14cee22 100644
---- a/doc/hurd.texi
-+++ b/doc/hurd.texi
-@@ -2737,10 +2737,10 @@ write the file.
- @node Program Execution
- @subsection Program Execution
-
--@findex file_exec
-+@findex file_exec_file_name
- Execution of programs on the Hurd is done through fileservers with the
--@code{file_exec} RPC. The fileserver is expected to verify that the
--user is allowed to execute the file, make whatever modifications to the
-+@code{file_exec_file_name} RPC. The fileserver is expected to verify that
-+the user is allowed to execute the file, make whatever modifications to the
- 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; 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
--the @code{file_exec} RPC with @code{ENOEXEC}.
-+the @code{file_exec_file_name} RPC with @code{ENOEXEC}.
-
- If either the setuid or setgid bits are set, the server needs to
- construct a new authentication handle with the additional new ID's.
--Then all the ports passed to @code{file_exec} need to be reauthenticated
--with the new handle. If the fileserver is unable to make the new
--authentication handle (for example, because it is not running as root)
-+Then all the ports passed to @code{file_exec_file_name} need to be
-+reauthenticated with the new handle. If the fileserver is unable to make the
-+new authentication handle (for example, because it is not running as root)
- 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 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}.
-+returns should be returned to the caller of @code{file_exec_file_name}.
-
- @node File Locking
- @subsection File Locking
-diff --git a/exec/hashexec.c b/exec/hashexec.c
-index 118360f..c971279 100644
---- a/exec/hashexec.c
-+++ b/exec/hashexec.c
-@@ -24,6 +24,9 @@
- #include <unistd.h>
- #include <envz.h>
- #include <sys/param.h>
-+#ifdef HAVE_FILE_EXEC_FILE_NAME
-+#include <hurd/fs_experimental.h>
-+#endif
-
- /* 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! */
- return;
-
-+#ifdef HAVE_FILE_EXEC_FILE_NAME
- /* Execute the interpreter program. */
-- e->error = file_exec (interp_file,
-- oldtask, flags,
-- new_argv, new_argvlen, envp, envplen,
-- new_dtable ?: dtable, MACH_MSG_TYPE_COPY_SEND,
-- new_dtable ? new_dtablesize : dtablesize,
-- portarray, MACH_MSG_TYPE_COPY_SEND, nports,
-- intarray, nints,
-- deallocnames, ndeallocnames,
-- destroynames, ndestroynames);
-+ e->error = file_exec_file_name (interp_file,
-+ oldtask, flags, interp,
-+ new_argv, new_argvlen, envp, envplen,
-+ new_dtable ?: dtable,
-+ MACH_MSG_TYPE_COPY_SEND,
-+ new_dtable ? new_dtablesize : dtablesize,
-+ portarray, MACH_MSG_TYPE_COPY_SEND, nports,
-+ intarray, nints,
-+ deallocnames, ndeallocnames,
-+ 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,
-+ new_dtable ?: dtable, MACH_MSG_TYPE_COPY_SEND,
-+ new_dtable ? new_dtablesize : dtablesize,
-+ portarray, MACH_MSG_TYPE_COPY_SEND, nports,
-+ intarray, nints,
-+ deallocnames, ndeallocnames,
-+ destroynames, ndestroynames);
-+
-+
- mach_port_deallocate (mach_task_self (), interp_file);
- munmap (new_argv, new_argvlen);
-
-diff --git a/hurd/fs.defs b/hurd/fs.defs
-index a4a48cc..1322237 100644
---- a/hurd/fs.defs
-+++ b/hurd/fs.defs
-@@ -1,5 +1,6 @@
- /* Definitions for the filesystem interface.
-- Copyright (C) 1994,95,96,97,98,99,2002 Free Software Foundation, Inc.
-+ Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2002, 2010
-+ Free Software Foundation, Inc.
-
- This file is part of the GNU Hurd.
-
-@@ -35,7 +36,8 @@ 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. */
-+ using exec_newtask or exec_loadtask as appropriate.
-+ Deprecated: use file_exec_file_name instead. */
- routine file_exec (
- exec_file: file_t;
- RPT
-@@ -129,8 +131,8 @@ routine file_lock_stat (
- (regardless of the current open modes for this port). ALLOWED is a
- bitwise OR of O_READ, O_WRITE, and O_EXEC. This is not necessarily the
- same as what an open or exec would allow; O_EXEC is set for root even if
-- no executable bits are on (in which case file_exec should fail) and
-- O_WRITE is set a directory can be modified, even though it can't be
-+ no executable bits are on (in which case file_exec_file_name should fail)
-+ and O_WRITE is set a directory can be modified, even though it can't be
- written directly. */
- routine file_check_access (
- file: file_t;
-diff --git a/hurd/hurd_types.h b/hurd/hurd_types.h
-index 4341177..83942a7 100644
---- a/hurd/hurd_types.h
-+++ b/hurd/hurd_types.h
-@@ -1,5 +1,6 @@
- /* C declarations for Hurd server interfaces
-- Copyright (C) 1993,94,95,96,98,99,2001,02 Free Software Foundation, Inc.
-+ Copyright (C) 1993, 1994, 1995, 1996, 1998, 1999, 2001, 2002,
-+ 2010 Free Software Foundation, Inc.
-
- This file is part of the GNU Hurd.
-
-@@ -81,7 +82,7 @@ typedef struct timespec timespec_t;
- /* Many such parameters and flags are also defined in various libc
- headers. */
-
--/* Bits for flags in fs.defs:file_exec and exec.defs:exec_* calls: */
-+/* Bits for flags in fs.defs:file_exec_file_name and exec.defs:exec_* calls: */
- #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. */
-@@ -347,7 +348,7 @@ typedef int *procinfo_t;
- #define FSTYPE_MEMFS 0x00000019 /* In-core filesystem */
- #define FSTYPE_ISO9660 0x0000001a /* ISO9660 */
-
--/* Standard port assignments for file_exec and exec_* */
-+/* Standard port assignments for file_exec_file_name and exec_* */
- enum
- {
- INIT_PORT_CWDIR,
-@@ -361,7 +362,7 @@ enum
- INIT_PORT_MAX
- };
-
--/* Standard ints for file_exec and exec_* */
-+/* Standard ints for file_exec_file_name and exec_* */
- enum
- {
- INIT_UMASK,
-diff --git a/libdiskfs/Makefile b/libdiskfs/Makefile
-index 47b9339..6646dbe 100644
---- a/libdiskfs/Makefile
-+++ b/libdiskfs/Makefile
-@@ -56,7 +56,7 @@ OTHERSRCS = conch-fetch.c conch-set.c dir-clear.c dir-init.c dir-renamed.c \
- 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
- exec_startup-MIGSFLAGS = -imacros $(srcdir)/fsmutations.h
-diff --git a/libdiskfs/boot-start.c b/libdiskfs/boot-start.c
-index d10d783..d80a4ca 100644
---- a/libdiskfs/boot-start.c
-+++ b/libdiskfs/boot-start.c
-@@ -198,7 +198,7 @@ diskfs_start_bootstrap ()
- diskfs_exec_ctl = MACH_PORT_NULL; /* Not used after this. */
- }
-
-- /* Cache the exec server port for file_exec to use. */
-+ /* Cache the exec server port for file_exec_file_name to use. */
- _hurd_port_set (&_diskfs_exec_portcell, diskfs_exec);
-
- if (_diskfs_boot_command)
-diff --git a/libdiskfs/demuxer.c b/libdiskfs/demuxer.c
-index 4a1c4fb..ff33b1b 100644
---- 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)) ||
-diff --git a/libdiskfs/file-exec.c b/libdiskfs/file-exec.c
-index e544b14..a491720 100644
---- a/libdiskfs/file-exec.c
-+++ b/libdiskfs/file-exec.c
-@@ -1,5 +1,6 @@
--/* File execution (file_exec RPC) for diskfs servers, using exec server.
-- Copyright (C) 1993,94,95,96,97,98,2000,02 Free Software Foundation, Inc.
-+/* File execution (file_exec_file_name RPC) for diskfs servers, using exec server.
-+ Copyright (C) 1993, 1994, 1995, 1996, 1997, 1998, 2000, 2002,
-+ 2010 Free Software Foundation, Inc.
-
- This file is part of the GNU Hurd.
-
-@@ -21,10 +22,14 @@
-
- #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,
- mach_port_t *destroynames,
- size_t destroynameslen)
- {
-+ return diskfs_S_file_exec_file_name (cred,
-+ task,
-+ flags,
-+ "",
-+ argv, argvlen,
-+ envp, envplen,
-+ fds, fdslen,
-+ portarray, portarraylen,
-+ intarray, intarraylen,
-+ deallocnames, deallocnameslen,
-+ destroynames, destroynameslen);
-+}
-+
-+kern_return_t
-+diskfs_S_file_exec_file_name (struct protid *cred,
-+ task_t task,
-+ int flags,
-+ char *filename,
-+ char *argv,
-+ size_t argvlen,
-+ char *envp,
-+ size_t envplen,
-+ mach_port_t *fds,
-+ size_t fdslen,
-+ mach_port_t *portarray,
-+ size_t portarraylen,
-+ int *intarray,
-+ size_t intarraylen,
-+ mach_port_t *deallocnames,
-+ size_t deallocnameslen,
-+ mach_port_t *destroynames,
-+ size_t destroynameslen)
-+{
- struct node *np;
- uid_t uid;
- gid_t gid;
-@@ -136,9 +174,9 @@ diskfs_S_file_exec (struct protid *cred,
-
- if (! err)
- /* Make a new peropen for the exec server to access the file, since any
-- seeking the exec server might want to do should not affect the
-- original peropen on which file_exec was called. (The new protid for
-- this peropen clones the caller's iouser to preserve the caller's
-+ seeking the exec server might want to do should not affect the original
-+ peropen on which file_exec_file_name was called. (The new protid
-+ for this peropen clones the caller's iouser to preserve the caller's
- 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,
- do
- {
- right = ports_get_send_right (newpi);
-- err = exec_exec (execserver,
-- right, MACH_MSG_TYPE_COPY_SEND,
-- task, flags, argv, argvlen, envp, envplen,
-- fds, MACH_MSG_TYPE_COPY_SEND, fdslen,
-- portarray, MACH_MSG_TYPE_COPY_SEND, portarraylen,
-- 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,
-+ argv, argvlen, envp, envplen,
-+ fds, MACH_MSG_TYPE_COPY_SEND, fdslen,
-+ portarray, MACH_MSG_TYPE_COPY_SEND,
-+ portarraylen,
-+ intarray, intarraylen,
-+ deallocnames, deallocnameslen,
-+ destroynames, destroynameslen);
-+ /* 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,
-+ fds, MACH_MSG_TYPE_COPY_SEND, fdslen,
-+ portarray, MACH_MSG_TYPE_COPY_SEND, portarraylen,
-+ intarray, intarraylen,
-+ deallocnames, deallocnameslen,
-+ destroynames, destroynameslen);
-+
-+
- 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 8b00e08..f0966aa 100644
---- a/libfshelp/start-translator-long.c
-+++ b/libfshelp/start-translator-long.c
-@@ -1,5 +1,6 @@
- /*
-- Copyright (C) 1995,96,99,2000,02, 04 Free Software Foundation, Inc.
-+ Copyright (C) 1995, 1996, 1999, 2000, 2002, 2004, 2010
-+ Free Software Foundation, Inc.
- 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_open_fn_t underlying_open_fn,
- saveport = ports[INIT_PORT_BOOTSTRAP];
- 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,
-- fds, fds_type, fds_len,
-- ports, ports_type, ports_len,
-- ints, ints_len, 0, 0, 0, 0);
-+ err = file_exec_file_name (executable, task, EXEC_DEFAULTS, name,
-+ argz, argz_len, 0, 0,
-+ fds, fds_type, fds_len,
-+ ports, ports_type, ports_len,
-+ 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,
-+ ports, ports_type, ports_len,
-+ ints, ints_len, 0, 0, 0, 0);
-+
- ports_moved = 1;
-
- if (ports_type == MACH_MSG_TYPE_COPY_SEND)
-diff --git a/libnetfs/Makefile b/libnetfs/Makefile
-index c3830c0..4aade5a 100644
---- a/libnetfs/Makefile
-+++ b/libnetfs/Makefile
-@@ -59,12 +59,13 @@ SRCS= $(OTHERSRCS) $(FSSRCS) $(IOSRCS) $(FSYSSRCS) $(IFSOCKSRCS)
-
- 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_
-diff --git a/libnetfs/demuxer.c b/libnetfs/demuxer.c
-index 4c20ab6..bf78812 100644
---- 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)) ||
-diff --git a/libnetfs/file-exec.c b/libnetfs/file-exec.c
-index 638f0ae..ffaf598 100644
---- a/libnetfs/file-exec.c
-+++ b/libnetfs/file-exec.c
-@@ -1,5 +1,6 @@
- /*
-- Copyright (C) 1996,97,2000,01,02 Free Software Foundation, Inc.
-+ Copyright (C) 1996, 1997, 2000, 2001, 2002, 2010
-+ Free Software Foundation, Inc.
- 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,
- mach_port_t *destroynames,
- size_t destroynameslen)
- {
-+ return netfs_S_file_exec_file_name (cred,
-+ task,
-+ flags,
-+ "",
-+ argv, argvlen,
-+ envp, envplen,
-+ fds, fdslen,
-+ portarray, portarraylen,
-+ intarray, intarraylen,
-+ deallocnames, deallocnameslen,
-+ destroynames, destroynameslen);
-+}
-+
-+kern_return_t
-+netfs_S_file_exec_file_name (struct protid *cred,
-+ task_t task,
-+ int flags,
-+ char *filename,
-+ char *argv,
-+ size_t argvlen,
-+ char *envp,
-+ size_t envplen,
-+ mach_port_t *fds,
-+ size_t fdslen,
-+ mach_port_t *portarray,
-+ size_t portarraylen,
-+ int *intarray,
-+ size_t intarraylen,
-+ mach_port_t *deallocnames,
-+ size_t deallocnameslen,
-+ mach_port_t *destroynames,
-+ size_t destroynameslen)
-+{
- struct node *np;
- error_t err;
- uid_t uid;
-@@ -133,14 +171,31 @@ netfs_S_file_exec (struct protid *cred,
- if (newpi)
- {
- right = ports_get_send_right (newpi);
-- err = exec_exec (_netfs_exec,
-- right, MACH_MSG_TYPE_COPY_SEND,
-- task, flags, argv, argvlen, envp, envplen,
-- fds, MACH_MSG_TYPE_COPY_SEND, fdslen,
-- portarray, MACH_MSG_TYPE_COPY_SEND, portarraylen,
-- 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,
-+ argv, argvlen, envp, envplen,
-+ fds, MACH_MSG_TYPE_COPY_SEND, fdslen,
-+ portarray, MACH_MSG_TYPE_COPY_SEND,
-+ portarraylen,
-+ intarray, intarraylen,
-+ deallocnames, deallocnameslen,
-+ destroynames, destroynameslen);
-+ /* 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,
-+ fds, MACH_MSG_TYPE_COPY_SEND, fdslen,
-+ portarray, MACH_MSG_TYPE_COPY_SEND,
-+ portarraylen,
-+ intarray, intarraylen,
-+ deallocnames, deallocnameslen,
-+ destroynames, destroynameslen);
-+
- mach_port_deallocate (mach_task_self (), right);
- ports_port_deref (newpi);
- }
-diff --git a/libtrivfs/Makefile b/libtrivfs/Makefile
-index 48a53d7..c440101 100644
---- a/libtrivfs/Makefile
-+++ b/libtrivfs/Makefile
-@@ -44,7 +44,7 @@ OTHERSRCS=demuxer.c protid-clean.c protid-dup.c cntl-create.c \
-
- 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,6 +54,10 @@ MIGCOMSFLAGS = -prefix trivfs_
- installhdrs := trivfs.h
- mig-sheader-prefix = trivfs_
-
-+ifndef no_deps
-+installhdrs += $(patsubst %,trivfs_%_S.h,fs fs_experimental io fsys)
-+endif
-+
- include ../Makeconf
-
- $(MIGSTUBS:%Server.o=%.sdefsi): $(srcdir)/mig-mutate.h
-diff --git a/libtrivfs/demuxer.c b/libtrivfs/demuxer.c
-index 8c1afe6..55229da 100644
---- a/libtrivfs/demuxer.c
-+++ b/libtrivfs/demuxer.c
-@@ -23,6 +23,7 @@
-
- #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)))
-diff --git a/libtrivfs/file-exec.c b/libtrivfs/file-exec.c
-index b353d8a..5f873c7 100644
---- a/libtrivfs/file-exec.c
-+++ b/libtrivfs/file-exec.c
-@@ -1,5 +1,5 @@
- /*
-- Copyright (C) 1994,2002 Free Software Foundation, Inc.
-+ Copyright (C) 1994, 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
-@@ -41,3 +41,28 @@ trivfs_S_file_exec (trivfs_protid_t exec_file,
- {
- return EOPNOTSUPP;
- }
-+
-+kern_return_t
-+trivfs_S_file_exec_file_name (trivfs_protid_t exec_file,
-+ mach_port_t reply,
-+ mach_msg_type_name_t replyPoly,
-+ mach_port_t exec_task,
-+ int flags,
-+ string_t filename,
-+ data_t argv,
-+ mach_msg_type_number_t argvCnt,
-+ data_t envp,
-+ mach_msg_type_number_t envpCnt,
-+ portarray_t fdarray,
-+ mach_msg_type_number_t fdarrayCnt,
-+ portarray_t portarray,
-+ mach_msg_type_number_t portarrayCnt,
-+ intarray_t intarray,
-+ mach_msg_type_number_t intarrayCnt,
-+ mach_port_array_t deallocnames,
-+ mach_msg_type_number_t deallocnamesCnt,
-+ mach_port_array_t destroynames,
-+ mach_msg_type_number_t destroynamesCnt)
-+{
-+ return EOPNOTSUPP;
-+}
-diff --git a/startup/startup.c b/startup/startup.c
-index e916768..8696709 100644
---- a/startup/startup.c
-+++ b/startup/startup.c
-@@ -1,7 +1,7 @@
- /* 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>
-@@ -377,13 +380,29 @@ run (const char *server, mach_port_t *ports, task_t *task)
- printf ("Pausing for %s\n", prog);
- getchar ();
- }
-- err = file_exec (file, *task, 0,
-- (char *)prog, strlen (prog) + 1, /* Args. */
-- startup_envz, startup_envz_len,
-- default_dtable, MACH_MSG_TYPE_COPY_SEND, 3,
-- 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. */
-+ startup_envz, startup_envz_len,
-+ default_dtable,
-+ MACH_MSG_TYPE_COPY_SEND, 3,
-+ ports, MACH_MSG_TYPE_COPY_SEND,
-+ INIT_PORT_MAX,
-+ default_ints, INIT_INT_MAX,
-+ 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,
-+ (char *)prog, strlen (prog) + 1, /* Args. */
-+ startup_envz, startup_envz_len,
-+ default_dtable, MACH_MSG_TYPE_COPY_SEND, 3,
-+ ports, MACH_MSG_TYPE_COPY_SEND, INIT_PORT_MAX,
-+ default_ints, INIT_INT_MAX,
-+ NULL, 0, NULL, 0);
- if (!err)
- break;
-
-@@ -470,14 +489,27 @@ run_for_real (char *filename, char *args, int arglen, mach_port_t ctty,
- ++progname;
- else
- progname = filename;
-- err = file_exec (file, task, 0,
-- args, arglen,
-- startup_envz, startup_envz_len,
-- default_dtable, MACH_MSG_TYPE_COPY_SEND, 3,
-- 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, task, 0, filename,
-+ args, arglen,
-+ startup_envz, startup_envz_len,
-+ default_dtable, MACH_MSG_TYPE_COPY_SEND, 3,
-+ default_ports, MACH_MSG_TYPE_COPY_SEND,
-+ INIT_PORT_MAX,
-+ default_ints, INIT_INT_MAX,
-+ 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,
-+ default_dtable, MACH_MSG_TYPE_COPY_SEND, 3,
-+ default_ports, MACH_MSG_TYPE_COPY_SEND,
-+ INIT_PORT_MAX,
-+ default_ints, INIT_INT_MAX,
-+ NULL, 0, NULL, 0);
-+
- mach_port_deallocate (mach_task_self (), default_ports[INIT_PORT_PROC]);
- mach_port_deallocate (mach_task_self (), task);
- if (ctty != MACH_PORT_NULL)
-@@ -1075,13 +1107,26 @@ start_child (const char *prog, char **progargs)
- getchar ();
- }
-
-- err = file_exec (file, child_task, 0,
-- args, arglen,
-- startup_envz, startup_envz_len,
-- NULL, MACH_MSG_TYPE_COPY_SEND, 0, /* No fds. */
-- 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,
-+ NULL, MACH_MSG_TYPE_COPY_SEND, 0, /* No fds. */
-+ default_ports, MACH_MSG_TYPE_COPY_SEND,
-+ INIT_PORT_MAX,
-+ default_ints, INIT_INT_MAX,
-+ 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,
-+ NULL, MACH_MSG_TYPE_COPY_SEND, 0, /* No fds. */
-+ 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);
-diff --git a/trans/fakeroot.c b/trans/fakeroot.c
-index 76fc901..adbd07d 100644
---- a/trans/fakeroot.c
-+++ b/trans/fakeroot.c
-@@ -28,10 +28,14 @@
- #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>
-
- #include "libnetfs/fs_S.h"
-+#include "libnetfs/fs_experimental_S.h"
- #include "libnetfs/io_S.h"
- #include "libnetfs/fsys_S.h"
- #include "libports/notify_S.h"
-@@ -820,23 +824,24 @@ netfs_file_get_storage_info (struct iouser *cred,
- }
-
- kern_return_t
--netfs_S_file_exec (struct protid *user,
-- task_t task,
-- int flags,
-- char *argv,
-- size_t argvlen,
-- char *envp,
-- size_t envplen,
-- mach_port_t *fds,
-- size_t fdslen,
-- mach_port_t *portarray,
-- size_t portarraylen,
-- int *intarray,
-- size_t intarraylen,
-- mach_port_t *deallocnames,
-- size_t deallocnameslen,
-- mach_port_t *destroynames,
-- size_t destroynameslen)
-+netfs_S_file_exec_file_name (struct protid *user,
-+ task_t task,
-+ int flags,
-+ char *filename,
-+ char *argv,
-+ size_t argvlen,
-+ char *envp,
-+ size_t envplen,
-+ mach_port_t *fds,
-+ size_t fdslen,
-+ mach_port_t *portarray,
-+ size_t portarraylen,
-+ int *intarray,
-+ size_t intarraylen,
-+ mach_port_t *deallocnames,
-+ size_t deallocnameslen,
-+ mach_port_t *destroynames,
-+ size_t destroynameslen)
- {
- error_t err;
- file_t file;
-@@ -855,14 +860,30 @@ netfs_S_file_exec (struct protid *user,
-
- if (!err)
- {
-+#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 (netfs_node_netnode (user->po->np)->file,
-- task, flags, argv, argvlen,
-- envp, envplen, fds, MACH_MSG_TYPE_COPY_SEND, fdslen,
-- portarray, MACH_MSG_TYPE_COPY_SEND, portarraylen,
-- intarray, intarraylen, deallocnames, deallocnameslen,
-- destroynames, destroynameslen);
-+ err = file_exec_file_name (netfs_node_netnode (user->po->np)->file,
-+ task, flags,
-+ filename,
-+ argv, argvlen,
-+ envp, envplen,
-+ fds, MACH_MSG_TYPE_COPY_SEND, fdslen,
-+ portarray, MACH_MSG_TYPE_COPY_SEND,
-+ portarraylen,
-+ intarray, intarraylen,
-+ deallocnames, deallocnameslen,
-+ destroynames, destroynameslen);
-+ /* 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,
-+ intarray, intarraylen, deallocnames, deallocnameslen,
-+ destroynames, destroynameslen);
-+
- mach_port_deallocate (mach_task_self (), file);
- }
-
-@@ -878,6 +899,38 @@ netfs_S_file_exec (struct protid *user,
- return err;
- }
-
-+kern_return_t
-+netfs_S_file_exec (struct protid *user,
-+ task_t task,
-+ int flags,
-+ char *argv,
-+ size_t argvlen,
-+ char *envp,
-+ size_t envplen,
-+ mach_port_t *fds,
-+ size_t fdslen,
-+ mach_port_t *portarray,
-+ size_t portarraylen,
-+ int *intarray,
-+ size_t intarraylen,
-+ mach_port_t *deallocnames,
-+ size_t deallocnameslen,
-+ mach_port_t *destroynames,
-+ size_t destroynameslen)
-+{
-+ return netfs_S_file_exec_file_name (user,
-+ task,
-+ flags,
-+ "",
-+ argv, argvlen,
-+ envp, envplen,
-+ fds, fdslen,
-+ portarray, portarraylen,
-+ intarray, intarraylen,
-+ deallocnames, deallocnameslen,
-+ destroynames, destroynameslen);
-+}
-+
- error_t
- netfs_S_io_map (struct protid *user,
- mach_port_t *rdobj, mach_msg_type_name_t *rdobjtype,
-@@ -994,6 +1047,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/login.c b/utils/login.c
-index 9ee296a..cc04715 100644
---- a/utils/login.c
-+++ b/utils/login.c
-@@ -1,6 +1,7 @@
- /* Hurdish login
-
-- Copyright (C) 1995,96,97,98,99,2002 Free Software Foundation, Inc.
-+ Copyright (C) 1995, 1996, 1997, 1998, 1999, 2002, 2010
-+ Free Software Foundation, Inc.
-
- 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[])
- }
- }
-
-- err = file_exec (exec, mach_task_self (), EXEC_DEFAULTS,
-- sh_args, sh_args_len, env, env_len,
-- fds, MACH_MSG_TYPE_COPY_SEND, 3,
-- 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,
-+ ports, MACH_MSG_TYPE_COPY_SEND, INIT_PORT_MAX,
-+ ints, INIT_INT_MAX,
-+ 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,
-+ ports, MACH_MSG_TYPE_COPY_SEND, INIT_PORT_MAX,
-+ ints, INIT_INT_MAX,
-+ 0, 0, 0, 0);
- if (err)
- error(5, err, "%s", shell);
-
---
-2.1.4
-
diff --git a/debian/patches/exec_filename0003-Use-the-new-_hurd_exec_file_name-function.patch b/debian/patches/exec_filename0003-Use-the-new-_hurd_exec_file_name-function.patch
deleted file mode 100644
index b64447be..00000000
--- a/debian/patches/exec_filename0003-Use-the-new-_hurd_exec_file_name-function.patch
+++ /dev/null
@@ -1,114 +0,0 @@
-From 295124df024028b6696d239ed07732032771f686 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 hurd 3/4] 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.ac | 2 +-
- utils/fakeauth.c | 9 +++++++--
- utils/rpctrace.c | 4 ++++
- utils/shd.c | 9 ++++++---
- 4 files changed, 18 insertions(+), 6 deletions(-)
-
-diff --git a/configure.ac b/configure.ac
-index b3abe1a..76fb673 100644
---- a/configure.ac
-+++ b/configure.ac
-@@ -163,7 +163,7 @@ else
- fi
- AC_SUBST(VERSIONING)
- # Check if libc contains these functions.
--AC_CHECK_FUNCS(file_exec_file_name exec_exec_file_name)
-+AC_CHECK_FUNCS(file_exec_file_name exec_exec_file_name _hurd_exec_file_name)
-
-
- # From glibc HEAD, 2007-11-07.
-diff --git a/utils/fakeauth.c b/utils/fakeauth.c
-index ba6a3ee..5cc88b7 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/rpctrace.c b/utils/rpctrace.c
-index d53b510..afe6b6d 100644
---- a/utils/rpctrace.c
-+++ b/utils/rpctrace.c
-@@ -1659,7 +1659,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
- if (err)
- error (2, err, "cannot exec `%s'", argv[0]);
-
-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;
-
-+#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");
---
-2.1.4
-
diff --git a/debian/patches/exec_filename0004-This-patch-is-an-amendment-of-exec_filename_exec.pat.patch b/debian/patches/exec_filename0004-This-patch-is-an-amendment-of-exec_filename_exec.pat.patch
deleted file mode 100644
index fc7a2c77..00000000
--- a/debian/patches/exec_filename0004-This-patch-is-an-amendment-of-exec_filename_exec.pat.patch
+++ /dev/null
@@ -1,151 +0,0 @@
-From d8d55e78e778d4223d6e6624a5e63d7fbea83cce Mon Sep 17 00:00:00 2001
-From: Justus Winter <4winter@informatik.uni-hamburg.de>
-Date: Sun, 13 Sep 2015 14:06:59 +0200
-Subject: [PATCH hurd 4/4] 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 | 93 +++++++++++++++++++++++++++++++--------------------------
- 1 file changed, 51 insertions(+), 42 deletions(-)
-
-diff --git a/exec/hashexec.c b/exec/hashexec.c
-index c971279..c2eda5b 100644
---- 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)
---
-2.1.4
-
diff --git a/debian/patches/series b/debian/patches/series
index 82c507f9..1861e8d1 100644
--- a/debian/patches/series
+++ b/debian/patches/series
@@ -37,10 +37,6 @@ libdde_rcu.patch
mount.patch
format
-exec_filename0001-Add-a-new-exec_exec_file_name-RPC.patch
-exec_filename0002-Add-a-file_exec_file_name-RPC.patch
-exec_filename0003-Use-the-new-_hurd_exec_file_name-function.patch
-exec_filename0004-This-patch-is-an-amendment-of-exec_filename_exec.pat.patch
#trans-crash-add-verbose.patch