Patch Name: PHCO_16075 Patch Description: s700_800 10.10 POSIX shell cumulative patch Creation Date: 98/07/31 Post Date: 98/08/21 Hardware Platforms - OS Releases: s700: 10.10 s800: 10.10 Products: N/A Filesets: OS-Core.UX-CORE OS-Core.CORE-ENG-A-MAN Automatic Reboot?: No Status: General Superseded Critical: No Path Name: /hp-ux_patches/s700_800/10.X/PHCO_16075 Symptoms: PHCO_16075: 1. Posix shell goes to infinite loop by receiving signal. 2. Posix shell removes the heredoc temporary files before they are read. 3. Posix shell does not handle command substitution of variables of length 2047, 3071, etc. correctly. When a variable is assigned a string of length equal to 2047/3071/..., the result of command substitution using this variable retains only the last 1023 bytes of the variable. 4. Posix subshell exits prematurely on a uniprocessor. When posix shell is executed from a script on a uniprocessor, the shell exits by itself, without the user typing an explicit . 5. Values of variables initialized as a prefix to invoking a script, are lost inside the script. The following commands loose the value of TERM inside the script. /usr/bin/sh "TERM=450 ./script" or /usr/bin/sh -c "TERM=450 ./script" where script just echos the value of TERM. The output from the above commands is not 450 as expected, but the value of TERM before invoking the command. 6. Posix shell does not wait for zombies while in vi/emacs input mode. When in vi/emacs input mode, processes are seen in the process list even after the background jobs terminate. They disappear once an is input on the terminal that started the job. 7. Problem with set -e in ksh: When set -e is on, ksh does not exit on encountering error while expanding the word list in a for statement. This happens even in a case statement and a pipe list. Scripts like the following do not exit on error. set -e for i in `sort a_non_existant_file` do echo Hello $i done echo "return code is " $? " -> Should not display this." 8. Shell dumps core during command substitution if stdin is closed. PHCO_10720: 1. When sh-posix sees history file (using old internal magic cookies) of pre-10.10 release, it simply unlinks (discards) that history file. 2. The test command fails even when supplementary group permission is present. 3. If shell scripts having execute permission set and does not have read permission, when executed, it starts spawning new copies of the script until the process table fills. PHCO_10067: 1) Certain shell scripts does not work correctly when executed by posix shell when LANG set to multibyte character set. Adding some comments or empty lines sometimes solve the problem. 2) When sh-posix is executing a process in the foreground and the terminal is resized, then after the completion of foreground process, the LINES and COLUMNS environment variables are not updated. PHCO_9226: 1) While using in-line command editing, characters would sometimes appear that had not been typed by the user, most commonly ^B. Also, in editing long history lines, especially near the end of the lines, garbage characters would appear and the line couldn't be edited properly. 2) Posix shell when invoked with -c or called by the system() library call did not read commands from $ENV file. 3) When Posix shell scripts were run with sh -c or system() calls, environment variables were being set or changed incorrectly. E.g. sh -c "VAR=x a.out; echo \$VAR" should echo a blank, but instead echoes "x" because VAR was changed in the parent's environment. 4) In Posix shell scripts run with sh -c or system() calls and including embedded "here" documents, temporary files (/tmp/sh?????.?) were not removed upon completion. E.g. sh -c "cat <<= hello =" left a file (/tmp/sh?????.?). PHCO_8784: 1) A trap set within a function has no effect after the function returns. For example, trap 'echo exiting' EXIT f() { trap 'echo alternate' EXIT } f will produce output: alternate exiting Correct output for a POSIX compliant shell is: alternate 2) exit called from within a sourced file ( . file ) from within a function exits the sourced file, but not the shell. For example, if file t1 contains: f() { . ./t2 } f echo should not get here and file t2 contains exit Output is "should not get here", but this script should produce no output. 3) Some builtin commands cause the shell to exit when the command contains a syntax error. For example, ( fc -e ; echo code = $? ; exit 0 ) ; echo $? should output: sh: fc: Specify a parameter with this command. code = 1 0 but instead produces: sh: fc: Specify a parameter with this command. 1 4) When a here-document is used on the left side of a pipeline that is put into the background, the shell sometimes fails to open temporary files. For example, cat < is input on the terminal that started the job. 7) If set -e is ON, ksh should exit on encountering errors during processing the word list in a for statement, and case statement. When the last command in a pipe list fails also, it should exit if set -e is on. Currently it is not happening. Scripts like the following should exit on error. set -e for i in `sort a_non_existant_file` do echo Hello $i done echo "return code is " $? " -> Should not display this." 8) Shell dumps core during command substitution if stdin is closed. PHCO_10720: 1) Since the internal magic cookies (H_UNDO & H_CMDNO) used in history file were valid multibyte characters, the cookies were changed to and hence aviod ambiguity when a history file is read in multibyte locales, the old history files were simply discarded. 2) The code segment that checks the supplementary group permissions for the test command was not included for compilation. And hence the test command failed even when supplementary group permission was present. 3) If shell scripts having execute permission set and do not have read permission, when executed, start spawning new copies of the script without considering the value returned by open(O_RDONLY). PHCO_10067: 1) When it works with multibyte characters, it incorrectly reads characters from the shell script file when multibyte characters lies in the buffer boundary. This results in, shell arbitrarily reporting errors, when parsing. 2) Since SIGWINCH is posted only to foreground process group, the resize won't be notified to the sh-posix. So, sh-posix before displaying next prompt has to check for any change in the terminal information with respect to previous height and width information and if any change is found, the LINES and COLUMNS variables are updated. PHCO_9226: 1) While using in-line command editing, untyped characters would sometimes appear, most often ^B. These occurred most typically when very long command lines had been created. Also, in editing long history lines, especially near the end of the lines, garbage characters would appear and the line couldn't be edited properly. 2) Posix shell when invoked with -c or called by the system() library call did not read commands from $ENV file. The $ENV file is executed at the beginning of each shell invocation. This was not being done for "-c" or system() usage. 3) When using sh -c "command" or the system() library call, any shell variables assignment made as a prefix to a command would remain in the environment for subsequent commands. 4) When using sh -c "command" or the system() library call with a here-doc, temporary files (/tmp/sh?????.?) were not being removed from /tmp. PHCO_8784: 1) A trap set within a function has no effect after the function returns. In a POSIX compliant shell, a trap is in effect until explicitly changed by another trap command. Entering or returning from a function should have no effect on trap actions. The shell was incorrectly saving the trap actions on entry to a function and restoring them to the caller's values upon returning. 2) exit called from within a sourced file ( . file ) from within a function exits the sourced file, but not the shell. Since a sourced file is executed in the current environment, an exit should cause the shell to terminate. Instead, the exit acts like a return in the function. 3) Some builtin commands cause the shell to exit when the command contains a syntax error. Only special builtin commands (those marked with daggers on the manpage, e.g. trap) should cause the shell to exit. Regular builtin commands (e.g., cd and fc) should display an error and return a non-zero exit code, but the shell script should continue with the command immediately following. 4) When a here-document is used on the left side of a pipeline that is put into the background, the shell sometimes fails to open temporary files. A race condition exists that sometimes causes the shell to delete its temporary files before it has read them. PHCO_8577: shell dumps core on 'sh -c "a | b"' shell dumps core when here-doc is part of command subststition posix shell cd -P and pwd -P can fail when current directory path includes symbolic links where the link starts with ../ pwd -P can return a path that does not exist. PHCO_7860: port fixes from 10.20 for VSC4.1.5 read 18. PHCO_7499: Fix postremove script problem in PHCO_7330 PHCO_7330: Segmentation error after running SG PHCO_6820: assertion read 18 should pass the vsc4 tests PHCO_6693: posix sh pattern match does not work. SR: 1653264812 1653266940 5003424754 5003417931 5003404186 1653236851 1653240390 1653210948 5003341651 5003338087 5003331280 5003335273 1653182162 5003331256 5003333450 5003327981 1653172619 1653135228 4701328849 5000714691 4701316042 5003287284 1653177865 1653149930 5003315135 5003338046 5003340166 1653206532 5003343038 Patch Files: /usr/lib/nls/msg/C/psh.cat /usr/bin/rsh /usr/bin/sh /sbin/sh /usr/share/man/man1.Z/sh-posix.1 what(1) Output: /usr/lib/nls/msg/C/psh.cat: None /usr/bin/rsh: Version M-11/16/88f $Revision: 76.16.1.41 $ PATCH_10_10: builtin.o echo.o macro.o msg.o cmd.o pr int.o service.o tilde.o xec.o main.o name.o adjust.o args.o arith.o assign.o assnum.o ca nnon.o chkid.o convert.o ctype.o defs.o edit .o emacs.o error.o expand.o fault.o findnod. o gettree.o growaray.o gsort.o history.o hpu x_rel.o io.o jobs.o linknod.o namscan.o optg et.o rjust.o stak.o strdata.o streval.o stri ng.o strmatch.o test.o unassign.o utos.o val up.o vi.o word.o 98/07/30 PATCH/10_10 PHCO_13917 $Revision: 76.162.1.14.1.60 $ /usr/bin/sh: Version M-11/16/88f $Revision: 76.16.1.41 $ PATCH_10_10: builtin.o echo.o macro.o msg.o cmd.o pr int.o service.o tilde.o xec.o main.o name.o adjust.o args.o arith.o assign.o assnum.o ca nnon.o chkid.o convert.o ctype.o defs.o edit .o emacs.o error.o expand.o fault.o findnod. o gettree.o growaray.o gsort.o history.o hpu x_rel.o io.o jobs.o linknod.o namscan.o optg et.o rjust.o stak.o strdata.o streval.o stri ng.o strmatch.o test.o unassign.o utos.o val up.o vi.o word.o 98/07/30 PATCH/10_10 PHCO_13917 $Revision: 76.162.1.14.1.60 $ /sbin/sh: Version M-11/16/88f $Revision: 76.16.1.41 $ PATCH/10_10 PHCO_13917 $Revision: 76.162.1.14.1.60 $ PATCH_10_10: builtin.o echo.o macro.o msg.o cmd.o pr int.o service.o tilde.o xec.o main_C.o name_ C.o adjust.o args.o arith.o assign.o assnum. o cannon.o chkid.o convert.o ctype.o defs.o edit.o emacs.o error.o expand.o fault.o find nod.o gettree.o growaray.o gsort.o history.o hpux_rel.o io.o jobs.o linknod.o namscan.o optget.o rjust.o stak.o strdata.o streval.o string.o strmatch.o test.o unassign.o utos.o valup.o vi.o word.o 98/07/30 /usr/share/man/man1.Z/sh-posix.1: None cksum(1) Output: 1521661560 5680 /usr/lib/nls/msg/C/psh.cat 1946876300 458752 /usr/bin/rsh 1946876300 458752 /usr/bin/sh 2922953060 380928 /sbin/sh 2816018987 44598 /usr/share/man/man1.Z/sh-posix.1 Patch Conflicts: None Patch Dependencies: s700: 10.10: PHCO_10721 s800: 10.10: PHCO_10721 Hardware Dependencies: None Other Dependencies: Since the POSIX sh(1) and the ksh(1) by default share the same history file it is advised to install the corresponding patches on all systems that access these. This is of particular interest in environments that mount home directories from a central NFS server. s700: 10.00: PHCO_10730 PHCO_10731 s700: 10.01: PHCO_10728 PHCO_10729 s700: 10.20: PHCO_10718 PHCO_10719 s800: 10.00: PHCO_10730 PHCO_10731 s800: 10.01: PHCO_10728 PHCO_10729 s800: 10.20: PHCO_10718 PHCO_10719 Supersedes: PHCO_6693 PHCO_6820 PHCO_7330 PHCO_7499 PHCO_7860 PHCO_8577 PHCO_8784 PHCO_9226 PHCO_10067 PHCO_10720 Equivalent Patches: None Patch Package Size: 930 KBytes Installation Instructions: Please review all instructions and the Hewlett-Packard SupportLine User Guide or your Hewlett-Packard support terms and conditions for precautions, scope of license, restrictions, and, limitation of liability and warranties, before installing this patch. ------------------------------------------------------------ 1. Back up your system before installing a patch. 2. Login as root. 3. Copy the patch to the /tmp directory. 4. Move to the /tmp directory and unshar the patch: cd /tmp sh PHCO_16075 5a. For a standalone system, run swinstall to install the patch: swinstall -x autoreboot=true -x match_target=true \ -s /tmp/PHCO_16075.depot 5b. For a homogeneous NFS Diskless cluster run swcluster on the server to install the patch on the server and the clients: swcluster -i -b This will invoke swcluster in the interactive mode and force all clients to be shut down. WARNING: All cluster clients must be shut down prior to the patch installation. Installing the patch while the clients are booted is unsupported and can lead to serious problems. The swcluster command will invoke an swinstall session in which you must specify: alternate root path - default is /export/shared_root/OS_700 source depot path - /tmp/PHCO_16075.depot To complete the installation, select the patch by choosing "Actions -> Match What Target Has" and then "Actions -> Install" from the Menubar. 5c. For a heterogeneous NFS Diskless cluster: - run swinstall on the server as in step 5a to install the patch on the cluster server. - run swcluster on the server as in step 5b to install the patch on the cluster clients. By default swinstall will archive the original software in /var/adm/sw/patch/PHCO_16075. If you do not wish to retain a copy of the original software, you can create an empty file named /var/adm/sw/patch/PATCH_NOSAVE. Warning: If this file exists when a patch is installed, the patch cannot be deinstalled. Please be careful when using this feature. It is recommended that you move the PHCO_16075.text file to /var/adm/sw/patch for future reference. To put this patch on a magnetic tape and install from the tape drive, use the command: dd if=/tmp/PHCO_16075.depot of=/dev/rmt/0m bs=2k Special Installation Instructions: None