summaryrefslogtreecommitdiff
path: root/debian
diff options
context:
space:
mode:
authorJustus Winter <4winter@informatik.uni-hamburg.de>2014-04-08 11:21:50 +0200
committerJustus Winter <4winter@informatik.uni-hamburg.de>2014-04-08 11:21:50 +0200
commitb3b250f147114c7ae6821b5e781380d162f18a72 (patch)
tree3c7b25ce39dead1ab5dc1a3ce024dfaabea0d01b /debian
parent9970ea4f1b83d23196716ac4952ab4a35d385f61 (diff)
remove exec_filename.patch
Diffstat (limited to 'debian')
-rw-r--r--debian/patches/exec_filename.patch1122
-rw-r--r--debian/patches/series1
2 files changed, 0 insertions, 1123 deletions
diff --git a/debian/patches/exec_filename.patch b/debian/patches/exec_filename.patch
deleted file mode 100644
index e980ed2d..00000000
--- a/debian/patches/exec_filename.patch
+++ /dev/null
@@ -1,1122 +0,0 @@
-diff --git a/TODO b/TODO
-index d2500dc..297ac98 100644
---- a/TODO
-+++ b/TODO
-@@ -135,7 +135,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 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
-
--@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.
-
-@@ -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_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
-@@ -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);
- }
-
- if (file_name == NULL)
-@@ -416,15 +431,29 @@ check_hashbang (struct execdata *e,
- return;
-
- /* 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)
-+ 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/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 @@
- /* 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;
-@@ -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 @@
- /* 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.
-
-@@ -79,7 +80,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. */
-@@ -345,7 +346,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,
-@@ -359,7 +360,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/init/init.c b/init/init.c
-index b7b40bd..3fd4fe5 100644
---- a/init/init.c
-+++ b/init/init.c
-@@ -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
-@@ -376,13 +377,26 @@ 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);
-+ 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)
-+ 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;
-
-@@ -469,14 +483,25 @@ 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);
-+ 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)
-+ 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)
-@@ -1068,14 +1093,25 @@ 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);
-+ 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)
-+ 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);
- 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
-@@ -196,7 +196,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/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 @@
--/* 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.
-
-@@ -47,6 +48,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 +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
-- 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 +193,29 @@ 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);
-+ 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)
-+ 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 64a20be..e519c6f 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.
-@@ -273,11 +274,19 @@ fshelp_start_translator_long (fshelp_open_fn_t underlying_open_fn,
- ports[INIT_PORT_BOOTSTRAP] = bootstrap;
-
- /* 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)
-+ 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/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 @@
- /*
-- 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.
-@@ -49,6 +50,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 +167,29 @@ 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);
-+ 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)
-+ 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/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 @@
- /*
-- 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
-@@ -40,3 +40,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/trans/fakeroot.c b/trans/fakeroot.c
-index c519180..e439659 100644
---- a/trans/fakeroot.c
-+++ b/trans/fakeroot.c
-@@ -1,5 +1,5 @@
- /* fakeroot -- a translator for faking actions that aren't really permitted
-- Copyright (C) 2002, 2003, 2008, 2013 Free Software Foundation, Inc.
-+ Copyright (C) 2002, 2003, 2008, 2010, 2013 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
-@@ -784,6 +784,39 @@ netfs_S_file_exec (struct protid *user,
- 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);
-+}
-+
-+kern_return_t
-+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;
-
-@@ -802,11 +835,25 @@ netfs_S_file_exec (struct protid *user,
- {
- /* 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,
-- 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 (user->po->np->nn->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)
-+ 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);
- }
-
-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 @@
- /* 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>
-
-@@ -882,12 +883,20 @@ 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);
-+ 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)
-+ 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);
-
-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
- 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");
diff --git a/debian/patches/series b/debian/patches/series
index 587ec3bd..0e142950 100644
--- a/debian/patches/series
+++ b/debian/patches/series
@@ -1,4 +1,3 @@
-exec_filename.patch
diskfs_no_inherit_dir_group.patch
init_try_runsystem.gnu.patch
makedev.diff