diff options
Diffstat (limited to 'debian/patches/exec_filename0004-This-patch-is-an-amendment-of-exec_filename_exec.pat.patch')
| -rw-r--r-- | debian/patches/exec_filename0004-This-patch-is-an-amendment-of-exec_filename_exec.pat.patch | 151 |
1 files changed, 0 insertions, 151 deletions
diff --git a/debian/patches/exec_filename0004-This-patch-is-an-amendment-of-exec_filename_exec.pat.patch b/debian/patches/exec_filename0004-This-patch-is-an-amendment-of-exec_filename_exec.pat.patch deleted file mode 100644 index cdec2718..00000000 --- a/debian/patches/exec_filename0004-This-patch-is-an-amendment-of-exec_filename_exec.pat.patch +++ /dev/null @@ -1,151 +0,0 @@ -From b3d925b3ce298a5444992b0c3a1c903ee65c89d9 Mon Sep 17 00:00:00 2001 -From: Justus Winter <4winter@informatik.uni-hamburg.de> -Date: Sun, 13 Sep 2015 14:06:59 +0200 -Subject: [PATCH hurd 4/4] This patch is an amendment of - exec_filename_exec.patch. - -If file_name_exec is not given, check_hashbang will try to locate the -file. If argv[0] contains a '/', the file path is assumed to be -absolute and it will try to open the file. Otherwise, the file is -searched in the PATH. In either case, the resulting file identity port -is compared to the identity port of the original file handle passed to -check_hashbang. - -exec_filename_exec.patch explicitly provides the script files path in -file_name_exec. According to the comment, if this path is provided, it -is assumed to be the path to the script file and no attempt at -locating the script file is done. However, the identity ports are -still compared. This cannot succeed if fakeroot or chroot is used, -because the process doing the exec and thus the initial file lookup is -running in the chrooted environment, while the exec server is not. - -Fix this by skipping the identity test if file_name_exec is provided. - -* exec/hashexec.c (check_hashbang): Skip the file identity test if the - file_name_exec is provided. ---- - exec/hashexec.c | 93 +++++++++++++++++++++++++++++++-------------------------- - 1 file changed, 51 insertions(+), 42 deletions(-) - -diff --git a/exec/hashexec.c b/exec/hashexec.c -index c971279..c2eda5b 100644 ---- a/exec/hashexec.c -+++ b/exec/hashexec.c -@@ -231,11 +231,12 @@ check_hashbang (struct execdata *e, - else if (! (flags & EXEC_SECURE)) - { - /* Try to figure out the file's name. If FILE_NAME_EXEC -- is not NULL, then it's the file's name. Otherwise we -- guess that if ARGV[0] contains a slash, it might be -- the name of the file; and that if it contains no slash, -- looking for files named by ARGV[0] in the `PATH' -- environment variable might find it. */ -+ is not NULL and not the empty string, then it's the -+ file's name. Otherwise we guess that if ARGV[0] -+ contains a slash, it might be the name of the file; -+ and that if it contains no slash, looking for files -+ named by ARGV[0] in the `PATH' environment variable -+ might find it. */ - - error_t error; - char *name; -@@ -271,51 +272,59 @@ check_hashbang (struct execdata *e, - return err; - } - -- error = io_identity (file, &fileid, &filefsid, &fileno); -- if (error) -- goto out; -- mach_port_deallocate (mach_task_self (), filefsid); -- -- if (memchr (argv, '\0', argvlen) == NULL) -- { -- name = alloca (argvlen + 1); -- bcopy (argv, name, argvlen); -- name[argvlen] = '\0'; -- } -- else -- name = argv; -- - if (file_name_exec && file_name_exec[0] != '\0') -- error = lookup (name = file_name_exec, 0, &name_file); -- else if (strchr (name, '/') != NULL) -- error = lookup (name, 0, &name_file); -- else if ((error = hurd_catch_signal -- (sigmask (SIGBUS) | sigmask (SIGSEGV), -- (vm_address_t) envp, (vm_address_t) envp + envplen, -- &search_path, SIG_ERR))) -- name_file = MACH_PORT_NULL; -- -- if (!error && name_file != MACH_PORT_NULL) -+ name = file_name_exec; -+ else - { -- mach_port_t id, fsid; -- ino_t ino; -- error = io_identity (name_file, &id, &fsid, &ino); -- mach_port_deallocate (mach_task_self (), name_file); -- if (!error) -+ /* Try to locate the file. */ -+ error = io_identity (file, &fileid, &filefsid, &fileno); -+ if (error) -+ goto out; -+ mach_port_deallocate (mach_task_self (), filefsid); -+ -+ if (memchr (argv, '\0', argvlen) == NULL) - { -- mach_port_deallocate (mach_task_self (), fsid); -- mach_port_deallocate (mach_task_self (), id); -+ name = alloca (argvlen + 1); -+ bcopy (argv, name, argvlen); -+ name[argvlen] = '\0'; - } -- if (!error && id == fileid) -+ else -+ name = argv; -+ -+ if (strchr (name, '/') != NULL) -+ error = lookup (name, 0, &name_file); -+ else if ((error = hurd_catch_signal -+ (sigmask (SIGBUS) | sigmask (SIGSEGV), -+ (vm_address_t) envp, (vm_address_t) envp + envplen, -+ &search_path, SIG_ERR))) -+ name_file = MACH_PORT_NULL; -+ -+ /* See whether we found the right file. */ -+ if (!error && name_file != MACH_PORT_NULL) - { -- file_name = name; -- free_file_name = free_name; -+ mach_port_t id, fsid; -+ ino_t ino; -+ error = io_identity (name_file, &id, &fsid, &ino); -+ mach_port_deallocate (mach_task_self (), name_file); -+ if (!error) -+ { -+ mach_port_deallocate (mach_task_self (), fsid); -+ mach_port_deallocate (mach_task_self (), id); -+ if (id != fileid) -+ error = 1; -+ } - } -- else if (free_name) -- free (name); -+ -+ mach_port_deallocate (mach_task_self (), fileid); - } - -- mach_port_deallocate (mach_task_self (), fileid); -+ if (!error) -+ { -+ file_name = name; -+ free_file_name = free_name; -+ } -+ else if (free_name) -+ free (name); - } - - if (file_name == NULL) --- -2.1.4 - |
