Patch Name: PHCO_22536 Patch Description: s700_800 10.20 POSIX shell cumulative patch Creation Date: 00/11/02 Post Date: 00/12/21 Repost: 01/10/01 The patch documentation was modified to remove references to here-document related defects that are not fully addressed. The defects described in Service Request 1653182162 (DSDe430660), 1653238170 (DSDe440895), 1653264812 (DSDe443517) and 1653288449 (JAGaa67949) are not fully addressed in the patch so references to these defect fixes were removed from the patch documentation. Warning: 01/11/29 - This Non-Critical Warning has been issued by HP. - PHCO_22536 introduced behavior that may cause shell scripts utilizing the shell special built-in command 'eval' to abort prematurely. Depending on the shell script, this may cause unexpected results. - The expected behavior is that the shell may abort if the special built-in command 'eval' returns a syntax error, but not if another type of error is returned. PHCO_22536 causes the shell to abort if the 'eval' special built-in command returns any type of error. - If you utilize scripts that depend on the special built-in command 'eval' and this behavior is not acceptable, HP recommends removing PHCO_22536 from all systems on which these scripts are executed. The patch should also be removed from software depots used to install patches on these systems. - The previous patch, PHCO_19052, does not exhibit this same behavior. If you choose to remove PHCO_22536, to ensure as many known issues as possible are addressed HP recommends that PHCO_19052 be installed after these patches are removed. If PHCO_19052 was installed prior to PHCO_22536, it will automatically be restored when these patches are removed and it will not need to be reinstalled. - PHCO_22536 is included in the following Support Plus Patch Bundles: Jun 2001: XSW700GR1020,B.10.20.53.2 Jun 2001: XSW800GR1020,B.10.20.53.2 Sep 2001: XSW700GR1020,B.10.20.54.1 Sep 2001: XSW800GR1020,B.10.20.54.1 Hardware Platforms - OS Releases: s700: 10.20 s800: 10.20 Products: N/A Filesets: OS-Core.UX-CORE OS-Core.CORE-ENG-A-MAN Automatic Reboot?: No Status: General Superseded With Warnings Critical: No Path Name: /hp-ux_patches/s700_800/10.X/PHCO_22536 Symptoms: PHCO_22536: 1. sh-posix read does not set REPLY by default. 2. sh-posix gets SIGBUS when executing scripts. 3. sh-posix command buffer corrupted due to incorrect use of eval builtin. 4. dtterm exits on resizing of window for 12 times. 5. Using "print..\c" option results in displaying the incorrect prompt string. 6. The posix-sh can core dump if it receives SIGWINCH during startup. 7. sh uses /tmp for here documents - large shar files cannot unpack 8. POSIX shell can fail login attempts if history file cannot be trimmed 9. sh-posix dumps core with history in heterogenous environment. 10. sh-posix does not trap SIGHUP if received within a function 11. File globbing in sh-posix(1) fails for large files. PHCO_19052: 1. Posix shell can not keep the correct cursor position on multibyte locale. 2. Filename pattern match and case pattern match fail in posix shell. 4. Posix shell coredumps with script using many heredocs. 5. Posix shell does not handle SIGWINCH correctly while executing functions. PHCO_16734: 1. Posix shell dumps core during oracle installation. When non-interpreter scripts are executed through "sh -c", the shell dumps core at times. 2. Posix shell does not source a file a second time if the file that is being sourced, defines a function with the same name as the file. PHCO_16370: Posix shell command substitution in while list does not work as before. Behaviour of 10.20 posix shell seems to have changed from that of 10.10 posix shell. PHCO_16063: 2. Posix shell goes to infinite loop by receiving signal. 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. PHCO_15643: 1. 10.20 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 . 2. Posix shell displays wrong value for ulimit -Sc. PHCO_14180: 1. 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. 2. 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. 3. When posix shell encounters an invalid multibyte sequence in the input, it silently exits without notifying the user. PHCO_13661: Problem with set -e in sh-posix: When set -e is on, sh-posix 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." PHCO_13359: PHCO_10718: 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_10066: 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_9925: 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. PHCO_9227: 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_8785: 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 PHCO_8578: shell dumps core on 'sh -c "a | b"' shell dumps core when here-doc is part of command substitution 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. Defect Description: PHCO_22536: 1. When REPLY is typeset in a function, a new scope is created for REPLY. But, read was initializing the input to the old scope of the REPLY. As a result, when REPLY was examined in the function, it is seen to be not initialized with the input. Resolution: Now, read takes care to initialize the value to the new scope of REPLY. 2. sh-posix received a SIGBUS under the circumstances at the customer's site because a pointer in a union was accessed which was not initialized. Resolution: The fix is to test if the union was initialized as the type for which this pointer should be initialized properly, and to skip the code that tries to use it if not. 3. When eval is part of the last element of a pipe, and there is an error in the execution of eval builtin, the command buffer gets corrupted and the script which is expected to exit since eval is a special builtin, does not exit, but continues to execute. Resolution: The problem is resolved by checking for special builtins, while deciding to return to the script on error. If special builtin is being processed, then decide to exit the script. At this point, the command buffer is cleared, so that the next command is not corrupted. 4. /usr/bin/sh used to exit (thus closing terminal) when it encountered SIGWINCH 12 times continuously. Resolution: Now sh does not exit on receival of SIGWINCH continuously for 12 times. 5. In vi mode, Esc k followed by "print..\c" option results in displaying the incorrect prompt string, and also incorrect positioning of the cursor. This is due to the use of an incorrect buffer. Resolution: Necessary changes are made to the code by using a flag, to prevent the corruption of the prompt string. 6. The posix-sh dumps core during startup, if SIGWINCH is sent before the initialization of the environment by sh-posix. Resolution: Now SIGWINCH is held from being processed until the complete initialization of the environment is done by sh-posix. Once after the initilization process is completed, SIGWINCH is processed. 7. sh uses /tmp for creating temporary files for heredocs and sh does not find enough space in /tmp to store "here" document of large shar files. Resolution: Now sh is made to store heredocs in /var/tmp ( which is a much larger slice than /tmp ) if it exists, else it creates temporary files in /tmp slice. 8. When the history file size is more than 4K and the file is older than 10 minutes, sh gets into a loop while trimming the history file. trims the history file. Resolution: The resolution is to avoid this recursion. 9 When the command size in .sh_history file is greater than 5KB, sh-posix dumps core. This problem is due to an array buffer overflow. Resolution: Now this array allocation has been changed to dynamic allocation to fix the problem. 10. If SIGHUP is trapped and a SIGHUP signal received, sh-posix(1) exits after executing the trap. It should continue to run instead. Resolution: sh-posix(1) was deliberately exiting after executing the trap for SIGHUP. This part of the code has now been eliminated, so that it continues to execute. 11. File name generation in sh-posix(1) fails for large files. When ls and ll commands are used with wildcards from root directory to list large files (greater than 2 GB) residing in subdirectories, sh-posix(1) fails to find the files. Resolution: sh-posix(1) uses the regular system calls like lstat() to find files during wild card expansion. Inorder that this works correctly for large files, the corresponding large file interface like lstat64() needs to be used. PHCO_19052: 1. In posix shell, for multibyte locales, the combination of builtin commands echo and read do not maintain the correct cursor location. Under such circumstances, the input to read command is always displayed at the beginning of the line. Resolution: This problem is fixed now by making the shell remember the contents of the line and display it whenever the line is redrawn. As a result, the input to read command is displayed correctly after the previous contents of the line. 2. Filename pattern match and case pattern match fail in posix shell. Posix shell does not follow the collating order during filename pattern match and case pattern match. It incorrectly follows the values defined by the respective code set for the characters in the patterns. Resolution: The posix shell is now made to use collating order for the locales instead of the values defined by the codeset while parsing filename patterns and case patterns. 4. Posix shell dumps core while executing scripts having large number of heredocs. Resolution: Posix shell was accessing beyond the limits of an I/O structure which stored information about open files. This has been set right now. 5. Posix shell aborts on receipt of SIGWINCH while executing functions if the signal is not trapped by the script. Resolution: If a SIGWINCH is received when a function is being executed, posix shell now does not exit. The part of code which would make it exit has been removed. PHCO_16734: 1. Posix shell dumps core at times when executing non-interpreter scripts, i.e. scripts without a #! line in the beginning through "sh -c". The following program dumps core. doexec.c: main(argc,argv) int argc; char *argv[]; { /* Change dir. to a path with a very long name */ chdir("/temp/tempdir/443517/ksh/10.20/PATCH/ COMBINED/usr/share/man/man1.Z"); /* Execute a non-interpreter script thro' sh -c */ execl("/usr/bin/sh", "/usr/bin/sh", "-c", "/user/mindira/oracle/tmp/myscr"); puts("Ooops"); } myscr: echo HELLO 2. Posix shell allows only once to source a file that has a name identical to the name of a function contained in the file. Any subsequent attempt to source the same file nothing happens. Here is an example. $ more les echo executing from les file function les { echo les } $ . les /* works fine first time */ executing from les file $ . les /* doesn't work second time */ PHCO_16370: Behaviour of posix shell has changed in 10.20 from the 10.10 posix shell with respect to command substitution in while list. The following script behaves differently on a 10.10 and 10.20 HP-UX. #!/usr/bin/sh while `read line` do echo $line done < /etc/copyright On a 10.10 machine, the above script displays the contents of file /etc/copyright. On 10.20 the script displays the first line in the file and exits with error message - "./scr[2]: c)Copyright: not found." PHCO_16063: 2) Posix shell goes into an infinite loop by receiving a signal. If a signal is received when posix shell is received, the shell may go into infinite loop. 3) Posix shell does not handle command substitution of variables of length 2047, 3071, etc. correctly. In the following command, where variable "stuff" is assigned a string of length 2047, the contents of resulting string "str" will be the last 1023 bytes of "stuff". str=`echo $stuff` PHCO_15643: 1) 10.20 Posix subshell exits prematurely on a uniprocessor. On uniprocessor machines running one of 10.20, 10.10, 10.01 and 10.0 HP-UX'es, the subshell run through a script exits by itself without entering the exit routine. 2) Posix shell displays wrong value for ulimit -Sc. 'ulimit -Sc' command shows corefile size - 4290772993. The man page on sh-posix says that this is the number of 512-byte blocks in the size of core dumps. But getrlimit() shows the corefile size - 2147483646. 4290772993 * 512 = 2196875772420 differs from 2147483646... Moreover, it doesn't accept this number as input: $ ulimit -Sc 4290772993 sh: ulimit: The specified number is not valid for this command. This limitation is 4194303. PHCO_14180: 1) posix shell looses values of variables initialized as a prefix to invoking a script in a subshell. The following commands do not work as expected. /usr/bin/sh -c "TERM=450 ./script" and /usr/bin/sh "TERM=450 ./script" script: echo $TERM The output from the two commands should be 450, but it actually is the value of TERM variable that was before executing the command (Eg. xterm). 2) Posix shell does not reliably process SIGCLD when waiting for input. It ignores the SIGCLDs received when a background job terminates, while waiting for input in vi/emacs mode. As a result, the zombies are seen in the process list till an is input on the terminal that started the job. 3) When the input to posix shell has invalid multibyte sequence, it exits without notifying the user. PHCO_13661: If set -e is ON, sh-posix 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." PHCO_13359: PHCO_10718: 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_10066: 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_9925: 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. PHCO_9227: 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_8785: 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. PHCO_8578: 1) shell dumps core on 'sh -c "a | b"' 2) shell dumps core when here-doc is part of command subststition 3) posix shell cd -P and pwd -P can fail when current directory path includes symbolic links where the link starts with ../ 4) pwd -P can return a path that does not exist. SR: 8606156063 8606156760 8606147088 8606165046 8606126833 8606130237 8606113680 8606108349 1653298927 5003442533 1653306878 5003464628 1653245894 4701424424 4701413922 1653280933 1653239608 4701403345 5003427922 1653271627 1653266940 5003424754 5003417931 1653249557 5003404186 1653240390 5003341651 5003338087 5003331280 5003335273 5003331256 5003333450 5003327981 1653172619 1653135228 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: 78.16.1.67 $ PATCH_10_20: 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 00/11/02 PATCH-PHCO_18644 for 10.20; for 10.30, 11.x compatib ility libc.a_ID@@/main/r10dav/libc_dav/libc_ dav_cpe/9 /ux/core/libs/libc/archive_pa1/libc.a_ID Jul 8 1999 15:44:31 /usr/bin/sh: Version M-11/16/88f $Revision: 78.16.1.67 $ PATCH_10_20: 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 00/11/02 PATCH-PHCO_18644 for 10.20; for 10.30, 11.x compatib ility libc.a_ID@@/main/r10dav/libc_dav/libc_ dav_cpe/9 /ux/core/libs/libc/archive_pa1/libc.a_ID Jul 8 1999 15:44:31 /sbin/sh: Version M-11/16/88f $Revision: 78.16.1.67 $ PATCH-PHCO_18644 for 10.20; for 10.30, 11.x compatib ility libc.a_ID@@/main/r10dav/libc_dav/libc_ dav_cpe/9 /ux/core/libs/libc/archive_pa1/libc.a_ID Jul 8 1999 15:44:31 PATCH_10_20: 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 00/11/02 /usr/share/man/man1.Z/sh-posix.1: None cksum(1) Output: 3058491291 5701 /usr/lib/nls/msg/C/psh.cat 1175894443 495616 /usr/bin/rsh 1175894443 495616 /usr/bin/sh 1893243478 401408 /sbin/sh 2548107721 44955 /usr/share/man/man1.Z/sh-posix.1 Patch Conflicts: None Patch Dependencies: s700: 10.20: PHCO_10719 s800: 10.20: PHCO_10719 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.10: PHCO_10720 PHCO_10721 s800: 10.00: PHCO_10730 PHCO_10731 s800: 10.01: PHCO_10728 PHCO_10729 s800: 10.10: PHCO_10720 PHCO_10721 Supersedes: PHCO_8578 PHCO_8785 PHCO_9227 PHCO_9925 PHCO_10066 PHCO_10718 PHCO_13359 PHCO_13661 PHCO_14180 PHCO_15643 PHCO_16063 PHCO_16370 PHCO_16734 PHCO_19052 Equivalent Patches: PHCO_22537: s700: 11.00 s800: 11.00 Patch Package Size: 990 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_22536 5a. For a standalone system, run swinstall to install the patch: swinstall -x autoreboot=true -x match_target=true \ -s /tmp/PHCO_22536.depot By default swinstall will archive the original software in /var/adm/sw/patch/PHCO_22536. 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_22536.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_22536.depot of=/dev/rmt/0m bs=2k Special Installation Instructions: None