This fixes the following test case: mkdir testy echo '#! /bin/bash' > testy/prog echo 'printf "%s\n" "$0"' >> testy/prog chmod +x testy/prog PATH=$(pwd)/testy /bin/rpctrace -E PATH=/usr/bin:/bin -o /dev/null prog
Before this patch, the output is: /bin/bash: prog: No such file or directory After this patch, the output is similar to: /home/kalle/testy/prog * utils/rpctrace.c (traced_spawn): Get prefixed_name from file_name_path_lookup and pass it to _hurd_exec_file_name. --- Samuel Thibault <sthiba...@debian.org> writes: > It seems simple enough that it's not copyrightable, could you send a > patch? (english phrasing can always have ambiguity issues...) Here is the patch I last built. It fixes both test cases. However, I wrote the commit message before finding the shorter test case and filing the bug. Perhaps one should replace the lengthy description with just a DEP-3 "Bug-Debian" header. https://www.gnu.org/prep/maintain/maintain.html#Legally-Significant says a series of minor changes can become significant. I list my previously applied patches so that you have the correct information for your decision: commit 52d0590bca46d1368a6c5588d214e3724ebad358 diffstat (+7 -4) excluding ChangeLog, which was not from me posted to 39...@bugs.debian.org (deleted) on 1999-07-01 "hurd: /libexec/rc waits for /tmp/* translators" applied on 1999-07-01 commit 9e84be3cabcdd988f4c4af9f0794d0ba2d6929c1 diffstat (+1 -1) posted to http://bugs.debian.org/47382 on 1999-10-14 "libdiskfs/opts-std-startup.c (parse_startup_opt): TOGGLE never clears the variable" applied on 1999-10-14 commit 0e0bcad3e157579dbeafec933ac6ccbc00a515a3 diffstat (+1 -1) posted to http://bugs.debian.org/62557 on 2000-04-17 "[patch] #! doubles first character of argument" applied on 2000-07-20 commit ca5b01f538c122dc1f0e989f5703c75b8cf8ca3a "rpctrace: Print beyond '\0' in MACH_MSG_TYPE_CHAR." diffstat (+2 -1) posted to bug-hurd on 2016-08-23 applied on 2016-08-23 utils/rpctrace.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/utils/rpctrace.c b/utils/rpctrace.c index 95ff124..10843bc 100644 --- a/utils/rpctrace.c +++ b/utils/rpctrace.c @@ -1622,8 +1622,9 @@ traced_spawn (char **argv, char **envp) task_t traced_task; struct sender_info *ti; struct receiver_info *receive_ti; + char *prefixed_name; file_t file = file_name_path_lookup (argv[0], getenv ("PATH"), - O_EXEC, 0, 0); + O_EXEC, 0, &prefixed_name); if (file == MACH_PORT_NULL) error (1, errno, "command not found: %s", argv[0]); @@ -1664,7 +1665,8 @@ traced_spawn (char **argv, char **envp) 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); + err = _hurd_exec_file_name (traced_task, file, prefixed_name ?: *argv, + argv, envp); #else err = _hurd_exec (traced_task, file, argv, envp); #endif @@ -1675,6 +1677,7 @@ traced_spawn (char **argv, char **envp) cannot die and hence our TRACED_TASK ref cannot have been released. */ mach_port_deallocate (mach_task_self (), task_wrapper); + free (prefixed_name); return pid; } -- 2.6.4