Patch Name: PHCO_24699 Patch Description: s700_800 10.20 lpspool subsystem cumulative patch Creation Date: 01/08/09 Post Date: 01/08/21 Hardware Platforms - OS Releases: s700: 10.20 s800: 10.20 Products: N/A Filesets: PrinterMgmt.LP-SPOOL Automatic Reboot?: No Status: General Superseded Critical: No Path Name: /hp-ux_patches/s700_800/10.X/PHCO_24699 Symptoms: PHCO_24699: 1. rlpdaemon is not functioning as expected in certain cases. 2. Multiple lpscheds can be running simultaneously. 3. lp was sending a corrupted mail message. PHCO_22364: 1. If a printing request is cancelled, the other requests in the printer queue are not getting printed until another request is given to the queue. 2. rlp may hang indefinitely when the remote machine goes down and comes up. 3. The remote request with the user name having one or more spaces, is not getting processed. 4. rlpdaemon, lpstat, lp, cancel, disable, enable, rlpstat and rcancel have memory overflow. 5. When a request is transferred from a non BSD (Berkeley Software Distribution) printer to a remote BSD printer, the remote BSD printer gets disabled without printing the job. In case of BSD to remote non-BSD printer, the request is printed but the residual datafile remains on the system. 6. If rlpdaemon writes the messages (for eg: when lp or lpalt are invoked with -w option for remote printers) without stripping the control characters, some of these control characters can make the user's terminal behave abnormally. Some times the user terminal may be closed. 7. Data does not get printed when a remote request is given with a very long title. 8. When large number of requests (around 120-130) are given, sometimes the spooler stops printing requests in between. 9. lpadmin does not configure a remote printer properly if the length of printer name is exactly 14 characters. PHCO_18779: lpstat gives "Status received is corrupt message" with remote printers on Sun. PHCO_17713: 1. cancel(1) does not work with printer queue length==14 chars 2. datafiles not removed after an lpalt from PHCO_13133 onwards. 3. cancel(1) returns exit value of 0 even if failed w/ permission denied. 4. rlpdaemon lockfiles remain with FQDNs after patch PHCO_12894. PHCO_16724: kill -9 on interface script and other lp processes causes a corruption in the pstatus file entries. PHCO_16294: lpsched deadlocks on remote printers when remote system is down. PHCO_16106: lp(1) does not link data files to the SPOOL directory as the man page states. PHCO_14431: 1. LP spooler needs to support P405 and HP5000D640 model printers. 2. The value of LANG env variable is improperly passed to the model script PHCO_14029: 1. If you submit more than 52 files lp does not remove those above 52. 2. lpsched -v writes strange strings in log file if LANG is set. 3. lpsched -v intermittently stops by SIGSEGV in catgets if LANG is set. PHCO_13133: 1)incomplete lpstat output when -a/-p option used with printer name and class 2)After PHCO_11462, moving request with lpalt leaves data file in req dir PHCO_12894: 1. Jobs submitted to a LP remote printer that points to a "disabled" remote HPDPS printer are discarded. 2. When more than one jobs, whose job sequence numbers are the same, are simultaneously submitted from the same host to the same remote printer through RFC1179 protocol, rlpdaemon(1M) fails to spool the jobs on the remote system due to data/control file name collision. 3. All jobs from any HPDPS printers are spooled under the /usr/spool/lp/request/PDRequest by rlpdaemon(1M). This single PDRequest directory increases the chance of file name collision due to simultaneous job submission. PHCO_11462: 1. Cancelling a lp job with empty control file clears the whole queue. 2. Printer gets disabled on cancelling a printing job. PHCO_10891: 1. "lpstat -i -o" doesn't inhibit the reporting of the remote status if a HPDPS printer name is specified. This problem happens only when the HPDPS patch, PHCO_10608, is installed on the system. Because of this, CDE print manager doesn't work correctly for HPDPS printers. PHCO_10749: 1. LP-spool hang or qstatus corrupt when /var full log says:Bogus request 2. Parent lpsched hangs when lpalt is used to move a request. 3. Model scripts does not handle SIGTERM any more. 4. lpsched introduced 5 sec delay between prints at 10.20 PHCO_8488: 1. lpsched hangs under FIFO full condition 2. Printers go idle even when requests are present in the queue 3. Jobs not printed when remote host(IBM) immediately saps connection. 4. If a BSD system spooler sends a '\001' to rlp(1) after the control file has been sent, rlp(1) simply ignores the '\001' and removes the entry. 5. lp, cancel, and lpstat hang when forwarding jobs or requests to HPDPS. 6. Implicit requirement that a rlpdeamon client's remote printer name must be the same as its local pseudo name. Defect Description: PHCO_24699: 1. rlpdaemon is not functioning as expected in certain cases because of improper memory handling. Resolution: A new condition is added in the code to handle the problem. 2. In lpsched startup, there is a large window for a race condition that allows multiple lpscheds to start. Resolution: The fix is that ~lp/SCHEDLOCK file is opened and it is locking the file descriptor. If one lpsched is already running,the second/any next lpsched will not run as there is already lock being aquired by another process (which is already running) 3. A newline character was missing in lpsched mail text , due to which the mail mesage was getting corrupted when read through /usr/bin/mail. Resolution: The newline character '/n' has been added in the end of mail message for lp -m , so that messagees don't get corrupted with lp -m. PHCO_22364: 1. When a printing request is cancelled, there is no instruction for lpsched to continue processing other existing requests in the queue. Resolution: When the printing process is killed, an instruction is given to the scheduler to continue with the other requests in the spooler. 2. rlp sends a request to rlpdaemon and waits for the acknowledgement in read call on the socket. read() is waiting indefinitely even when the remote machine goes down without closing the socket. Resolution: SO_KEEPALIVE option is set for the socket so that if there is no response for 2 hours, the read() call returns with an error instead of waiting indefinitely. 3. The remote request with the username having spaces is not getting processed because of the incorrect parsing of arguments in rlpdaemon. Resolution: It is made sure that the parsing of arguments is done correctly and the request is processed. 4. Memory fault in the commands is because of the incorrect handling of buffer for error message. Resolution: The buffer size is increased for the error message. If the argument is longer than the allocated buffer size, it is truncated before printing the error message. 5. When the requests are transfered from non-BSD printer to remote BSD printer, datafilename has been renamed incorrectly and the request remains unprocessed. When the request is transfered from BSD printer to remote non-BSD printer, the request gets processed but the datafile, which is named incorrectly, remains in the request directory. Resolution: The fix is to add more conditions so that the datafile is renamed appropriately while the request is being transfered from BSD to non-BSD printer and vise-versa. 6. rlpdaemon does not filter control characters. Because of this, some control characters may turn the user's terminal insane. Resolution: Control characters are replaced with blanks in rlpdaemon. 7. Data is not getting printed due to control file corruption in the remote machine. This is because of the buffer overflow for the array which stores title in rlpdaemon. Resolution: The array size which contains the title on the remote printer is increased to hold the title length specified in the RFC1179. 8. Spooler stops processing requests in between because, the file which contains the request information (outputq) is not getting compressed when a large number of requests are given. This occurs because of the missing return statement in a function. Resolution: The return statement is added in the appropriate function. PHCO_18779: According to RFC-1179, the messages from the remote printer daemon could be anything, but the starting and ending of these messages should adhere to the correct protocol. Portions where unrequired checks are being made to the messages resulting in the "Status corrupt" messages have to be removed. Resolution: Unrequired checking in rlpstat(1) has been removed to avoid the "Status corrupt" message. Any message got from the remote printer daemon is printed as is got. PHCO_17713: 1. Since the sequence numbers of BSD(3 digit) and for non BSD (4 digits) are not in proper format, removal of data files results in a failure after an lpalt operation from PHCO_13133 onwards. 2. As the array size for the printer name was not uniform, cancel(1) of requests greater than 14 characters was resulting in a failure. 3. cancel(1) does not set and pass on the correct exit values. As a result of this, the exit value remains "0" even after the command fails. 4. rlpdaemon lockfiles remain with FQDNs after patch PHCO_12894 Resolution: 1. The formatting of the seqno while copying them onto a buffer has been corrected to take care of BSD and non BSD sequence numbers. 2. The value of DESTMAX denoting the Max chracters allowed for a printer name has been made uniform to accept 14 character names. 3. The exit value in cancel(1) is now set and passed on properly to ensure the correct value is got in case of the command failure. 4. Check for the lock before initialising the lckfile string. PHCO_16724: During spooler startup, the write offset in the pstatus file was not updated properly. PHCO_16294: lpsched used to hang intermittently for remote requests when remote printer/system was down. PHCO_16106: lp(1) was not linking files to the SPOOL directory as the complete path of the directory was not specified. PHCO_14431: 1. The model scripts corresponding to P405, HP5000D640 were not there. 2. Since the LANG variable was incorrectly passed to the control file, the "Invalid options" error message was appearing on the banner. PHCO_14029: 1. Spooler was only deleting the data files whose names start with "d". 2. with LANG set, lpsched was improperly handling repeated calls to catgets(). 3. Due to sharing of same fd's of catalogue message files between parent and child processes in lpsched, a SIGSEGV used to cause coredumps intermittently. PHCO_13133: 1) lpstat was not giving the correct output for certain sequences of printer/class lists due to incorrect referencing of both pstatus and qstatus files. 2) lpsched was not clearing the data files present in the spooler directory due to descripencies in the names of these files, caused by the lpalt. PHCO_12894: 1. Jobs submitted to a LP remote printer that points to a "disabled" remote HPDPS printer are discarded. 2. When more than one jobs, whose job sequence numbers are the same, are simultaneously submitted from the same host to the same remote printer through RFC1179 protocol, rlpdaemon(1M) fails to spool the jobs on the remote system due to data/control file name collision. 3. All jobs from any HPDPS printers are spooled under the /usr/spool/lp/request/PDRequest by rlpdaemon(1M). This single PDRequest directory increases the chance of file name collision due to simultaneous job submission. PHCO_11462: 1. Cancelling a lp job with empty control file clears the whole queue. 2. Printer gets disabled on cancelling a printing job. PHCO_10891: 1. "lpstat -i -o" doesn't inhibit the reporting of the remote status if a HPDPS printer name is specified. This problem happens only when the HPDPS patch, PHCO_10608, is installed on the system. Because of this, CDE print manager doesn't work correctly for HPDPS printers. PHCO_10749: 1. LP-spool hang or qstatus corrupt when /var full log says:Bogus request 2. Parent lpsched hangs when lpalt is used to move a request. 3. Model scripts does not handle SIGTERM any more. 4. lpsched introduced 5 sec delay between prints at 10.20 PHCO_8488: 1. lpsched hangs under FIFO full condition 2. Printers go idle even when requests are present in the queue 3. Jobs not printed when remote host(IBM) immediately snaps connection. 4. If a BSD system spooler sends a '\001' to rlp(1) after the control file has been sent, rlp(1) simply ignores the '\001' and removes the entry. 5. lp, cancel, and lpstat hang when forwarding jobs or requests to HPDPS. 6. Implicit requirement that a rlpdeamon client's remote printer name must be the same as its local pseudo name. SR: 8606201567 8606197229 8606197042 8606170526 8606154599 8606106120 8606125159 8606152584 8606155796 8606155795 8606110628 8606127627 8606103553 8606104672 1653298620 4701387050 4701383828 1653245696 1653248195 1653248153 1653235002 1653232694 1653233296 5003347351 4701356097 4701350769 5003359760 1653198119 1653203109 1653208504 5003330688 1653172023 4701323964 5003318188 4701334128 1653261974 4701392043 5003428094 5003439273 4701397182 5003455048 Patch Files: /usr/lib/lp/model/HPP405 /usr/lib/lp/model/PCL4 /usr/lib/lp/model/PCL5 /usr/lib/lp/model/colorlaserjet /usr/lib/lp/model/deskjet1600CM /usr/lib/lp/model/hp5000c30 /usr/lib/lp/model/hpC1208a /usr/lib/lp/model/hpd640 /usr/lib/lp/model/laserjet /usr/lib/lp/model/laserjet4 /usr/lib/lp/model/laserjet4Si /usr/lib/lp/model/laserjet4v /usr/lib/lp/model/laserjet5Si /usr/lib/lp/model/laserjetIIISi /usr/lib/lp/model/paintjet /usr/lib/lp/model/paintjetXL300 /usr/lib/lp/model/rmodel /usr/bin/cancel /usr/bin/disable /usr/bin/enable /usr/bin/lpstat /usr/sbin/lpmove /usr/bin/lp /usr/bin/lpalt /usr/lbin/rwrite /usr/sbin/lpadmin /usr/sbin/lpsched /usr/sbin/rcancel /usr/sbin/rlpdaemon /usr/sbin/rlpstat /usr/sbin/rlp /usr/lib/nls/msg/C/lp.cat what(1) Output: /usr/lib/lp/model/HPP405: None /usr/lib/lp/model/PCL4: None /usr/lib/lp/model/PCL5: $Header: PCL5,v 76.2.1.4 98/04/27 19:20:27 ssa Exp $ /usr/lib/lp/model/colorlaserjet: $Header: PCL5,v 76.2.1.4 98/04/27 19:20:27 ssa Exp $ /usr/lib/lp/model/deskjet1600CM: $Header: PCL5,v 76.2.1.4 98/04/27 19:20:27 ssa Exp $ /usr/lib/lp/model/hp5000c30: $Header: PCL5,v 76.2.1.4 98/04/27 19:20:27 ssa Exp $ /usr/lib/lp/model/hpC1208a: None /usr/lib/lp/model/hpd640: $Header: hpd640,v 82.1 98/02/24 15:51:13 ssa Exp $ HP-UX 10.x /usr/lib/lp/model/laserjet: None /usr/lib/lp/model/laserjet4: $Header: PCL5,v 76.2.1.4 98/04/27 19:20:27 ssa Exp $ /usr/lib/lp/model/laserjet4Si: $Header: PCL5,v 76.2.1.4 98/04/27 19:20:27 ssa Exp $ /usr/lib/lp/model/laserjet4v: $Header: PCL5,v 76.2.1.4 98/04/27 19:20:27 ssa Exp $ /usr/lib/lp/model/laserjet5Si: $Header: PCL5,v 76.2.1.4 98/04/27 19:20:27 ssa Exp $ /usr/lib/lp/model/laserjetIIISi: $Header: PCL5,v 76.2.1.4 98/04/27 19:20:27 ssa Exp $ /usr/lib/lp/model/paintjet: None /usr/lib/lp/model/paintjetXL300: None /usr/lib/lp/model/rmodel: $Header: rmodel,v 72.3.1.2 97/04/28 19:49:14 ssa Exp $ /usr/bin/cancel: $Revision: 78.29.1.89 $ PATCH_10_20: hpux_rel.o cancel.o 01/08/08 /usr/bin/disable: $Revision: 78.29.1.89 $ PATCH_10_20: hpux_rel.o disable.o 01/08/08 /usr/bin/enable: $Revision: 78.29.1.89 $ PATCH_10_20: hpux_rel.o enable.o 01/08/08 /usr/bin/lpstat: $Revision: 78.29.1.89 $ PATCH_10_20: hpux_rel.o lpstat.o 01/08/08 /usr/sbin/lpmove: $Revision: 78.29.1.89 $ PATCH_10_20: hpux_rel.o lpmove.o 01/08/08 /usr/bin/lp: $Revision: 78.29.1.89 $ PATCH_10_20: hpux_rel.o lp.o 01/08/08 /usr/bin/lpalt: $Revision: 78.29.1.89 $ PATCH_10_20: hpux_rel.o lpalt.o 01/08/08 /usr/lbin/rwrite: PATCH_10_20: rwrite.o 01/08/08 /usr/sbin/lpadmin: $Revision: 78.29.1.89 $ PATCH_10_20: hpux_rel.o lpadmin.o 01/08/08 /usr/sbin/lpsched: $Revision: 78.29.1.89 $ PATCH_10_20: hpux_rel.o lpsched.o 01/08/08 /usr/sbin/rcancel: $Revision: 78.29.1.89 $ PATCH_10_20: hpux_rel.o rcancel.o 01/08/08 /usr/sbin/rlpdaemon: $Revision: 78.29.1.89 $ PATCH_10_20: hpux_rel.o rlpdaemon.o 01/08/08 /usr/sbin/rlpstat: $Revision: 78.29.1.89 $ PATCH_10_20: hpux_rel.o rlpstat.o 01/08/08 /usr/sbin/rlp: $Revision: 78.29.1.89 $ PATCH_10_20: hpux_rel.o rlp.o 01/08/08 /usr/lib/nls/msg/C/lp.cat: None cksum(1) Output: 483369663 35251 /usr/lib/lp/model/HPP405 3092667237 23718 /usr/lib/lp/model/PCL4 2678772530 51661 /usr/lib/lp/model/PCL5 2678772530 51661 /usr/lib/lp/model/colorlaserjet 2678772530 51661 /usr/lib/lp/model/deskjet1600CM 2678772530 51661 /usr/lib/lp/model/hp5000c30 4158767097 39056 /usr/lib/lp/model/hpC1208a 3155102849 71817 /usr/lib/lp/model/hpd640 3092667237 23718 /usr/lib/lp/model/laserjet 2678772530 51661 /usr/lib/lp/model/laserjet4 2678772530 51661 /usr/lib/lp/model/laserjet4Si 2678772530 51661 /usr/lib/lp/model/laserjet4v 2678772530 51661 /usr/lib/lp/model/laserjet5Si 2678772530 51661 /usr/lib/lp/model/laserjetIIISi 1439765765 6373 /usr/lib/lp/model/paintjet 1811378279 46204 /usr/lib/lp/model/paintjetXL300 332041795 5287 /usr/lib/lp/model/rmodel 3668734898 41007 /usr/bin/cancel 1729536172 24624 /usr/bin/disable 3245550599 16431 /usr/bin/enable 1398076554 49199 /usr/bin/lpstat 2612582324 28719 /usr/sbin/lpmove 2065873914 45099 /usr/bin/lp 3765482935 36910 /usr/bin/lpalt 832446975 16420 /usr/lbin/rwrite 1833425 45104 /usr/sbin/lpadmin 266466251 53296 /usr/sbin/lpsched 247617723 32816 /usr/sbin/rcancel 399930737 73778 /usr/sbin/rlpdaemon 2716882657 36912 /usr/sbin/rlpstat 99292165 24620 /usr/sbin/rlp 3800179760 16137 /usr/lib/nls/msg/C/lp.cat Patch Conflicts: None Patch Dependencies: None Hardware Dependencies: None Other Dependencies: None Supersedes: PHCO_8488 PHCO_10749 PHCO_10891 PHCO_11462 PHCO_12894 PHCO_13133 PHCO_14029 PHCO_14431 PHCO_16106 PHCO_16294 PHCO_16724 PHCO_17713 PHCO_18779 PHCO_22364 Equivalent Patches: None Patch Package Size: 960 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_24699 5a. For a standalone system, run swinstall to install the patch: swinstall -x autoreboot=true -x match_target=true \ -s /tmp/PHCO_24699.depot By default swinstall will archive the original software in /var/adm/sw/patch/PHCO_24699. 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_24699.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_24699.depot of=/dev/rmt/0m bs=2k Special Installation Instructions: Do lpshut before the installation of this patch.