SEARCH CONTACT US SUPPORT SERVICES PRODUCTS STORE
United States    
COMPAQ STORE | PRODUCTS | SERVICES | SUPPORT | CONTACT US | SEARCH
gears
compaq support options
support home
software & drivers
ask Compaq
reference library
support forum
frequently asked questions
support tools
warranty information
service centers
contact support
product resources
parts for your system
give us feedback
associated links
.
} what's new
.
} contract access
.
} browse patch tree
.
} search patches
.
} join mailing list
.
} feedback
.
patches by topic
.
} DOS
.
} OpenVMS
.
} Security
.
} Tru64 Unix
.
} Ultrix 32
.
} Windows
.
} Windows NT
.
connection tools
.
} nameserver lookup
.
} traceroute
.
} ping
OpenVMS UCXAV_E13033 VAX and Alpha DEC TCP/IP V3.3 ECO Summary

NOTE: An OpenVMS saveset or PCSI installation file is stored on the Internet in a self-expanding compressed file. The name of the compressed file will be kit_name-dcx_vaxexe for OpenVMS VAX or kit_name-dcx_axpexe for OpenVMS Alpha. Once the file is copied to your system, it can be expanded by typing RUN compressed_file. The resultant file will be the OpenVMS saveset or PCSI installation file which can be used to install the ECO. Copyright (c) Digital Equipment Corporation 1995, 1996. All rights reserved. PRODUCT: DEC TCP/IP Services V3.3 for OpenVMS VAX DEC TCP/IP Services V3.3 for OpenVMS AXP OP/SYS: OpenVMS VAX OpenVMS Alpha SOURCE: Digital Equipment Corporation ECO INFORMATION: ECO Kit Name: UCXAV_E13033 ECO Kits Superseded by This ECO Kit: UCXAV_E10033 UCXECO9-033 (UCXECO) UCXECO7-033 UCXECO6-033 UCXECO5-033 UCXECO4-033 (ECO 4, ECO 5 and ECO 6 Were Never Officially Released Into TIMA) ECO Kit Approximate Size: 29,345 Blocks Kit Applies To: DEC TCP/IP Services V3.3 for OpenVMS VAX V5.5-2, V6.0, V6.1, V6.2 DEC TCP/IP Services V3.3 for OpenVMS AXP V6.1, V6.2 System/Cluster Reboot Necessary: Yes ECO KIT SUMMARY: An ECO kit exists for DEC TCP/IP Services V3.3 for OpenVMS VAX and OpenVMS Alpha. This kit addresses the following problems: --------------------------------------------------------------------------- Fixes for DEC TCP/IP Services V3.3 Kernel Images --------------------------------------------------------------------------- ECO 1 updates: -------------- ECO A 9-June-1995 Alpha and VAX Note: This ECO is a forward retrofit of ECO J for V3.2. Images: UCX$BGDRIVER.EXE UCX V3.3-7A (Alpha) UCX$INTERNET_SERVICES.EXE UCX V3.3-7A UCX$INTERNET_SERVICES_V6.EXE UCX V3.3-7A UCX$INTERNET_SERVICES_SEC.EXE UCX V3.3-7A UCX$INTERNET_SERVICES_SEC_V6.EXE UCX V3.3-7A UCX$INETACP.EXE UCX V3.3-7A Problems: 1. A crash occurs in SBDROP which calls PANIC due to what appears to be an inconsistent receive socket buffer. 2. A crash occurs in PWIP, in adjTCPwindow, with an access violation due to referencing a stale UCB. Solutions: Both of these crashes may be triggered when the PWIP application chooses to close a connection before it has deallocated all the MBUFs that have been passed to it. Both of these problems can be corrected by redesigning the mechanism used to handle the deferred TCP window adjustment for PWIP. Formerly, two UCB fields, UCB$L_BG_SO_CC and UCB$L_BG_SO_MBCNT, were used to keep track of the SO_CC and SO_MBCNT values associated with MBUFs passed up to PATHWORKS or DECnet/OSI. The redesigned mechanism makes use of a new structure, the DWAB (Deferred Window Adjustment Block), to keep track of these quantities. This redesign goes with PWIP changes to PWIPDRIVER_READ.C and PWIP_DRIVER_SUPP.C. It is imperative to install both changes (i.e., NET and PWIP) simultaneously. References: CFS.26962, CFS.27049, CFS.26447, CFS.27437, CFS.26903, CFS.27472 ECO B 21-Jun-1995 Alpha and VAX 27-Jun-1995 Images: UCX$BGDRIVER.EXE UCX V3.3-7B (Alpha) UCX$INTERNET_SERVICES.EXE UCX V3.3-7B UCX$INTERNET_SERVICES_V6.EXE UCX V3.3-7B UCX$INTERNET_SERVICES_SEC.EXE UCX V3.3-7B UCX$INTERNET_SERVICES_SEC_V6.EXE UCX V3.3-7B UCX$INETACP.EXE UCX V3.3-7B Problems: 1. When an ICMP_NETMASK_REQUEST is issued by a host whose address is 0.0.0.0, it is expected that an ICMP_NETMASK_REPLY will be broadcast in response, providing such a feature is enabled. An initial problem exists in that ICMP_INPUT() does not enable broadcasts (via the flag, IP_ALLOWBROADCAST) when it replies through IP_OUTPUT(). As a result, the error EACCESS is returned by the interface code. The user is supposed to be able to set the option to have an ICMP_NETMASK_REPLY broadcast in response to an ICMP_NETMASK_REQUEST. However, no facility currently exists to directly control such a feature. A guideline is that only gateways tend to generate such replies. (Although a specific host could be so enabled, this is not expected to be common.) Therefore, this feature will only be enabled for gateways. To turn on the feature, issue the command: UCX SET PROTOCOL ICMP /UNREACHABLE 2. A case of incorrect synchronization in the UCX$INETACP can leave the system hung with the UCX$INETACP in RWAST state waiting for I/O to run down on a BG device that the ACP has tried to deassign. Also, a crash occurs in INETACP_SERV_ACCEPT_CLOSE due to a non-zero value in the REQCB$W_CHAN_2 field which indicated that a valid channel existed and that the corresponding REQCB$L_UCB_2 was valid. 3. A crash occurs in INET_SLIP_OPEN when trying to initialize compression. 4. A system crash occurs in INET_SEL_READ_ALL with a zero pointer to the temporary space allocated for select. Solutions: 1. Change IP_ICMP_VMS.C to include OpenVMS conditional code which senses the "IPGATEWAY" flag (set by the above command), and calls ip_output() with the IF_ALLOWBROADCAST flag. When "IPGATEWAY" is set to FALSE, it results in disallowed broadcasts; requests from 0.0.0.0 are rejected by the UCX Ethernet layer which returns EACCES. 2. First, the synchronization error arose because we tried to execute substantive code in an AST thread in the UCX$INETACP. The AST thread was triggered by a Read ATTN completion. We should never execute anything but code to queue a REQCB in the context of the AST. The fix is to do just that in routine INETACP_USER_INFO_AST and to move the substantive code to INETACP_USER_INFO_AST_CONT. Second, the interpretation of the REQCB_W_CHAN_2 field is modified to take into account that this field is overlaid with the REQCB$W_PROTO field. Given that this latter field can only take the values 0 and 1, and given that valid channel numbers are 10, 20, 30, etc. (all in hex), we now interpret a non-zero number with the low bit clear as a valid channel and anything else (e.g., 1) as a non-channel. 3. The problem is that an allocation failure was unrecognized, and we used the SS$_xxx status code in R0 as if it were an address. The fix is to change the calling sequence to INIT_INET_COMPRESSION (in INET_COMPRESS.MAR and called from INET_SLIP.MAR) so it can recognize when it fails. From now on, the routine returns a status in R0 and the pointer to the allocated structure in R1. We also fixed a typographical error in INETACP_SLIP.MAR, in routine DETACH_VIRTUAL_TERMINAL, where a movl should have been a movw. 4. Upon entry to INET_SELECT, we no longer clear the field that holds the pointer to the temporary space until after we have rechecked it. When the caller passes a bad parameter or calls to select an already selected device, we erase the pointer to the temporary space allocated for a previous select call. References: 1. CFS.24959, CFS.28452 2. CFS.29320 ECO C 7-July-1995 Alpha and VAX Images: UCX$BGDRIVER.EXE UCX V3.3-7C (Alpha) UCX$INTERNET_SERVICES.EXE UCX V3.3-7C UCX$INTERNET_SERVICES_V6.EXE UCX V3.3-7C UCX$INTERNET_SERVICES_SEC.EXE UCX V3.3-7C UCX$INTERNET_SERVICES_SEC_V6.EXE UCX V3.3-7C UCX$INETACP.EXE UCX V3.3-7C Problem: A system crash occurs at INETACP_USER_INFO_AST_CONT in the UCX$INET_ACP process, due to a corrupted SERV$L_REXEC_FLNK queue. Solution: In the code introduced for ECO B, in the solution for problem 2, a problem was introduced that corrupted the SERV$L_REXEC_FLNK queue. In an attempt to remove all substantive code from routine INETACP_USER_INFO_AST, it was forgotten that when the routine is called, the REQCB is already queued on the SERV$L_REXEC_FLNK queue. Then when the same, already queued REQCB is queued to the AQB, the former queue becomes corrupted. The solution is to REMQUE the REQCB while still in AST context and before INSQUEing again. Reference: CFS.29197 ECO D 12-July-1995 Alpha and VAX Images: UCX$BGDRIVER.EXE UCX V3.3-7D (Alpha) UCX$INTERNET_SERVICES.EXE UCX V3.3-7D UCX$INTERNET_SERVICES_V6.EXE UCX V3.3-7D UCX$INTERNET_SERVICES_SEC.EXE UCX V3.3-7D UCX$INTERNET_SERVICES_SEC_V6.EXE UCX V3.3-7D UCX$INETACP.EXE UCX V3.3-7D Problem: A system crash occurs in UCX$INET_ACP process with KRNLSTAKNV. Solution: The source of this problem is that the UCX$INET_ACP process is calling UCX$ACCESS_SHR routines from kernel mode. These routines result in calls to RMS which does not support being called from kernel mode. The solution is to introduce a mechanism that allows the ACP to essentially continue a thread begun in kernel mode into user mode and then back to kernel mode. The implementation includes reorganizing the ACP's use of its kernel mode stack. From now on, the ACP switches to a private kernel mode stack as soon as it enters kernel mode. When it wants to continue a thread into user mode, it calls routine INETACP_CONTINUE_IN_USER_MODE, which wraps up its current private stack context, switches back to the normal kernel stack, and returns back to user mode, where the request is processed. When the user mode request is finished, we call back to kernel mode at routine INETACP_CONTINUE_KERNEL, pick up the context left on the private stack, and continue. References: CFS.27841, CFS.28514, CFS.29394, CFS.30262 ECO E 25-July-1995 Alpha and VAX Images: UCX$BGDRIVER.EXE UCX V3.3-7E (Alpha) UCX$INTERNET_SERVICES.EXE UCX V3.3-7E UCX$INTERNET_SERVICES_V6.EXE UCX V3.3-7E UCX$INTERNET_SERVICES_SEC.EXE UCX V3.3-7E UCX$INTERNET_SERVICES_SEC_V6.EXE UCX V3.3-7E UCX$INETACP.EXE UCX V3.3-7E Problems: 1. A system crash occurs in INET_GET_SINGLE_DATA due to an impossibly large value in SO$L_USER_OFFSET. 2. A system crash occurs in P_DOOPTIONS (IP_INPUT_VMS.C) in a movc3 instruction with R0 containing 0. Solutions: 1. The crash is due to structure skew (INPCB structure) between MACRO and C modules (on VAX only). The solution is to introduce a fill variable into the IN_PCB.H module to align subsequent fields and thereby eliminate the skew. After the correction to the declaration, we recompile all the C modules that use the INPCB, which are: IN_PCB_VMS.C, IP_OUTPUT_VMS.C, TCP_INPUT_VMS.C, TCP_OUTPUT_VMS.C, TCP_SUBR_VMS.C, TCP_TIMER_VMS.C, TCP_USRREQ_VMS.C, and UDP_USRREQ_VMS.C. 2. We called routine IFPTOIA and did not check the validity of the returned value. The solution is to check the returned value for the value NULL and reject it instead of using it. Reference: CFS.30118 ECO F 01-Aug-1995 Alpha and VAX Images: UCX$INETACP.EXE UCX V3.3-7F Problem: A system crash occurs in INETACP_FORMAT_REMOTE due to processing of an invalid UCB. It most probably occurs when a TELNET session is being terminated during closure of devices. Solution: The crash is most likely due to a timing issue when the INET_ACP tries to close a device to which a channel has already been deassigned. In trying to do so, since the UCB in question is no longer valid, we try to use this UCB and cause a crash due to incorrect information. This was found upon analysis of the crash dump when we looked at the UCB that was being used to close the device. In INETACP_TN_CLOSE we ensure that the device being closed is actually still open by the INET_ACP. Using $GETDVI, we get the device unit number and compare it to the unit in the device UCB. If the channel is invalid or the unit numbers are different, we do not attempt to continue closing the device. If for any reason (timing?) the device is already closed, we avoid using the invalid UCB to process things further, thus avoiding a system crash. Reference: CFS.30627 ECO G 16-Aug-1995 Alpha and VAX Image: UCX$INETACP.EXE UCX V3.3-7G Problem: Previous fix (ECO D/E) had the side-effect of causing incorrect offset data to be returned by IO$_ACPCONTROL QIOs in which a HOSTENT_OFFSET or NETENT_OFFSET structure was requested. Solution: Update the offsets in the copy of the buffer that will be returned, not in the original buffer written by UCX$ACCESS_GET. Reference: None; discovered during internal testing. This problem prevented the NFS client from operating properly. ECO 2 Updates: -------------- ECO H 07-Sep-1995 Alpha and VAX Image: UCX$INETACP.EXE UCX V3.3-7H Problem: The REXEC server should return the first byte of acknowledgment correctly. A zero should be returned if there were no problems in creating/authenticating the process and a 1 (or a positive number) should be returned if there was an error. Typically from a user's point of view the problem would be seen if the rexec command (from a U*ix machine) or rsh command (with username and password) were issued to an OpenVMS host with either the username and/or password being correct. In such a case, the host issuing the command would receive a first byte of zero indicating success when it was actually a failure to execute the remote command. Subsequently the REXEC server would return a 1 and the failure message, but for certain applications this might be too late. Solution: Rexec service should send an ASCII zero as the first byte only when there is no error in creating/authenticating the server process. We always sent a 'null' byte on the output port, following it up with a '1' later if there was an error. Instead, we now send this positive acknowledgment in the driver when we are writing out the first few bytes as output. In the case of an error, we clear the ccl bit in the UCB so that there is no carriage control associated with the with the output. Thus, the positive acknowledgment that is sent with carriage control enabled is completely avoided. References: CFS.22776, CFS.30992 ECO 3 Updates: -------------- ECO I 23-Sept-1995 Alpha and VAX Images: UCX$BGDRIVER.EXE UCX V3.3-7I (Alpha) UCX$INTERNET_SERVICES.EXE UCX V3.3-7I UCX$INTERNET_SERVICES_V6.EXE UCX V3.3-7I UCX$INTERNET_SERVICES_SEC.EXE UCX V3.3-7I UCX$INTERNET_SERVICES_SEC_V6.EXE UCX V3.3-7I UCX$INETACP.EXE UCX V3.3-7I Problem: System crash in UCX$INET_ROUTED process immediately after deleting the SLIP interface. Analysis: The crash is due to a window between the deallocation of the VCIB for the SLIP interface and the deallocation of the IF_UCB structure for this same interface. During this time there is a possibility for code to reference the deallocated VCIB, which results in the crash. Solution: In INET_SLIP_CLOSE, in the INET_SLIP.MAR module, we now clear the IF_UCB$L_VCIB_IP field as soon as we deallocate the VCIB. Reference: CFS.30062 ECO K 28-Sept-1995 Alpha and VAX Images: UCX$BGDRIVER.EXE UCX V3.3-7K (Alpha) UCX$INTERNET_SERVICES.EXE UCX V3.3-7K UCX$INTERNET_SERVICES_V6.EXE UCX V3.3-7K UCX$INTERNET_SERVICES_SEC.EXE UCX V3.3-7K UCX$INTERNET_SERVICES_SEC_V6.EXE UCX V3.3-7K Problem: Multiple pseudo-interfaces sharing a physical interface cannot all communicate across a wide-area network unless IP forwarding is enabled. Solution: In INET_SOURCE_CHECK, loop through the list of all pseudo interfaces before disallowing a packet which does not at first appear to be local. Reference: CFS.30905 ECO L 29-Sept-1995 Alpha and VAX Images: UCX$BGDRIVER.EXE UCX V3.3-7L (Alpha) UCX$INTERNET_SERVICES.EXE UCX V3.3-7L UCX$INTERNET_SERVICES_V6.EXE UCX V3.3-7L UCX$INTERNET_SERVICES_SEC.EXE UCX V3.3-7L UCX$INTERNET_SERVICES_SEC_V6.EXE UCX V3.3-7L UCX$INETACP.EXE UCX V3.3-7L Problem: Carriage control problems (incorrect printing of CCL characters) during RSH/REXEC execution. Solution: Incorporate carriage control for writes by the RSH/REXEC server. It now emulates the carriage control functions for a terminal driver. Only when the DEV$V_CCL bit in the UCB is set, we use P4 to determine the carriage control behavior desired. The specifications for the carriage control functions are the same as that documented for the terminal driver under the section "Write Function Carriage Control". Since only the RSH/REXEC server use the DEV$V_CCL bit, P4 will act as a carriage control modifier only for this server. P4 for any other writes will still behave as before (i.e., the current support of P4 as a flag to specify NBIO, MSG_PEEK and OOB still holds good). Reference: CFS.30821 ECO M 5-Oct-1995 Alpha and VAX Images: UCX$BGDRIVER.EXE UCX V3.3-7M (Alpha) UCX$INTERNET_SERVICES.EXE UCX V3.3-7M UCX$INTERNET_SERVICES_V6.EXE UCX V3.3-7M UCX$INTERNET_SERVICES_SEC.EXE UCX V3.3-7M UCX$INTERNET_SERVICES_SEC_V6.EXE UCX V3.3-7M UCX$INETACP.EXE UCX V3.3-7M Problem: System pool fills up with VCRPs, exhausting pool, causing a CLUEXIT. Solution: Problem is essentially the same as the one that caused us to invent adjTCPwindow, for deferred TCP window adjustment, but in this case it is for UDP. Basically, UDP datagrams are received by the BGDRIVER and passed up to PWIP, but although they are not consumed immediately, in the BGDRIVER we update the socket buffer counters as though they had been consumed. The result is that a flood of datagrams can then be received. The solution is to defer the accounting in the socket buffer until the datagrams are consumed by the PWIP client. Note that this fix entails changes to both PWIPDRIVER and to the NET facility. Reference: CFS.31492 ECO 5 Updates: -------------- ECO N 18-Oct-1995 Alpha and VAX Images: UCX$BGDRIVER.EXE UCX V3.3-7N (Alpha) UCX$INTERNET_SERVICES.EXE UCX V3.3-7N UCX$INTERNET_SERVICES_V6.EXE UCX V3.3-7N UCX$INTERNET_SERVICES_SEC.EXE UCX V3.3-7N UCX$INTERNET_SERVICES_SEC_V6.EXE UCX V3.3-7N UCX$INETACP.EXE UCX V3.3-7N Problem: System crashes during shutdown, due to deleting an interface that has contradictory data in its IF structure. Namely, the IF is for a SLIP device (i.e., SLx) but the IF$B_IFTYPE field indicates an Ethernet device. Solution: The problem is a flaw in the logic that creates pseudo interfaces. Creating a pseudo interface on an existing SLIP interface produced the inconsistent data structures that led to the crash. This can be fixed in one of two ways; namely by prohibiting the creation of pseudo interfaces on SLIP lines or by adding logic to create them in a consistent manner. Analysis of the problem reveals that it would require a substantial investment of time to add the functionality to allow pseudo interfaces on SLIP lines and the benefit of this proposed functionality seems marginal. Therefore, we have opted to prevent this from occurring. Reference: CFS.33896 ECO 6 Updates: -------------- ECO O 30-Oct-1995 Alpha and VAX Images: UCX$BGDRIVER.EXE UCX V3.3-7O (Alpha) UCX$INTERNET_SERVICES.EXE UCX V3.3-7O UCX$INTERNET_SERVICES_V6.EXE UCX V3.3-7O UCX$INTERNET_SERVICES_SEC.EXE UCX V3.3-7O UCX$INTERNET_SERVICES_SEC_V6.EXE UCX V3.3-7O Problem: TCP packets arriving out-of-order (as a result of intervening segments being dropped by the network, for example) could cause the low water mark to remain set upon completion of a READ operation using the IO$M_LOCKBUF modifier. If the following READ specifies a smaller buffer size, then it might never complete due to the lingering effects of the one which was satisfied with re-ordered packets. Solution: Always zero the low water mark upon completion of any READ operation where IO$M_LOCKBUF was specified. Reference: CFS.33932 ECO P 8-Nov-1995 Alpha and VAX Images: UCX$BGDRIVER.EXE UCX V3.3-7P (Alpha) UCX$INTERNET_SERVICES.EXE UCX V3.3-7P UCX$INTERNET_SERVICES_V6.EXE UCX V3.3-7P UCX$INTERNET_SERVICES_SEC.EXE UCX V3.3-7P UCX$INTERNET_SERVICES_SEC_V6.EXE UCX V3.3-7P UCX$INETACP.EXE UCX V3.3-7P Problem: Inadequate ARP table causes too many ARP messages to be broadcast. Also, correct counting of ARP messages to properly account for which ones are broadcast and which are not (INET_IF_VCI.MAR) Solution: Allow for dynamic allocation of ARP table at UCX startup. Note that this is an interim fix that will require UCP support in a future release. Reference: CFS.33563 ECO Q 17-Nov-1995 Alpha and VAX Images: UCX$BGDRIVER.EXE UCX V3.3-7Q (Alpha) UCX$INTERNET_SERVICES.EXE UCX V3.3-7Q UCX$INTERNET_SERVICES_V6.EXE UCX V3.3-7Q UCX$INTERNET_SERVICES_SEC.EXE UCX V3.3-7Q UCX$INTERNET_SERVICES_SEC_V6.EXE UCX V3.3-7Q UCX$INETACP.EXE UCX V3.3-7Q Problem: System crash in security driver when using the local interface. Solution: In INET_IPINTR (INET_IN_OUT.MAR), in security driver conditional code, check for zero pointer to IF_UCB, and if so, use the Local interface. Reference: Internal report ECO R 6-Dec-1995 Alpha and VAX Images: UCX$BGDRIVER.EXE UCX V3.3-7R (Alpha) UCX$INTERNET_SERVICES.EXE UCX V3.3-7R UCX$INTERNET_SERVICES_V6.EXE UCX V3.3-7R UCX$INTERNET_SERVICES_SEC.EXE UCX V3.3-7R UCX$INTERNET_SERVICES_SEC_V6.EXE UCX V3.3-7R UCX$INETACP.EXE UCX V3.3-7R Problems: 1. Synchronization crashes in PWIP. 2. The enhancement to allow >64KB transfers broke some older applications that make use of the P5 vectored write mechanism. 3. Crash (Alpha only) after having deallocated the SLIP structure to the INETCB free list where it was re-allocated and corrupted. Solutions: 1. Along with PWIP changes done in PWIP ECO F, we clear the UCB$L_BG_TEL_UCB field when we deassign a BG UCB. 2. Go back to accepting only 16 bits of transfer length. 3. Dispatching for the REQCB$C_DEACTIVATE_SLIP function was inexplicably left out of the Alpha specific dispatch table. As a result, a SLIP structure, queued as an REQCB to the AQB was prematurely deallocated, reallocated, and then trashed. The fix is to add dispatching for this function to the table. References: 1. Internal report 2. CFS.35548 3. CFS.35206 ECO 7 Updates: -------------- ECO S 14-Dec-1995 Alpha and VAX Images: UCX$BGDRIVER.EXE UCX V3.3-7S (Alpha) UCX$INTERNET_SERVICES.EXE UCX V3.3-7S UCX$INTERNET_SERVICES_V6.EXE UCX V3.3-7S UCX$INTERNET_SERVICES_SEC.EXE UCX V3.3-7S UCX$INTERNET_SERVICES_SEC_V6.EXE UCX V3.3-7S UCX$INETACP.EXE UCX V3.3-7S Problem: Second attempt at fixing following problem. System pool fills up with VCRPs, exhausting pool, causing a CLUEXIT. Solution: This problem arises when we receive many duplicate TCP packets each only containing a FIN and also containing a sequence number one higher than the one we are expecting. As a result, we queue these redundant packets until all pool is consumed with them. The problem is that we do not recognize them as redundant. With the addition of a logic, we will recognize the redundant packets and deallocate them immediately. Reference: CFS.34368 ECO T 28-Dec-1995 Alpha and VAX Images: UCX$BGDRIVER.EXE UCX V3.3-7T (Alpha) UCX$INTERNET_SERVICES.EXE UCX V3.3-7T UCX$INTERNET_SERVICES_V6.EXE UCX V3.3-7T UCX$INTERNET_SERVICES_SEC.EXE UCX V3.3-7T UCX$INTERNET_SERVICES_SEC_V6.EXE UCX V3.3-7T UCX$INETACP.EXE UCX V3.3-7T Problem: System crash, INVEXCEPTN, due to VCRP$L_DEALLOC_RTN field being zero. Solution: The solution is to test for the error and then to skip the deallocation in this case. Reference: CFS.36199 ECO U 28-Dec-1995 Alpha and VAX Images: UCX$BGDRIVER.EXE UCX V3.3-7U UCX$INTERNET_SERVICES.EXE UCX V3.3-7U UCX$INTERNET_SERVICES_V6.EXE UCX V3.3-7U UCX$INTERNET_SERVICES_SEC.EXE UCX V3.3-7U UCX$INTERNET_SERVICES_SEC_V6.EXE UCX V3.3-7U Problems: After urgent TCP data (OOB data) arrives and is read, the socket is still considered to be in OOB state until non-OOB data arrives. The select() call, however, was returning immediately in this case due to the OOB state, even when no OOB data was available. Solutions: Do not return from select() with an exception flag if the receive buffer is empty. Reference: CFS.36143 ECO V 4-Jan-1996 Alpha and VAX Images: UCX$BGDRIVER.EXE UCX V3.3-7V (Alpha) UCX$INTERNET_SERVICES.EXE UCX V3.3-7V UCX$INTERNET_SERVICES_V6.EXE UCX V3.3-7V UCX$INTERNET_SERVICES_SEC.EXE UCX V3.3-7V UCX$INTERNET_SERVICES_SEC_V6.EXE UCX V3.3-7V UCX$INETACP.EXE UCX V3.3-7V Problem: If 2 processes are sharing a socket and process A calls $DASSGN on that shared BG device, I/O queued to the device by process B is also canceled. Solution: In INET$CANCEL, initialize two new fields in the UCB so that later on, downstream, we can determine that this is NOT the last deassign of this device, and in this case we selectively cancel only the I/Os that belong to the process doing the $DASSGN. References: CFS.33352, CFS.26480 ECO W 11-Jan-1996 - 29-Jan-1996 Alpha and VAX Images: UCX$BGDRIVER.EXE UCX V3.3-7W (Alpha) UCX$INTERNET_SERVICES.EXE UCX V3.3-7W UCX$INTERNET_SERVICES_V6.EXE UCX V3.3-7W UCX$INTERNET_SERVICES_SEC.EXE UCX V3.3-7W UCX$INTERNET_SERVICES_SEC_V6.EXE UCX V3.3-7W UCX$INETACP.EXE UCX V3.3-7W Problems: 1. Applications such as the PATHWORKS mail server, which disable carriage control (CCL) after being invoked through RSH or REXEC, were preventing the initial NULL byte from ever being sent. 2. System crash in TNDRIVER with INVEXCEPTN due to continuing sporadic synchronization problems. 3. System enters a high IPL loop repeatedly calling COM$FLUSHATTNS from INET_FLUSH_ALL_AST. 4. System crash in EXE_STD$PRIMITIVE_FORK, trying to deliver what is supposed to be an Attention AST, but is really a pointer to a the PWIPDRIVER receive socket call back routine. 5. When the UCX TELNET server accepted a connection from a host with a 12-digit IP address, that host's name was not correctly resolved. Instead, the IP address was shown. 6. Automatically configuring SLIP interfaces using the "UCX SET CONFIG INTERFACE" command, fails while hand configuring of the same interface succeeds. 7. System crash in data link driver, when we return to the data link driver after its having called us back from a SYNCH_JSB invocation. At the time we return to the data link R4 contains a zero, and the VCIB has been deallocated. Solutions: 1. Allow the DCL procedure which starts RSH and REXEC connections to perform the first output, guaranteeing inclusion of the NULL. Also, do not add a leading LF character before the first output, since this is unnecessary and produces an extra blank line. 2. The main part of this fix is to introduce more extensive validation code in the TNDRIVER. However some of the data to be validated comes from the BGDRIVER and is most conveniently passed to the TNDRIVER in the INETCB structure. Therefore, we create a new field in the INETCB, the INETCB$L_BG_UCB_SIZE_TYPE_FLCK field, and initialize it in INETACP_INIT.MAR, in routine, INETACP_INIT_INETCB. The data is referred to in the TNDRIVER in module UCX$TN_SERVER_MAIN.MAR, in routines TN$START_COMMON and TN_UCB_TO_BG_UCB. The INETACP code additions are benign and can coexist with previous TNDRIVER versions, however the new TNDRIVER requires the new INETACP. 3. This problem was introduced by ECO V. The problem arises in a loop where we call COM$FLUSHATTNS. The solution is to only traverse the loop once when doing selective cancel I/O. 4. This problem is a synchronization problem between PWIP and the the BGDRIVER (or UCX$INTERNET_SERVICES for VAX). At the time of the crash we have a SOCKET structure that points to a UCB but the corresponding UCB does not point back to the SOCKET. This apparently occurs when we are tearing down a connection in PWIP and some data comes into the SOCKET. The fix for this requires changes in NET and in PWIP. In NET, we define two new bits: UCB$X_BG_PWIP in the UCB$W_BG_FLAGS word and SOCKBUF$X_PWIP in the SOCKBUF$L_FLAGS field. In NET, these bits are only looked at in INET_MAIN.MAR. Both of these bits are set and cleared in PWIP. Also, previously PWIP only set the UCB$X_BG_SELECT bit in the UCB$W_BG_FLAGS word instead of the first of these new bits. This led to some confusion in INET_MAIN.MAR. Now we unambiguously label PWIP devices. Note that the SOCKBUF$L_FLAGS field is declared in INET_NPGD.SDL for macro code and a corresponding SB_FLAGS field is declared in SOCKETVAR.H for the C code. For consistency's sake, we also declare a new bit, SB_PWIP, to correspond to SOCKBUF$X_PWIP even though it is not referred to in the C code. 5. Do not add a trailing space character to the ASCII form of the IP address. This extra character caused the address to exceed the legal length, in the case of a 12-digit address, and prevent translation. 6. When the configuration database contains an automatic SET INTERFACE for a SLIP interface, the UCP implicitly performs a UCX SET INTERFACE command that includes the /BROADCAST mask parameter. Since SLIP interfaces do not support broadcasting, this causes us to reject the interface. The solution is to introduce code in INETACP_SLIP, in routine, CREATE_P5_BUFFER, to explicitly ignore the command to set a broadcast address on the interface. 7. The normal flow on VCI port management calls to the data link is we issue a ASYNCH_JSB (which returns to our caller); VCI calls us back when the port management function is initiated; VCI calls us back after the port management event associated with the completion of the function occurs. The bug was that if the VCI callback indicated an error, we assumed that they would not make the second callback and that therefore we should perform cleanup at the time of the first callback. The result was that we cleaned up things that the data link still had need of. The fix is to always assume that the second callback will occur, and use a timeout mechanism to get us going for cleanup if they do not give us the second callback. In that way, we do not perform the cleanup prematurely. References: 1. Reported informally via the PATHWORKS group 2. CFS.36056 3. Internal testing 4. CFS.33756 5. CFS.27194 6. Internal reports 7. CFS.37081 Notes: 1. To constitute a complete fix for the PATHWORKS mail server problem, this new ECO must be used in conjunction with the new startup files (UCX$RSHD_STARTUP.COM and UCX$REXECD_STARTUP.COM) from the INSTALL component. 2. The INETACP code additions are benign and can coexist with previous TNDRIVER versions, however the new TNDRIVER requires the new INETACP. 3. These code additions require the corresponding new PWIPDRIVER, if one is running PWIP. ECO 8 Updates: -------------- ECO X 14-Feb-1996 Alpha and VAX Images: UCX$BGDRIVER.EXE UCX V3.3-7X (Alpha) UCX$INTERNET_SERVICES.EXE UCX V3.3-7X UCX$INTERNET_SERVICES_V6.EXE UCX V3.3-7X UCX$INTERNET_SERVICES_SEC.EXE UCX V3.3-7X UCX$INTERNET_SERVICES_SEC_V6.EXE UCX V3.3-7X UCX$INETACP.EXE UCX V3.3-7X ECO Y 27-Feb-1996 Alpha and VAX Images: UCX$BGDRIVER.EXE UCX V3.3-7Y (Alpha) UCX$INTERNET_SERVICES.EXE UCX V3.3-7Y UCX$INTERNET_SERVICES_V6.EXE UCX V3.3-7Y UCX$INTERNET_SERVICES_SEC.EXE UCX V3.3-7Y UCX$INTERNET_SERVICES_SEC_V6.EXE UCX V3.3-7Y UCX$INETACP.EXE UCX V3.3-7Y Problem: 1. On VAX systems, when SLIP is enabled on a terminal line, the UCB for the terminal has an unrelocated value for its FDT. This might result in a crash. 2. Problems with shared sockets. First the selective cancel I/O functionality introduced in ECO D and refined in ECO E still did not properly select I/Os to be canceled. Second, when I/Os were selectively canceled, if the active IRP on a queue was canceled, the queue was left in limbo, with no mechanism for getting it restarted. Third, a day one design flaw was found in the code that implements the basic mechanism that manages the read, write and miscellaneous queues on a BG device. This flaw effectively precluded true shared sockets and manifested itself in the following way. When a queued operation completed, the next operation on the queue was then handled in the context of the process that handled the first operation, even when the new operation did not belong to this process. The result was corruption of the address space of the process within whose context the erroneous I/O was handled. 3. The maximum socket listener backlog of 5 was too small for modern applications. Solution: 1. In INET_SLIP_OPEN in INET_SLIP.MAR, we were already relocating the class driver vector table. At the same time we now relocate the DDT$L_FDT field. 2. The first problem problem was solved by tightening the selection criteria in the INET_SHUTDOWN_FLUSH_* (INET_ACCESS.MAR) family of routines so as to properly select the I/Os to be canceled and to then re-construct the queues. The second problem, restarting stalled queues was solved by introducing a new routine, QUEUE_INET_KAST, in INET_MAIN.MAR, which is a simplified version of INET_IRP_UP_1, and whose purpose is to restart queues in the context of a particular process. The third problem, where I/O request were being serviced in the wrong context, was solved by introducing a test for the proper context into the main queue dispatching routine, INET_ENQ_IO_RESTART, in INET_RCV_XMT.MAR. When a mis-match is found, the queue is now left dormant, but a call is made to the new routine, QUEUE_INET_KAST, to restart the queue in the proper process context. 3. Increase the backlog to 32 (up to 512, for privileged processes). References: 1. Security report 2. Internal report of hung processes, in RWAST state, running WWW server ECO Z 29-Feb-1996 Alpha and VAX Images: UCX$BGDRIVER.EXE UCX V3.3-7Z (Alpha) UCX$INTERNET_SERVICES.EXE UCX V3.3-7Z UCX$INTERNET_SERVICES_V6.EXE UCX V3.3-7Z UCX$INTERNET_SERVICES_SEC.EXE UCX V3.3-7Z UCX$INTERNET_SERVICES_SEC_V6.EXE UCX V3.3-7Z UCX$INETACP.EXE UCX V3.3-7Z Problem: Code review of the ECO G (V4.0) fix turned up a very subtle and unlikely to occur problem in the code that should be corrected for shared sockets. The problem has to do with the INET_KAST mechanism that delivers an AST to the process that owns an IRP that needs to be "resumed". In the unlikely event that two IRPs on the same UCB, belonging to different processes, need to be "resumed" simultaneously, then the second of these IRPs will be processed in the context of the wrong process. The reason that this appears to be so unlikely is that for this to happen, there would have to be ongoing I/O on at least two of the queues of one UCB, with the active IRPs belonging to different processes, and the I/Os would need "resumption" within a very small window. Solution: The solution to this is to add a test in INET_KAST, in INET_MAIN.MAR, just before we "resume" an IRP. At that point we test that we are executing in the context of the process that owns the IRP. If we are then we just proceed. If we are not, we then queue the ACB to the process that owns the IRP, and we exit from the current AST running in the context of the wrong process. This will in effect cause us to re-enter the routine we are currently executing in, INET_KAST, but in the context of the correct process. We will then continue correctly. Reference: Internal code review ECO AA 1-Apr-1996 Alpha and VAX Images: UCX$BGDRIVER.EXE UCX V3.3-7AA (Alpha) UCX$INTERNET_SERVICES.EXE UCX V3.3-7AA UCX$INTERNET_SERVICES_V6.EXE UCX V3.3-7AA UCX$INTERNET_SERVICES_SEC.EXE UCX V3.3-7AA UCX$INTERNET_SERVICES_SEC_V6.EXE UCX V3.3-7AA UCX$INETACP.EXE UCX V3.3-7AA Problems: 1. With the CASE_INSENSITIVE flag enabled, proxies were not being correctly found in the communication proxy cache. 2. System crash in INET_SOCONNECT due to the fact that UCB$L_BG_SOCKET contains the value zero. Solution: 1. Correct and simplify the sequential proxy lookup routine. 2. After picking up the contents of UCB$L_BG_SOCKET, validate its contents, and if invalid terminate the I/O request with the SS$_BADPARAM status. Reference: 1. Internal report 2. CFS.40207 ECO 9 Updates: -------------- ECO B 23-APR-1996 Alpha and VAX Images: UCX$BGDRIVER.EXE UCX V3.3-7AB (Alpha) UCX$INTERNET_SERVICES.EXE UCX V3.3-7AB UCX$INTERNET_SERVICES_V6.EXE UCX V3.3-7AB UCX$INTERNET_SERVICES_SEC.EXE UCX V3.3-7AB UCX$INTERNET_SERVICES_SEC_V6.EXE UCX V3.3-7AB UCX$INETACP.EXE UCX V3.3-7AB Problems: System crash in INET_SOACCEPT due to the fact that contains the value zero. This happened at UCX shutdown. Solutions: After picking up the contents of INET$GL_PTR_INETCB, validate its contents by making sure that it is a system address. If it is invalid terminate the I/O request with the SS$_DEVNOTMOUNT status. Reference: CFS.39581 ECO AC 1-MAY-1996 Alpha and VAX Equivalent to V4.0 ECO L. Images: UCX$BGDRIVER.EXE UCX V3.3-7AC (Alpha) UCX$INTERNET_SERVICES.EXE UCX V3.3-7AC UCX$INTERNET_SERVICES_V6.EXE UCX V3.3-7AC UCX$INTERNET_SERVICES_SEC.EXE UCX V3.3-7AC UCX$INTERNET_SERVICES_SEC_V6.EXE UCX V3.3-7AC UCX$INETACP.EXE UCX V3.3-7AC Problems: System crash in INET_SELECT_UNBUILD_LIST due to a corrupt select list. Solutions: Apparently in fixing the problems associated with shared sockets (ECOs Y and Z above) we changed the behavior slightly so that we failed to ALWAYS remove a UCB from a select list before deassigning and deallocating the UCB. As a result it was possible to have a deallocated UCB remaining on a select list. In INET$CANCEL_COMMON we now call a new routine, INET_SELECT_REMOVE_UCB, that unconditionally removes an about to be deallocated UCB from any select list that it might be on. Reference: Internal report ECO AD 2-MAY-1996 Alpha and VAX Image: UCX$BGDRIVER.EXE UCX V3.3-7AD (Alpha) UCX$INTERNET_SERVICES.EXE UCX V3.3-7AD UCX$INTERNET_SERVICES_V6.EXE UCX V3.3-7AD UCX$INTERNET_SERVICES_SEC.EXE UCX V3.3-7AD UCX$INTERNET_SERVICES_SEC_V6.EXE UCX V3.3-7AD UCX$INETACP.EXE UCX V3.3-7AD Problems: System crash AT TNDRIVER+2C6 due to corruption at TNDRIVER+2CC. Solutions: The problem arises because of the overlaying of UCB$L_PDT by the UCX defined field UCB$L_ACP_LINK in both BG and TN UCBs. In UCX shutdown, under certain conditions, the TTDRIVER will misinterpret the UCB$L_PDT field and use it as a pointer into what it thinks is another UCB. The TTDRIVER will then clear a longword at an offset from the pointer. Since in our case we have a pointer into the TNDRIVER at UCB$L_PDT, we wind up with the TTDRIVER clearing a longword of code in the TNDRIVER, leading to a subsequent crash when UCX is re-started. References: Internal reports ECO AE 15-MAY-1996 Alpha and VAX Equivalent to V4.0 ECO O. Image: UCX$BGDRIVER.EXE UCX V3.3-7AE (Alpha) UCX$INTERNET_SERVICES.EXE UCX V3.3-7AE UCX$INTERNET_SERVICES_V6.EXE UCX V3.3-7AE UCX$INTERNET_SERVICES_SEC.EXE UCX V3.3-7AE UCX$INTERNET_SERVICES_SEC_V6.EXE UCX V3.3-7AE UCX$INETACP.EXE UCX V3.3-7AE Problem: System crash at IP_FORWARD+1F8, after bringing UCX down and then restarting it. Solution: Initialize the IPFORWARD_RT cache to eliminate the possibility that we will try to forward a packet using a stale IF pointer. Reference: CFS.40260 ECO 10 Updates: -------------- ECO AF 12-JUL-1996 Alpha and VAX Images: UCX$BGDRIVER.EXE UCX V3.3-7AF UCX$INTERNET_SERVICES.EXE UCX V3.3-7AF UCX$INTERNET_SERVICES_V6.EXE UCX V3.3-7AF UCX$INTERNET_SERVICES_SEC.EXE UCX V3.3-7AF UCX$INTERNET_SERVICES_SEC_V6.EXE UCX V3.3-7AF UCX$INETACP.EXE UCX V3.3-7AF Problem: 1. When the originating and target usernames match in an incoming request, but do not match in the proxy database, the proxy is not properly located. 2. The routing table gets filled with entries that all have the RTF_UP flag bit cleared, but have a non-zero reference count. Solution: 1. Change the way matching usernames are handled during proxy lookup. 2. In routine rtalloc, in ROUTE_VMS.C, prevent overwriting of the ro->ro_rt field before calling rtfree for this rtentry. This prevents the orphaning of old entries with an outstanding refcount. Reference: CFS.42195 ECO AG 13-JUL-1996 Alpha and VAX Images: UCX$BGDRIVER.EXE UCX V3.3-7AG UCX$INTERNET_SERVICES.EXE UCX V3.3-7AG UCX$INTERNET_SERVICES_V6.EXE UCX V3.3-7AG UCX$INTERNET_SERVICES_SEC.EXE UCX V3.3-7AG UCX$INTERNET_SERVICES_SEC_V6.EXE UCX V3.3-7AG UCX$INETACP.EXE UCX V3.3-7AG Problems: Fix number 2, in the above ECO may have a curious side effect. It was observed that the default route is not created properly. Solutions: Until the above behavior can be verified, fix number 2, of ECO AF is removed, and the previous version of ROUTE_VMS.C has been restored. Reference: Internal testing. ECO 11 Updates: -------------- ECO AH 6-AUG-1996 Alpha and VAX Images: UCX$BGDRIVER.EXE UCX V3.3-7AH (Alpha) UCX$INTERNET_SERVICES.EXE UCX V3.3-7AH UCX$INTERNET_SERVICES_V6.EXE UCX V3.3-7AH UCX$INTERNET_SERVICES_SEC.EXE UCX V3.3-7AH UCX$INTERNET_SERVICES_SEC_V6.EXE UCX V3.3-7AH UCX$INETACP.EXE UCX V3.3-7AH Problems: 1. The continuing saga of the routing table getting filled with entries that all have the RTF_UP flag bit cleared, but have a non-zero reference count. 2. System crash in routine ip_output due to INP_ROUTE.RO_RT pointing at deallocated rtentry. Solutions: 1. First we reinstate the fix mentioned in ECO AF but withdrawn in ECO AG. The problem noted there was a build problem only. Also, in routine ip_output, in IP_OUTPUT_VMS.C we were overwriting the static global route structure, 'iproute', without first doing an RTFREE of the rtentry associated with the route. The result is an rtentry whose refcnt is permanently increased by 1, and which therefore will never go away. The solution is to do the RTFREE. 2. In routine rtpurge, an incorrect call to rtfree has the possibility of deallocating an rtentry while leaving an INP_ROUTE.RO_RT field still pointing at it. This is the exact situation cited above. The solution is to remove the call to rtfree. References: CFS.43319, CFS.42499 ECO 12 Updates: --------------- ECO 10-Sept-1996 Alpha and VAX Images: UCX$BGDRIVER.EXE UCX V3.3-7AI (Alpha) UCX$INTERNET_SERVICES.EXE UCX V3.3-7AI UCX$INTERNET_SERVICES_V6.EXE UCX V3.3-7AI UCX$INTERNET_SERVICES_SEC.EXE UCX V3.3-7AI UCX$INTERNET_SERVICES_SEC_V6.EXE UCX V3.3-7AI UCX$INETACP.EXE UCX V3.3-7AI Problem: Continuing occurrences of problem reported in ECO M. System pool fills up with VCRPs, exhausting pool, causing a CLUEXIT. Solution: This problem is really not a UCX problem, but rather a datalink driver problem. However, we in UCX can add a small amount of code and prevent the problem from crashing the system. The problem is triggered by a broadcast storm, from an errant Windows NT node, that produces thousands and thousands of broadcast datagrams so quickly that all pool is overrun even before we get to look at the first of them. Normally UCX accepts a datagram from the datalink driver and forks on it (i.e. queues it for later processing) so that control can be immediately passed back to the datalink driver. When the datalink finishes its tasks, we go to process the datagrams on our queue. In the case here, the datalink receives so many datagrams that it does not finish with its tasks until the queued datagrams occupy all of pool. The fix that we put in artificially limits the number of such datagrams that we will queue to ourselves. When the number of unprocessed queued datagrams passes a threshold value (1000 for now) we begin deallocating all datagrams above this threshold. This in effect prevents the datalink from overrunning pool since each new received datagram can use the deallocated space. References: CFS.44630, CFS.31492 ECO 13 Updates: -------------- Note: The ECO 12 problem with the MTHRTL ID is fixed. --------------------------------------------------------------------------- Fixes for DEC TCP/IP Services V3.3 UCX$INETDRIVER.EXE --------------------------------------------------------------------------- ECO 1 Updates: -------------- ECO A 20-Jun-1995 Alpha and VAX Images: UCX$INETDRIVER.EXE UCX V3.3-7A Problem: The system hangs when a process running in a Kernel AST thread tries to reacquire the I/O Database Mutex that it already owns. Solution: The INET_CANCEL routine, which calls EXE$CANCELN, explicitly releases the I/O Database Mutex before calling EXE$CANCELN and explicitly reacquires it after return from EXE$CANCELN. This is done because EXE$CANCELN lowers IPL to 0, thereby leaving the possibility of being interrupted by an AST that might try to reacquire the Mutex. INET_CANCEL routine reorganized. Reference: CFS.29258 Problem: Thread startup fails to initialize OP_R_FLAGS. This can lead to problems with asynchrony and I/O completion. Solution: When initializing the thread, clear OP_R_FLAGS to ensure that the initial context is clear. References: CFS.29331 CFS.29334 ECO 8 updates: --------------- ECO B 20-Feb-1996 Alpha and VAX Images: UCX$INETDRIVER.EXE UCX V3.3-7B Problem: Multi-processor system crashes with CPUSPINWAIT bugcheck. Solution: The I/O completion inserts the IRP into the CPU-specific I/O completion queue and posts an interrupt to the CPU's I/O completion routine. This code executed at IPL 0 and, if the process was rescheduled onto another processor, it is possible that the INSQUE instruction was attempting to insert the IRP onto the last processor's I/O completion queue. This could cause corruption in the IRP/ACB as INSQUE is not interlocked between multiple processors. The correction elevates IPL to IPL$_SCHED to prevent the rescheduling of the process during this critical set of instructions. Reference: CFS.34601 --------------------------------------------------------------------------- Fixes for DEC TCP/IP Services V3.3 PWIP images --------------------------------------------------------------------------- ECO 1 updates: --------------- ECO A 9-June-1995 Alpha and VAX Note: This ECO is a forward retrofit of ECOs C and D for V3.2. Images: UCX$PWIPDRIVER.EXE UCX V3.3-7A Problems: 1. A system crash occurs in PANIC (in UCX$INTERNET_SERVICES or UCX$BGDRIVER) called from SBDROP, due to an inconsistent receive socket buffer showing non-zero CC (Character Count) with no MBUFs hanging off the socket buffer. 2. A system crash occurs in adjTCPwindow when doing arithmetic on fields of a stale UCB. Solutions: 1. The problem is due to premature clearing of the UCB$M_BG_Defer_WinAdj flag in routine PWIP_HANDSHAKE_TRANSPORT in PWIPDRIVER_SUPP.C. The fix eliminates clearing this bit in this routine. 2. This problem is triggered by an upstream MBUF being freed after the connection has been closed. Previously, MBUFs that passed upstream had a pointer to the UCB and if the MBUF was not deallocated before the connection disappeared, there was a risk of using a stale UCB. The solution to this is to create a new structure, the DWAB (Deferred Window Adjustment Block) which is guaranteed to persist until the last MBUF is returned. We now point the MBUFs to the DWAB instead of to the UCB. Note that this fix involves changes to both PWIPDRIVER and to the NET facility (UCX$INTERNET_SERVICES.EXE for VAX and UCX$BGDRIVER.EXE for Alpha). Reference: CFS.26962 ECO 3 Updates: -------------- ECO B 22-Sep-1995 Alpha and VAX Images: UCX$PWIPACP.EXE UCX V3.3-7B Problems: IO$_SETMODE to set socket option SO_REUSEADDR is failing. Also set TCP option, TCP_NODELAY. Solutions: Fixed. Reference: CFS.32670 ECO C 5-Oct-1995 Alpha and VAX Images: UCX$PWIPDRIVER.EXE UCX V3.3-7C Problems: 1. System pool fills up with VCRPs, exhausting pool, causing a CLUEXIT. 2. Receipt of SS$_UNREACHABLE causes connections to disappear. Solution: 1. Problem is essentially the same as the one that caused us to invent adjTCPwindow, for deferred TCP window adjustment, but in this case it is for UDP. Basically, UDP datagrams are received by the BGDRIVER and passed up to PWIP, but although they are not consumed immediately, in the BGDRIVER we update the socket buffer counters as though they had been consumed. The result is that a flood of datagrams can then be received. The solution is to defer the accounting in the socket buffer until the datagrams are consumed by the PWIP client. 2. In PWIP_READ, in PWIP_READ.C, when the return status from the call to UCX_RECEIVE is SS$_UNREACHABLE, then we retry the call. Note that this fix entails changes to both PWIPDRIVER and to the NET facility (UCX$INTERNET_SERVICES.EXE for VAX and UCX$BGDRIVER.EXE for ALPHA). Reference: CFS.31492, CFS.29873 ECO 5 Updates: -------------- ECO D 24-Oct-1995 Alpha and VAX Images: UCX$PWIPACP.EXE UCX V3.3-7D Problem: Crash in PWIP ACP due to invalid kernel stack Solution: In PWIPACP.C, call MMG$EXPKSTK() to extend kernel stack by 4 pages. This must be done in kernel mode so call via SYS$CMKRNL(). This is conditionalized to VAX only. Reference: CFS.33625 ECO 6 Updates: -------------- ECO E 20-Nov-1995 Alpha and VAX Note, this ECO is a backward retrofit of a fix for V4.0. Images: UCX$PWIPDRIVER.EXE UCX V3.3-7E Problem: System crash due to pool corruption. We typically see the pattern: 00000000 00000000 xxxxxxxx yyyy0002 where xxxxxxxx is one of the IP addresses of the crashing system, overwriting valid data in pool. Solution: The problem was found in routine BUILD_ADDR_ACK, in module PWIPDRIVER_ACK.C, where we allocate and fill in an MBLK with data. The last part of the data is an array of SOCKADDR_IN structures, which are filled in with the IP address(es) of the local system. When the local system is multi-homed (i.e., it has more than one IP address) this array has more than one entry. The problem was in the calculation for the address of the second and subsequent entries in this array. The calculation in error used the following "C" instruction: sockaddr = sockaddr+sizeof(struct sockaddr_in); Since sockaddr was declared: struct sockaddr_in *sockaddr; the result of the calculation was to add the SQUARE of the length of an entry to sockaddr, rather than the length of one entry. This is because "C" considers each unit to be an entry structure length. The correct calculation is to replace the offending line with: sockaddr = sockaddr + 1; The crash resulted from the calculation giving an address well beyond the end of the structure, falling into some other structure in pool. When pool checking is NOT on, this error may well go unnoticed for long periods of time since it is very likely that the corrupted memory is currently unallocated. Reference: CFS.34737 ECO F 4-Dec-1995 Alpha and VAX Note, this ECO is a backward retrofit of a fix for V4.0. Images: UCX$PWIPDRIVER.EXE UCX V3.3-7F Problem: Various crashes in PWIP due to synchronization problems. For example, one of the problems is due to the arrival of a downstream write after an upstream disconnect has arrived. Solution: One of the sources of the lack of synchronization was that in several places in the code we were deassigning a BG device without having first done a QIO IO$_DEACCESS on the device. For normal UCX devices this is allowed, but for kernel interface access devices, as are all PWIP BG devices, this is not allowed. Therefore, the solution was to add explicit IO$_DEACCESS|IO$M_SHUTDOWN QIO requests prior to deassigning the BG devices. These changes were point into several routines in module PWIPACP_UCX.C. Another source of problem was the failure to verify that a connection was in the midst of being torn down. To solve this we introduced two specific verification steps, one in PWIP_RAST (in PWIPDRIVER_READ.C) and the other in PWIP_WRITE (in PWIPDRIVER_WRITE.C). Specifically, we verify in each case, whether the PDCB and the BG UCB mutually point at each other. If not, we conclude that the connection is in the process of being torn down and we act accordingly. Reference: Internal testing ECO 7 Updates: -------------- ECO G 16-Jan-1996 Alpha and VAX This corresponds to ECO B for V4.0 Images: UCX$PWIPDRIVER.EXE UCX V3.3-7G Problem: System crash in EXE_STD$PRIMITIVE_FORK, trying to deliver what is supposed to be an Attention AST, but is really a pointer to a the PWIPDRIVER receive socket call back routine. Solution: This problem is a synchronization problem between PWIP and the the BGDRIVER (or UCX$INTERNET_SERVICES for VAX). At the time of the crash we have a SOCKET structure that points to a UCB but the corresponding UCB does not point back to the SOCKET. This apparently occurs when we are tearing down a connection in PWIP and some data comes into the SOCKET. The fix for this requires changes in NET and in PWIP. In PWIP, we eliminate the BG_KERNEL_AST_HOOK bit (defined in PWIPDRIVER_UCX.H as equivalent to UCB$X_BG_SELECT) and define the new BG_PWIP (equivalent to the new NET bit UCB$X_BG_PWIP) and use it instead of BG_KERNEL_AST_HOOK. In a small change in routine PWIP_HANDRELEASE_TRANSPORT, we no longer always clear this bit. Now we only clear it if the UCB points to a SOCKET. This change corresponds to a change in INET_MAIN.MAR (in INET_DELIVER_ATTNAST) that will eliminate the cause of the crash. We also set the new SOCKBUF$x_PWIP bit in the RCV and XMT socket buffers in routine PWIP_HANDSHAKE_TRANSPORT and we clear them in routine PWIP_HANDRELEASE_TRANSPORT. Note that for the ECO stream, PWIPDRIVER_UCX.H explicitly defines SOCKBUF$M_PWIP as 0x20. For the normal stream, this definition will be picked up from NET. Reference: CFS.33756 Note: These code additions require the corresponding new BGDRIVER/INTERNET_SERVICES. ECO 8 Updates: -------------- ECO H 15-Feb-1996 Alpha and VAX This corresponds to ECO C for V4.0 Images: UCX$PWIPDRIVER.EXE UCX V3.3-7H Problem: System crash in PWIP_HANDRELEASE_TRANSPORT, called from CLOSE_DEV, with the alleged BG UCB argument not really a BG UCB. Solution: This problem is apparently another PWIP synchronization bug. We were handed a PDCB from upstream and we took the UCB pointer from it. In order to alleviate the problem we will now verify that the purported UCB is still pointing back to the PDCB before writing into the UCB. Reference: CFS.33756 ECO 10 Updates: -------------- ECO I 14-June-1996 Alpha and VAX This corresponds to ECO D for V4.0 Images: UCX$PWIPDRIVER.EXE UCX V3.3-7I Problem: Improper deallocation of multi MBUF UDP datagrams. Solution: Create a new, simple deallocation routine, adjUDPaccounting_single, and pass its address on the call to allocate the MBLK/DBLK for EACH MBUF in a UDP datagram, not only the first. This routine detaches the given MBUF from the possible chain and deallocates it by calling the older adjUDPaccounting. This latter routine deallocates an entire chain, but since we are only passing it a single detached MBUF, it will deallocate just that. Reference: CFS.40812 --------------------------------------------------------------------------- Fixes for DEC TCP/IP Services V3.3 BIND Services. --------------------------------------------------------------------------- ECO 6 Updates: -------------- ECO C 20-Nov-1995 Alpha and VAX Images: UCX$ACCESS_SHR.EXE UCX V3.3-7C Problem: On the local host issuing "UCX SHOW MX" local host just returned the local record, but filtered all the remaining MX records. Solution: An invalid filter routine filtered MX records for the localhost affecting SMTP mail. Reference: CFS.33206 ECO 7 Updates: -------------- ECO D 02-Jan-1996 Alpha and VAX Images: UCX$ACCESS_SHR.EXE UCX V3.3-7D Problem: SHOW MX does not show a local host as a gateway. Solution: Stop the local MX lookup AFTER the local host was shown. Reference: CFS.35888 --------------------------------------------------------------------------- Fixes for DEC TCP/IP Services V3.3 DNS Name Service. --------------------------------------------------------------------------- ECO 7 Updates: -------------- ECO A 18-Jan-1996 Alpha and VAX Images: UCX$BIND_SERVER.EXE UCX V3.3-7A Problem: DNS name server, when configured as a secondary would report that its database (DB files) had expired records based on the preset expiration time, and would hence not perform "zone transfer" for updating its records from the primary. "UCX SHO HOST" would still display the stale records in the secondary. Besides, the log file would display "repetitive" annoying message to the DNS admin/user indicating the expiration of the "DB files", with every request for "zone transfer" or via "UCX SHO HOST". The log file would tend to grow over a period of time. The workaround available to the customer was to either delete the "backup copies" of the database files relevant to the secondary name server, and restart the name server (only to see it happening again after the expiration time) or to increase the "serial #" of the SOA record in the primary server. Both these workarounds called for repeated user intervention. Solution: With the expiration of the time (as set in the SOA record), momentarily lower the "serial number" in the "SOA" record that has been read via db_load routine to "zero" thus causing the secondary name server to have a lower serial number compared to the "serial number" in the SOA record of the "primary". This would force the "zone transfer" to take place The fix is in sync with the DNS community. A validating routine was added in NS_FORW.C to display the error/warning message related to the expired zone (display just once and remove duplicate messages) Reference: CFS.35882 ECO B 26-Jan-1996 Alpha and VAX Images: UCX$BIND_SERVER.EXE UCX V3.3-7B Problem: An annoying information message, that would spit out BIND server information message to "syslog file" for every failed "recvfrom" calls on port 53 for invalid packet length has been fixed. The reason for the "connect refused/rejected" is that it contained an explicit check: if ((n == -1) && (errno == EWOULDBLOCK)) break; The break caused it to skip over the line that logged the error. Reference: CFS.35882 --------------------------------------------------------------------------- Fixes for DEC TCP/IP Services V3.3 UCX$TELNET.EXE --------------------------------------------------------------------------- ECO 1 Updates: -------------- ECO A 01-Jun-1995 Alpha and VAX Images: UCX$TELNET.EXE UCX V3.3-7A Problem: The following commands do not parse properly: SET AYT SET ECHO SET ERASE SET ESCAPE SET FLUSHOUTPUT SET INTERRUPT SET KILL SET MODE (*1) SET QUIT Solution: Changes to the parameter's name causes the routine GET_SPECIAL() to return the incorrect string. It returns TRUE P1, not label P1. Instead, pass the name of the parameter to get_special(). *1) Pass "P2" instead of "P1" to CLI_GET_VALUE(). Problem: The /TERMINAL_TYPE qualifier of the TELNET command does not apply the setting as the default for the image execution, as it should. Solution: Store the terminal type in the default type buffer instead of in a temporary buffer. ECO 3 Updates: -------------- ECO B 18-Sept-1995 Alpha and VAX Images: UCX$TNDRIVER.EXE UCX V3.3-7B Problem: System crash with invalid R9 in checking code that verifies registers after fork. Solution: Use PRESERVE_REG and PUSH_REG/POP_REG and PUSHR_FULL/POPR_FULL to ensure that full 64-bit registers are preserved. ECO C 21-Sept-1995 Alpha and VAX Images: UCX$TNDRIVER.EXE UCX V3.3-7C Problem: Virtual terminals do not work for incoming sessions. Solution: Ensure that the TT2$M_DISCONNECT bit is set when virtual terminals are enabled (UCX SET COMM /REMOTE=VIRTUAL). Reference: CFS.32412 ECO D 11-Oct-1995 Alpha and VAX Images: UCX$TNDRIVER.EXE UCX V3.3-7D Problem: Following closely-spaced logins/logouts involving TNA devices, the TNDRIVER enters a state wherein additional devices are no longer being deleted, but remain in existence until the next system reboot. Processes which generate a lot of output during execution of an exit handler and image rundown would hang following breakage of the TCP/IP network link, rather than being able to finish their output and terminate. Executing a UCX STOP COMMUNICATION command while active TNDRIVER terminal sessions existed could cause a crash. Solution: Initialize the appropriate timer queue fields upon UCB creation. Remove the limit on the number of output operations which are permitted following forced closure of a terminal session. Validate the AQB before utilizing it. Reference: Numerous customer problem reports ECO 4 Updates: -------------- ECO E 11-OCT-1995 Alpha and VAX Images: UCX$TELNET.EXE UCX V3.3-7E Problem: When using IBM-3278-4 [R] model terminals, if the user is entering some data when at the same time unsolicited data comes from the IBM host, data is lost. In the SNA version we return error status to the IBM host, if we are in a state that does not expect incoming data from the IBM host. The IBM host can handle the error on the out-of-band channel and sync up with the terminal emulator. With TN3270 there is only one channel and the TN3270 server on the host does not deal with the error messages well. Solution: If the terminal emulator receives an unexpected message from the host, do not reject it as in the past. We now set the response status to 0 in the state table and act on the incoming message as if it were expected. Because we use different buffers for incoming and outgoing data, no data will be lost. Reference: CFS.29514, CFS.23060, CFS.27550 ECO 5 Updates: -------------- ECO G 01-Nov-1995 Alpha and VAX Images: UCX$TELNET.EXE UCX V3.3-7G Problem: Most terminal settings appear to be lost when TELNET sets up an interactive session with the remote host. Solution: TELNET honors the terminal's settings, but it sets the terminal PASTHRU characteristic which causes the client's terminal driver to ignore those settings. The correction involves recoding the client's terminal driver interface to use the appropriate set of QIOs and library calls so that the PASTHRU setting is not required. Reference: CFS.32095, CFS.33818 ECO 6 Updates: -------------- ECO H 14-Nov-1995 Alpha and VAX Images: UCX$TNDRIVER.EXE UCX V3.3-7H Problem: System crash TN$ABORT due to synchronization error whereby the TN UCB is pointing at a stale BG UCB. Solution: In several places in the TNDRIVER, the code tests for the validity of the pointer to the BG UCB by verifying that it is a system address. In order to minimize the likelihood of this problem, we introduce a more rigorous validation of the address of the BG UCB. In particular, if the address is a system address, then we verify that this BG UCB is also pointing to the TN UCB at offset UCB$L_BG_TEL_UCB. If not, we essentially determine that the address is not valid and refuse to use it. Reference: CFS.34783 ECO I 20-Nov-1995 Alpha and VAX Images: UCX$TELNET.EXE UCX V3.3-7I Problem: When the user specifies the /NOINTERACTIVE TELNET command qualifier two different problems could arise: 1. If no node name was specified, the user was given the interactive prompt TELNET>. Since the user specified /NOINTERACTIVE on the command line, this behavior was not desired. 2. The TELNET keypad key "FIND" allowed the user to spawn commands off to DCL. If the /NOINTERACTIVE TELNET command qualifier was specified, allowing the user to spawn commands off to DCL created a security leak. The TELNET keypad key "FIND" was disabled if the command qualifier /NOINTERACTIVE was specified. Solution: Support for the /NOINTERACTIVE command qualifier. Reference: Internal problem report ECO J 29-Nov-1995 Alpha and VAX Images: UCX$TELNET.EXE UCX V3.3-7J Problem: ECO G created a problem obtaining and providing the terminal type consistently to the remote host. The order of the terminal type determination was not consistent because the TTType() routine was being called from three places. The order should be: 1. The default terminal type of SYS$OUTPUT, 2. Any SET TERMINAL/DEVICE setting from the TELNET.INI (initialization) file, 3. The value of the qualifier /TERMINAL_TYPE from the TELNET command line. Solution: Modified the mainline code to obtain the default terminal type of SYS$OUTPUT, invoke the startup procedure, then use the value from the /TERMINAL_TYPE qualifier. Reference: CFS.33818 Problem: Exiting TN3270 using Crtl/Z leaves Crtl/T and Crtl/Y disabled. Solution: When the STE$HIBER() routine returns, assume a link disconnect and set the session's NT_STATUS to SS$_LINKDISCON. This will cause the exit path to clean up properly. Reference: CFS.34668 ECO 7 Updates: -------------- ECO K 11-Jan-1996 Alpha and VAX Images: UCX$TNDRIVER.EXE UCX V3.3-7K Problem: Continuing system crashes due to synchronization errors whereby the TN UCB is pointing at a stale BG UCB. Solution: Expand the validity tests introduced in ECO H above and make them more extensive. In addition, add a new test to validate the link between a supposed BG UCB and a SOCKET. In expanding the validity tests, we now use data passed from the BGDRIVER (in the INETCB). This means that this ECO of the TNDRIVER requires at least ECO W of the NET facility. In addition, as a build note, in order to properly link the TNDRIVER with the reference to a new INETCB field, it is necessary to temporarily copy the INET.MLB from the OBJ_PAT directories to the relevant OBJ directories. Reference: CFS.36056 ECO L 17-Jan-1996 Alpha and VAX Images: UCX$TELNET.EXE UCX V3.3-7L Problem: On AXP system, the TN3270 emulator does not load the customized EBCDIC/DMCS Translation table, and fails with the error message %UCX-E-TRALOAFAI, failed to load translation tables from SYS$SYSROOT:[SYSLIB]TN3270DEF.TBL Solution: The image header format has changed. A new alias code has been defined for Alpha and the location of the number of header disk blocks has also been moved. This requires that a new LOAD_xxx routine be developed. This routine has the name LOAD_AXP. Reference: CFS.33698 ECO M 18-Jan-1996 Alpha and VAX Images: UCX$TELNET.EXE UCX V3.3-7M Problem: ECO G and ECO J created a problem providing the terminal type consistently to the remote host from the TELNET prompt. This is now corrected (again). Solution: Modify the CONNECT/OPEN code to default the terminal type buffer to that obtained using the ECO J algorithm. If P3 of the command is specified, it will be used instead of the default value. ECO 8 Updates: -------------- ECO N 6-Feb-1996 Alpha and VAX Note: This is the analog of ECO F for V4.0. Images: UCX$TNDRIVER.EXE UCX V3.3-7N Problem: System crash due to corrupted memory. Specifically the area in a TN UCB beyond the UCB$T_TEL_TTY_NAME, for approximately 64KB, may have been destroyed. Solution: The problem is an ineffective length calculation for a MOVC3 instruction. Apparently we calculate a negative length in some circumstances, and then we did a compare (that was NOT unsigned) that permitted a very large effective length to be used. The solution is to insure that is within bounds. Reference: CFS.37455 ECO O 25-Mar-1996 Alpha and VAX Images: UCX$TELNET.EXE UCX V3.3-7O Problem: Entering an escape sequence while in character mode results in the transmission of multiple segments to the server. This causes problems when poorly-coded servers expect escape sequences to appear in a single input segment. This correction is a courtesy. Solution: Enable escape sequence recognition and, when in character mode, remove the limitation of one character for the input buffer. Reference: CFS.38533 ECO 9 Updates: -------------- ECO P 4-May-1996 Alpha and VAX Images: UCX$TNDRIVER.EXE UCX V3.3-7P Problem: System crash AT TNDRIVER+2C6 due to corruption at TNDRIVER+2CC. Solution: The problem arises because of the overlaying of UCB$L_PDT by the UCX defined field UCB$L_ACP_LINK in both BG and TN UCBs. In UCX shutdown, under certain conditions, the TTDRIVER (i.e., Terminal Class Driver) will misinterpret the UCB$L_PDT field and use it as a pointer into what it thinks is another UCB. The TTDRIVER will then clear a longword at an offset from the pointer. Since in our case we have a pointer into the TNDRIVER at UCB$L_PDT, we wind up with the TTDRIVER clearing a longword of code in the TNDRIVER, leading to a subsequent crash when UCX is re-started. The solution is part of a coordinated change that also has NET component changes. See the ECO L description in the NET 'redeem' for V4.0 for a full description of the changes. References: Internal reports ECO 10 Updates: -------------- ECO Q 19-Jun-1996 Alpha and VAX Images: UCX$TELNET.EXE UCX V3.3-7Q UCX$TNDRIVER.EXE UCX V3.3-7Q Problem: When creating an outbound session, the TNDRIVER automatically sends WILL-DO-ECHO and WILL-DO-SGA in the output stream. This creates problems from some TELNET clients/devices on the remote host. Solution: In TELNET client, add the /OPTIONS qualifier to accept ECHO and SGA (and others) as options keywords which will be passed to the INETACP at session creation. In TNDRIVER, add code to sense that this is an outbound session and, to negotiate ECHO and SGA if the user has selected the options from the TELNET client. Reference: CFS.41867 Problem: The TELNET CREATE_SESSION command does not accept more than four digits for the port number parameter. Solution: Increase the size of the buffer used to read the port number from DCL. This correction was also applied to CREATE_INCOMING_SESSION and ATTACH. Reference: CFS.42159 ECO R 8-July-1996 Alpha and VAX Images: UCX$TNDRIVER.EXE UCX V3.3-7R Problem: Incoming TELNET sessions hang. Solution: Problem is caused by previous fix. An incorrect branch destination caused us to skip part of normal negotiation for inbound sessions. In UCX$TN_SERVER_TELNET.MAR, we modify the branch destination of a newly introduced instruction so that previous behavior for inbound sessions is retained. Reference: CFS.0895 ECO S 15-July-1996 Alpha and VAX Images: UCX$TELNET.EXE UCX V3.3-7S Problem: The TELNET DELETE_SESSION command returns a false error message. Solution: Correct the status check on the $ASSIGN() to the network device. Reference: Local testing. --------------------------------------------------------------------------- Fixes for DEC TCP/IP Services V3.3 Management Control Program (UCP) --------------------------------------------------------------------------- ECO 1 Updates: -------------- ECO A 16-Jun-1995 Alpha and VAX Images: UCX$UCP.EXE UCX V3.3-7A Problem: The /HOLD qualifier is not supported in UCX ANALYZE MAIL/REPAIR even though it is documented. Solution: Provide parser support in UCP for the /HOLD qualifier. The other part of this fix is in SMTP (and is included in ECO A for SMTP images) to provide the rest of the support to place entries on hold after an ANALYZE MAIL /REPAIR has been executed. References: CFS.23288, CFS.23828 ECO 5 Updates: -------------- ECO B 01-Nov-1995 Alpha and VAX Image: UCX$UCP.EXE UCX V3.3-7B Problem: UCP crash with the SET CONFIGURATION INTERFACE command when an invalid broadcast mask is specified. Solution: Validate the broadcast mask string. Reference: CFS.32916 ECO 6 Updates: -------------- ECO C 12-Dec-1995 Alpha and VAX Image: UCX$UCP.EXE UCX V3.3-7C Problem: Permanently defined CLUSTER_TIMER is lost after restart of UCX. Solution: Send CLUSTER_TIMER to INET_ACP along with all other communication parameters. Reference: CFS.29886 ECO 7 Updates: -------------- ECO D 29-JAN-1996 Alpha and VAX Images: UCX$PING.EXE UCX V3.3-7D Problem: PING always returns $STATUS=1 when used with qualifiers. Solution: The finish() fixed to return UCX$_LOOP[IN]ACT status codes. Reference: CFS.37154 ECO 8 Updates: -------------- ECO E 27-FEB-1996 Alpha and VAX Image: PING.EXE UCX V3.3-7E Problem: Ping would not resolve hostnames that start with "X" correctly. Solution: Relink UCX$PING.EXE against updated UCX$IPC_SHR. Reference: CFS.37910 ECO 10 Updates: -------------- ECO F 8-JUN-1996 Alpha and VAX Image: UCX$UCP.EXE UCX V3.3-7F Problem: Probe and drop timer are not propagated upon UCX startup if drop timer is lower than the default probe timer (75 seconds). Solution: Reverse order of probe and drop timer settings upon startup so that new (lower) probe timer value is already set by the time of setting drop timer value. Reference: CFS.40000 Problem: In SHOW PROXY display, if the last record is both NFS and communication, only its NFS part is displayed. Solution: Make proper "end of file" situation handling. Reference: CFS.41660 --------------------------------------------------------------------------- Fixes for DEC TCP/IP Services V3.3 UCX$IPC_SHR.EXE --------------------------------------------------------------------------- ECO 1 Updates: -------------- ECO A 14-June-1995 Alpha and VAX Image: UCX$IPC_SHR.EXE UCX V3.3-7A Problem: When one thread blocked I/O in a multithreaded environment, other threads were also intermittently blocked. Solution: The DECthreads environment does not always correctly handle the case where threads are sharing an event flag, each waiting for it to be set. Modify the UCX socket library so that a new event flag is allocated for each operation, rather than using the same event flag over and over. Reference: CFS.28055 ECO 6 Updates: -------------- ECO B 1-Dec-1995 Alpha and VAX Images: UCX$IPC_SHR.EXE UCX V3.3-7B Problem: Due to a typo in the previous ECO, the select() call intermittently returned an incorrect status. Solution: Fix the typo -- R1 should have been R8. ECO 8 Updates: -------------- ECO C 25-Dec-1996 Alpha and VAX Images: UCX$IPC_SHR.EXE UCX V3.3-7C Problem: The INET_ADDR does not resolve hex and octal prefix correctly. Hex addr must have a prefix 0x and octals must have 0 in front. Routine should return -1 for all unresolved addresses. Solution: Routine now checks for '0' as the first char and the following 'x'. Also checks for trailing characters at the end. Reference: CFS.37910 ECO D 28-Feb-1996 Images: UCX$IPC_SHR.EXE UCX V3.3-7D Problem: In UCX$CLOSE, we performed an IO$_DEACCESS operation. When sockets are shared between multiple processes, this means that one process closing a socket would prevent other processes from continuing to use it. Solution: If the reference count on the affected device socket is greater than 1, skip the IO$_DEACCESS. Reference: Internal report --------------------------------------------------------------------------- Fixes for DEC TCP/IP Services V3.3 SNMP_ AGENT --------------------------------------------------------------------------- --------------------------------------------------------------------------- Fixes for DEC TCP/IP Services V3.3 UCX$BOOTP.EXE --------------------------------------------------------------------------- ECO 1 Updates: -------------- ECO A 7-Aug-1995 Alpha and VAX Images: UCX$BOOTP.EXE UCX V3.3-09 Problems: 1. Boot replies are not properly sent to BOOTP relay servers (wrong port). 2. Cannot run interactively for testing. 3. ACCVIO when BOOTP client name is not defined. 4. Cannot find client load file. 5. No client host name in boot reply. 6. Omit file version number in load file name. 7. Obtain all local IP addresses from kernel, and send proper one for each client. 8. There are references to "gateway" when "relay" is the proper term. Solutions: 1. Fix check for relay agent address in GIADDR for BOOTREQUEST, not BOOTREPLY op code. Send replies to relay ("gateway") servers' ServerPort. Use the terms "ClientPort" and "ServerPort to be consistent with RFC951. 2. Fix socket()/bind() problem so we can run the BOOTP server interactively. 3. Fix BootRequest() to handle clients that have no host name; this caused an ACCVIO. 4. Fix GetFileSize() to properly handle file name construction when there is no host name. 5. Fix VendHost() to handle null or abbreviated host name. 6. Move file name to BOOTP response in GetFileName and leave off the file version number. 7. Instead of trusting that GETHOSTNAME() returns the host name that points to ALL interfaces, read the IFNET structure from the kernel, and build a table of known local IP addresses for outgoing responses to use in GIADDR. Match subnet masks to select the appropriate address to send. Put the server name in the response packet, according to the the name associated with the interface, i.e., GETHOSTBYADDR(). 8. Have the Trace routines refer to the relay as a relay, not a "gateway." Reference: CFS.22665 ECO 4 Updates: -------------- ECO B 20-Oct-1995 Alpha and VAX Images: UCX$BOOTP.EXE UCX V3.3-07B Problem: Send BOOTP relay responses to relay host, not client. Fix socket()/bind() problem so BOOTP can be run interactively. Fix ACCVIO caused when client has no host name. Fix file name construction when there is no Host name. Put fully qualified domain name for client in response, if it fits. Do not trust GETHOSTNAME()/GETHOSTBYNAME() to return all possible IP addresses; use SENSEMODE QIOs to build full list and scan routing table to identify appropriate IP address to include in response to client. Put the server name in the response options area. Put Gateway(s) in response options area. Handle nonexistent boot file properly. Solution: Fix check for relay agent address in GIADDR for BOOTREQUEST, not BOOTREPLY opcode. Send replies to relay ('gateway') servers' ServerPort. Use the terms 'ClientPort' and 'ServerPort' to be consistent with RFC951. Fix socket()/bind() problem so we can run BOOTP server interactively. Fix BootRequest() to handle clients that have no host name - this caused an ACCVIO. Fix GetFileSize() to properly handle file name construction when there is no HostName. Fix VendHost() to handle null or abbreviated HostName. Move file name to BOOTP response in GetFileName, and leave off the file version number. Instead of trusting that GETHOSTNAME() returns the host name that points to ALL interfaces, read the IFNET structure from the kernel, and build a table of known local IP addresses for outgoing responses to use in GIADDR. Match subnet masks to select the appropriate address to send. Put the server name in the response packet, according to the the name associated with the interface, i.e. GETHOSTBYADDR() Have the Trace routines refer to the relay as a relay, not a 'gateway'. The semantics are confusing enough (thanks to RFC 951). It's a relay, not a gateway. In SUBNET_MATCH, fix for() loop to test correctly (n < ifnum). Remove one-line function NET_MATCH(), and in GET_IPROUTE() use an AND to compare a network route to a target address. In GET_IPROUTE(), initialize variable route to NULL, and if no route to the client is found, ignore the request. In TraceReply(), check to see if the file exists, and if not say so, instead of printing "-1 Blocks" and no file name. A small optimization: In INIT(), check for only one interface. If only one interface exists, do not allocate the RTABLE because it will not be needed. In BootReply, if only one interface exists, do not scan the route table to try to match interface addresses. In BootRequest, handle non-existent file correctly (ignore the request unless the client specified a file, in which case we return a null file string). In GET_ROUTABLE(), use MAXROUTECOUNT, not ROUTECOUNT (which is not yet defined) when specifying the size of RTABLE in the QIO. In INIT(), print a message when UCX$TFTP_ROOT does not exist, so it is clear why BOOTP exits instead of running. References: CFS.22665, CFS.32366, CFS.3247, CFS.31249 ECO 6 Updates: -------------- ECO C 29-Nov-1995 Alpha and VAX Images: UCX$TFTP.EXE UCX V3.3-7C Problem: Endless loop when client NAKs a DATA packet on RRQ Random insertion of 0D (CRs) into binary RRQ DATA Solution: In proper checking for NAK (ERROR) response and drop transfer in progress.When checking for duplicate requests, if I/O is pending on the existing (first) transfer, kill it anyway and cancel the I/O. Corrected typo in if statement that checked for ASCII mode and caused 0Ds to be inserted. References: CFS.33938 Images: UCX$BOOTP.EXE UCX V3.3-7C Problem: If client supplies file name but the file does not exist, BOOTP drops request. It should respond with a null file name field. Solution: If file does not exist, zero file name field in response and send it. Also, for debugging purposes, add check for ARP record to see if client is already known. This allows BOOTP client test program to send test requests with an arbitrary hardware address (i.e. 01-02-03-04-05-06) --------------------------------------------------------------------------- Fixes for DEC TCP/IP Services V3.3 R Commands. --------------------------------------------------------------------------- ECO 3 Updates: -------------- ECO A 03-Oct-1995 Alpha and VAX Images: UCX$RSH.EXE UCX V3.3-7A Problem: Problem using /SYSERROR in RSH command Solution: Alter the order in which create/bind/connect sockets in SETUP_NETWORK_ENVIRONMENT(). When diagnostics/error messages need to be sent to a different device other than STDOUT, we need to execute code such that SOCK_1 gets created/bound/connected first before we work with SOCK_2. No new code added, just changed the order of execution. Reference: CFS.31263 Procedure: RSH.CLD Problem: RSH did not work with /user or /password alone but worked for the combination. Solution: Fix the code in RSH.CLD so that /user and /password can be used individually. Reference: CFS.32208 ECO 4 Updates: -------------- ECO B 16-Oct-1995 Alpha and VAX Images: UCX$RSH.EXE UCX V3.3-7B Problem: Fix a problem introduced in ECO A (3.3) where the RSH command was failing with a bind() error on STDOUT on execution. Solution: Had inadvertently missed using an initial address of 0 to bind the socket for STDOUT. References: CFS.31263, CFS.33663, CFS.32208 ECO 7 Updates: -------------- ECO C 16-Nov-1995 Alpha and VAX Images: UCX$RSH.EXE UCX V3.3-7C Problem: Output from RSH is not correct both in leading and ending new lines. The output log file is missing blank lines. The output is prematurely truncated (not being flushed). Solution: Sense the device type of SYS$OUTPUT and modify routine WRITE_OUTPUT() to generate the proper output. Ensure that the buffer is flushed. Reference: Internal reports ECO D 31-Jan-1996 Alpha and VAX Images: UCX$RSH.EXE UCX V3.3-7D Problem: Command lines not enclosed in quotes are converted to lower case. Solution: Parse the command line appropriately. References: Internal reports Problem: Fragments of the output stream are lost if it contains NULL character(s). Solution: Fixed. Reference: Internal report ECO 10 Updates: -------------- ECO E 17-Jun-1996 Alpha and VAX Images: UCX$RSH.EXE UCX V3.3-7E Problems: 1. Customer would like the ability to enable TCP KEEPALIVE similar to FTP and TELNET clients. 2. Interactive mode does not work properly. 3. Output of RSH/REXEC is slow (300 baud). 4. Output of RSH/REXEC generates lines of single characters when output is directed to a non-terminal. Solutions: Fixed. References: 1. CFS.33696 2. CFS.38608 3. CFS.40055 4. CFS.40513 --------------------------------------------------------------------------- Fixes for DEC TCP/IP Services V3.3 REMOTE COPY Command. --------------------------------------------------------------------------- ECO 3 Updates: -------------- ECO A 15-Jun-1995 Alpha and VAX Images: UCX$RCP.EXE UCX V3.3-7A Problem: Error setting privileges. Solution: Alter the order of steps to set privileges. Do privilege check/sets only in RRESVPORT(). Problem: Exit with proper status after execution of RCP command. Solution: Though RCP has its own message facility, we were not exiting with a proper status indicating success/failure. Changed all the relevant routines to do this. Limitation : On a remote-remote copy since we use RSH to execute the RCP command remotely, exit status always indicates success due to the inability of RSH to return anything else. Reference: Internal reports ECO 4 Updates: -------------- ECO B 17-Oct-1995 Alpha and VAX Images: UCX$RCP.EXE UCX V3.3-7B Problem: RCP client waiting for acknowledgment message Solution: RCP server needs to send a single byte of acknowledgment due to changes in the RSH/REXEC server code. --------------------------------------------------------------------------- Fixes for DEC TCP/IP Services V3.3 NFS Server --------------------------------------------------------------------------- ECO 2 Updates: -------------- ECO A 07-Sep-1995 Alpha and VAX Images: UCX$CFS_SHR.EXE UCX V3.3-7A Problem: Reading a fixed, sequential file which has an incomplete last record resulted in the loss of the partial record. Solution: This fix removes the application of a previous fix from V3.2 ECO A as it pertains to sequential files containing fixed length records. Reference: CFS.27713 ECO 3 Updates: -------------- ECO B 11-Oct-1995 Alpha and VAX Images: UCX$CFS_SHR.EXE UCX V3.2-7B Problem: Call to BFS$$SLEEP had one extra digit of 0 in its argument, thus sleeping for 5 seconds instead of a half second when cache buffers are depleted. This causes a sparse write to take much longer than necessary. Solution: Eliminate extra 0 digit. Reference: CFS.31281 Problem: The thread synchronization routines could leave ASTs disabled on internal calls. This results in a kernel mode loop within ASTDEL attempting to deliver ASTs to executive mode while ASTs are disabled. Solution: Clear the AST context bits when the thread goes asynchronous. Reference: CFS.30672 ECO 7 Updates: -------------- ECO E 26-Dec-1995 Alpha and VAX Images: UCX$CFS_SHR UCX V3.3-7E Problem: Server returns null in the $ADF$ file for unknown or missing version limit. It should be %X7FFF. This confuses the client into purging when it should not. Solution: Substitute %X7FFF for null in the VMS_VERLIMIT filed of the RDCB extension. Reference: CFS.33538 ECO 8 Updates: -------------- ECO F 16-Feb-1996 Alpha and VAX Images: UCX$CFS_SHR.EXE Problem: Device, volume and file protections, and ACLs are not supported properly. Solution: Sense V6+ of OpenVMS, add support for the volume ORB and the new protection mask formats, and add support for ACLs using VM variable allocations. Reference: CFS.22201 Problem: Renaming directory files on file systems which are exported with the TYPELESS_DIRECTORIES option require that the file type .DIR is specified on the from and to file names. Solution: The file type .DIR should be enforced (if provided) and defaulted to .DIR;1 if absent. Reference: CFS.37981 ECO G 20-Feb-1996 Alpha and VAX Images: UCX$CFS_SHR.EXE V3.3-7G Problem: When the export option NODATA_CONVERSION is selected for a file system, STREAMCR files are converted to STREAMLF format. Solution: Change the file system code to return the data in its raw state when NODATA_CONVERSION is set, and convert from STREAMCR to STREAMLF otherwise. Reference: CFS.38128 ECO H 24-Mar-1996 Alpha and VAX Images: UCX$CFS_SHR.EXE UCX V3.3-7H Problem: When installing ECO A onto a non-V5 system, a protection error (NOPRIV) is generated when performing the device protection check. Solution: Change the system version check condition from an AND to an OR in the NEQL check. Reference: CFS.38128 ECO 9 Updates: -------------- ECO I 09-May-1996 Alpha and VAX Images: UCX$CFS_SHR.EXE UCX V3.3-7I Problem: The ECO F code can attempt to move a larger ACL area into a smaller area, causing an ACCVIO or corruption. Solution: Change the size of the move to the exact ACL size, not the size of the initially allocated ACL area. Reference: Internal testing ECO 10 Updates: -------------- ECO J 15-May-1996 Alpha and VAX Images: UCX$CFS_SHR.EXE UCX V3.3-10J Problem: ECO I does not take into consideration when the preallocated ACL buffer (512) is smaller than the actual ACL (> 512). Solution: Use the MIN(.RDCB_PTR[RDCB$L_ACL_SIZE],.ACL_LENGTH) when moving the ACL. Reference: Internal report ECO K 19-JUN-1996 Alpha and VAX Images: UCX$CFS_SHR.EXE Problem: ECO D does not work for bound volume sets. The directory record has a null FIB$B_FID_RVN if the file is on the same member volume as the directory. Solution: If FIB$B_FID_RVN is null, replace it with the one from the file handle. Reference: CFS.35040 ECO L 9-JUL-1996 Alpha and VAX Images: UCX$CFS_SHR.EXE UCX V3.3-10L Problem: If NODATA_CONVERSION is in effect, the server uses ";" instead of "." as the version number delimiter. Solution: Add a pair of parentheses to the test for name conversion. Reference: CFS.42549 --------------------------------------------------------------------------- Fixes for DEC TCP/IP Services V3.3 NFS Client --------------------------------------------------------------------------- ECO 1 Updates: -------------- ECO A 3-Mar-1995 Alpha and VAX Images: UCX$DNFSACP*.EXE Problem: Directory updates made locally at the server are delayed in becoming visible to the client, even with small values for the directory cache and attributes cache timeouts. Solution: Zero the finfo->last_read time if the directory cache has timed out. (This forces CHECK_ACCESS to do a real GETATTR.) Reference: CFS.25032 ECO A 1-Jun-1995 Alpha and VAX Images: UCX$DNFSACP*.EXE Problem: GRPPRV privilege was required to get access to a file owned by a same-group user with group access allowed. Solution: Fixed code to allow access to users in the same group. Reference: CFS.27193 ECO A 28-Jun-1995 Alpha and VAX Images: UCX$DNFSACP*.EXE Problem: Normally, directories do not need and do not have ADF files. However, SET DIR /VERSION_LIMIT creates an ADF file. This causes a problem when deleting the directory, as the RMDIR command is used on both the directory and the ADF, and the ADF deletion fails. Solution: A new parameter has been added to the calling sequence of the FREMOVE_INIT routine to specify whether a directory or a regular file is being deleted. Reference: Internal report ECO 7 Updates: -------------- ECO B 29-Dec-1995 Alpha and VAX Images: UCX$DNFSACP.EXE UCX V3.3-7B Problem: An untranslatable hostname in a proxy record causes a premature halt to the loading of the proxy database. Solution: Test return status from the hostname translation without loading the status variable. Reference: CFS.34570 ECO 8 Updates: -------------- ECO C 31-Jan-1996 Alpha and VAX Images: UCX$DNFSACP.EXE UCX V3.3-7C Problem: Happens only with Windows NT Intergraph server. On trying to create a file in a directory allowing no write access, the client loops many times retrying and finally dismounts the DFNS device. In this case, Intergraph returns NFSERR_PERM instead of NFSERR_ACCES. Solution: Fix incorrect parentheses in C statement checking status. Reference: CFS.36516 ECO 10 Updates: -------------- ECO D 12-JUN-1996 Alpha and VAX Images: UCX$DNFSACP*.EXE UCX V3.3-7D Problem: PGFIPLHI system crash can happen in UCX$DNFSACP when accessing the argument stack. Solution: Preload the addresses of arguments into registers before raising IPL. Reference: CFS.41981 --------------------------------------------------------------------------- Fixes for DEC TCP/IP Services V3.3 UCXPCNFSD.EXE. --------------------------------------------------------------------------- ECO 8 Updates: -------------- ECO A 20-Mar-1996 Alpha and VAX Images: UCX$PCNFSD.EXE UCX V3.3-7A Problem: Incorrect brackets prevent authentication from ever working with V1 protocol. Solution: Move misplaced bracket. Reference: CFS.38231 --------------------------------------------------------------------------- Fixes for DEC TCP/IP Services V3.3 UCX$NTPD.EXE. --------------------------------------------------------------------------- ECO 1 Updates: -------------- ECO A 12-Aug-1995 Alpha and VAX Images: UCX$NTPD.EXE UCX V3.3-7A Procedures: UCX$NTPD_STARTUP.COM UCX$SHUTDOWN.COM Problem: UNIX [R] (OSF/1, ULTRIX) interoperability problem: Time is not being set properly due to unsupported time zone offset and other code affecting the internal variable NTS_offset. Solution: Support time zone offset; the system logical UCX$NTP_TZ must be defined manually until we derive and set the time zone offset with the configuration and installation procedures. UCX$NTP_TZ for Boston, MA should have the following definition in SYS$COMMON:[SYSMGR]UCX$NTPD_STARTUP.COM, where it is commented out: $ define/system ucx$ntp_tz -040000 You must define it manually for ECO A by replacing -040000 with the appropriate value for your time zone offset and uncommenting the DCL define statement. Note that the time zone offset does not take care of the daylight savings problem, which will be fixed later using an OpenVMS system service. Problem: UCX$SHUTDOWN.COM (in INSTALL) does not shut down the NTP server. Solution: SYS$MANAGER:UCX$SHUTDOWN.COM calls SYS$MANAGER:UCX$NTPD_SHUTDOWN.COM. Problem: Interoperability problems with NTP V1 hosts. Solution: Added a second keyword, "version," to the configuration file "peer" command: peer [version ] For example: peer 198.115.142.47 version 1 When the server polls the specified peer, it specifies NTP version 1 in the packet. This is necessary to communicate with a peer that only supports NTP V1 and when the NTP server is not listed as a peer on the V1 server. If the V1 server polls the OpenVMS NTP server first, the version number in the packet is noted and used later in packets sent to the V1 server. Prior to this, transmit.c toggled the version number if it received a V1 packet. In the case of versions 2 and 3, NTP alternates versions in case the peer does not respond. Problem: Remove the +/- 20-minute capture limitation. If the offset was greater than 20 minutes slow or fast, we ignored the packet, thereby limiting the server to set time within a +/- 20-minute difference. This was due to lack of time zone support. This is also dependent on defining UCX$NTP_TZ before UCX$NTPD.EXE starts; since we know the time zone offset, the 20-minute limitation can be removed. Problem: Process Software code base needs closer conformance to NTP V3, RFC 1305. (The NTP V1 problem above is another instance of this.) Solution: This is just the beginning; it may eventually look and behave more like the xntp code base. But for now, three new configuration file keywords are supported: 1. "Local-master " where stratum must be between 10 and 32, or 0 (to disable local-master). 2. "Master-clock " configures NTP as a master server at a stratum lower than 10. This is used for hosts that have special hardware to synchronize its clock. 3. "Server [version ]" -- When another NTP server is specified with this command, this server will operate in client mode and the other server in server mode. In client/server mode, the client will adjust time according to the server but the server will never synchronize to the client. As with the peer configuration keyword, you may specify the server's NTP version. The intent for supporting master-clock and local-master is that master-clock is for systems with synchronization hardware and local-master is for "free-running" hosts without synchronization hardware. It is possible that we have to refine more parameters here as more intelligence can be applied to managing clock precision. For master-clock and local-master, we generate pseudo-peer 127.127.1.1 and set sys.peer to this pseudo-peer. We also did some fixes with client mode and changed the "acquire" log message to differentiate peers and servers. Miscellaneous changes: Keyword error checking prints out notification for unrecognized keywords in the configuration file. Sample Configuration -------------------- The following is an example of a highly redundant and robust configuration with multiple levels of backups. On the Internet close to your network, there is host a.b.c.1 running at stratum 1 and host d.e.f.2 running at stratum 2. In house, you have host x.y.z.1 which is synchronized with a WWVB radio clock, and configured as a stratum 1 master clock. [a.b.c.1] stratum 1 [d.e.f.2] stratum 2 Internet ==================================== LAN [x.y.z.1] master-clock 1 <==> WWVB CLOCK [x.y.z.2] local-master 10 server x.y.z.1 server a.b.c.1 server d.e.f.2 peer x.y.z.2 [x.y.z.3] local-master 12 server x.y.z.1 server a.b.c.1 server d.e.f.2 peer x.y.z.3 Computer Room ------------------------------------ Offices [x.y.x.*] server x.y.z.1 server x.y.z.2 server x.y.z.3 As backup servers, two hosts, x.y.z.2 and x.y.z.3 in a climate- controlled room, are chosen and one is configured at stratum 10 and the others at stratum 12. All other workstations on the floor are pointing to x.y.z.1 - 3 for their synchronization source. When the configured topology is running and "stable," each local host will be synchronized to x.y.z.1 since it is "closer" than the stratum 1 host on the Internet, and all machines will be running at stratum 2. When x.y.z.1 goes down and if the Internet connection is still up, either a.b.c.1 or d.e.f.2 are selected depending on their availability, and x.y.z.2 and x.y.z.3 will run at stratum 2 or 3. Other hosts in the offices will synch off x.y.z.2 or x.y.z.3 at stratum 3 or 4. When the Internet connection is lost or all the known servers become unavailable, x.y.z.2 will free run at stratum 10 as it was configured as a "local-master." It will become the highest stratum available in the network and all other hosts (including x.y.z.3) will be synchronized to x.y.z.2 at stratum 11. If x.y.z.2 goes down, x.y.z.3 will run at stratum 12 and all other hosts will synchronize at stratum 13. It is important to set the stratum of x.y.z.3. If it is only one value apart (i.e., 10 and 11), it may have problems synchronizing to x.y.z.2 because it will try to synchronize at stratum 11 off the clock on x.y.z.2, and then find itself having a stratum 11 clock locally and will synchronize to it instead. However, making that value two stratums apart will result in synchronization with x.y.z.2. References: CFS.29029, CFS.30950 ECO 2 Updates: -------------- ECO B 11-Sep-1995 Alpha and VAX Images: UCX$NTPD.EXE UCX V3.3-7B Problem: Solution: Change heuristics for supporting timezone differential factor (via logicals) Support VMS V6.x SYS$TIMEZONE_DIFFERENTIAL logical. Tolerate invalid definition and no definition of TDF (timezone differential factor). Fix the 7 min 7 sec problem. References: CFS.29029, CFS.30950 ECO 3 Updates: -------------- ECO C 20-Sep-1995 Alpha and VAX Images: UCX$NTPD.EXE UCX V3.3-7C Problem: NTS_offset may be incorrect due to not "borrowing" when doing 64-bit arithmetic. Solution: Borrow from the most-significant (high-order) 32-bits if necessary when calculating NTS_offset. This could also result in a 7 min 9 sec skew as observed in ECO B above. References: CFS.29029, CFS.30950 ECO 8 Updates: -------------- ECO D 22-Feb-1996 Alpha and VAX Images: UCX$NTPD.EXE UCX V3.3-7D Problem: Memory leak caused by not freeing the request packet in respond(); this occurs for client requests (e.g., "NTP " from ULTRIX). Solution: Added free() the request packet before transmitting the response PDU. Reference: CFS.37655 --------------------------------------------------------------------------- Fixes for DEC TCP/IP Services V3.3 UCX$FTP.EXE. --------------------------------------------------------------------------- ECO 1 Updates: -------------- ECO A 07-Jun-1995 Alpha and VAX Images: UCX$FTP.EXE Problem: DISABLE PORT (sendport) does not work. Solution: Wrong port used, no REUSEADDR, and needed retries for CONNECT(). Many changes (wrong port used, REUSEADDR and retries needed) in INITCONN(). Also changed a test of sendport == -1 to sendport == 1. Sendport cannot be -1. Reference: CFS.26307 Problem: Attempting an operation on a nonexistent file returns the WARNING message FTP$_NOSUCHFILE. This does NOT cause FTP to exit as expected. Solution: Change the severity of FTP$_NOSUCHFILE to an ERROR. Reference: Internal report Problem: MPUT/PUT commands with a specified version returns an error. Solution: Remove the version number check which causes the file to be sent using STOU instead of STOR. This was a carry-over from V1.0. Reference: Internal report Problem: APPEND command does not work properly. Solution: Do not let VMS-Plus mode place the connection into IMAGE mode. Reference: UCXBUGS #241 Problem: MPUT/PUT commands leave the connection in IMAGE mode. Solution: Allow VMS-Plus mode to set IMAGE as needed, and to restore the state when done. Reference: Internal report Problem: Messages are not generated by ENABLE and DISABLE commands, nor by the sendport command. Solution: Display the current state of the option in the same way as the ULTRIX command. Reference: Internal report ECO B 26-Jun-1995 Alpha and VAX Images: UCX$FTP.EXE Problem: EOF of an /INPUT command file enters a loop. Solution: Sense the status FTP$_EXIT on calls to FTP$PROMPT(). Reference: CFS.29248 ECO C 25-Jul-1995 Alpha and VAX Image: UCX$FTP.EXE Problem: V3.3 PUT/FDL command fails to specify the correct .FDL file name on remote systems. Solution: In the routine FDLGENERATE, we updated some of the FAB fields to reflect the corrected .FDL name just before calling the FDL$GENERATE system service. Reference: CFS.29957 ECO D 25-Jul-1995 Alpha and VAX Images: UCX$FTP.EXE Problem: Whenever disk allocation errors such "device full" or "exceeded disk quota" are detected by the server process, the client process does not handle the error correctly; it simply issues a %SYSTEM-F-LINKDISCON error message and exits. Solution: Remove the LIB$SIGNAL calls in routines: SEND_ASCII, SEND_NORMAL_BIN, SEND_VMS_PLUS_BIN. Reference: CFS.29873 ECO E 16-Aug-1995 Alpha and VAX Images: UCX$FTP.EXE UCX V3.3-7E Problem: Issuing a get command to an IBM MVS system transfers the file and then hangs until the IBM side times out and closes the link. Solution: Before issuing a GETREPLY in routine RECV_DATA, we check the status of the data socket and close it if it is not set to a -1. References: CFS.30453, CFS.31372 ECO 2 Updates: -------------- ECO F 07-Sep-1995 Alpha and VAX Images: UCX$FTP.EXE UCX V3.3-7F Problem: Using /ULTRIX switch no longer allows the use of mixed-case filenames without the use of quotes. Solution: Bypassed some code which always lowercased the filenames in routine CLI_GET_VALUE and also changed the parameter type for the GET verb in the .CLD file (no longer $QUOTED_STRING) Reference: CFS.32191 ECO 4 Updates: -------------- ECO G 15-Sep-1995 Alpha and VAX Images: UCX$FTP.EXE UCX V3.3-7G Problem: FTP does not appear to recognize when certain logical names are defined - specifically UCX$FTP_KEEPALIVE, UCX$FTP_STREAMLF, and UCX$FTP_RAW_BINARY. Solution: Fixed routines GET_XFER_MODE, GETKEEPALIVE, and GET_ASCII_STRUCT, so that when those logicals are translated, the routines check for 'TRUE', 'YES', 'true', 'yes', or '1' instead of just '1'. Reference: Internal report Problem: Some problems with lowercase filenames on PUT/GET Solution: Fixed routine FTP$GET so that when we get the value of P1, we no longer check for FTP$_QUOTES_STRIPPED; instead we see if the file is a valid file specification by using SYS$PARSE. In routine FTP$PUT, we copy the local filename to the remote filename if in ULTRIX mode and a remote filename was not specified initially. Reference: CFS.32610 Problem: Unable to specify port number when using FTP in ULTRIX mode (FTP :== UCX$FTP/ULTRIX) Solution: Fixed routine FTP$CONNECT so that it works in ULTRIX mode in conjunction with a new parsing function (ParseRemote). Reference: CFS.32599 ECO H 16-Oct-1995 Alpha and VAX Images: UCX$FTP.EXE UCX V3.3-7H Problem: Problem with using /INPUT and /USER together on the same command line. Solution: Fixed routine LOGIN_PROMPT. Also fixed MAIN so that 'FTP_STDIN' is opened before calling CMD_LINE_LOGIN. References: CFS.29352, CFS.32234 Problem: Put command failing to HP3000. Solution: Bypassed code in routine SEND_DATA dealing with version number processing (searching for semi-colon, dot, etc.); this was causing problems when attempting to send a remote filename containing a semi-colon. Reference: CFS.32825 Problem: Wild-card processing is ignoring certain RMS errors. Solution: In routine WLDCRD_PUT_PROCESS, added a flag check so the appropriate RMS error message is returned instead of FTP$_NORMAL (in this case, file-not-found). ECO I 17-Oct-1995 Alpha and VAX Images: UCX$FTP.EXE UCX V3.3-7I Problem: COPY/FTP and DIR/FTP no longer work. Solution: DIR/FTP and COPY/FTP stopped working when we stopped lowercasing everything; now strings coming back from DCL (which by default are uppercased) are simply compared. Reference: CFS.33803 ECO 7 Updates: -------------- ECO K 19-Dec-1995 Alpha and VAX Images: UCX$FTP.EXE Problem: FTP client not handling search lists and rooted logical names correctly. Solution: Extensive changes to a number of routines to fix problems dealing with rooted logicals and search lists; added new functions 'RMScheck', 'GetLogicalName', and 'VerifySearchList' to help with correctly parsing logical names in addition to new routines 'RestoreDefaults', 'SaveDefaults' and 'SetLocalDefault'. References: CFS.35314, CFS.35351 Problem: Username/Password prompting is inconsistent when using an input file. Solution: Reworked 'LOGIN_PROMPT' so that if an input file is specified AND either username or password is missing, we prompt for the missing argument; if both username and password are missing from the command line, then assume it's in the input file. ECO L 05-Jan-1996 Alpha and VAX Images: UCX$FTP.EXE Problem: FTP Append operation not working correctly when dealing with remote filenames containing uppercase characters. Solution: Removed forced lowercasing on remote filename, which was something left over from earlier implementations; also needed to change default FAB fields for RMS processing. Reference: CFS.35833 ECO M 25-Jan-1996 Alpha and VAX Images: UCX$FTP.EXE UCX V3.3-7M Problem: RMS-F-DNF error when our default directory is set to a multi-device, rooted logical. Solution: In FTP$PUT, removed SYS$DISK:[]*.*; from RMS default name field 'fab.fab$l_dna'. Problem: Inconsistent behavior when setting current working directory; also initial working directory not being restored upon exit. Solution: Added new routines 'SetLocalDefault', 'RestoreDefaults' and 'SaveDefaults', in which we now use SYS$SETDDIR and LIB$SET_LOGICAL, in place of C library routines 'CHDIR' and 'GETCWD'. Problem: When files with non-standard filenames are specified on GET operations they get renamed to FILE.TXT if no output filename is specified. Solution: Using new routine 'ConvertFileNameToVMS' in FTP$GET, where an attempt is made to convert a non-VMS filename to something more meaningful; it will resort to FILE.TXT if it still can not be parsed. Problem: Inconsistent behavior when input file is specified along with either username or password; when either argument is missing no prompting for the missing argument. Solution: Reworked routine 'LOGIN_PROMPT' so that if an input file is specified AND either username or password is missing, we prompt for the missing argument; if both username and password are missing from the command line, then assume it's in the input file. Problem: Mixed-case filenames can only be used if specified within quotes or if FTP is setup as a foreign command with /ULTRIX. Solution: Ensure that in routine 'FIX_CMD' case is preserved regardless of mode. References: CFS.35314, CFS.35351 Note: Some of the above may be duplicates from previous ECOs with additional modifications. ECO 8 Updates: -------------- ECO N 29-Jan-1996 Alpha and VAX Images: UCX$FTP.EXE Problem: Maximum record size field not being set correctly when doing a PUT Solution: Modified 'FDLGENERATE' to retrieve 'XAB$W_LRL' so that we can set 'FAB$W_MRS' before generating an FDL file Reference: CFS.36380 ECO O 05-Feb-1996 Alpha and VAX Images: UCX$FTP.EXE Problem: Upon exiting FTP, the user's SYS$DISK logical is set incorrectly. Solution: Fixed bug in 'RestoreDefaults' routine where string length was being incorrectly set prior to calling run-time library routine. ECO P 06-Mar-1996 Alpha and VAX Images: UCX$FTP.EXE UCX V3.3-7P Problem: RMS error when using a 64K window size Solution: Make 'xfr_len' a long instead of short ECO 9 Updates: -------------- ECO Q 07-May-1996 Images: UCX$FTP.EXE UCX V3.3-7Q Problem: Maximum value for window size set incorrectly. Solution: Make new value 64k-2 and ensure that transfer length used in QIOs are a multiple of 512. ECO R 15-May-1996 Alpha and VAX Images: UCX$FTP.EXE UCX V3.3-7R Problem: FTP client 'sunique' command no longer works. Solution: Restored 'version' check in 'SEND_DATA' routine which was inadvertently left out Reference: CFS.40617 Problem: Record mode transfer not working correctly. Solution: Fixed bug in 'SEND_ASCII'. Reference: CFS.29927 ECO 10 Updates: -------------- ECO S 19-Jun-1996 Alpha and VAX Images: UCX$FTP.EXE UCX V3.3-7S Problem: Put command failing to HP3000 (old problem cropping up again) Solution: Fixed bug in 'SEND_DATA' where I needed to use '&&' instead of '||' when checking for valid character that might indicate a version number. ( *(v+1) >= '0') && ( *(v+1) <= '9') References: Internal reports --------------------------------------------------------------------------- Fixes for DEC TCP/IP Services V3.3 UCX$FTPC.EXE and UCX$FTPD.EXE --------------------------------------------------------------------------- ECO 1 Updates: -------------- ECO A 27-Apr-1995 Alpha and VAX Images: UCX$FTPD.EXE UCX V3.3-7A UCX$FTPC.EXE UCX V3.3-7A Problem: Cannot use exclamation marks (!) in server announcements or anonymous welcome messages. Solution: Change the way FTP$SERVER_ANONYMOUSD.C is called and SEND_SERVER_MESSAGE calls SENDREPLY. Change the way FTP$SERVER_ANONYMOUSC.C is called and SEND_CLIENT_MESSAGE calls POSTREPLY. Reference: Internal report Problem: Angle brackets '<' and '>' do not work for directory specs. Solution: Change STOR not to checkdir_access if angle brackets are present. Reference: CFS.27084 Problem: DISABLE PORT (sendport) does not work. Solution: Many changes (wrong port used, REUSEADDR and retries needed) in INITCONN. Also changed a test of sendport == -1 to sendport == 1. Sendport cannot be -1. Reference: CFS.26307 ECO B 03-Aug-1995 Alpha and VAX Images: UCX$FTPC Problem: Disk allocation errors ("device full" and "exceeded disk quota") are not handled correctly. Solution: Fix all the modules that call SYS$CREATE and check for RMS$_FUL and for RMS$_CRE in conjunction with SS$_EXDISKQUOTA. Reference: CFS.29873 ECO C 07-Aug-1995 Alpha and VAX Images: UCX$FTPC.EXE UCX V3.3-7C Problem: When doing a PUT of an indexed file, the client receives an error message "RMS WRITE failure" when, in fact, the file had been correctly copied over. Solution: Check the RMS field rab.rab$l_sts for a status of RMS$_EOF after doing a SYS$WRITE. Reference: CFS.29248 ECO 4 Updates: -------------- ECO D 06-Oct-1995 Alpha and VAX Images: UCX$FTPC.EXE UCX V3.3-7D Problem: Files and directories created are always owned by the FTP user instead of by the owner of the parent directory Solution: In routine 'MKD' changed the call to LIB$CREATE_DIR, leaving out the optional 'owner-UIC' argument, thereby allowing for newly created files and/or directories to be owned by the parent directory IF the user has the right privileges. Prior to this, with or without privileges, they would all be created with that user's UIC. Reference: CFS.33341 ECO 8 Updates: -------------- ECO G 25-Jan-1996 VAX and Alpha Images: UCX$FTPC.EXE Problem: Maximum record size field not being set correctly when doing a GET. Solution: Modified 'FDLGENERATE_IN_MEM' to retrieve 'XAB$W_LRL' so that we can set 'FAB$W_MRS' before generating an FDL file. Reference: CFS.36380 ECO H 09-Feb-1996 VAX and Alpha Images: UCX$FTPC.EXE UCX V3.3-7H Problem: Number of misc. problems associated with using Anonymous, such as, logical name translation (especially with use of the UCX$FTP_ANONYMOUS_DIRECTORY logical, allowing access beyond those defined, etc. Also, server child process goes into resource wait state occasionally. Solution: New routines include 'CheckAnonymousAccess' and 'ParseName', making obsolete most of the functions in FTP$SERVER_ANONYMOUSC.C. When a system-wide logical is defined ("UCX$FTP_SERVER_DBG"), Resource Wait mode is disabled; this allows for system services to report any error status in its log file. ECO I 22-Feb-1996 Alpha and VAX Images: UCX$FTPC.EXE Problem: The 'cd' command no longer works without '[]'. Solution: Add appropriate checks in 'CWD' routine in server. Reference: CFS.38258 ECO J 05-Mar-1996 Alpha and VAX Images: UCX$FTPC.EXE UCX V3.3-7J UCX$FTPD.EXE UCX V3.3-7J Problem: Problems using 'cd' with ANONYMOUS account Solution: Fix bug in 'DirectoryCheck'; bug with flag 'user_anonymous' not being reset properly; allow for <> and .. in directory commands. Reference: CFS.38258 ECO 9 Updates: -------------- ECO K 29-Apr-1996 Alpha and VAX Images: UCX$FTPC.EXE UCX V3.3-7K Problem: 'MGET' operations from V3.3 server result in client's getting filenames which include full VMS directory path Solution: Fixed 'nlist' code where it prefaced the full directory path when the default working directory is a rooted logical (like SYS$HELP). Reference: CFS.40440 ECO L 15-May-1996 Alpha and VAX Images: UCX$FTPC.EXE UCX V3.3-7L Problem: FTP server no longer recognizes UCX$FTP_NO_VERSION system logical. Solution: Restore 'noversion' check in 'nlist' routine which was inadvertently left out when that routine was re-written Reference: CFS.40617 ECO 10 Updates: -------------- ECO M 24-May-1996 Alpha and VAX Images: UCX$FTPC.EXE Problem: Current working directory remains set to an invalid directory when a 'cd' is done to that directory. Solution: Restore current working directory to original directory when an invalid directory is specified. Reference: CFS.41058 ECO N 27-Jun-1996 Alpha and VAX Images: UCX$FTPC.EXE UCX V3.3-7N Problem: Binary files getting corrupted Solution: Needed to make sure that 'xfr_len' was being set to a multiple of 512. --------------------------------------------------------------------------- Fixes for DEC TCP/IP Services V3.3 LPD Facility --------------------------------------------------------------------------- ECO 1 Updates: -------------- ECO A 24-Aug-1995 Alpha and VAX Images: UCX$LPD_SHR.EXE UCX V3.3-7A UCX$LPD_SMB.EXE UCX V3.3-7A UCX$LPD_RCV.EXE UCX V3.3-7A UCX$LPQ.EXE UCX V3.3-7A UCX$LPRM.EXE UCX V3.3-7A UCX$LPRSETUP.EXE UCX V3.3-7A UCX$TELNETSYM.EXE UCX V3.3-7A Problem: If the LPQ or LPRM command is submitted in a .COM file or if a DEFINE/USER of SYS$OUTPUT is pointing output to a file, then output is extended across multiple lines of the .LOG/output file. Solution: Fixed. Problem: In the conversion between network file name (e.g., cFA123host.domain.com) and OpenVMS legal file name (e.g., cFA123host_domain.com), the file name is truncated to 32 characters. This is not a problem. However, if the first character after the truncated file name is a hyphen (-), this yields an RMS-F-SYN, file specification syntax error. Solution: Trap for this special case and substitute an underscore (_) for the hyphen (-). Reference: CFS.24196 Problem: LPRSETUP sometimes issues the message "Can't unlink spool directory, %RMS-F-SYN, file specification error" when trying to delete a printcap entry. Solution: Fixed. Reference: Internal report Problem: It is necessary to create separate OpenVMS print queues, each with its own print forms if you want to use print forms for jobs sent to the UCX LPD server. Solution: UCX LPD now supports a new printcap field for local printcap entries that gives the name of the OpenVMS print form with which the job should be submitted. The field is "fm". This makes it unnecessary to create multiple OpenVMS print queues for multiple OpenVMS print forms. Now all you need to do is create multiple LPD printcap entries with different values for the "fm" field and point the "lp" value to the same local printer. The following two example printcap entries illustrate this: BOGUS_P_FORM1|bogus_p_form1:\ :lf=/SYS$SPECIFIC/UCX_LPD/BOGUS_P_FORM1.LOG:\ :lp=SOME_PRINTER:\ :fm=FORM1:\ :sd=/SYS$SPECIFIC/UCX_LPD/BOGUS_P_FORM1: BOGUS_P_FORM2|bogus_p_form2:\ :lf=/SYS$SPECIFIC/UCX_LPD/BOGUS_P_FORM2.LOG:\ :lp=SOME_PRINTER:\ :fm=FORM2:\ :sd=/SYS$SPECIFIC/UCX_LPD/BOGUS_P_FORM2: Jobs sent to printer "BOGUS_P_FORM1" will be printed with FORM1 to OpenVMS queue SOME_PRINTER. Jobs sent to printer "BOGUS_P_FORM2" will be printed with FORM2 to OpenVMS queue SOME_PRINTER. Note that the printcap key fields differ so that these printers appear to the LPD client as two printers. However, since they share the same value in their "lp" fields there is only one OpenVMS print queue: SOME_PRINTER. UCX LPD now supports a similar printcap field which says that a job is to be submitted as /PASSALL. This field is the "pa" field and has no value. Its presence in the printcap entry tells the symbiont to submit it /PASSALL. For example: BOGUS_P_FORM2_PA|bogus_p_form2_pa:\ :lf=/SYS$SPECIFIC/UCX_LPD/BOGUS_P_FORM2_PA.LOG:\ :lp=SOME_PRINTER:\ :pa:\ :fm=FORM2:\ :sd=/SYS$SPECIFIC/UCX_LPD/BOGUS_P_FORM2_PA: Jobs printed to this printer are submitted to OpenVMS printer SOME_PRINTER with /FORM=FORM2 /PASSALL. Note: UCX LPD does not verify the value of the "fm" printcap field. If it is in error, the job gets an error in the final destination print queue. Reference: Internal report Problem: LPD clients that do not support the Digital PrintServer LPD Protocol Extensions cannot use the OpenVMS print capabilities provided by PRINT/PARAMETER when printing jobs to the UCX LPD server. Solution: Eight new printcap fields, one for each of the eight available /PARAMETER slots, are now supported for local printcap entries. The fields are p1 through p8 and work in a similar fashion to the new "fm" and "pa" fields. For each one that you enter, the corresponding PRINT/PARAMETER is assigned that value. For example, consider the following printcap entry: BOGUS_P_LAND|bogus_p_land:\ :lf=/SYS$SPECIFIC/UCX_LPD/BOGUS_P_LAND.LOG:\ :lp=SOME_PRINTER:\ :p1=data=postscript:\ :p2=page_o=landscape:\ :sd=/SYS$SPECIFIC/UCX_LPD/BOGUS_P_LAND: In this example, all inbound LPD print jobs for printer BOGUS_P_LAND are submitted as: $PRINT file/PARAM=(data=postscript,page_o=landscape)/QUE=SOME_PRINTER The maximum number of characters for any one of these fields is 255. Since the symbiont matches the slot of the printcap field with the corresponding /PARAM value, you can use this to your advantage when printing to queues that are sensitive to having certain data in specific /PARAMETER slots. For example: BOGUS_P_HUH|bogus_p_huh:\ :lf=/SYS$SPECIFIC/UCX_LPD/BOGUS_P_HUH.LOG:\ :lp=SOME_PRINTER:\ :p1=data=postscript:\ :p2=page_o=landscape:\ :p8=huh:\ :sd=/SYS$SPECIFIC/UCX_LPD/BOGUS_P_HUH: In this example, all inbound LPD print jobs for printer BOGUS_P_LAND are submitted as: $PRINT file/PARAM=(data=postscript,page_o=landscape,,,,,,huh)- $_ /QUE=SOME_PRINTER Note: UCX LPD does not parse the values in these fields. If they are in error, the job gets an error in the final destination print queue. Reference: Internal report Problem: The UCX LPD retry mechanism sometimes leaves jobs in the "Holding" state rather than in the "Holding until..." state. Solution: Fixed. References: CFS.28580, CFS.29350, CFS.28232 Problem: The value that the UCX$TELNETSYM uses for the PSM$PRINT BUFSIZ parameter is fixed at 256. There is no way to configure the TELNETSYM to use a different value for optimization in the same way as LATSYM. Solution: The TELNET symbiont now supports a range of values with a new logical: UCX$TELNETSYM_BUFSIZ. Define this system logical to any value from 1 to 2048 and the value you specify will be sent to the PSM$PRINT routine in the BUFSIZ argument. For more information about this, read the chapter on PSM$ routines in the "OpenVMS Utility Routines Manual." Problem: UCX TELNETSYM resets the link idle timer when data comes in from the printer/terminal server. If the TELNET implementation in the printer/ terminal server keeps sending data, the link will never be released. Solution: Do not reset the link idle timer for incoming data; only reset it for outgoing data. Reference: CFS.25814 Problem: When printing with the TELNET symbiont with /HEADER, the Page 1 header is not printed. Solution: Fixed. Reference: CFS.26894 Problem: LPD symbiont could get an ACCVIO when a job is submitted by a user with an OpenVMS 12-character-maximum user name. Solution: Fixed. Problem: On some error conditions where the LPD symbiont was retrying jobs, a 0 length control file in the spooler directory could not be deleted because it was locked by the symbiont. Solution: Fixed. Reference: CFS.30948 Problem: When a PC user copies a file from the PATHWORKS Common File Service to the PATHWORKS printer service that is pointing to an outbound LPD queue, the print file created by PATHWORKS has the following RMS attributes: File Organization: Sequential Record Format: Variable length, maximum 128 bytes Record Attributes: None PATHWORKS prints the file with /PASSALL. The problem is that, with this combination of /PASSALL, record format and records attribute cause the UCX LPD temporary file (an intermediate file created by UCX LPD) to be created with an undefined record format. This, in turn, causes the entire file to be sent down the line with no LFs. This large single block of data is problematic for some printers. Solution: If the UCX$LPD_STREAM_PASSALL logical is defined, this forces the LPD tamp file for all PASSALL prints to be stream LF. ECO 8 Updates: -------------- ECO B 29-Feb-1996 VAX and Alpha Images: UCX$LPD_SHR.EXE UCX V3.3-7B Problem: When printing to remote LPD queue with /SETUP multiple line setup (for example, PS setup module) is all sent as a single line with no line separators. Solution: After every setup module line read from the device control library add LF to the stream. Note: This change will not be available in UCX V4.0 until 4.0 ECO 2. Reference: CFS.36714 ECO C 02-Apr-1996 VAX and Alpha Images: UCX$LPD_SHR.EXE UCX V3.3-7C UCX$LPD_SMB.EXE UCX V3.3-7C UCX$LPD_RCV.EXE UCX V3.3-7C UCX$LPQ.EXE UCX V3.3-7C UCX$LPRM.EXE UCX V3.3-7C UCX$LPRSETUP.EXE UCX V3.3-7C UCX$TELNETSYM.EXE UCX V3.3-7C Problem: If a null character appeared in a setup module then UCX LPD would only send the characters preceding it, skipping any following it. Solution: Fixed. Reference: CFS.31834 Problem: When running on a system with Word Perfect queues that have not been de-integrated symbiont has problems. Solution: Spot the problem and signal in the log and on the OPCOM that Word Perfect queues must be de-integrated in order for UCX LPD to run. Reference: CFS.34311 Problem: With inbound LPD jobs the /DELETE that the LPD symbiont uses when it submits the job to the target print queue causes problems if that print queue expects the file not to be printed /DELETE. For example, one customer had a custom symbiont running in the target queue that passed the file on to another queue. Solution: Add new "nd" flag field to printcap. If "nd" field is present for a printcap entry then UCX$LPD_QUEUE will submit the job without the /DELETE qualifier. The "nd" field is a boolean field (like the "pa" field) in that it has no value. If you want inbound jobs for a particular printcap entry to be submitted as /NODELETE use the "nd" field as in this example: BOGUS_P_ND|bogus_p_nd:\ :lf=/SYS$SPECIFIC/UCX_LPD/BOGUS_P_ND.LOG:\ :lp=SOME_PRINTER:\ :nd:\ :sd=/SYS$SPECIFIC/UCX_LPD/BOGUS_P_ND: If you want inbound jobs for a particular printcap entry to be submitted the "normal" way (i.e., /DELETE) there should be no "nd" field in the printcap entry. For example: BOGUS_P_ND|bogus_p_nd:\ :lf=/SYS$SPECIFIC/UCX_LPD/BOGUS_P_ND.LOG:\ :lp=SOME_PRINTER:\ :sd=/SYS$SPECIFIC/UCX_LPD/BOGUS_P_ND: LPRSETUP will create by default a printcap entry with no "nd" field the default is /DELETE. Problem: No support for inbound LPD jobs with 'v' (Raster file) control card. Solution: Handle it like an 'x' (i.e., binary file). Reference: CFS.35679 Problem: One PC LPD client implementation "probes" the LPD server to validate the remote printer when the PC user configures their LPD client printer . When the printer is configured the LPD client connects to the LPD server and issues a "print a job" command to the server for the LPD queue. If the server replies successfully the LPD client sends an "abort job" command and waits for the ACK before releasing the link. The UCX LPD server was not ACKing the "abort job" command; it was simply disconnecting the link. This was causing the PC LPD client to fail the LPD configuration for the user. Solution: Handle the abort job like a NOOP. ACK it but keep link up and wait for other side to disconnect or send another command. Reference: CFS.36109 Problem: The temporary file created by UCX$TELNETSYM.EXE when using it to relay a job to an LPD queue is not deleted. Solution: Create the relay Q tamp file with the file owner UIC matching the UIC of the user that started the print job. Note: This change will not be available in UCX V4.0 until 4.0 ECO 2. Reference: CFS.36997, CFS.39480 ECO 10 Updates: -------------- ECO F 19-Jun-1996 VAX and Alpha Images: UCX$LPD_SMB.EXE UCX V3.3-7F Problem: LPD job is requeued in "holding" state for ever, as it should be going through the "holding until ..." state. Some of them directly fail in "Retained on error" status with the error message. Solution: This fix is based on the assumption that a second message is coming into the symbiont after the one we expect (i.e., the one with the stop_condition set to JBC$_JOBREQUEUE). Reference: CFS.39020 --------------------------------------------------------------------------- Fixes for DEC TCP/IP Services V3.3 SMTP Mail Facility --------------------------------------------------------------------------- ECO 1 Updates: -------------- ECO A 25-Aug-1995 VAX and Alpha Images: UCX$SMTP_MAILSHR.EXE UCX V3.3-7A UCX$SMTP_RECEIVER.EXE UCX V3.3-7A UCX$SMTP_SYMBIONT.EXE UCX V3.3-7A UCX$SMTP_PARSESHR_TV.EXE UCX V3.3-7A UCX$UUENCODE.EXE UCX V3.3-7A UCX$UUDECODE.EXE UCX V3.3-7A Problem: When many inbound SMTP connections are made at the same time, UCX SMTP sometimes creates control file names that are identical for more than one mail message. This causes UCX SMTP to deliver one of the versions of the control file multiple times and not to deliver the rest at all. Solution: Make UCX SMTP sensitive to the file version number so that files with the same name are properly handled. Reference: CFS.25185 Problem: It is impossible to send a file using UCX SMTP with lines greater than 512 characters and less than 1000 characters. UCX SMTP inserts . The SMTP RFC allows up to 1000 characters. Solution: Increase buffer size to 1000 (inclusive of ). Note that this fix applies to outbound mail. For mail received from SMTP and delivered locally via OpenVMS mail, we must still add line breaks () every 255 characters because this size is an OpenVMS mail limit. Reference: CFS.21858 Problem: If SYS$SCRATCH is defined to a bad value for the SMTP symbiont process (that is, a directory where a file cannot be created for some reason), UCX SMTP symbiont cannot deliver any local mail. Solution: Use RMS Parse call to check SYS$SCRATCH directory validity in main line of SMTP symbiont. If invalid, redefine SYS$SCRATCH to point to the postmaster directory. Reference: CFS.26331 Problem: SMTP addresses placed in SMTP mailing list files cannot contain comments. (This applies to the mailing lists in SYS$SPECIFIC:[UCX_SMTP] which contain SMTP addresses and are processed by the SMTP symbiont. This does not apply to OpenVMS mail distribution lists that contain SMTP addresses in the SMTP%"..." format.) Solution: Fixed. Problem: Cannot use SET FORWARD/USER=username SMTP%"..." to send to multiple SMTP addresses. Solution: You can now use SET FORWARD/USER=username SMTP%"..." to forward mail to multiple recipients. For example, if the following forward is defined on host xyz.com: MAIL> SET FORWARD/USER=HOTLINE SMTP%"""kim@xyz.com, joe@abc.xyz.com""" ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | More than one name here -->--->------->-----+ This causes mail sent to the user HOTLINE to be sent via SMTP to kim@xyz.com and to joe@abc.xyz.com. If you are sending mail to HOTLINE from the host on which the forwarding has been defined, you can send to that user name directly like this: MAIL> send To: HOTLINE ... If you are on another host, you can send to hotline@xyz.com and UCX SMTP on host xyz will expand the mail to go to kim@xyz.com and to joe@abc.xyz.com. Note that this is limited by maximum length of an OpenVMS mail command line, 256 characters. Problems: 1. On Alpha systems, ANALYZE MAIL/REPAIR terminates with "%SYSTEM-F-IVLOGNAM, invalid logical name" message frequently. 2. Mail directories that are specified with "<",">" instead of "[","]" (for example dka0:) are not handled correctly, resulting in an access violation. 3. User names that are 12 characters long are not handled correctly, resulting in the following error message in ANALYZE MAIL/REPAIR : %UCX-W-ANA_QUEACC, queue access failure -JBC-F-INVPARLEN, invalid parameter length ..... Solution: Fixed. References: CFS.23288, CFS.23828 Problem: There is a control file error when mail is sent from a user whose mail directory is obtained from a concealed logical name. Solution: Fixed. Reference: CFS.26881 Problem: ANALYZE MAIL/DELETE submits 0 block control files to the symbiont rather than just deleting them. Solution: Control files that are 0 blocks and more than 12 hours old are deleted. Problem: If a user account exists but the mail directory does not, there is no need to signal a warning/error message. Do not display any error message if a mail directory is not found. This has been suppressed to avoid any unnecessary concerns that may be raised when a message such as this is seen :" .. directory cannot be accessed", "... bad parameter error" Solution: Fixed. Problem: Various ANALYZE MAIL/DELETE problems. Solution: Fixed. Note that /DELETE will delete control files as long as they are not already queued up. If they are queued, they will be released and the message will be processed. Also ensured that when /DELETE and /REPAIR are specified together, they work properly for all cases. Problem: The "Received:" RFC header created by UCX SMTP is missing a required semi-colon (;) before the date field. Solution: Fixed. Reference: CFS.29374 Problem: SMTP symbiont would sometimes ACCVIO on address FFFFFFFF. Solution: Fixed ECO 8 Updates: -------------- ECO B 3-Apr-1996 Alpha and VAX Images: UCX$SMTP_MAILSHR.EXE UCX V3.3-7B UCX$SMTP_RECEIVER.EXE UCX V3.3-7B UCX$SMTP_SYMBIONT.EXE UCX V3.3-7B UCX$SMTP_PARSESHR_TV.EXE UCX V3.3-7B UCX$UUENCODE.EXE UCX V3.3-7B UCX$UUDECODE.EXE UCX V3.3-7B Problem: ANAL MAIL would not find the files for any of the queue entries and so it would delete the queue entries one by one. Later, on the pass where it is looking for orphaned control files, it would find all the files that belonged to the queue entries that is just deleted and submit them. If it had not deleted the jobs in the first place it would not have had to requeue them. Problem only happened where user disks were defined as concealed logical names. Solution: Fixed. References: CFS.34311, CFS.33772 Problem: Garbage in one particular message in the log. Solution: Fixed. References: CFS.34311, CFS.33772 Problem: Mysteriously ANAL MAIL/DELETE would select some files to delete and some not to regardless of the value of the BEFORE= time. Saw cases where files created almost at the same time were processed and one was deleted and another was not. The creation dates on the files were both well after the time in the /BEFORE. Solution: Fix a bug in the VMS date comparison routine. References: CFS.34311, CFS.33772 Problem: Sometimes ANAL MAIL would submit a new entry for every entry that was already in the queue. Now we have two entries for each file. Solution: Clean up GETQUIW system service context at beginning of each ANAL MAIL command with call to GETQUIW with a CANCEL_OPERATION function code. Problem: When ANAL MAIL is run on a system with much SMTP activity it often does the wrong thing with files/queue entries created when the ANAL MAIL command is processing. Sometimes it would mistakenly think that it had an orphaned control file (i.e., a control file with no matching queue entry) and so would submit the control file to the queue. The result would be the same control file submitted to the queue twice. Other times it would think it found a queue entry with no corresponding control file and so would delete the queue entry when in fact there *was* a corresponding control file. The result would be an orphaned control file. Solution: Fixed Reference: CFS.34311 Problem: When ANAL MAIL deletes a control file the corresponding TEXT file (if any) is not deleted. Solution: Fixed Reference: CFS.34311 Problem: If a file with the extension .UCX_NODENAME (where "nodename" is the system's SCSNODENAME) appears in a users mail directory ANAL MAIL will take it be a control file even if it is not. Solution: Make search string that we use trap for %%%%%%%%%%%%%%_*.UCX_NODENAME rather than just *.UCX_NODENAME Reference: CFS.34311 Problem: Double spacing of lines in SMTP logs. Solution: Fixed. Problem: When running on a system with Word Perfect queues that have not been de-integrated symbiont has problems. Solution: Spot the problem and signal in the log and on the OPCOM that Word Perfect queues must be de-integrated in order for UCX SMTP to run. Reference: CFS.34311 Problem: When bouncing a mail because a mail loop is detected (i.e., maximum hop count exceeded) the symbiont leaves the control file for the mail being bounced as a stray. Solution: Fixed Reference: CFS.32922 Problem: A bounced mail message coming into a UCX SMTP system (i.e., a local user sends a mail to a remote system which can not deliver it and so bounces it back) is sometimes undeliverable because the SMTP symbiont thinks it has too many RFC Received: headers. The symbiont signals that the maximum number of hops is exceeded. Routine in receiver to parse out headers on the incoming mail sometimes mistakes the Received: RFC headers from the "Text of unsent message" section of the incoming bounced mail for RFC headers of the bounced mail itself. If the sum of the headers for the incoming bounced mail and those that appeared in the text of the bounced mail exceeded the maximum hop count then the problem occurred. Solution: Fix bug in receiver where it can sometimes miss the blank line at the end of the RFC headers of the mail and start looking into the text of the mail for Received headers. Reference: CFS.32922 Problem: Diagnosing receiver and symbiont problems that occur periodically but are not reproducable at will requires that we turn on full diagnostics for the component being looked at (receiver or symbiont). This causes the log file(s) to grow huge and slows down everything with all the extra time spent writing to the log files. Solution: The new "snapshot" logging capability for the receiver and symbiont allows you to run with full diagnostics turned on but only write the diagnostics to the log file if an error is signaled. This saves disk space and allows the receiver and/or symbiont to run at a normal speed. As each line of diagnostic text is generated it is saved in an internal "snapshot" buffer of a size specified by a snapshot logical rather than to the disk. The buffer is "circular" in that once it fills up, new lines of text simply start to overwrite the old data already there. This provides an up to date snapshot of the last so many lines of diagnostic text. There are two logicals to turn this feature on. One for the receiver and one for the symbiont. They are UCX$SMTP_SYMB_SNAPSHOT_BLOCKS and UCX$SMTP_RECV_SNAPSHOT_BLOCKS. The value of these logicals is the size of the snapshot buffer in VMS blocks (1 block being 512 bytes). When turning this feature on you are still required to define the other SMTP diagnostic logicals that tell UCX SMTP what types of logging you want. (For the symbiont, you still want to define UCX$SMTP_LOG_LEVEL to 5.) Here are two examples of setting up symbiont and receiver snapshot logicals. This sets log level to 5 and turns on snapshot logging for the SMTP symbiont with a snapshot buffer of 200 blocks. $ DEFINE/SYSTEM UCX$SMTP_LOG_LEVEL 5 $ DEFINE/SYSTEM UCX$SMTP_SYMB_SNAPSHOT_BLOCKS 200 This sets all of the receiver diagnostics on and turns on snapshot logging for the receiver with a snapshot buffer of 200 blocks. $ DEFINE/SYSTEM UCX$SMTP_RECV_DEBUG 1 $ DEFINE/SYSTEM UCX$SMTP_RECV_TRACE 1 $ DEFINE/SYSTEM UCX$SMTP_RECV_SNAPSHOT_BLOCKS 200 Problem: Bounced mail generated by the UCX SMTP symbiont does not have a To: RFC header Solution: Fixed. Problem: If the symbiont cannot deliver a mail and cannot bounce it either it leaves the bounced mail control file as a stray control file. Solution: If we can neither deliver nor bounce a mail then deliver the mail to the local postmaster account - UCX_SMTP. Only if we cannot even deliver the mail to the local postmaster account do we leave a stray control file. Reference: CFS.32922 Problem: When bouncing a mail because we have not been able to send it and have requeued it repeatedly and can no longer requeue it because the SMTP configuration maximum interval for the mail has expired the symbiont leaves the control file for the mail being bounced as a stray. Solution: Fixed. Reference: CFS.32922 Problem: If the symbiont encountered a network error sending an outbound mail after it sent the MAIL FROM: command but before it sent the RCPT TO: command all remaining outbound mail would cause an ACCVIO in the symbiont and would fail. Solution: Fixed. Reference: CFS.32922 Problem: The UCX SMTP queue watcher program, UCX$RESTART_SMTPQ.COM, does not support multiple execution queue setups. Solution: UCX$RESTART_SMTPQ.COM now supports multiple execution queue setups up to nine execution queues (i.e., UCX SET CONFIG /QUEUE=9.) Reference: CFS.34311 Problem: Symbiont code has mechanisms to find memory leaks but no mechanism to find event flag leaks. Solution: Symbiont has diagnostics to dump the number of spare event flags (as returned by LIB$GET_EF) at certain key points in the code to help find event flag leaks. To turn them on do $ DEFINE/SYSTEM UCX$SMTP_LOG_EFS 1 $ UCX STOP MAIL $ UCX START MAIL Numerous customers were reporting an insufficient event flags (INSEF) error being signaled in their symbiont logs after which time no inbound mail could be delivered. This was the reason for creating the new event flag leak diagnostics. As it turns out the problem was due to the fact that the users on these systems had their mail forwarded to PCSA% addresses and there is an event flag leak in the PCSA MAIL$PROTOCOL code. The bug is *NOT* a UCX bug. The problem has been reported to engineering responsible for the PCSA MAIL$PROTOCOL code. Problem: Users with 8 bit ASCII characters in their username see the characters changed by UCX SMTP before they get sent out to their final destination. The UCX SMTP code sets the high order bit to 0 even if the SMTP CONFIG /OPTION=EIGHT is set. Solution: Now UCX SMTP will not truncate 8 bit ASCII characters in the personal name if the SMTP CONFIG/OPTION=EIGHT is set. References: Internal reports Problem: UCX SMTP does not work right on multi-homed hosts. Solution: Fixed. Bind to INADDR_ANY rather than to a particular one of the local addresses we get in to hostent structure for our local host. References: Internal reports Note: The remaining changes will not be available in UCX V4.0 until 4.0 ECO 2. Problem: Sometimes local addresses in SMTP distribution files are not recognized as such. Solution: Fixed. Problem: On clusters SMTP distribution files must be duplicated in each SYS$SPECIFIC:[UCX_SMTP] directory making for a maintenance headache. Solution: New UCX$SMTP_DIS_DIRECTORY system logical points to the directory where SMTP will look for its .DIS files. To get all of your UCX SMTP cluster nodes to look in the same place define the logical to point to a directory visible to all the nodes. If UCX$SMTP_DIS_DIRECTORY is not defined then UCX SMTP will still look in SYS$SPECIFIC:[UCX_SMTP]. This logical may be a search list. You may wish to have UCX SMTP look at the clusterwide directory first and SYS$SPECIFIC:[UCX_SMTP] second. For example: $ DEFINE/SYSTEM UCX$SMTP_DIS_DIRECTORY WORKDISK:[SMTP_DIS], - SYS$SPECIFIC:[UCX_SMTP] This files must be world readable or owned by UCX_SMTP. Reference: CFS.37284 Problem: The conventional exclamation point to start a comment is not supported in SMTP distribution files. Solution: A "!" can now be used for a comment in an SMTP distribution file with the restriction that it must be the first character of the line. No leading white space is allowed. Reference: Internal report --------------------------------------------------------------------------- Fixes for DEC TCP/IP Services V3.3 RPC and XDR routines --------------------------------------------------------------------------- ECO 1 Updates: -------------- ECO A 30-Jun-1995 Alpha and VAX Images: UCX$RPCXDR_SHR.EXE UCX V3.3-7A Problem: An error in the XDR routine "xdr_float()" caused an assignment instead of a test when decoding an IEEE float (from the network) into a local F_Float value. Solution: Correct the typographical error. Reference: CFS.26484 INSTALLATION NOTES: In order for the corrections in this kit to take effect, the system must be rebooted. If the system is a member of a VMScluster, the entire cluster should be rebooted. References: IBM is a registered trademark of International Business Machines Corporation. UNIX is a registered trademark in the United States and other countries, licensed exclusively through X/Open Company Ltd. Hewlitt-Packard is a registered trademark of Hewlitt-Packard Company.



This patch can be found at any of these sites:

Colorado Site
Georgia Site



Files on this server are as follows:

ucxav_e10033.README
ucxav_e13033.CHKSUM
ucxav_e13033.CVRLET_TXT
ucxav_e13033.a-dcx_axpexe
ucxav_e13033.a-dcx_vaxexe

privacy and legal statement