From b3b250f147114c7ae6821b5e781380d162f18a72 Mon Sep 17 00:00:00 2001 From: Justus Winter <4winter@informatik.uni-hamburg.de> Date: Tue, 8 Apr 2014 11:21:50 +0200 Subject: remove exec_filename.patch --- debian/patches/exec_filename.patch | 1122 ------------------------------------ debian/patches/series | 1 - 2 files changed, 1123 deletions(-) delete mode 100644 debian/patches/exec_filename.patch (limited to 'debian') 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 - -@@ -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 -- cgit v1.2.3