Module Name: src Committed By: christos Date: Mon Jan 4 03:00:24 UTC 2016
Modified Files: src/bin/sh: cd.c eval.c input.c redir.c redir.h Log Message: Don't leak redirected rescriptors to exec'ed processes. This is what ksh does, but bash does not. For example: $ cat test1 #!/bin/sh exec 6> out echo "test" >&6 sh ./test2 exec 6>&- $ cat test2 echo "test2" >&6 $ ./test1 ./test2: 6: Bad file descriptor This fixes by side effect the problem of the rc system leaking file descriptors 7 and 8 to all starting daemons: $ fstat -p 1359 USER CMD PID FD MOUNT INUM MODE SZ|DV R/W root powerd 1359 wd / 2 drwxr-xr-x 512 r root powerd 1359 0 / 63029 crw-rw-rw- null rw root powerd 1359 1 / 63029 crw-rw-rw- null rw root powerd 1359 2 / 63029 crw-rw-rw- null rw root powerd 1359 3* kqueue pending 0 root powerd 1359 4 / 64463 crw-r----- power r root powerd 1359 7 flags 0x80034<ISTTY,MPSAFE,LOCKSWORK,CLEAN> root powerd 1359 8 flags 0x80034<ISTTY,MPSAFE,LOCKSWORK,CLEAN> root powerd 1359 9* pipe 0xfffffe815d7bfdc0 -> 0x0 w Note fd=7,8 pointing to the revoked pty from the parent rc process. To generate a diff of this commit: cvs rdiff -u -r1.44 -r1.45 src/bin/sh/cd.c cvs rdiff -u -r1.110 -r1.111 src/bin/sh/eval.c cvs rdiff -u -r1.46 -r1.47 src/bin/sh/input.c cvs rdiff -u -r1.37 -r1.38 src/bin/sh/redir.c cvs rdiff -u -r1.16 -r1.17 src/bin/sh/redir.h Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.