summaryrefslogtreecommitdiff
path: root/debian/patches/exec_filename_exec.patch
diff options
context:
space:
mode:
Diffstat (limited to 'debian/patches/exec_filename_exec.patch')
-rw-r--r--debian/patches/exec_filename_exec.patch338
1 files changed, 338 insertions, 0 deletions
diff --git a/debian/patches/exec_filename_exec.patch b/debian/patches/exec_filename_exec.patch
new file mode 100644
index 00000000..41b66a82
--- /dev/null
+++ b/debian/patches/exec_filename_exec.patch
@@ -0,0 +1,338 @@
+From 011df9d35eb68132cdb14a0f55e2435375e2cfce Mon Sep 17 00:00:00 2001
+From: Emilio Pozuelo Monfort <pochu27@gmail.com>
+Date: Wed, 26 May 2010 00:15:37 +0200
+Subject: [PATCH 1/3] Add a new exec_exec_file_name RPC
+
+* hurd/exec.defs (exec_exec_file_name): New RPC.
+(exec_exec): Label as deprecated.
+* doc/hurd.texi: Updated.
+* exec/exec.c (S_exec_exec_file_name): New function.
+(S_exec_exec): Label as deprecated.
+(do_exec): Add argument.
+* exec/hashexec.c (check_hashbang): Add argument.
+Don't guess the file name if file_name_exec is set.
+* exec/priv.h (check_hashbang): Add argument.
+---
+ doc/hurd.texi | 8 ++++----
+ exec/exec.c | 50 +++++++++++++++++++++++++++++++++++++++++++++-----
+ exec/hashexec.c | 18 ++++++++++++------
+ exec/priv.h | 4 +++-
+ hurd/exec.defs | 19 +++++++++++++++++--
+ 5 files changed, 81 insertions(+), 18 deletions(-)
+
+Index: hurd-debian/doc/hurd.texi
+===================================================================
+--- hurd-debian.orig/doc/hurd.texi 2012-06-03 20:17:54.000000000 +0000
++++ hurd-debian/doc/hurd.texi 2012-06-05 04:32:07.000000000 +0000
+@@ -102,7 +102,7 @@
+ 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
+@@ -2770,14 +2770,14 @@
+ 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
+Index: hurd-debian/exec/exec.c
+===================================================================
+--- hurd-debian.orig/exec/exec.c 2012-06-03 17:08:36.000000000 +0000
++++ hurd-debian/exec/exec.c 2012-06-05 04:19:51.000000000 +0000
+@@ -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.
+@@ -1357,6 +1357,7 @@
+ 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,
+@@ -1452,7 +1453,7 @@
+ {
+ /* 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,
+@@ -2055,6 +2056,7 @@
+ return e.error;
+ }
+
++/* Deprecated. */
+ kern_return_t
+ S_exec_exec (struct trivfs_protid *protid,
+ file_t file,
+@@ -2071,6 +2073,44 @@
+ 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;
+
+@@ -2111,7 +2151,7 @@
+ trivfs_protid_portclasses[0]);
+ if (protid)
+ {
+- err = do_exec (file, oldtask, 0,
++ err = do_exec (file, oldtask, 0, filename,
+ argv, argvlen, argv_copy,
+ envp, envplen, envp_copy,
+ dtable, dtablesize, dtable_copy,
+@@ -2158,7 +2198,7 @@
+ /* 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,
+Index: hurd-debian/exec/hashexec.c
+===================================================================
+--- hurd-debian.orig/exec/hashexec.c 2012-06-03 17:08:36.000000000 +0000
++++ hurd-debian/exec/hashexec.c 2012-06-05 04:32:38.000000000 +0000
+@@ -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 @@
+ 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 @@
+ 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 @@
+ 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),
+Index: hurd-debian/exec/priv.h
+===================================================================
+--- hurd-debian.orig/exec/priv.h 2012-06-03 17:08:36.000000000 +0000
++++ hurd-debian/exec/priv.h 2012-06-05 03:36:44.000000000 +0000
+@@ -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.
+@@ -36,6 +37,7 @@
+ #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
+@@ -171,6 +173,7 @@
+ 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,
+Index: hurd-debian/hurd/exec.defs
+===================================================================
+--- hurd-debian.orig/hurd/exec.defs 2012-06-03 17:08:36.000000000 +0000
++++ hurd-debian/hurd/exec.defs 2012-06-03 20:17:55.000000000 +0000
+@@ -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 @@
+
+ INTR_INTERFACE
+
++/* Deprecated: use exec_exec_file_name instead. */
+ routine exec_exec (
+ execserver: file_t;
+ file: mach_port_send_t;
+Index: hurd-debian/hurd/exec_experimental.defs
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ hurd-debian/hurd/exec_experimental.defs 2012-06-03 20:17:55.000000000 +0000
+@@ -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);
++
+Index: hurd-debian/exec/Makefile
+===================================================================
+--- hurd-debian.orig/exec/Makefile 2012-06-03 17:08:36.000000000 +0000
++++ hurd-debian/exec/Makefile 2012-06-05 03:39:06.000000000 +0000
+@@ -23,7 +23,7 @@
+ SRCS = exec.c main.c hashexec.c hostarch.c \
+ $(gzip-sources) $(bzip2-sources)
+ OBJS = main.o hostarch.o exec.o hashexec.o \
+- execServer.o exec_startupServer.o \
++ execServer.o exec_startupServer.o exec_experimentalServer.o \
+ $(gzip-objects) $(bzip2-objects)
+ gzip-sources = unzip.c util.c inflate.c
+ gzip-objects = $(gzip-sources:%.c=%.o)
+@@ -37,6 +37,7 @@
+ OTHERLIBS = -lpthread
+
+ exec-MIGSFLAGS = -imacros $(srcdir)/execmutations.h
++exec_experimental-MIGSFLAGS = -imacros $(srcdir)/execmutations.h
+
+ include ../Makeconf
+
+Index: hurd-debian/exec/main.c
+===================================================================
+--- hurd-debian.orig/exec/main.c 2012-06-03 17:08:36.000000000 +0000
++++ hurd-debian/exec/main.c 2012-06-05 01:28:09.000000000 +0000
+@@ -58,9 +58,11 @@
+ exec_demuxer (mach_msg_header_t *inp, mach_msg_header_t *outp)
+ {
+ extern int exec_server (mach_msg_header_t *inp, mach_msg_header_t *outp);
++ extern int exec_experimental_server (mach_msg_header_t *inp, mach_msg_header_t *outp);
+ extern int exec_startup_server (mach_msg_header_t *, mach_msg_header_t *);
+ return (exec_startup_server (inp, outp) ||
+ exec_server (inp, outp) ||
++ exec_experimental_server (inp, outp) ||
+ trivfs_demuxer (inp, outp));
+ }
+