diff options
Diffstat (limited to 'debian/patches/exec_filename_exec.patch')
-rw-r--r-- | debian/patches/exec_filename_exec.patch | 338 |
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)); + } + |