Patch-ID# 101414-09 Keywords: 3270 client te3278 DAI HLI pe3287 SNA td3278 tn3278 xterm Synopsis: SunLink Client 3270 8.0.1: Jumbo Patch Date: Feb/03/97 Solaris Release: 2.1, 2.2, 2.3, 2.4 SunOS Release: 5.1, 5.2, 5.3, 5.4 Unbundled Product: SunLink Client 3270 Unbundled Release: 8.0.1 Relevant Architectures: sparc BugId's fixed with this patch: 1148080 1150932 1155484 1156913 1160528 1163905 1164154 1167215 1167592 1168508 1169810 1171945 1172090 1172365 1172399 1174643 1175340 1175354 1176848 1178403 1180603 1180609 1180611 1181897 1182166 1182297 1184940 1185704 1187183 1187707 1193565 1194036 1194217 1199533 1200706 1204692 1210687 1213338 1214846 1222768 1222770 1226917 1230453 1232100 1226550 Changes incorporated in this version: 1226550 Patches accumulated and obsoleted by this patch: Patches which conflict with this patch: Patches required with this patch: 102147 : Patch for snacommd and SDLC. 101280 : SNA 3270 gateway patch. (Only if using the SNA 3270 gateway.) 101432 : BSC 3270 gateway patch. (Only if using the BSC 3270 gateway.) 101591 : FlexLM license server patch. (Only if more than 50 client licenses used.) 101737 : TN3270 Server patch. (Only if using the TN3270 Server.) Obsoleted by: Files included with this patch: A postinstall script called 'postinstall' which gets executed after the install of this patch package. /opt/SUNWconn/clnt3270/HLILIB.a /opt/SUNWconn/clnt3270/KY3278.shell.type4 /opt/SUNWconn/clnt3270/KY3278.shell.type5 /opt/SUNWconn/clnt3270/KY3278.xterm.type4 /opt/SUNWconn/clnt3270/KY3278.xterm.type5 /opt/SUNWconn/clnt3270/KYI3278.shell.type4 /opt/SUNWconn/clnt3270/KYI3278.shell.type5 /opt/SUNWconn/clnt3270/KYI3278.xterm.type4 /opt/SUNWconn/clnt3270/KYI3278.xterm.type5 /opt/SUNWconn/clnt3270/SC3278.xterm /opt/SUNWconn/clnt3270/SCI3278.xterm /opt/SUNWconn/clnt3270/SCI3278.vt100 /opt/SUNWconn/clnt3270/XTerm.add /opt/SUNWconn/clnt3270/cdump /opt/SUNWconn/clnt3270/ibmftp /opt/SUNWconn/clnt3270/killtd /opt/SUNWconn/clnt3270/kyinit /opt/SUNWconn/clnt3270/pe3287 /opt/SUNWconn/clnt3270/scinit /opt/SUNWconn/clnt3270/td3278 /opt/SUNWconn/clnt3270/td3278-tn /opt/SUNWconn/clnt3270/te3278 /opt/SUNWconn/clnt3270/tn3278 /opt/SUNWconn/clnt3270/dai/DAILIB.a /opt/SUNWconn/clnt3270/dai/DAILIB.debug.a /opt/SUNWconn/clnt3270/dai/TN-DAILIB.a /opt/SUNWconn/clnt3270/dai/TN-DAILIB.debug.a /opt/SUNWconn/clnt3270/dai/dai.h /opt/SUNWconn/clnt3270/dai/dai_test.c /opt/SUNWconn/clnt3270/locale/C/LC_MESSAGES/ibmftp.po /opt/SUNWconn/clnt3270/locale/ko/LC_MESSAGES/ibmftp.po /opt/SUNWconn/clnt3270/locale/zh_TW/LC_MESSAGES/ibmftp.po Problem Description: (Rev 09) -------- 1226550: SNA PE3287 will not print from CICS after. Return the proper value for AID read command. (Rev 08) -------- 1160528: IND$FILE command name needs to be configurable When it initiates a file transfer, ibmftp will normally send out the command name of "IND$FILE". However, in England, this command name is usually changed to "INDFILE". Customers needed a way to configure the command string that ibmftp sends out. This could have been accomplished via localization. However, since the UK customers used LANG = C, this would have required the customers to set LANG to another value. Instead, ibmftp was modified to check for the environment variable IBMFTP_STR. If this environment variable is defined, ibmftp will use the given string as the command name (in place of IND$FILE). If this environment variable is not defined, then ibmftp will use the default command name of IND$FILE. See Documentation Changes in the Special Install Instructions below for details. 1210687: Down arrow key on type 5 keyboard not functioning under xterm In a te3278 session, the down arrow key on a type 5 keyboard was not working. The problem was that there was a conflict in the keyboard mapping. The KYI3278.xterm.type5 file explicitly defined KY_DOWN_A to be "D". Also, this file did not define a mapping for KY_DBSHIFT. Unfortunately, the default for KY_DBSHIFT is also "D". As a result, " D" was mapped to two functions. In this case, the KY_DBSHIFT mapping took precedence, and when a user pressed the down arrow key, the cursor did not move down a row. The KYI3278.xterm.type5 file was updated to undefine the mapping for KY_DBSHIFT. Other KYI3278 files were also similarly modified to avoid conflicts. Also, kyinit was modified to write a null output file when it finds a conflict in the keyboard mapping. 1213338: te3278 fails to update screen position When screen data would overwrite an attribute, te3278 might not update the screen with the new data. This would occur if the new character had the same value as the old attribute. te3278 was modified to correctly update the screen in these situations. 1222768: killtd script doesn't work sometimes killtd is used to kill td3278 processes. However, sometimes this script did not kill these processes. In order to kill the td3278 processes, killtd parses the output of the "ps -e" command. The "-e" option requests that ps display all processes that are currently running. Previously, killtd did not specify a path and was sometimes invoking a version of ps that did not support this "-e" option. killtd was modified to specify a path to ensure that the correct version of ps is used. 1222770: td3278 processes still exist after HLI application terminates When a hli application starts a session, it will start a td3278 daemon process. hli communicates with td3278 via a mmap file. When the hli application completes, hli will tell this td3278 process to terminate. However, sometimes the the td3278 process would still be alive after the hli application has terminated. In these cases, we believe that hli was unable to open the mmap file. Previously, hli would try to open the mmap file up to 10 times, with a one second delay between each try. hli was modified so that the user can specify a timeout value. If the environment variable TD_START_DAEMON_TIMEOUT is defined, hli will used the specified value as the timeout value. This should help avoid those situations in which hli fails to open the mmap file within the default timeout period. Also, hli will output some tracing statements if the environment variable HLI_LOG is defined. See Documentation Changes in the Special Install Instructions below for details. 1226917: sunlink 3270 responses slower with patch 101414-06 Modified wait routines to shorten response times back to hli applications. 1230453: Zero key does not work on numeric keypad In an xterm environment, the numeric keypad zero did not work with te3278. When the Client 8.0.1 package is initially installed, the file /usr/openwin/lib/app-defaults/XTerm is updated with definitions for the resource SunLink_3270. However, the definition for the numeric keypad zero was incorrect. This patch includes a postinstall script which will correct the numeric keypad zero definition for SunLink_3270. This will enable users to use this key with te3278. If a user has previously updated his .Xdefaults file with XTerm.add or if the postinstall failed to update /usr/openwin/lib/app-defaults/XTerm, you will need to update the file(s) manually. Please see the Special Install Instructions below for details. 1232100: BSC 3270 printer DAI application hangs on ds_read() When a host sends data with the start print bit on in the WCC, bsc3270 sends a WACK, and the host does not try to send any more data until bsc3270 sends a status/sense with the Device End bit on, indicating "not busy". There was a bug in DAI where the 'not busy' was never sent, thus causing the application to hang on ds_read(). So a new option, ds_nby, was added to ds_write_control(). When ds_write_control() is called with this option, the Device End status/sense will be sent to the host. This option therefore allows the DAI application programmer to control when the 'not busy' is sent and thereby control the flow of data from the host. See Documentation Changes in the Special Install Instructions below for details. (Rev 07) -------- 1185704: CGTN3270 closes connection after 6.5 minutes inactivity An internal select() call was waiting on a write file descriptor set intead of a read file descriptor set. This could have resulted in a hang in ds_read(). The trace messages printed by TN-DAILIB.debug.a have been enhanced in order to provide additional information for debugging. 1199533: scinit is unable to override xterm am default capability "am" is the automatic margins terminfo capability. Since it is a boolean capability, a user can indicate that it is supported by simply including "am" in the appropriate SCI3278 file. However, if it is not specified in the SCI3278 file, scinit will then check to see if this capability is specified in the corresponding terminfo entry. If this capability is supported in this terminfo entry, scinit would assume that it was supported. Therefore, there was no method to override this default and to specify that the "am" capability was not supported. Problems arose due to a bug in the am capability support for xterm. Since the terminfo entry for xterm indicates that am is supported, scinit would always assume that it was supported and would create the SC3278.xterm file to indicate that the am capability was supported. te3278 would then incorrectly assume that this capability was supported. As a result, te3278 would rely on am support and would sometimes paint screens incorrectly. To correct these problems, special SC3278.xterm files, which indicated that the am capability was not supported, had to be generated. scinit was modified to allow a user to override the xterm am default capability. If the user includes "am@" in the SCI3278 file, scinit will conclude that the am capability is not supported, even if the corresponding terminfo entry states that it is supported. This "xx@" notation can be used to cancel any capability. See Documentation Changes in the Special Install Instructions below for details. 1200706: te3278 resets xon/xoff capability During its initialization, te3278 sets the terminal to raw mode. As a side effect of this process, the xon/xoff ability of the terminal is reset. te3278 was modified to reassert the xon/xoff ability for the terminal after it placed the terminal in raw mode. Note that since s and q will now be used for flow control, te3278 will not see these keystrokes. Therefore, no key mapping should include a s or a q. 1204692: pe3287 inserts extra linefeed Previously, when pe3287 received exactly 132 characters and then a NL, it would insert an extra . pe3287 was modified so that it would not add this extra . 1214846: DAI program hangs in ds_write() after error 532 on BSC 3270 line A DAI application would hang in a call to ds_write() after a 532 error was received on a BSC 3270 line. ds_write() was stuck in a read, waiting for a message from the gateway that would never arrive. ds_write() has been fixed to return to the caller with an error (ENOAPPL, ENOPLU, or ENOSSCP) if host communications become inactive due to a line error. In addition, DAILIB.debug.a has been enhanced by adding some improved trace messages for calls to ds_read() and ds_write() and normal returns from the same, with timestamps added to the messages. (Rev 06) -------- 1164154: te3278 redraws entire screen for any screen update When it received screen data from the host, te3278 was painting most of the screen, even if the host was updating only a small portion of the screen. te3278 was modified to fix a bug so that it now checks to see if the screen data has changed before it sends out the data. Also, fixed a bug in which the window would hang when te3278 terminated due to an idle timeout. 1178403: Unable to include nulls in scinit input file strings Since scinit was using nulls to indicate the end of a screen capability string, a user could not include a null in any such string. scinit was modified not to use nulls as string delimiters. A user can now include a null in a screen capability string. 1187183: Time out on HLI send_file() and recv_file() functions The HLI send_file() and recv_file() functions were timing out sometimes when transferring short files. They were returning HLI_OK with _return_code = HLI_PARM_ERROR, and the td3278 session log file showed: hlilib: Presentation Space "A": Timed out send_file() and recv_file() have been changed as follows: - return HLI_ERROR instead of HLI_OK when _return_code = HLI_PARM_ERROR because of an error in the length of the command string. - return HLI_ERROR instead of HLI_SYSTEM_ERROR when the file transfer cannot be started because of errors. - return HLI_ERROR with _return_code = HLI_FILE_TRANSFER_TIMEOUT when the file transfer times out, instead of returning HLI_OK with _return_code = HLI_PARM_ERROR. - if the file transfer does not complete successfully, return HLI_ERROR with _return_code set to the TRANSxxx error code from the host; previously they returned HLI_OK with _return_code = HLI_PARM_ERROR For 3278-2 and 3278-3 model terminals, the read and write buffers allocated by td3278 were too small to hold the maximum size file transfer structured field. This could result in data being lost when using send_file() to transfer a file. If the XFERMAX environment variable was set, then the file transfer block size was being set to a length 17 bytes greater than specified. Additional trace file entries have been added for certain file transfer protocol events. They are identified by the word "FTP" after the timestamp. See Documentation Changes below for details of return code changes and a description of the XFERMAX environment variable. 1193565: HLI find_field_length() returns incorrect field length if length is one 1) HLI find_field_length() for a field with a length of one was returning an incorrect length value. 2) HLI find_field_length() was returning HLI_ERROR with _return_code= HLI_OK if the first character of the field (after the attribute byte) was on the last position of the screen (row 24 column 80 if model 2 screen). 3) HLI find_field_position() was returning a position with a value one greater than the maximum allowed position when the attribute of the field was on the last position of the screen (row 24 column 80 if model 2 screen). It should have been returning a position of 1. This was occuring for the following methods: "T", "P", "PP", and "PU". 4) HLI find_field_length() was returning an incorrect length value if the target field was followed by one or more zero length fields. The length of the field was increased by the count of contiguous zero length fields following the target field. 5) HLI find_field_position("P") was returning the position of the current field if the field wrapped past the end of the screen and the starting position was earlier in the screen than the attribute byte for the current field. 1194036: dai print hangs DAI was misinterpreting the first byte of scs printer data as a read command. As a result, it failed to send an acknowledgement to the gateway and the print job would hang. DAI was modified to skip over this read command check if the device is an scs printer. 1194217: HLI send_file() and recv_file() sleep After an HLI file transfer completed, there was a 2-3 second pause before the send_file() or recv_file() function returned to the calling application. This was because of a sleep(2) at the end of these HLI functions. The sleep(2) call has been removed. This means that the functions will complete more promptly. But this also means that there is a greater chance that the mainframe will not have finished writing to the 3270 terminal. It is possible for an attempt to update the P/S after a send_file() or recv_file() completes to collide with a write from the host. This is because the host has to put back the menu or command screen after the file transfer is completed. For instance, with a VM CMS host, it is recommended to call HLI wait_for_text("RUNNING", 10) after the file transfer completes to make sure it is safe for the application to update the P/S. (Rev 05) -------- 1163905: DUP-key mapping is impossible in te3278 te3278 was not using the scinit echo string table (SC_DUP etc.) if there was a language translation file (ebcdictoiso) installed. Now te3278 will use the echo strings to output characters that are not included in the ebcdictoiso file. 1167215: HLI send_keystrokes() does not work properly The HLI send_keystrokes(), string_to_field(), and string_to_ps() functions have been enhanced to block writes from the host (the SNA BID is rejected) once the HLI application starts updating the presentation space. The block is lifted when an AID key is sent. This new functionality only works with an SNA 3270 gateway. It does not work when a BSC 3270 or Local 3270 gateway is used, or when td3278-tn is used to talk to a TN3270 Server. 1167592: Bad cursor movement in te3278 randomly cause "INHIBIT not here" Typing a character in an input field, hitting ctrl-l (KY_REDRAW), then typing another character would get INHIBIT status. This bug could cause an erroneous INHIBIT status after typing in an input field under other circumstances, for instance after the host had just written to the screen. Also, hitting the REDRAW key (ctrl-l) would result in loss of the status line. 1171945: DAI application fails on ds_write() DAI was keeping a pointer to the props field of the ds_open_class() function. This resulted in errors if the props field was a stack variable in the DAI application and was not valid the next time a DAI function was called. DAI no longer relies on the application program to maintain the props field. DAI now keeps this field in its DAI control block (instead of a pointer to the field within the application program). 1172090: te3278 excessive screen updates te3278 was updating the screen after receiving zero length writes from the gateway. This resulted in excessive writing to the screen, especially for a tty terminal connected over a slow line. 1172365: sna 3270 8.0 builds incorrect symbolic link The symbolic link /opt/SUNWconn/lib/HLILIB.a was pointing to ../HLILIB.a rather than ../clnt3270/HLILIB.a. 1172399: tn3278 cursor jumps from one position to another on screen tn3278 was going into an infinite loop when handling an unformatted screen, continually updating the display. This would only happen for certain character values in screen buffer position 0. tn3278 was unable to parse the command line options correctly if there was an optional argument before the argument. tn3278 was converting embedded nulls to blanks when sending read modified data to the host. This is an optimization, but is now disabled for the case of unformatted screens in order to prevent problems with TN3270 Server's processing SNA SSCP-LU session (VTAM logon) screens. Changes are made to the tn3278 -d and -D command line options. See Documentation Changes in the Special Install Instructions below for details. Some other miscellaneous bugs are fixed. 1174643: te3278 emulation problems te3278 was accepting non-numeric characters in a numeric 3270 field. It is changed to accept certain non-numeric and an alternate decimal point character based upon the presence of two new environment variables. See Documentation Changes in the Special Install Instructions below for details. 1175340: pe3287 translates characters following the SCS transparency character The SCS transparent mode data following the Transparent (TRN) SCS control code was being treated as if it were normal printable data. It was being translated from EBCDIC->ASCII, and non-printable characters were being translated to '-'. Now pe3287 treats this data as binary data and does not update the printer position. See Documentation Changes in the Special Install Instructions below for details. 1175354: Handle Graphic Escape in te3278 te3278 does not support the 3270 datastream Graphic Escape (GE) order (x'08'). This order is used to write characters in the APL Text Feature code page (amongst others). te3278 has been fixed to display the character following the GE order as a hyphen ('-') character, instead of skipping over it and skewing the screen. 1176848: tn3278 won't advance cursor After the user typed a character in the last position of a field and if the next field was not an autoskip field, tn3278 was failing to move the cursor to the first non-attribute position of that next field. 1180603: HLI set_session_parms() expects parm count in len parm set_session_parms(char *str, int *len) was expecting to be passed the count of parameters in len, which is not the documented interface. As a result, if the value in len (which could easily be initialized to zero or uninitialized and therefore random) was less than the actual number of parameters in str then the extra parameters were quietly ignored. set_session_parms() has been changed to ignore the value passed in with len. set_session_parms() uses strtok() to parse the parm string. As a consequence, null characters were being written after each token in the passed parm string by strtok(). set_session_parms() has been changed to make a temporary copy of the passed parm string before calling strtok(). set_session_parms() has been changed to return a value of zero in the *len parameter if the passed parm string is empty. Previously it was not updating the *len parameter in such a case. See Documentation Changes in the Special Install Instructions below for details. td3278 was handling the 3270 Erase Unprotected to Address (EUA) order incorrectly. It was filling with the character '0' instead of the null character. This update fixes that problem. When logging onto a VM/SP host this problem showed up in the command input field, because CP uses the EUA order to clear it after a command has been entered. 1180609: HLI clock_status() returns incorrect values clock_status() has the return codes HLI_BUSY (4) and HLI_KLOCKED (5) backwards. clock_status() is changed to return HLI_BUSY (4) if the inhibit or ds_kybdlk flags are set, thus indicating that the session is busy with the host. If neither of those two flags are set, then if the locked flag is set clock_status() will return HLI_KLOCKED (5), indicating that the keyboard is locked because of an invalid keystroke. See Documentation Changes in the Special Install Instructions below for details. 1180611: td3278 fails intermittantly with HLI applications td3278 has been changed to catch the SIGHUP, SIGPIPE, and SIGXFSZ signals in addition to those already caught. This makes sure that all signals that can terminate the process without a core file will be caught and an error message written before terminating. HLILIB.a has been modified to change the memory mapped file name. Old name: /tmp/td. New name: /tmp/td.. This allows multiple instances of the same application to coexist on one cpu. td3278 has been modified to add a timestamp to the trace output file messages (see the HLI start_trace() function), to make debugging easier. If HLI tracing is enabled via start_trace(), then a message is now written to the trace output file when td3278 exits, except in the case of a caught signal (which always results in an error message). HLILIB.a has been modified to change the name of the session log file for the td3278 daemon process. The stdout and stderr for the daemon is redirected to this file. This change is intended to help keep error information from being overwritten by multiple applications running the same session name. Old name: $TD_LOG_DIR/td..log New name: $TD_LOG_DIR/td...log The td3278 outout redirection is changed to append to the session log file, so that any errors trying to start a daemon are preserved in the file. td3278 has been modified to write all log messages to stderr instead of a mixture of stdout and stderr, so that the messages will be written to the session log file in the proper sequence. HLILIB.a has been updated to report any errors when trying to start the daemon identified by the TDPROG environment variable. See Documentation Changes in the Special Install Instructions below for details. 1181897: HLI program hangs when started from another program When an HLI application was started from another program, the td3278 daemon would hang while waiting for a message from the gateway. The select() call was only waiting on the first 32 file descriptors. But a lot of file descriptors were open already before td3278 was forked by the system() call, and they were not closed before the DAI file descriptor was opened, so the DAI file descriptor number was greater than 31. This caused it to be ignored by the select(). The select() calls are changed to wait on FD_SETSIZE file descriptors, which should cover all possible file descriptor numbers. Currently FD_SETSIZE is set to 1024. 1182166: HLI application hangs when sends CLEAR key on SNA SSCP-LU session td3278 was not clearing the HLI_BUSY status when handling a CLEAR, PA, or PF key from send_keystrokes() while in an SNA SSCP-SLU session. A CLEAR key while in an SSCP-SLU session is handled locally and no AID is sent to the host. A PA or PF key while in an SSCP-SLU session is ignored. td3278 was hanging after sending a SysRequest keystroke to the gateway if the host did not write something to the terminal in response. 1182297: HLI application fails to send Norwegian characters td3278 was looking for the ebcdictoiso localization file in the directory /etc/SUNWconn/clnt3270. It has been fixed to look for it in the directory that it finds the td3278 executable file in (usually /opt/SUNWconn/clnt3270) unless the HLIHOME environment variable is defined with a directory name. The HLI string_to_ps() and string_to_field() functions were incorrectly testing for control characters, and were rejecting valid international characters. They have been fixed to call the iscntrl() function to test for control characters. Also, they have been fixed to always return a value of HLI_ERROR if they find an error, previously they were returning HLI_OK in some error situations. And string_to_ps() has been fixed to set _return_code to the value of clock_status() when there is no error. 1184940: tn3278 loops when it receives a bad sba address tn3278 was looping if it received a 3270 SBA order with an invalid buffer address. It is changed to print out an error message and end the session. 1187707: HLI programs which use the libc function getopt() core dump The C library function getopt() defines an external variable named _sp. This name was also used as an external variable by the HLI library HLILIB.a. In HLI _sp was used as a pointer, and when getopt() was called by the HLI application, _sp was overlayed with a new value, and the next attempt by HLI to use _sp resulted in a failure and core dump. The HLI library is changed to use the name _hlilib_sp instead of _sp, in order to guarantee uniqueness. (Rev 04) -------- 1155484 (esc 8332): pe3287 output to stdout Added support to pe3287 for the parameter "-f -". If this parameter is specified, output will go to stdout. 1156913 (esc 8123): allow client to send Query Reply For LU type 3, the sna3274 gateway automatically sent a LUSTAT with CD to the host when a message with CD, such as Read Partition Query, was received. So a client could not send a Query Reply. The gateway was changed to pass the Read Partition Query through to the client. Changes were made to pe3287 to handle this message. 1168508 (esc 9566): pe3287 has defunct child processes Added code to pe3287 to ignore the SIGCHLD signal, so that child processes would not become defunct. (Rev 03) -------- 1169810: ======= Incorrectly built SNA v8.0 patches, which cause the entire package to be removed if a customer backs out the patch. (Rev 02) -------- 1150932: ======= pe3287 terminates with EINTR errno. (Rev 01) -------- 1148080: ======= HLI does not flush before returning a valid screen causing corruption in the file. Patch Installation Instructions: -------------------------------- Special Install Instructions: ----------------------------- 1) HLI applications MUST be relinked with HLILIB.a from patch level 101414-06 or higher in order to function correctly with the td3278 installed by patch level 101414-06 or higher. NOTE: Applications linked with the HLILIB.a from this patch are not compatible with any version of td3278 older than patch level 101414-06. 2) After installing this patch, your DAI applications must be modified to call ds_write_control() with the new option, be re-compiled with the new dai.h, and be re-linked with the new DAILIB.a. Refer to the "Documentation Changes" section for details on how to use this option. 3) This patch contains new SCI3278.vt100, SCI3278.xterm and SC3278.xterm files. These files were modified to turn off the "am" capability. If you have made any modifications to the FCS version of these files, you should save your versions of these files before installing this patch. You will then need to incorporate your modifications into the new SCI3278.vt100 and/or SCI3278.xterm files and to use scinit to create new SC3278 files. 4) This patch contains new ibmftp.po files. These files were modified to add two more messages. If you have made any modifications to the FCS version of an ibmftp.po file, you should save your version of this file before installing the patch. You will then need to incorporate your modifications into the new ibmftp.po file and run msgfmt in order to create a new ibmftp.mo file. 5) This patch contains new KYI3278.* and KY3278.* files. These files were modified to eliminate conflicts in the keyboard mapping. If you have made any modifications to the FCS version of these files, you should save your versions of these files before installing this patch. You will then need to incorporate your modifications into the new KYI3278.* files and to use kyinit to create new KY3278.* files. 6) If the postinstall script fails to update /usr/openwin/lib/app-defaults/XTerm, you will need to modify the XTerm file manually. First, locate the SunLink_3270 resource entry. You need to change the line: Mod3 F21: string("0") \n\ to: Mod3 KP_0: string("0") \n\ Also, if any users have previously appended XTerm.add to their .Xdefaults file, they will need to make this same modification by hand. 7) Documentation Changes: SunLink Client 3270 8.0 User's Guide (801-2149-10). Chapter 2, Starting and Using the te3278 Terminal Emulator. Section 2.4, Environment Variables Used by te3278. CLKTRACE -------- If the CLKTRACE environment variable is defined, te3278 logs trace output into the debug file DBGFILE. This output traces key input and lock status information. KYSTAT ------ As described in Section 4.2.2.6, the STAT key is used to toggle among three modes of status line display. The default mode is mode 0. If you wish to change the default mode, use the KYSTAT environment variable to define the new initial mode. TE3278_DECIMAL_COMMA and TE3278_NONNUMERIC_OK --------------------------------------------- te3278 normally accepts only the characters ".-0123456789" in a numeric 3270 field. If the TE3278_DECIMAL_COMMA environment variable is defined, then te3278 will accept only the characters ",-0123456789" in a numeric 3270 field. This allows the use of a comma instead of a period as the decimal point character. If the TE3278_NONNUMERIC_OK environment variable is defined, then te3278 will accept only the characters ".,/;-0123456789" in a numeric 3270 field. Chapter 5, Specifying Your Screen Characteristics Section 5.1, Considerations for scinit Section 5.1.1, Input You may cancel any capability by adding "xx@" (where "xx" is the name of the capability you wish to cancel) to the SCI3278 file. For boolean capabilities, this would ensure that the capability is defined as not supported. Number capabilities would be set to 0, and string capabilities would be set to a null string. scinit will set the specified capability to these values regardless of any other definition for the capability in either the SCI3278 file or the terminfo entry. As with all other entries in the SCI3278 files, the "xx@" entry should be delimited with ":"s. The use of the "xx@" notation will not prevent scinit from checking the values assigned to some capabilities. Therefore, a user should not cancel a required capability, such as "li" and "cm". If a required capability is cancelled, scinit will not process the remainder of the file and inform you of the error. In addition, scinit may adjust the value of a cancelled capability, in order to maintain consistency with the values of other capabilities. Chapter 6, Operating the 3287 Printer Emulator. SCS transparent mode data following the Transparent (TRN) SCS control code is now being treated as binary data. It is not translated from EBCDIC->ASCII, and the printer position cursors such as current column and current line are not updated by receipt of the transparent data. If the transparent data does affect the position on the printer page, then the programmer must take into account the fact that pe3287 is not aware of the change in position. Chapter 7, te3278 - File Transfer Section 7.7, Additional Notes 4. ibmftp checks for the environment variable IBMFTP_STR. If this environment variable is defined, ibmftp will use the given string as the command name (in place of IND$FILE). If this environment variable is not defined, then ibmftp will use the default command name of IND$FILE. This environment variable should be set before the te3278 session is started. Chapter 8, Starting and Using the tn3278 Terminal Emulator. Section 8.3, Starting tn3278 From the Command Line. tn3278 -d -D -d will turn on socket-level tracing, while -D will generate more extensive tracing output. SunLink Client 3270 8.0 Programmer's Guide (801-2150-10). Chapter 3, DAI Procedural Interface Specifications. Section 3.2.6, ds_write_control Function. (A new control argument, "ds_nby", has been added to ds_write_control().) ds_nby This option must be used by BSC printer DAI applications. After a block of data is received from the host for a printer, bsc3270 will automatically send a WACK to the host. This WACK will keep the host from sending any more data until it receives a "not busy" message. The new 'ds_nby' option of ds_write_control() must be used by the BSC printer DAI application to send the 'not busy' message to the host, in order to re-enable the data flow from the host to the printer. This option allows the DAI application programmer to control when the 'not busy' is sent and thereby control the flow of data from the host. Note that ds_write_control() should be called only once with this option for each block of data that is received from the host. Refer to dai_test.c for an example of how to use this option. Note that the following check is used: if (!(flags & DS_MORE) && (last_read_len != 0)) ds_write_control(dai, ds_nby); This check will ensure that the "ds_write_control(dai, ds_nby)" call is performed only once for each block of data that is received from the host, thus ensuring proper flow control. Chapter 6, SunLink 3270 HLLAPI-Like Interface (HLI). Section 6.1.5, HLI Memory and Disk Space Requirements. Memory mapped (mmap) file name: /tmp/td.. Session log file name: $TD_LOG_DIR/td...log Section 6.1.7 Environment Variables. XFERMAX specifies the block size used for file transfers by send_file() and recv_file(). The maximum value is 8192 and values greater than that will be set to 8192. The minimum value is 1024 and values less than that will be set to 1024. The default is 8192. TD_START_DAEMON_TIMEOUT The environment variable TD_START_DAEMON_TIMEOUT is used to specify the timeout value hli will use when it tries to open the memory mapped (mmap) file, which is used to communicate with the td3278 daemon. The variable should be set if hli is having problems opening the mmap file within the default timeout period of 10 seconds. HLI_LOG If the environment variable HLI_LOG is defined, hli will output some tracing statements to stderr. These statements trace hli starting the daemon, setting a timeout value, and opening the mmap file. Section 6.2.2.5, set_session_parms Function. set_session_parms() accepts any combination of spaces and commas to delimit the parameters. For example, the following is a valid parameter string: "TWAIT ,,,,TIMEOUT=5". Return codes: (new) HLI_ERROR Not all parameters were accepted. The global variable _return_code contains additional information. HLI_UNAVAIL Unable to allocate storage. The parameter string was not processed. Section 6.2.2.5, clock_wait Function. Return codes: (all) HLI_OK The function completed normally. The global variable _return_code contains additional information. HLI_OK The session keyboard is not locked. HLI_BUSY The session keyboard is inhibited by host action. HLI_KLOCKED The session keyboard is locked. HLI_TIMEOUT The function timed out. The global variable _return_code contains additional information. HLI_BUSY The session keyboard is inhibited by host action. HLI_KLOCKED The session keyboard is locked. HLI_ERROR The function could not be completed. The global variable _return_code contains additional information. HLI_CONNECT_ERROR The indicated session does not exist. HLI_SYSTEM_ERROR The daemon has terminated. Section 6.2.3, File Transfer Functions The send_file and recv_file functions no longer pause before returning to the calling application. This means that these functions will complete more promptly. But this also means that there is a greater chance that the mainframe will not have finished writing to the 3270 terminal. It is possible for an attempt to update the P/S after a send_file() or recv_file() completes to collide with a write from the host. This is because the host has to put back the menu or command screen after the file transfer is completed. For instance, with a VM CMS host, it is recommended to call HLI wait_for_text("RUNNING", 10) after the file transfer completes to make sure it is safe for the application to update the P/S. Section 6.2.3.1, send_file Function. Return codes: (all) HLI_OK File transfer completed normally. The global variable _return_code contains additional information. HLI_FILE_TRANSFER_COMPLETE File transfer completed normally. HLI_FILE_TRANSFER_COMPLETE_SEG File transfer completed normally with segmented records. HLI_ERROR File transfer did not complete successfully. The global variable _return_code contains additional information. HLI_PARM_ERROR length was zero or greater than 128. HLI_KLOCKED The session keyboard is locked. Unable to enter the IND$FILE command into the P/S. HLI_SYSTEM_ERROR There is no current P/S, or the local file could not be used. HLI_FILE_TRANSFER_TIMEOUT The file transfer timed out when the host did not respond within the period specified by the TIMEOUT= session parameter. HLI_FILE_NOT_FOUND The local file could not be found. HLI_ACCESS_DENIED The local file could not be read. Other The TRANSxxx error code from the host. The text of the error message is in the td3278 session log file. Section 6.2.3.2, recv_file Function. Return codes: (all) HLI_OK File transfer completed normally. The global variable _return_code contains additional information. HLI_FILE_TRANSFER_COMPLETE File transfer completed normally. HLI_FILE_TRANSFER_COMPLETE_SEG File transfer completed normally with segmented records. HLI_ERROR File transfer did not complete successfully. The global variable _return_code contains additional information. HLI_PARM_ERROR length was zero or greater than 128. HLI_KLOCKED The session keyboard is locked. Unable to enter the IND$FILE command into the P/S. HLI_SYSTEM_ERROR There is no current P/S, or the local file could not be created/used. HLI_FILE_TRANSFER_TIMEOUT The file transfer timed out when the host did not respond within the period specified by the TIMEOUT= session parameter. HLI_ACCESS_DENIED The local file could not be written to. Other The TRANSxxx error code from the host. The text of the error message is in the td3278 session log file. Instructions to install patch using "installpatch" -------------------------------------------------- 1. Become super-user. 2. Apply the patch by typing: //installpatch / where is the directory containing the patch and is the patch number. must be a full path name. Example: # /tmp/123456-01/installpatch /tmp/123456-01 3. If any errors are reported, see "Patch Installation Errors" in the Command Descriptions section below. Rebooting the system or restarting the application after a successful patch installation is usually necessary to utilize patch. NOTE: On client server machines the patch package is NOT applied to existing clients or to the client root template space. Therefore, when appropriate, ALL CLIENT MACHINES WILL NEED THE PATCH APPLIED DIRECTLY USING THIS SAME INSTALLPATCH METHOD ON THE CLIENT. See the next section for instructions for installing a patch on a client. Instructions for installing a patch on a diskless or dataless client -------------------------------------------------------------------- 1. Before applying the patch, the following command must be executed on the server to give the client read-only, root access to the exported /usr file system so that the client can execute the pkgadd command: share -F nfs -o ro,anon=0 /export/exec//usr The command: share -F nfs -o ro,root= \ /export/exec//usr accomplishes the same goal, but only gives root access to the client specified in the command. 2. Login to the client system and become super-user. 3. Continue with step 2 in the "Instructions to install patch using installpatch" section above. Instructions for backing out patch using "backoutpatch" ------------------------------------------------------- 1. Become super-user. 2. Change directory to /var/sadm/patch: cd /var/sadm/patch 3. Backout patch by typing: /backoutpatch where is the patch number. Example: # 123456-01/backoutpatch 123456-01 4. If any errors are reported, see "Patch Backout Errors" in the Command Descriptions section below. Instructions for identifying patches installed on system: ---------------------------------------------------------- Patch packets that have been installed can be identified by using the showrev command with the "-p" option: showrev -p Also note that installpatch has a similar "-p" option which will also just identify patches already installed. Command Descriptions -------------------- NAME installpatch - apply patch package to Solaris 2.x system backoutpatch - remove patch package, restore previously saved files SYNOPSIS installpatch [-udpV] [-S ] backoutpatch [-fV] [-S ] DESCRIPTION These installation and backout utilities apply only to Solaris 2.x associated patches. They do not apply to Solaris 1.x associated patches. These utilities are currently only provided with each patch package and are not included with the standard Solaris 2.x release software. OPTIONS installpatch: -u unconditional install, turns off file validation. Allows the patch to be applied even if some of the files to be patched have been modified since original installation. -d Don't back up the files to be patched. This means that the patch can't be backed out. -p Print a list of the patches currently applied -V Print script version number -S Specify an alternate service (e.g. Solaris_2.3) for patch package processing references. backoutpatch: -f force the backout regardless of whether the patch was superseded -V print version number only -S Specify an alternate service (e.g. Solaris_2.3) for patch package processing references. DIAGNOSTICS Patch Installation Errors: -------------------------- Error message: Patch has already been applied. Explanation and recommended action: This patch has already been applied to the system. If the patch has to be reapplied for some reason, backout the patch and then reapply it. Error message: This patch is obsoleted by patch which has already been applied to this system. Patch installation is aborted. Explanation and recommended action: Occasionally, a patch is replaced by a new patch which incorporates the bug fixes in the old patch and supplies additional fixes also. At this time, the earlier patch is no longer made available to users. The second patch is said to "obsolete" the first patch. However, it is possible that some users may still have the earlier patch and try to apply it to a system on which the later patch is already applied. If the obsoleted patch were allowed to be applied, the additional fixes supplied by the later patch would no longer be available, and the system would be left in an inconsistent state. This error message indicates that the user attempted to install an obsoleted patch. There is no need to apply this patch because the later patch has already supplied the fix. Error Message: None of the packages to patch are installed on this system. Explanation and recommended action: The original packages for this patch have not been installed and therefore the patch cannot be applied. The original packages need to be installed before applying the patch. Error message: This patch is not applicable to client systems. Explanation and recommended action: The patch is only applicable to servers and standalone machines. Attempting to apply this patch to a client system will have no effect on the system. Error message: The /usr/sbin/pkgadd command is not executable. Explanation and recommended action: The /usr/sbin/pkgadd command cannot be executed. The most likely cause of this is that installpatch is being run on a diskless or dataless client and the /usr file system was not exported with root access to the client. See the section above on "Instructions for installing a patch on a diskless or dataless client". Error message: packages are not proper patch packages. Explanation and recommended action: The patch directory supplied as an argument to installpatch did not contain the expected package format. Verify that the argument supplied to installpatch is correct. Error message: The following validation error was found: Explanation and recommended action: Before applying the patch, the patch application script verifies that the current versions of the files to be patched have the expected fcs checksums and attributes. If a file to be patched has been modified by the user, the user is notified of this fact. The user then has the opportunity to save the file and make a similar change to the patched version. For example, if the user has modified /etc/inet/inetd.conf and /etc/inet/inetd.conf is to be replaced by the patch, the user can save the locally modified /etc/inet/inetd.conf file and make the same modification to the new file after the patch is applied. After the user has noted all validation errors and taken the appropriate action for each one, the user should re-run installpatch using the "-u" (for "unconditional") option. This time, the patch installation will ignore validation errors and install the patch anyway. Error message: Insufficient space in /var/sadm/patch to save old files. Explanation and recommended action: There is insufficient space in the /var/sadm/patch directory to save old files. The user has two options for handling this problem: (1) generate additional disk space by deleting unneeded files, or (2) override the saving of the old files by using the "-d" (do not save) option when running installpatch. However if the user elects not to save the old versions of the files to be patched, backoutpatch CANNOT be used. One way to regain space on a system is to remove the save area for previously applied patches. Once the user has decided that it is unlikely that a patch will be backed out, the user can remove the files that were saved by installpatch. The following commands should be executed to remove the saved files for patch xxxxxx-yy: cd /var/sadm/patch/xxxxxx-yy rm -r save/* rm .oldfilessaved After these commands have been executed, patch xxxxxx-yy can no longer be backed out. Error message: Save of old files failed. Explanation and recommended action: Before applying the patch, the patch installation script uses cpio to save the old versions of the files to be patched. This error message means that the cpio failed. The output of the cpio would have been preceded this message. The user should take the appropriate action to correct the cpio failure. A common reason for failure will be insufficient disk space to save the old versions of the files. The user has two options for handling insufficient disk space: (1) generate additional disk space by deleting unneeded files, or (2) override the saving of the old files by using the "-d" option when running installpatch. However if the user elects not to save the old versions of the files to be patched, the patch CANNOT be backed out. Error message: Pkgadd of package failed with error code . See /tmp/log. for reason for failure. Explanation and recommended action: The installation of one of patch packages failed. Any previously installed packages in the patch should have been removed. See the log file for the reason for failure. Correct the problem and re-apply the patch. Patch Installation Messages: --------------------------- Note: the messages listed below are not necessarily considered errors as indicated in the explanations given. These messages are, however, recorded in the patch installation log for diagnostic reference. Message: Package not patched: PKG=SUNxxxx Original package not installed Explanation: One of the components of the patch would have patched a package that is not installed on your system. This is not necessarily an error. A Patch may fix a related bug for several packages. Example: suppose a patch fixes a bug in both the online-backup and fddi packages. If you had online-backup installed but didn't have fddi installed, you would get the message Package not patched: PKG=SUNWbf Original package not installed This message only indicates an error if you thought the package was installed on your system. If this is the case, take the necessary action to install the package, backout the patch (if it installed other packages) and re-install the patch. Message: Package not patched: PKG=SUNxxx ARCH=xxxxxxx VERSION=xxxxxxx Architecture mismatch Explanation: One of the components of the patch would have patched a package for an architecture different from your system. This is not necessarily an error. Any patch to one of the architecture specific packages may contain one element for each of the possible architectures. For example, Assume you are running on a sun4m. If you were to install a patch to package SUNWcar, you would see the following (or similar) messages: Package not patched: PKG=SUNWcar ARCH=sparc.sun4c VERSION=11.5.0,REV=2.0.18 Architecture mismatch Package not patched: PKG=SUNWcar ARCH=sparc.sun4d VERSION=11.5.0,REV=2.0.18 Architecture mismatch Package not patched: PKG=SUNWcar ARCH=sparc.sun4e VERSION=11.5.0,REV=2.0.18 Architecture mismatch Package not patched: PKG=SUNWcar ARCH=sparc.sun4 VERSION=11.5.0,REV=2.0.18 Architecture mismatch The only time these messages indicate an error condition is if installpatch does not correctly recognize your architecture. Message: Package not patched: PKG=SUNxxxx ARCH=xxxx VERSION=xxxxxxx Version mismatch Explanation: The version of software to which the patch is applied is not installed on your system. For example, if you were running Solaris 5.3, and you tried to install a patch against Solaris 5.2, you would see the following (or similar) message: Package not patched: PKG=SUNWcsu ARCH=sparc VERSION=10.0.2 Version mismatch This message does not necessarily indicate an error. If the version mismatch was for a package you needed patched, either get the correct patch version or install the correct package version. Then backout the patch (if necessary) and re-apply. Patch Backout Errors: --------------------- Error message: Patch has not been successfully applied to this system. Explanation and recommended action: The user has attempted to back out a patch that was never applied to this system. It is possible that the patch was applied, but that the patch directory /var/sadm/patch/ was deleted somehow. If this is the case, the patch cannot be backed out. The user may have to restore the original files from the initial installation CD. Error message: This patch was obsoleted by patch $1. Patches must be backed out in the order in which they were installed. Patch backout aborted. Explanation and recommended action: The obsoleted contents of an older patch rev that apparently still exists under /var/sadm/patch should never be restored out of sequence. This could undermine the integrity of the more current patch rev installed and the restoration of the files it has saved. Error message: Patch was installed without backing up the original files. It cannot be backed out. Explanation and recommended action: Either the -d option of installpatch was set when the patch was applied, or the save area of the patch was deleted to regain space. As a result, the original files are not saved and backoutpatch cannot be used. The original files can only be recovered from the original installation CD. Error message: pkgrm of package failed return code . See /var/sadm/patch//log for reason for failure. Explanation and recommended action: The removal of one of patch packages failed. See the log file for the reason for failure. Correct the problem and run the backout script again. Error message: Restore of old files failed. Explanation and recommended action: The backout script uses the cpio command to restore the previous versions of the files that were patched. The output of the cpio command should have preceded this message. The user should take the appropriate action to correct the cpio failure. KNOWN PROBLEMS: On client server machines the patch package is NOT applied to existing clients or to the client root template space. Therefore, when appropriate, ALL CLIENT MACHINES WILL NEED THE PATCH APPLIED DIRECTLY USING THIS SAME INSTALLPATCH METHOD ON THE CLIENT. See instructions above for applying patches to a client. A bug affecting a package utility (eg. pkgadd, pkgrm, pkgchk) could affect the reliability of installpatch or backoutpatch which uses package utilities to install and backout the patch package. It is recommended that any patch that fixes package utility problems be reviewed and, if necessary, applied before other patches are applied. Such existing patches are: 100901 Solaris 2.1 101122 Solaris 2.2 101331 Solaris 2.3 SEE ALSO pkgadd, pkgchk, pkgrm, pkginfo, showrev