Release Notes for Digital TCP/IP Services for OpenVMS V4.1 Update ECO 6 DISCLAIMER Digital makes no claims regarding the use or performance of these software ECOs. Digital accepts no responsibility for any incurred expenses, losses, or problems related to the installation and use of this software. Digital provides no warranties either expressed or implied in law, including IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. In no event shall Digital have any liability for damages as a result of the performance, use, or operation of this software. The customer shall have the sole responsibility for adequate protection and back-up of data used in conjunction with this update kit. ECOs in this kit are cumulative. All previous updates for Version 4.1 are included in this kit. --------------------------------------------------------------------------- You can install this update kit on the following OpenVMS systems running Digital TCP/IP Services for OpenVMS V4.1: o OpenVMS VAX V6.1 or higher. =========================================================================== The following sections describe the corrections to each facility. --------------------------------------------------------------------------- =========================================================================== The following sections describe the corrections to each facility. --------------------------------------------------------------------------- Corrections for Digital TCP/IP Services V4.1 INSTALL Images --------------------------------------------------------------------------- --------------------------------------------------------------------------- ECO 5 updates: -------------- SPECIAL NOTE 20-SEP-1996 Problem: Sites using the manual startup for the NFS server may experience the server process hanging in LEF state. Solution: There is no ECO correction for this problem. Sites using manual NFS server startup should do one or both of the following: 1. Use automatic startup instead. 2. Edit SYS$MANAGER:UCX$NFS_SERVER_STARTUP.COM as follows: - Find the RUN command following the MANUAL_STARTUP: label. - Change the last two continuation lines of the RUN command, /UIC=[1,4] - /NORESOURCE to /UIC=[1,4] thereby eliminating the /NORESOURCE_WAIT qualifier. --------------------------------------------------------------------------- Corrections for Digital TCP/IP Services V4.1 CFS_SHR Images --------------------------------------------------------------------------- ECO 5 updates: -------------- ECO A 9-SEP-1996 Alpha and VAX Image: UCX$CFS_SHR.EXE Problems: When the NFS server does data conversion the apparent size of the file changes. Some clients, including Digital UNIX, use their cached unconverted size instead of the more recently supplied converted size. This makes the file appear to be missing its tail or have extra bytes at the end. Solution: If enabled by modus_operandi bit ppda$v_fake_mtime, deduct a micro-second from mtime of unconverted files. This provokes clients sensitive to unstable file size (such as DIGITAL UNIX) to invalidate the data cache on a subsequent getattr. The unconverted size is then replaced with the converted size on the reread. ECO B 06-NOV-1996 Alpha and VAX Image: UCX$CFS_SHR.EXE Problem: Memory is misallocated on Alpha systems, causing a reduction in performance and the possibility of an allocation failure. Solution: When allocating RDCBs, be sure to use the RETADR array to determine how many RDCBs to place onto the lookaside list. ECO C 13-FEB-1997 Alpha and VAX Image: UCX$CFS_SHR.EXE Problem: On the Alpha architecture, one of the routines called within BFS$$SIGNAL() seizes the hardware console window (instead of putting a message out to OPCOM). This behavior is annoying to the user. Solution: Remove stale file handle message and recover from this condition automatically so message has minimal utility. Problem: When name conversion is enabled for a non-OpenVMS client, the server confuses regular files and directories when they have the same name (except .ext) and the file is multiversioned. Solution: One of the checks for OpenVMS client was changed to check for name conversion. ECO D 4-MAR-1997 Alpha and VAX Image: UCX$CFS_SHR.EXE UCX V4.1-12D Problem: Filename extensions for regular files may be stripped 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. --------------------------------------------------------------------------- Corrections for Digital TCP/IP Services V4.1 DNFS Images --------------------------------------------------------------------------- ECO 5 updates: -------------- ECO A 24-SEP-1996 Alpha and VAX Image: UCX$DNFSACP.EXE V4.1-12A Problem: UCX 4.0/4.1 clients can not operate with TCPware server. Solution: Delete code that prevented the interoperation. 28-FEB-1997 Alpha and VAX Image: UCX$DNFSACP*.EXE V4.1-12A Problem: MOUNT does not requery portmapper if the server's MOUNT port has gone bad because of a reboot. Also, two other PSC cumulative problems not yet reported against UCX. Solution: After one attempt with the cached mount port, zero the mount port and force a portmapper call. --------------------------------------------------------------------------- Corrections for Digital TCP/IP Services V4.1 Kernel Images --------------------------------------------------------------------------- ECO 1 updates: -------------- ECO A 8-AUG-1996 Alpha and VAX Image: UCX$BGDRIVER.EXE UCX V4.1-12A (Alpha) UCX$INTERNET_SERVICES.EXE UCX V4.1-12A UCX$INTERNET_SERVICES_V6.EXE UCX V4.1-12A UCX$INTERNET_SERVICES_SEC.EXE UCX V4.1-12A UCX$INTERNET_SERVICES_SEC_V6.EXE UCX V4.1-12A UCX$INETACP.EXE UCX V4.1-12A Problems: 1. The routing table becomes filled with entries that all have the RTF_UP flag bit cleared but have a non-zero reference count. 2. A system crash may occur in the ip_output routine due to inp_route.ro_rt pointing to a deallocated rtentry. 3. On OpenVMS Alpha V7.0, a system crash may occur when a reference is made to unallocated memory that is probably a part of the MBSTAT_DATA cluster of large buffers. Solutions: 1. In the ip_output routine in IP_OUTPUT_VMS.C, the static global route structure iproute was being overwritten 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 to it. This is the exact situation cited above. The solution is to remove the call to rtfree. 3. The problem occurs when the user specifies: UCX CONFIG SET COMM/LARGE=MIN=31 31 large Ethernet buffers need more than 64KB of memory for a cluster of buffers because with OpenVMS V7.0, the size of a VCRP has grown. The amount of space to allocate is calculated, but the value is more than 16 bits long. When the space needed is specified, the low order bits are used incorrectly. The unallocated space is then used and causes the system to crash. The correction consists of four parts: a. A new INETCB$B_MAX_NR_DATA_CLST field is created in the NETCB. The declaration of this field occurs in INET_MACROS.MAR. The new field is in a previously reserved area of the INETCB that was only used for alignment purposes, and, therefore, the INETCB has not grown in size. There is no need to re-assemble many modules to use this new field. b. In the INETACP_MOUNT routine in INETACP_INIT.MAR, the largest number of large buffers that will fit in a maximum sized cluster is calculated. A maximum sized cluster is at least one byte less than 64 KB. The newly-calculated number is then put into the new INETCB$B_MAX_NR_DATA_CLST field. c. In INET_MBUF.MAR where the clusters of large buffers are allocated, the number of buffers to configure in a cluster using the number specified by the user and the value contained in INETCB$B_MAX_NR_DATA_CLST is minimized. d. Some code cleanup is done in the SET_MIN_LARGE, SET_MIN_SMALL, and INET_SET_SIZES_MIN routines in INET_SETMODE. References: 1. None 2. CFS.43319 3. CFS.43704 ECO B 23-AUG-1996 Alpha and VAX Image: UCX$BGDRIVER.EXE UCX V4.1-12B (Alpha) UCX$INTERNET_SERVICES.EXE UCX V4.1-12B UCX$INTERNET_SERVICES_V6.EXE UCX V4.1-12B UCX$INTERNET_SERVICES_SEC.EXE UCX V4.1-12B UCX$INTERNET_SERVICES_SEC_V6.EXE UCX V4.1-12B UCX$INETACP.EXE UCX V4.1-12B Problem: A potential problem exists for multicast on SLIP lines. Once a datagram for an IP multicast address has been received in a SLIP VCRP, the VCRP will, from then on, continue to indicate that any datagrams processed in that VCRP were received via a "broadcast" datalink address. Solution: In the ALLOCATE_SLIP_RCV_VCRP routine, the datalink received header field (@VCRP$A_LAN_R_HEADER which points to VCRP$A_LAN_R_HEADER+4) is reinitialized to zero. ECO C 10-SEP-1996 Alpha and VAX Retrofit forward: 1. From ECO AI V3.3 and ECO V from V4.0. 2. From ECO U from V4.0. Image: UCX$BGDRIVER.EXE UCX V4.1-12C (Alpha) UCX$INTERNET_SERVICES.EXE UCX V4.1-12C UCX$INTERNET_SERVICES_V6.EXE UCX V4.1-12C UCX$INTERNET_SERVICES_SEC.EXE UCX V4.1-12C UCX$INTERNET_SERVICES_SEC_V6.EXE UCX V4.1-12C UCX$INETACP.EXE UCX V4.1-12C Problem: 1. The system pool fills up with VCRPs. This exhausts pool and causes a CLUEXIT bugcheck. This problem was initially reported in ECO M (V3.3). 2. When a persistent window probe message is received, UCX TCP does not reply with an ACK message. Although there is no explicit requirement to send such ACKs, certain other implementations expect them. The lack of a response prompts other TCPs to abort connections with full receive windows, even though the connection is in fact still active. Solutions: 1. This problem is really not a UCX problem but rather a datalink driver problem. However, a small amount of code can be added to UCX to prevent the problem from crashing the system. The problem is triggered by a broadcast storm from an errant Windows NT node that produces thousands of broadcast datagrams so quickly that all pool is overrun even before initial notification of the existence of the datagrams occurs. 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, the processing of the datagrams in the queue begins. 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 included correction artificially limits the number of such datagrams that will be queued back to the datalink. When the number of unprocessed queued datagrams passes a threshold value (1000 for now), deallocation of all the datagrams above this threshold occurs. This, in effect, prevents the datalink from overrunning pool since each new received datagram can use the deallocated space. 2. Send back an acknowledgment (ACK), indicating the same sequence number that was just received. In other words, do not acknowledge the single byte that was beyond the end of the allowable receive window; simply repeat the ACK for all prior data. References: 1. CFS.44630, CFS.31492 2. CFS.43983 ECO D 16-SEP-1996 Alpha and VAX Image: UCX$INETACP.EXE UCX V4.1-12D Problem: When a service is disabled while it still has active connections, the global service counter still counts those connections. When the connections are closed, the global counter is not updated. Solution: Decrement the service counter for all outstanding connections at the time the service is disabled. Reference: CFS.42427 ECO E 17-SEP-1996 Alpha and VAX. This corresponds to ECO W from V4.0. Image: UCX$BGDRIVER.EXE UCX V4.1-12E (Alpha) UCX$INTERNET_SERVICES.EXE UCX V4.1-12E UCX$INTERNET_SERVICES_V6.EXE UCX V4.1-12E UCX$INTERNET_SERVICES_SEC.EXE UCX V4.1-12E UCX$INTERNET_SERVICES_SEC_V6.EXE UCX V4.1-12E UCX$INETACP.EXE UCX V4.1-12E Problem: An application waiting for a given broadcast address incorrectly receives broadcast messages addressed to the network address of its second interface. Solution: Tighten up the address comparison and selection criteria in INET_IN_OUT.MAR so it will be able to recognize when a datalink level broadcast has been received over an interface whose IP broadcast address does not coincide with the IP broadcast destination of the received datagram. In this case, discard the received datagram. References: CFS.34509 ECO F 20-SEP-1996 Alpha and VAX Image: UCX$BGDRIVER.EXE UCX V4.1-12F (Alpha) UCX$INTERNET_SERVICES.EXE UCX V4.1-12F UCX$INTERNET_SERVICES_V6.EXE UCX V4.1-12F UCX$INTERNET_SERVICES_SEC.EXE UCX V4.1-12F UCX$INTERNET_SERVICES_SEC_V6.EXE UCX V4.1-12F UCX$INETACP.EXE UCX V4.1-12F Problems: 1. On 32-bit systems (i.e., VAX and Alpha before OpenVMS V7.0), systems running UCX V4.1 crash when DCE is started. 2. On-64 bit systems, DCE gather writes do not work properly. Solution: Both problems are due to errors in a routine that only deals with scatter/gather I/O. The routine is BUILD_MULTI_BUFFER_VECTOR. For problem 1, there was an incorrect reference to R3 that should have been to R6. The result was that a counter whose value should have been less than a maximum of 200 was being loaded with arbitrary information. The counter was then used to modify an array in memory. When the counter contained large numbers, massive memory corruption occurred. For problem 2, the error was in code that prepared 32- bit style descriptors for the 64-bit environment. The result was that in a gather operation that specified 3 buffers, the descriptors for the first buffer were replicated 3 times rather than each of the three individual buffers being replicated once. ECO G 26-SEP-1996 Alpha and VAX Image: 1. UCX$TRACE.EXE UCX V4.1-12G 2. UCX$BGDRIVER.EXE UCX V4.1-12G (Alpha) UCX$INTERNET_SERVICES.EXE UCX V4.1-12G UCX$INTERNET_SERVICES_V6.EXE UCX V4.1-12G UCX$INTERNET_SERVICES_SEC.EXE UCX V4.1-12G UCX$INTERNET_SERVICES_SEC_V6.EXE UCX V4.1-12G UCX$INETACP.EXE UCX V4.1-12G Problems: 1. The TCPIPTRACE command intermittently causes an access violation. 2. POP users notice occasional data duplication. The problem that POP sees is more general. The problem may occur on any non-blocking socket. When data is sent, the current socket send quota is less than the amount of data to be sent, and there is more space in the current mbuf in the send socket buffer than the amount of remaining quota. In this infrequent case, incorrect I/O status is returned to the user. It does not reflect that data was actually written to the socket. The result is that the user will resend data that has already been sent. Solutions: 1. The alignment problem on Alpha has been corrected. 2. The partial send count is properly updated after some data has been transferred. References: 1. Internal report 2. CFS.44891 ECO 2 updates: -------------- ECO H 30-SEP-1996 Alpha and VAX Image: UCX$BGDRIVER.EXE UCX V4.1-12H (Alpha) UCX$INTERNET_SERVICES.EXE UCX V4.1-12H UCX$INTERNET_SERVICES_V6.EXE UCX V4.1-12H UCX$INTERNET_SERVICES_SEC.EXE UCX V4.1-12H UCX$INTERNET_SERVICES_SEC_V6.EXE UCX V4.1-12H UCX$INETACP.EXE UCX V4.1-12H Problem: Multiple ACCEPT operations done to the same socket may cause an I/O request to be lost. This results in a process hanging in RWAST. This can occur with a multiprocess World-Wide Web (WWW) server. Solution: The cause of this problem is that a particular UCX-specific field in the INET_SOACCEPT code flow in the IRP is being used without being initialized. The result is that the IRP$x_BG_OOB bit, in the IRP$L_FLAGS field, is possibly being interpreted incorrectly. The solution is to introduce an instruction that initializes the field to zero at the start of an ACCEPT operation. ECO J 4-OCT-1996 Alpha and VAX Image: UCX$BGDRIVER.EXE UCX V4.1-12J (Alpha) UCX$INTERNET_SERVICES.EXE UCX V4.1-12J UCX$INTERNET_SERVICES_V6.EXE UCX V4.1-12J UCX$INTERNET_SERVICES_SEC.EXE UCX V4.1-12J UCX$INTERNET_SERVICES_SEC_V6.EXE UCX V4.1-12J UCX$INETACP.EXE UCX V4.1-12J Problem: 1. The UCX SHOW DEVICE command sometimes hangs. As a result, the customer shut down UCX and brought it up again. Upon doing this once, the system crashed. 2. At setup, select() should properly sense and return if the socket has OOB data pending. While reception of OOB data does cause an active select() to terminate, active OOB data does not cause a new select() to terminate. Solution: 1. The cause of the problem is most likely that the UCX$BGDRIVER, in responding to the UCX SHOW DEVICE command, is perusing the I/O database without holding the I/O database MUTEX. As a result, there is a remote possibility that the I/O database might change while it is being searched. This could have unpredictable results. The way to resolve this problem is to simply request this MUTEX before the operation begins, and then to release it when the search is finished. This should relieve the user's need to shut down UCX in similar circumstances. The crash that occurred after bringing up UCX was the result of a resource problem in OpenVMS that left UCX in an inconsistent state. A correction for this problem requires a major rework of UCX initialization and is planned for a future release. For the present, it is recommended that frequent stopping and starting of UCX be avoided. 2. OOB data does not appear as data queued to the socket's MBUFs and the read() code fails to clear the RCVATMARK condition when the OOB data is returned to the user. Hence, the check added in ECO C is not correct and the previous code, while it will cause the select() to return, may not have an OOB present. The change will actually check the TCP context to see if an OOB is present instead of trusting RCVATMARK. This is a correction at one place in the driver, and the correction to the read() code will be made for V4.1 and beyond. References: 1. CFS.43985 2. CFS.44644 ECO K 22-OCT-1996 Alpha and VAX Retrofit forward from ECO AJ V3.3. Image: UCX$BGDRIVER.EXE UCX V4.1-12K (Alpha) UCX$INTERNET_SERVICES.EXE UCX V4.1-12K UCX$INTERNET_SERVICES_V6.EXE UCX V4.1-12K UCX$INTERNET_SERVICES_SEC.EXE UCX V4.1-12K UCX$INTERNET_SERVICES_SEC_V6.EXE UCX V4.1-12K UCX$INETACP.EXE UCX V4.1-12K Problem: A crash can occur in the IN_CKSUM routine with an access violation. This problem is triggered by the receipt of a technically illegal, highly fragmented ping request datagram, probably from a Windows NT or a Windows 95 system. The problem with the datagram is that when it is reassembled with its IP header, it is longer than 65535 bytes which is the longest length expressible in the 16 bits of the length field of the IP header. Solution: In the ip_reass routine, fragmented packets are reassembled, without looking at the total length of the datagram. To resolve the problem, if this length exceeds 65535, the datagram will be discarded after incrementing the ips_fragdropped counter by the number of fragments in the datagram. ECO L 25-Oct-1996 Alpha and VAX Partial retrofit forward from ECO Z V4.0. Image: UCX$BGDRIVER.EXE UCX V4.1-12L (Alpha) UCX$INTERNET_SERVICES.EXE UCX V4.1-12L UCX$INTERNET_SERVICES_V6.EXE UCX V4.1-12L UCX$INTERNET_SERVICES_SEC.EXE UCX V4.1-12L UCX$INTERNET_SERVICES_SEC_V6.EXE UCX V4.1-12L UCX$INETACP.EXE UCX V4.1-12L Problem: Incoming RSH connections sometimes hang. Solution: In the INETACP_GET_USER_INFO routine, the data from the incoming RSH connection is parsed for information as to the error port, the user name, command to execute, etc. If enough data has not yet arrived, a READATTN AST is set to send a wake-up notification when new data arrives and then causes the process to go into "sleep" (become inactive). An error in setting up the AST request created a timing window wherein the process remain inactive indefinitely. References: Several CLD reports. ECO M 8-Nov-1996 Alpha and VAX Image: UCX$INETACP.EXE UCX V4.1-12M Problem: The correction in ECO D, above, was incomplete. Although it prevented the service counter from growing when active services were disabled, it also led in some cases to the counter being decremented past zero. For example, disabling the FTP service while one FTP connection was the only activity on the system would result in the service counter showing up as 65535 (-1, formatted as an unsigned word). Following such underflow, no further connections for any service are accepted. Solution: When decrementing the global service counter at service disable time, set a flag in the BG UCB so that the counter will not be decremented again later, when the device-socket is deleted. To provide additional protection against any such future problems, always check that the value of the service counter is non-zero before decrementing it. Reference: Internal report. ECO N 12-Nov-1996 Alpha and VAX Image: UCX$BGDRIVER.EXE UCX V4.1-12N (Alpha) UCX$INTERNET_SERVICES.EXE UCX V4.1-12N UCX$INTERNET_SERVICES_V6.EXE UCX V4.1-12N UCX$INTERNET_SERVICES_SEC.EXE UCX V4.1-12N UCX$INTERNET_SERVICES_SEC_V6.EXE UCX V4.1-12N UCX$INETACP.EXE UCX V4.1-12N Problems: 1. The UCX$INET_ACP process slowly loses AST count as time goes on. 2. A system crash can occur in INET_GET_IRP with the INETCB pointer as zero. Solutions: 1. If an incoming RSH connection specifies an error connection, and during the processing of the specified RSH command data is written over the error connection, the ACP loses track of a READ ATTN AST that it had requested on the error connection. The solution is to provide cleanup in the INET_SELECT_REMOVE_UCB routine. This routine looks at every UCB that is about to disappear. If it sees a dangling READATTN AST on the socket associated with the UCB, the routine removes it and returns the AST quota to its owner. 2. This is a synchronization problem in that UCX is being brought down and residual PWIP activity results in a call to INET_GET_IRP. The solution is to put a test for the existence of the INETCB before using a pointer to it, and having the routine return an error if the test fails. References: 1. CLD CFS.46398 2. CLD CFS.44492 ECO 3 updates: -------------- ECO O 14-Nov-1996 Alpha and VAX Image: UCX$BGDRIVER.EXE UCX V4.1-12O (Alpha) UCX$INTERNET_SERVICES.EXE UCX V4.1-12O UCX$INTERNET_SERVICES_V6.EXE UCX V4.1-12O UCX$INTERNET_SERVICES_SEC.EXE UCX V4.1-12O UCX$INTERNET_SERVICES_SEC_V6.EXE UCX V4.1-12O UCX$INETACP.EXE UCX V4.1-12O Problems: 1. A system crash (VAX only) may occur with a Reserved Operand Fault during the execution of a CMPD (Compare D_Floating) instruction. 2. A system crash may occur in the arpioctl routine during reference to the variable arpoint, which is zero. Solutions: 1. In INET_IN_OUT.MAR there are two CMPD instructions that, depending on the data they are comparing, might cause a system crash. Simply substitute 2 CMPL instructions for the offending instruction to resolve the problem. 2. The arptable is allocated and the variable arpoint is set to point to the arptable when the first external interface is configured. If UCX is started and the configuration database has no interfaces defined, it may enter code that just assumes that arpoint has a valid value in it. To resolve this problem, it explicitly tests for the possibility of a zero arpoint wherever that is possible and exits gracefully in that case. References: 1. CLD CFS.46437 2. CLD CFS.46434 ECO P 27-Nov-1996 Alpha and VAX Image: UCX$BGDRIVER.EXE UCX V4.1-12P (Alpha) UCX$INTERNET_SERVICES.EXE UCX V4.1-12P UCX$INTERNET_SERVICES_V6.EXE UCX V4.1-12P UCX$INTERNET_SERVICES_SEC.EXE UCX V4.1-12P UCX$INTERNET_SERVICES_SEC_V6.EXE UCX V4.1-12P UCX$INETACP.EXE UCX V4.1-12P Problem: IP datagram fragments that have the DF bit set are being ignored. Apparently, some SUN systems running SOLARIUS generate such datagrams. Solutions: An IP datagram that has the DF bit set is incorrectly assumed to NOT be a fragment. Instead, it was dropped because no attempt was made to reassemble it and its associated fragments into a complete datagram. The assumption that the DF bit implies that a datagram is not a fragment is no longer made. References: Internal reports. ECO 5 updates: -------------- ECO Q 6-DEC-1996 Alpha and VAX Image: UCX$BGDRIVER.EXE UCX V4.1-12Q (Alpha) UCX$INTERNET_SERVICES.EXE UCX V4.1-12Q UCX$INTERNET_SERVICES_V6.EXE UCX V4.1-12Q UCX$INTERNET_SERVICES_SEC.EXE UCX V4.1-12Q UCX$INTERNET_SERVICES_SEC_V6.EXE UCX V4.1-12Q UCX$INETACP.EXE UCX V4.1-12Q Problem: System crashes (INVEXCEPTN) while reassembling a fragmented UDP datagram directed to a PATHWORKS socket. Solution: It is believed that this problem is due to a PWIP problem, although the exact cause has not been found. However the crash is triggered by the receipt of a fragmented UDP datagram, a very rare event in normal circumstances, that is then passed up to PWIP where some data is being corrupted. A change has been made to eliminate the possibility of passing fragmented datagrams to PWIP. This is done by allocating adequate space to accommodate the fragmented datagram and then copying the fragments into a contiguous datagram. References: CFS.42878. ECO R 16-DEC-1996 Alpha and VAX Image: UCX$BGDRIVER.EXE UCX V4.1-12R (Alpha) UCX$INTERNET_SERVICES.EXE UCX V4.1-12R UCX$INTERNET_SERVICES_V6.EXE UCX V4.1-12R UCX$INTERNET_SERVICES_SEC.EXE UCX V4.1-12R UCX$INTERNET_SERVICES_SEC_V6.EXE UCX V4.1-12R UCX$INETACP.EXE UCX V4.1-12R Problem: Invoking TRACEROUTE.EXE from UCX$EXAMPLES may lead to a crash. Solutions: Corrected. References: CFS.46521. ECO S 3-JAN-1997 Alpha and VAX Image: UCX$INETACP.EXE UCX V4.1-12S UCX$BGDRIVER.EXE UCX V4.1-12S UCX$INTERNET_SERVICES.EXE UCX V4.1-12S (VAX) UCX$INTERNET_SERVICES_V6.EXE UCX V4.1-12S UCX$INTERNET_SERVICES_SEC.EXE UCX V4.1-12S UCX$INTERNET_SERVICES_SEC_V6.EXE UCX V4.1-12S Problem: On a system using FDDI, configuring an illegally large value for the minimum number of large buffers causes a system crash. Solution: This problem was introduced in ECO A, when the new mechanism to dynamically calculate limits on cluster sizes was added. The solution is to recalculate the limit at the time FDDI-sized buffers are selected (later in the startup process). References: CFS.47489. ECO T 13-JAN-1997 Alpha and VAX Image: UCX$BGDRIVER.EXE UCX V4.1-12T (Alpha) UCX$INTERNET_SERVICES.EXE UCX V4.1-12T UCX$INTERNET_SERVICES_V6.EXE UCX V4.1-12T UCX$INTERNET_SERVICES_SEC.EXE UCX V4.1-12T UCX$INTERNET_SERVICES_SEC_V6.EXE UCX V4.1-12T UCX$INETACP.EXE UCX V4.1-12T Problem: SSRVEXCEPT, on OpenVMS V7.x, when receiving OOB data. Solution: The problem was a failure to take 64-bit addresses into account when returning the user data to the user buffer. For 64-bit systems, all data buffer descriptors are normal to 64 bits. However, in routine, INET_SORECEIVE_IMMEDIATE, the descriptor was treated as if it were a 32 bit descriptor. As a result, the high 32 bits of the length were picked up and used as if it were the address of the user buffer. References: Internal report. ECO U 16-JAN-1997 Alpha and VAX Image: UCX$BGDRIVER.EXE UCX V4.1-12U (Alpha) UCX$INTERNET_SERVICES.EXE UCX V4.1-12U (VAX) UCX$INTERNET_SERVICES_V6.EXE UCX V4.1-12U UCX$INTERNET_SERVICES_SEC.EXE UCX V4.1-12U UCX$INTERNET_SERVICES_SEC_V6.EXE UCX V4.1-12U Problem: A memory leak occurs when receiving small, fragmented ICMP messages. This leak is visible with the SDA command SHOW POOL /NONPAGE /SUMMARY as an unusually large number of VCRPs consuming most of nonpaged pool. Solution: Deallocate the VCRP(s) containing the ICMP message, once the size check shows that the first fragment is too small. Reference: Internal report. Problem: The getpeername() operation succeeds on a socket that is not yet connected, in which case Digital UNIX returns ENOTCONN. Solution: Check for a TCP socket that is not connected; return an error. Reference: CFS.47513. Problem: ICMP Timestamp Reply messages are sent using a non-standard time value, but it is not marked as such by setting the high-order bit. Solution: Set the high-order bit in the time value. It is not possible at this time to send a standard value, because the UCX kernel has no knowledge of Universal Time, nor does it know the local timezone (which would be required to calculate Universal Time). Also correct the algorithm which was producing a number of seconds 10 times too high. References: CFS.45971. Problem: System crashes when issuing UCX SET NOINTER on a system that had no physical interface attached but had one configured. Solution: Crash occurred in shutting VCI ports but at the time there was no VCIB for ARP, yet it was assumed that there would be one. The correction is to explicitly test for the existence of the ARP VCIB before using its supposed address. References: Internal report. ECO V 24-JAN-1997 Alpha and VAX Image: UCX$BGDRIVER.EXE UCX V4.1-12V UCX$INTERNET_SERVICES.EXE UCX V4.1-12V (VAX) UCX$INTERNET_SERVICES_V6.EXE UCX V4.1-12V UCX$INTERNET_SERVICES_SEC.EXE UCX V4.1-12V UCX$INTERNET_SERVICES_SEC_V6.EXE UCX V4.1-12V Problem: A remote node connected to a UCX node by a serial line, where the UCX node considers the serial line to be a SLIP interface, can cause the UCX node to overwrite memory. This action can be accomplished by the remote node sending certain character particular strings on the serial line. Solution: The problem arises when the particular character strings process neglects to check for the overrun condition before adding data. The solution is to check for this condition before adding data to the VCR. Reference: Internal report. Problem: Crash processing a RARP request on VAX received via the ARP VCI port. Solution: Routine ARPINPUT was returning an incorrect value, a result of a problem in the compiler. To resolve the problem, the partial RARP support in IF_ETHER_VMS.C has been disabled. Reference: CFS.48299. Problem: Timestamps used in timestamp option neglected to set the non-standard bit. Solution: Set the non-standard bit. Reference: Internal testing. ECO W 4-MAR-1997 Image: UCX$BGDRIVER.EXE UCX V4.1-12W UCX$INTERNET_SERVICES.EXE UCX V4.1-12W (VAX) UCX$INTERNET_SERVICES_V6.EXE UCX V4.1-12W (VAX) UCX$INTERNET_SERVICES_SEC.EXE UCX V4.1-12W (VAX) UCX$INTERNET_SERVICES_SEC_V6.EXE UCX V4.1-12W (VAX) Problem: The system hangs when running an application that "peeks" at data in a TCP socket. Solution: A problem in routine INET_SORECEIVE_STREAM caused an infinite loop if while "peeking" at data, data arrived for the socket. The solution was to correct that routine. References: CFS.49095, CFS.49054. ECO X 12-MAR-1997 Alpha and VAX Image: UCX$BGDRIVER.EXE UCX V4.1-12X UCX$INTERNET_SERVICES.EXE UCX V4.1-12X (VAX) UCX$INTERNET_SERVICES_V6.EXE UCX V4.1-12X (VAX) UCX$INTERNET_SERVICES_SEC.EXE UCX V4.1-12X (VAX) UCX$INTERNET_SERVICES_SEC_V6.EXE UCX V4.1-12X (VAX) Problem: Multicast applications do not receive copies of messages transmitted by other applications on the same host. Solution: Treat multicast messages like broadcasts, which were already being looped back for receive processing. Reference: CFS.48879. ECO Y 2-APR-1997 Alpha and VAX Image: UCX$BGDRIVER.EXE UCX V4.1-12Y UCX$INTERNET_SERVICES.EXE UCX V4.1-12Y (VAX) UCX$INTERNET_SERVICES_V6.EXE UCX V4.1-12Y (VAX) UCX$INTERNET_SERVICES_SEC.EXE UCX V4.1-12Y (VAX) UCX$INTERNET_SERVICES_SEC_V6.EXE UCX V4.1-12Y (VAX) UCX$INETACP.EXE UCX V4.1-12Y Problems: 1. System crashes on a write to a BG device when P2 parameter (user buffer length) specifies a negative value. 2. When loading a proxy database of over 2048 entries, certain entries become disabled. Solutions: 1. Lengths of user buffers were not being properly validated and as a result, the negative value length was misinterpreted as a large positive number. The solution is to properly validate this length, limiting lengths to 64KB-1 bytes. Lengths greater than this and lengths less than zero now cause the I/O request to be terminated with an SS$_IVBUFLEN status. 2. An error in the definition of the MOVCL3 macro, which did not properly account for overlapped moves led to corruption of the proxy database. To correct it, the macro was modified (INET_MACROS.MAR) and NETACP_CREPROC.MAR, where the macro is invoked, was modified to correct some branch destination problems that arose with the new larger macro. References: 1. Internal testing. 2. CFS.49264. ECO Z 8-APR-1997 Alpha and VAX Image: UCX$INETACP.MAR UCX V4.1-12Z Problem: Port numbers on incoming RLOGIN connections were not properly parsed. Solution: Correct port number parsing. Reference: Internal testing. ECO AA 9-APR-1997 Alpha and VAX Images: UCX$BGDRIVER.EXE UCX V4.1-12AA UCX$INTERNET_SERVICES.EXE UCX V4.1-12AA (VAX) UCX$INTERNET_SERVICES_V6.EXE UCX V4.1-12AA (VAX) UCX$INTERNET_SERVICES_SEC.EXE UCX V4.1-12AA (VAX) UCX$INTERNET_SERVICES_SEC_V6.EXE UCX V4.1-12AA (VAX) UCX$INETACP.EXE UCX V4.1-12AA Problem: 1. System crash. Call to panic from SBDROP when inconsistent data is left in the receive socket buffer. 2. System crash soon after boot on OpenVMS V7.1 Alpha with per thread code. Solution: 1. The problem arises in routine INET_SORECEIVE_ATOMIC, when: a) data arrives on a UDP or RAW IP socket while the system is unsynchronized in INET_MOVIO_TO_USER, and b) the user buffer is smaller than the datagram which implies that the system does not consume the entire received datagram and windup calling SBDROPRECORD. The solution is to refresh, R7, the pointer to the next datagram after resynchronization. 2. UCX was inadvertently clearing an IRP field via a CLRQ IRP$L_ACTION instruction, assuming (without an explicit ASSUME invocation) that IRP$L_ARG1 was in the next longword. For V7.0 of OpenVMS Alpha, this assumption is no longer true, and the per thread code uses this field that was being cleared. The solution is to replace all instances of the CLRQ IRP$L_ACTION instruction with the following sequence: CLRL IRP$L_ACTION CLRL IRP$L_ARG1 References: 1. CFS.47490. 2. Internal report. ECO AB 23-APR-1997 Alpha and VAX Images: UCX$BGDRIVER.EXE UCX V4.1-12AB UCX$INTERNET_SERVICES.EXE UCX V4.1-12AB (VAX) UCX$INTERNET_SERVICES_V6.EXE UCX V4.1-12AB (VAX) UCX$INTERNET_SERVICES_SEC.EXE UCX V4.1-12AB (VAX) UCX$INTERNET_SERVICES_SEC_V6.EXE UCX V4.1-12AB (VAX) UCX$INETACP.EXE UCX V4.1-12AB Problem: VCRP leak over time on a SLIP interface. Solution: In routine, PROCESS_SLIP_MSG, the call INET_DECOMPRESS_PACKET expands the received packet. That routine returns an error when the packet cannot be decompressed due to noise on the line. When this occurred the VCRP that contained the packet is lost. The fix is to deallocate the VCRP when this occurs. References: CFS.47496 --------------------------------------------------------------------------- Corrections for Digital TCP/IP Services V4.1 IPC Images --------------------------------------------------------------------------- ECO 5 updates: -------------- ECO A 1-JAN-1997 Alpha only Image: UCX$IPC_SHR.EXE UCX V4.1-12A Problem: Socket library routines use event flags allocated by LIB$GET_EF to someone else. Solution: This situation resulted from a build problem wherein LIB$GET_EF was being included in object form rather than being called in LIBRTL. The solution was to correct the options file. Reference: CFS.47810 --------------------------------------------------------------------------- Corrections for Digital TCP/IP Services V4.1 TFTP Images --------------------------------------------------------------------------- ECO 3 updates: -------------- ECO A 23-OCT-1996 Alpha and VAX Image: UCX$TFTP.EXE UCX V4.1-12A Problem: The TFTP Server pads the last 512 byte record with nulls on octet-mode transfers when the source file has a short (<512 bytes>) last record. Solution: When the file is opened, read the file size in bytes and calculate the EOF byte. Check for EOF when reading the file, and ask for partial last block only. Reference: CFS.44865. ECO 5 updates: -------------- ECO E 11-APR-1997 Alpha and VAX Image: UCX$TFTP.EXE UCX V4.1-12E Problems: 1. Concurrent downloads don't work. 2. Concurrent transfers didn't work correctly. 3. On slower systems the tftp would not work correctly when it initially starts up. Solutions: 1. FileByteCount updates have been fixed. 2. The loop that does the concurrent transfers was missing a statement to go to the next transfer. Once that was fixed everything started working. 3. Change the scheduling mechanism. Now new tasks get appended to the list so that they are served FIFO way. The algorithm checks the timeout and if it's less than minimum it doesn't start another transfer to the same client. References: CFS.49535, CFS.49605. --------------------------------------------------------------------------- Corrections for Digital TCP/IP Services V4.1 FTP Images --------------------------------------------------------------------------- ECO 5 updates: -------------- ECO A 10-OCT-1996 Alpha and VAX Image: UCX$FTP.EXE Problem: When wild cards are used to specify the file name for an mget command, the local file specification is missing the extension. Solution: Corrected. Reference: CFS.45570 ECO B 20-JAN-1997 Alpha and VAX Image: UCX$FTP.EXE UCX V4.1-12B Problem: The default directory cannot include a network access string. Solution: Allow the client to include quotation marks in the default string. Modify server to make NAS part of the device string. References: CFS.46497. ECO C 10-APR-1997 ECO D 24-APR-1997 Alpha and VAX Image: UCX$FTP.EXE UCX V4.1-12D Problems: 1. Commands read from the file specified with the /INPUT qualifier were not treated as "batch mode" commands. 2. Wildcarded PUTs did not pass the target specification. 3. The PUT/FDL command fails if the filename includes a version (such is the case with PUT/FDL *.*;*). 4. Verbose messages are displayed by COPY/FTP when not asked for. 5. Multiline responses can hang the client. 6. Improper handling of the target specification when wildcarding files. 7. RECV creates files named ".;". Solutions: 1. Treat all commands which are not read from the terminal as "batch mode" commands. 2. Add another parameter to wldcrd_put_process() to pass the information. 3. Merge the "fdl" name modification into the type field of the file specification; don't just append it to the name. 4. Remove the unconditional display of the reply status. 5. Ensure that FTP client adheres to RFC 959's definition of multiline response mode. 6. Treat the target specification has the directory spec (only) when the input is wildcarded. 7. When receiving files, merge the local name into the string or the file received appears as ".;". References: Internal and external reports. ECO E 28-May-1997 VAX and Alpha Image: UCX$FTP.EXE UCX V4.1-12E Problems: 1. Prompting was not working when mget-ing or mput-ing files; e.g. answering 'y' caused all subsequent files to be copied without any further prompting. When multicharacter replies (e.g.: "Yes"") were typed in, each character was interpreted as a separate answer. 2. "Literal" wildcard characters and multiple dots in remote file specs did not work correctly when get-ing and put-ing files with globbing off. There were several IPMT cases relating to this, on UNISYS servers. 3. Wildcard substitution in target spec did not work as intended, with globbing on.(Problems with get, and copy /ftp) 4. Copy /ftp caused an accvio, by performing an unnecessary CWD /. 5. /INPUT files were opened with write access, as shown by a privilege error generated when the protection code of the file doesn't allow write access. 6. There were a number of reported problems with processing remote and local VMS logical names in file spec's when put/get-ing files, or using copy /ftp. 7. In Non-VMS+ mode, parseable remote names resulted in incorrect local file names (e.g.: the name of the temp file used to store the NLST results). Solutions: 1. Changed wildcard_[get,put]_process() to use a local copy of cnfrmflg (tcnfrm), rather than permanently altering the global. Increased the buffer size used for prompting. This corrects reading 'extra' reply characters if multiple character answers are typed in. 2. Fixed recv_data(), to always call ConvertFilenameToVMS(). Corrected a number of subtle glitches in ConvertFilenameToVMS(). Added new macro ftp_isvalidfnamec_(). - Changed FTP$GET() in ftp$client_cmds.c to call wldcrd_get_process() only if "wild chars" found, _and_ (parse) [i.e., globbing]. Prior to this fix, we would always issue an NLST, which appears unimplemented on the Unisys servers. - Changed FTP$PUT() in ftp$client_cmds.c to allow wild-card characters in the remote filename, if globbing (i.e. wildcard expansion) is off. 3. Fixed wildcard expansion in wildcrd_get_process(). If the local file spec contained a wild card, the entire remote spec, including the node, device and directory was substituted from the wildcard onwards. Now every remote file spec is SYS$PARSED with syntax check option, and only the file, extension and revision number is used as substitutes for the wild card(s). 4. In the DCL_Copy_Command() function, checking [length-1] on a zero length string resulted in checking the byte BEFORE the char string's starting address. About 10 lines of code re-written. 5. Corrected freopen() on /input file to use "r" instead of "r+", as suggested by John Gemignani, Jr. 6. Changed FTP$GET() to always SYS$PARSE() with syntax check only. 7. In wldcrd_get_process() use the RMS 'name' block attached to file_fab when SYS$PARSE -ing NOT the one attached to the local fab. -Fixed bug in same where remote file names containing wildcard char-s would cause subsequent files to get an incorrect name. -Fixed glitch in same where the user could not specify the target name of files containing wild card characters. References: Internal and external reports. ECO 6 updates: ------------- ECO F 18-June-1997 VAX and ALPHA Image: UCX$FTP.EXE UCX V4.1-12F Problems: 1. COPY/FTP could not handle non-VMS directory path formats. 2. Double /incorrect messages observed when PUT-ing a local, locked file. 3. USER xxx yyy (xxx is username, yyy is password) no longer works in /input command files. Solutions: 1. Overhauled the DCL_Copy_Command() function to enable the use ftp/copy with non-VMS servers. Note, that non-VMS directory specifications do have to be in double quotes. 2. Added an extra sys$parse in wldcrd_get_process(). when parsing remote to local file spec. Minor changes to getreply() to ensure we always return a status. Added an 'early' sys$open attempt in wldcrd_put_process(), and FTP$PUT() to do an early open of the local file, so that we detect if the file is locked, and prevent the sending of the STOR command, opening a data channel, etc. on such files. Note:The same thing will have to be done in the server code. 3. Enhanced login_prompt() so that it can deal with USER xxx yyy passed on the same line in an /input file, while preserving all conceivable other legacy behaviors; (with or without the USER keyword, username / password on the same, or separate lines). References: Internal and external reports. --------------------------------------------------------------------------- Corrections for Digital TCP/IP Services V4.1 FTPD Images --------------------------------------------------------------------------- ECO 5 updates: -------------- ECO A 04-OCT-1996 Alpha and VAX Image: UCX$FTPC.EXE UCX V4.1-12A Problem: Memory creep occurs when ls and dir commands are issued. Repeated FTP ls and dir commands use virtual memory and do not return it until the FTP connection is broken and the server child process exits. Solution: Ensure that LIB$FREE_VM is called with the same memory address as LIB$GET_VM. Remove some calls to malloc() and alloc() that lead to large memory creep. Reference: CFS.45158. ECO B 07-NOV-1996 Alpha and VAX Image: UCX$FTPC.EXE UCX V4.1-12B Problem: Structure record is not supported in image mode. Solution: Added the support for File type Image and Structure Record to send_normal_bin(). Also added support function doubleFF(). Reference: CFS.29927. ECO C 10-APR-1997 ECO D 24-APR-1997 Alpha and VAX Images: UCX$FTPC.EXE UCX V4.1-12D UCX$FTPD.EXE UCX V4.1-12D Problems: 1. The CWD command does not accept a network access string. 2. Lines in directory listings are terminated incorrectly. 3. Unix-formatted specifications are not translated correctly. 4. Latent problem with anonymous access determined from code review. 5. Auditing doesn't show actual file specifications; only what the user specified. 6. Problems with rmd() [delete directory] specifications. 7. Problems with mkd() [create directory] specifications. 8. Fix the misspelling of "cant" and "successful" 9. Several operations return errors but don't tell why the operation failed. 10. STOU (store unique) creates bizarre file names which are not really unique (at least, not in the same hour). 11. Loss of channels and mishandling of file specifications. 12. The "SITE HELP" command generates a multiline response even if they are disabled. 13. When wildcarding against the server and either a different directory or a search list or rooted directory is used, operations fail. 14. Possible stack corruption caused by an asynchronous QIO with an IOSB on the routine stack -- the routine has exited. 15. Peculiar handling of the directory specified to CWD. 16. File type checks can fail for unknown reasons. 17. Non-VMS directory listings should appear in lowercase. 18. Various DELETE deficiencies. 19. Correct login failures with certain passwords. 20. Sites which have a large number of FTPC processes experience FTPD hangs. 21. Problems with exitmsg(). Solutions: 1. Add support for a network access string. 2. Terminate output lines with NVT () and not just \n (). 3. Replace the broken UnixToVms() routine and include a status return. 4. Change `AnonymousUser' flag to be an int instead of a short; the handling was incorrect. 5. Move auditing into lower level routines where the information is now available. 6. Change rmd() to use RMS to perform the operations; RMS specs are now fully supported. 7. Change mkd() to use RMS to perform the operations; RMS specs are now fully supported. 8. Corrected spelling of several messages. 9. Implement RFC-959 multiline responses. This can be defeated by either specifying a hyphen (`-') as the first character of the password (per RFC 959), or setting the logical UCX$FTPD_MULTILINE_DISABLE. 10. Use the RMS maximize version flag, which does it nicely. 11. Perform the RMS $PARSE and $SEARCH operations and pass a FAB around, instead of a name. FTPC now has three FABS and uses a maximum of three channels. 12. Fix the "SITE HELP" command which violates RFC-959's definition of multiline responses and if they are enabled or disabled. 13. Expand the file names properly to ensure that the files are accessible once their names have been returned. Rooted directories, search lists, and third-party node, device and directory strings now work properly. 14. Remove the IOSB as the code does not check it. 15. Change CWD to use RMS to $PARSE and establish the default directory properly. 16. Change routine check_filetype() to return an exit status. 17. Perform the conversion properly paying close attention to the quoted areas of the file specification strings. 18. Allow DELETE to use the multiline response formats. Show what you deleted and what you could not and why (if multiline enabled). 19. The password and password2 buffers were being mistreated and any which contained a null byte caused password verification to fail. 20. Increase the MAX_SESSIONS to produce a larger table. 21. The structure was handled as an array when the structure definition is available. References: Internal and external reports. ECO E 30-May-1997 Alpha and VAX Images: UCX$FTPC.EXE UCX V4.1-12E UCX$FTPD.EXE UCX V4.1-12E Problems : 1. Entering a user name such as "ANONYMOUS " (w/an extra space) would bypass anonymous logging. 2. Code review spotted a problem with reading the "Extended logging" logical 3. There was a quota-problem with passive sockets. 4. Error code 550 was sent to the client when reporting a successful file deletion. 5. Deleting a locked file caused the UCX$FTPC process to crash. 6. A number of problems were observed with logging errors. Extra characters at the end of the message, and missing separators were seen. Some errors did not get logged. 7. Deleting multiple (wildcard-selected) files caused the client to hang if multiLine responses were disabled. In such case, the server would not send any status or error messages to the client at all, and the client would wait for a reply until it has timed out. 8. A code review spotted several errors in ftp$server_ftpc. 9. An accvio occurred when 'mput' -ing a locked file. This was traced to trying to clean up a resource that has not been allocated yet. Solutions: 1. Changed function user() to be less sensitive to spaces surrounding the user name when comparing to "ANONYMOUS". 2. Fixed reading of extlog in main(). The pointer was not de-referenced after reading the logical. 3. In createpasvsock(), the socket receive quota was not set, so a socket QIO would block forever, when done with IO$M_LOCKBUF. The solution (recommended by John Gemignani, jr.): a setsockopt() call, to set the quota like it is done in createdatasock(). For easier maintenance, a new function ftp_setwindowsize() was created to perform this, called from both create*sock() functions. 4. In function dele(), code 250 was substituted for the 550. 5. In function dele(), error_text is now used instead of the uninitialized global ErrorMessage. 6. LogErrorBuffer is now always properly initialized, and errors are always logged. - Multiple exit paths in dele() were eliminated from the while(TRUE) loop. - We no longer use ReplyBuffer for building status/error messages. - In sendermsg() we added a dot (".") after the last item on the format list of sprintf, when composing the mailbox message. UCX$FTPD was looking for this terminating dot when parsing the message, and messages ended up improperly terminated if the dot was omitted at the end of the message. - We are now making sure we never send any blank strings in messages. We are setting any blank strings to "-". This prevents the UCX$FTPD's sscanf() from getting confused, and reading message components into the wrong variable. We are checking for NULL pointers passed in, and sending a "-" instead. Replaced all " "-s with NULL -s in sendermsg() calls. 7. New logic was added in dele() to trace if we sent ANY messages at all, We force the final (summary) message if we did not send any. 8. In SetupAnonymousDirectories, GetErrorMessage() now assigns the return value to ErrorMessage. - In translate_error_message() the format string %X08X" was replaced by the correct ""%.8X". - Eliminated all malloc() and calloc() calls inside functions, as recommended by a prior maintainer, Joe Vlcek, EXCEPT the VMS+ /Linked List related ones. Instead of allocating memory inside functions, we are using static var-s. - In sendermsg() and postrply(), changed QIO to QIOW. It seemed dangerous to use a local buffer with asynch IO. - In appe_vms_plus_bin changed QIO to QIOW, where we were executing a SYS$WRITE of the buffer we just read, without synchronization. - In appe_normal_bin changed QIO to QIOW, where we were executing a SYS$PUT of the buffer we just read, without synchronization. 9. In all appe*, send* and recv* file functions, added flags to make sure we do not try to de-allocate/clean up a resource if it has not been successfully allocated. References: Internal and external reports. ECO 6 updates: -------------- ECO F 18-June-1997 Alpha and VAX Images: UCX$FTPC.EXE UCX V4.1-12F UCX$FTPD.EXE UCX V4.1-12F Problems: 1. Several reported problems when attempting to read read-only files. 2. Problems/accvio-s with anonymous FTP logging. 3. Random Accvio-s, when 'GET' -ing files with insufficient privileges. 4. When listing directories, a cr-lf is inserted after the file name if it is a long name. This confuses some 'automated' clients. 5. Code review discovered several problems in ftp$server_ftpd.c. Solutions: 1. Changed check_filetype() to use SYS$ASSIGN as it did a few versions ago. The combination of flags used w SYS$OPEN had an unexpected side-effect of an implied 'write' privilege. This caused 'get' attempts to fail when the user had read only privs on the file. 2. - In a number of places, corrected the write_anonymous_log() call, where an incorrect argument number was specified, and /or parameters were passed in the wrong order. This was causing failures in logging some anonymous transactions, such as get and put, and apparent accvio-s. - Wherever write_anonymous_log() is called, we now use a distinct status variable to track logging related errors, so we do not return an error from the function that called it, if the log call fails. 3. In send_vms_plus_bin(), after the fdlgenerate_in_mem() call, the translate_error_code() call was made with error_text instead of &error_text. 4. Added a new variable 'glo_lineup_dir' and /sys logical 'UCX$FTPD_DIR_CR_DISABLED' to govern the insertion of cr-lf -s in directory listings where the name of the file is too long. 5. - Changed QIO to QIOW wherever a local iosb was used. - Changed name of global variable 'status' to 'glo_status'. In some functions, where a local 'status' was not declared, the global variable ended up being used, resulting in side effects. Declared local 'status' variables in functions that did not have one. - In pass(), took out the extraneous/unnecessary FAILURE(status) processing in the initial user_anonymous processing. There was a code path that could hit this, without setting status. References: Internal and external reports. --------------------------------------------------------------------------- Corrections for Digital TCP/IP Services V4.1 LPD Images --------------------------------------------------------------------------- ECO 3 updates: -------------- ECO A 20-SEP-1996 Alpha and VAX Image: UCX$TELNETSYM.EXE Problems: 1. When an attempt is made to create a temporary relay file with a NULL byte, everything after the NULL byte in one of the data records is ignored. The NULL byte is being interpreted by fprintf as EOR. By changing from fprintf to fwrite, a specified buffer length can be written to the temporary file. 2. All threads being handled by the TNS hang when one thread is waiting for a connection to a remote printer. When an attempt is made to connect to the remote printer and the connection cannot be established (i.e., the printer is turned off), all queues being handled by that TNS process hang. The connection attempt was made with a sync Q, but has now been changed to make the connection attempt with an async QIO with an AST. Solutions: 1. Use fwrite() in place of fprintf() when writing to the relay temporary file. 2. In open_socket, issue a non-blocking QIO specifying AST open_socket_ast(). References: 1.CFS.41468 2.CFS.42955 ECO B 24-SEP-1996 Alpha and VAX Image: UCX$LPD_SHR.EXE Problem: With UCX as the LPD client, a problem exists when large jobs are printed: 1. UCX-LPD-client opens the TCP connection (to port 515) to the LPD server. 2. UCX-LPD-client sends /02/0A 3. UCX-LPD-client does a complete read of the print file (on its own disk) to get the file size (and probably to copy it to the spool area). 4. UCX-LPD-client sends a /03 filesize filename/0A 5. UCX-LPD-client sends the contents of the data file and the control file. Step 3 consumes a lot of time in case of large files. Some LPD server implementations (e.g., LEXmark printer) cannot live with this long pause in an open TCP-connection and they disconnect due to an idle timeout. Sometimes this value can be configured. In an installation with many LEXmark printers, the value of 10 seconds cannot be changed. Solution: The order of handling has been changed. Connection to the LPD server (when file size is available) is not made until after the file is read. Reference: CFS.44328 Problem: When a 0 block job is submitted in an outbound LPD queue (ACCHPL5S), the above error occurs and the LPD retry mechanism requeues the job. Solution: Do not allow the LPD retry mechanism to requeue the job. Reference: CFS.45415 Problem: LPD printing: leftover and reused DFA and CFA files. Solution: Always create a new version of the DFA/CFA file. Reference: CFS.44820 Problem: A job stays forever in the "processing" state in the UCX$LPD_QUEUE, so successive jobs for other printers cannot be printed. Solution: An approximated simulation showed that the symbiont is trying to read data from the socket using recv(). If no data is available at the socket, the receive call waits indefinitely for data to arrive. To solve the problem, a select() is used to check if the socket is ready to be read. The timeout value is taken from the logical UCX$LPD_RETRY_INTERVAL. Reference: CFS.43801 ECO C 25-NOV-1996 Alpha and VAX Image: UCX$LPD_SHR.EXE UCX V4.1-12C Problem: A print job that is sent from one UNIX system through an OpenVMS system to another UNIX system will not print. Solution: The receive job subcommand: 'receive data file' is constructed by using the file name that is the result of FIND_FILE on the spool directory. The file name is a valid OpenVMS name which does not match the file name that is specified in the control file. The solution is to open the control file, extract the parameter of the 'H' card and use it to construct the file name. Reference: CFS.40779 Problem: PCL files cannot be printed without adding LF after the setup module. Solution: Support has been added for the use of the qualifier /PASSALL with the PRINT command to suppress the addition of LF to the setup module. Reference: CFS.45573 ECO 4 updates: -------------- ECO D 8-JAN-1997 Alpha and VAX Image: UCX$LPD_SHR.EXE UCX V4.1-12D Problem: Unexpected timeouts occur on queues assigned to regular printers. The timeouts cause the current job to be aborted and placed in holding for a later retry. Solution: The function noresponse() has been modified so that select() (and thus the timeouts) will be applied only when the queue is UCX$LPD_QUEUE. References: CFS.43801, CFS 45791 ECO E 3-JAN-1997 Alpha and VAX Images: UCX$TELNETSYM.EXE UCX V4.1-12E Problem: If the UCX$TELNETSYM_IDLE_TIMEOUT logical is defined, the first job goes through successfully, but the next one hangs and the queue stalls. This problem was introduced in ECO 3. Solution: Corrected. References: CFS.47807, CFS.47987 ECO 5 updates: -------------- ECO F 30-MAR-1997 Alpha and VAX Images: UCX$LPD_SHR.EXE UCX V4.1-12F Problem: LPD opens multiple links with BG devices and does not close them. The problem was introduced with ECO B. Solution: Corrected. Reference: CFS.45791 --------------------------------------------------------------------------- Corrections for Digital TCP/IP Services V4.1 BIND Images --------------------------------------------------------------------------- ECO 3 updates: -------------- ECO A 27-NOV-1996 Alpha and VAX Images: UCX$ACCESS_SHR.EXE UCX V4.1-12A Problem: If one of the records that a given MX record points to cannot be resolved, a UCX$ACCESS_GET_MX call fails to return the rest of the list of records. Solution: The UCX$GET_MX code that tries to resolve a record has been changed. If ucx$get_hostbyname() returns SS$_TIMEOUT, that record is skipped and the code continues. ECO 5 updates: -------------- ECO B 9-JAN-1996 Alpha Image: UCX$ACCESS_SHR.EXE UCX V4.1-12B Problem: Attempting to resolve a null (zero-length) hostname causes an access violation because of a DEC C problem with generated Alpha code overflowing into the 33rd bit when referencing index =1 of an array. When done from the kernel, this can lead to a loop or a lingering resource lock on the UCX$HOST.DAT file. Solution: Make sure the length is greater than zero before attempting to access the character at [length-1]. ECO C 17-JAN-1996 Alpha and VAX Image: UCX$METRIC.EXE UCX V4.1-12C Problem: The METRIC daemon process hangs after the first load report. Solution: Eliminate a sleep(0) from the main loop. In some cases, this situation can apparently cause the process to remain inactive indefinitely. --------------------------------------------------------------------------- Corrections for Digital TCP/IP Services V4.1 BIND_SERVER Images --------------------------------------------------------------------------- ECO 5 updates: -------------- ECO A 23-DEC-1996 Alpha and VAX Image: UCX$BIND_SERVER.EXE Problem: If RR ttl is set to less than 5 minutes, the server resets the ttl of cached RR to 5 minutes. Solution: Change the min_cache_ttl to 0. ECO B 17-FEB-1997 Alpha and VAX Image: UCX$BIND_SERVER.EXE UCX V4.1-12B Problem: Sometimes incorrect root name servers on the list prevent the resolution of nonauthoritative names from working correctly. Solution: Check for bogus root NS records. Also update the NAMED.CA file in UCX$CONFIG.COM. --------------------------------------------------------------------------- Corrections for Digital TCP/IP Services V4.1 UCP Images --------------------------------------------------------------------------- ECO 3 updates: -------------- ECO A 20-NOV-1996 Alpha and VAX Image: UCX$UCP.EXE UCX V4.1-12A Problem: The /REJECT and /ACCEPT lists from communication configuration are not taken at startup. Solution: In the START COMM/INIT action routine, set dynamic communication options after the communication has been started instead of before. Reference: Internal report. --------------------------------------------------------------------------- Corrections for Digital TCP/IP Services V4.1 POP Images --------------------------------------------------------------------------- ECO 3 updates: -------------- ECO A 27-NOV-1996 Alpha and VAX Images: UCX$POP_SERVER.EXE UCX V4.1-12A Problem: It is difficult to isolate mail content problems (e.g., MIME mail decoding problems) because of insufficient diagnostics. Solution: The new UCX$POP_TRACE logical has been added. This causes everything that the POP server sends to and receives from the client to be output to the log. To enable the new logical, issue the following DCL commands: $ DEFINE/SYSTEM UCX$POP_TRACE 1 $ @SYS$MANAGER:UCX$POP_SHUTDOWN $ @SYS$MANAGER:UCX$POP_STARTUP Problem: Upgrading to patched OpenVMS V7.1 and higher that has callable mail causes an access violation on the POP server. Return length parameters from callable mail that were formerly longwords are now words. The POP server is passing the address of the uninitialized longword. Incorrect data in the upper order word is no longer being cleared by callable mail, which causes the access violation. Solution: Initialize the return length longwords before calling callable mail. ECO 5 updates: -------------- ECO B 3-MAR-1997 Alpha and VAX Image: UCX$POP_SERVER.EXE UCX V4.1-12B Problem: The routine to convert an OpenVMS date to a UNIX date had the century hardwired as 19, which is a Year 2000 problem. Solution: Corrected. Reference: None. ECO C 7-APR-1997 Alpha and VAX Images: UCX$POP_SERVER.EXE UCX V4.1-12C Problem: If not instructed to delete a mail message that has been read by the POP client, the UCX POP server always copies it to the MAIL folder. For some uses of POP it would be better to simply leave mail in the NEWMAIL folder that has been read by a POP client but not deleted. Solution: UCX POP can now be configured to leave mail that has been read but not deleted by the POP client in the NEWMAIL folder or to move it to the MAIL folder. This is done with the "Leave in NEWMAIL" configuration option. The "Leave in NEWMAIL" option is useful in a situation like this: Users at XYZCorp have PCs at home with which they dial in to the office. They also have PCs in their offices. The office PCs are to be the users authoritative mail repository - where they keep mail in folders. However, the users still want to read their mail on their home PCs. To do this, they configure their home PC's POP client with the "Leave on server" option so that the POP client doesn't delete the mail from the server. They configure the office PC's POP client with "Delete from server". Finally the POP server itself is configured with "Leave in NEWMAIL". When mail is read from home, it is left on the server in the NEWMAIL folder. When mail is next read from the PC at the office, it is picked up from the NEWMAIL folder (including any messages already read at home since they were left in the NEWMAIL folder), and then the mail is deleted. Note that the Netscape POP client, when configured to "Leave on server", uses the UIDL command to keep track of which mail it has already fetched from the POP server. This has the benefit of not fetching the same mail more than once when mail is left in the NEWMAIL folder. To configure this option, issue: $ DEFINE/SYSTEM UCX$POP_LEAVE_IN_NEWMAIL 1 Note that at this time, the "Leave in NEWMAIL" feature is not configurable on a user-by-user basis. --------------------------------------------------------------------------- Corrections for Digital TCP/IP Services V4.1 SMTP Images --------------------------------------------------------------------------- ECO 3 updates: -------------- ECO A 27-NOV-1996 Alpha and VAX Image: UCX$SMTP_MAILSHR.EXE UCX V4.1-12A UCX$SMTP_RECEIVER.EXE UCX V4.1-12A UCX$SMTP_SYMBIONT.EXE UCX V4.1-12A UCX$SMTP_PARSESHR.EXE (VAX) UCX V4.1-12A UCX$SMTP_PARSESHR_TV.EXE (AXP) UCX V4.1-12A UCX$UUENCODE.EXE UCX V4.1-12A UCX$UUDECODE.EXE UCX V4.1-12A Problem: Symbiont processes sometimes leave stray BG devices. Solution: Corrected. Reference: CFS.42659 Problem: The SMTP receiver halts with an access violation if mail comes from a host that has more than 20 IP addresses. Solution: Increase the size of the buffer and add bounds checking. Problem: Inbound mail from SMTP being delivered to users with their mail forwarded to another foreign transport (e.g., xyz%) is returned. Solution: Corrected. Problem: An access violation may occur during delivery of local mail on certain later versions of OpenVMS. Solution: Corrected. ECO 5 updates: -------------- ECO B 3-MAR-1997 Alpha and VAX Image: UCX$SMTP_MAILSHR.EXE UCX V4.1-12B UCX$SMTP_RECEIVER.EXE UCX V4.1-12B UCX$SMTP_SYMBIONT.EXE UCX V4.1-12B UCX$SMTP_PARSESHR.EXE (VAX) UCX V4.1-12B UCX$SMTP_PARSESHR_TV.EXE (AXP) UCX V4.1-12B UCX$UUENCODE.EXE UCX V4.1-12B UCX$UUDECODE.EXE UCX V4.1-12B Problem: If UCX$SMTP_RECV_SNAPSHOT_BLOCKS is defined SMTP receiver would dump snapshot buffer even if no error occurred. Solution: Corrected. Reference: CFS.49010. Problem: Delivering local mail where the local part is a DSN address seems to work (if you look at the log) but the mail never arrives in the DSN mail queue. (Example: address "DSN%xyz"@name.of.my.system) Solution: Corrected. Reference: CFS.47537. ECO C 7-APR-1997 Alpha and VAX Images: UCX$SMTP_MAILSHR.EXE UCX V4.1-12C UCX$SMTP_RECEIVER.EXE UCX V4.1-12C UCX$SMTP_SYMBIONT.EXE UCX V4.1-12C UCX$SMTP_PARSESHR.EXE (VAX) UCX V4.1-12C UCX$SMTP_PARSESHR_TV.EXE (AXP) UCX V4.1-12C UCX$UUENCODE.EXE UCX V4.1-12C UCX$UUDECODE.EXE UCX V4.1-12C Problem: The symbiont process leaks large amounts of memory each time a mail message is bounced. Solution: Corrected. Problem: Mail message text hidden inside a binary control file makes the code more complicated, is prone to problems, and makes problem solving more difficult. Solution: UCX SMTP no longer stores the text of the message in the control file itself. It always stores the text in a separate *.*_TEXT file. ECO 6 updates: -------------- ECO D 13-June-1997 ECO D 13-June-1997 Images: UCX$SMTP_MAILSHR.EXE UCX V4.1-12D UCX$SMTP_RECEIVER.EXE UCX V4.1-12D UCX$SMTP_SYMBIONT.EXE UCX V4.1-12D UCX$SMTP_PARSESHR.EXE (VAX) UCX V4.1-12D UCX$SMTP_PARSESHR_TV.EXE (AXP) UCX V4.1-12D UCX$UUENCODE.EXE UCX V4.1-12D UCX$UUDECODE.EXE UCX V4.1-12D Problem: UCX$SMTP_MAILSHR.EXE ACCVIO when sending a mail message with a record that is greater than 1000 bytes. Solution: When reading a record from the mail file, determine the longest record length in the file and read in that many. If record exceeds 1000 bytes then write out multiple 1000 byte lines in the outgoing mail message. Also inform the user that this is happening with the following message: %UCX-I-SMTP_LINEWRAP, Line contains more then 1000 bytes, splitting into multiple lines This change requires a change to UCX$MSG.EXE to display the SMTP_LINEWRAP information code. Problem: UCX>ANALYZE MAIL/REPAIR results in -JBC-F-MISREQPAR following by -SYSTEM-F_SSFAIL errors. Upon detecting that a job in the SMTP queue doesn't have a file associated with the job, SMTP tries to delete the job from the SMTP queue. However, the item list to the SNDJBCW was not setup correctly. Solution: Define the item list to the SNDJBCW system service locally within the function that deletes the job from the SMTP queue. Also, setup the item list correctly. ---------------------------------------------------------------------------- Corrections for Digital TCP/IP Services V4.1 UCX$MSG Images ---------------------------------------------------------------------------- ECO 6 update: ----------- ECO C 28-May-1997 Alpha and VAX Images: UCX$MSG.EXE UCX V4.1-12C Problem: User is not informed when a line in a mail message is being split into multiple 1000 character lines by SMTP. Solution: Add SMTP informational message: %UCX-I-SMTP_LINEWRAP, Line contains more then 1000 bytes, splitting into multiple lines --------------------------------------------------------------------------- Corrections for Digital TCP/IP Services V4.1 RPC Images --------------------------------------------------------------------------- ECO 5 updates: -------------- ECO A 15-AUG-1996 Alpha and VAX Image: UCX$RPCGEN.EXE UCX V4.1-12A Problem: RPCGEN /DEFINE qualifier causes an access violation. Solution: Modify parseargs() to not uppercase the /DEFINE string (which was the wrong buffer, causing the access violation. Also change CLI_GET_VALUE() so as to require starting and ending quotation marks for quoted string status. If quoted string status, restore the stripped quotation marks in the define string. References: CFS.43990. --------------------------------------------------------------------------- Corrections for Digital TCP/IP Services V4.1 SNMP Images --------------------------------------------------------------------------- ECO 5 updates: -------------- ECO A 10-APR-1997 Alpha and VAX Image: UCX$OS_MIBS.EXE UCX V4.1-12A Problem: The OS_MIBS subagent was generating some invalid I/O channel errors. This behavior was seen if MOP server was enabled. Solution: The code was using the LOOPBACK protocol type which is also used by MOP. To eliminate the conflict, the type has been changed to SNMP protocol type. Reference: CFS.44123 Problem: OS_MIBS subagent was generating some unknown adapter type errors when used in a system that has a DEFQA FDDI board. Solution: Added DEFQA adapter to the list of supported adapters. Reference: CFS.49549. --------------------------------------------------------------------------- Corrections for Digital TCP/IP Services V4.1 Finger Images --------------------------------------------------------------------------- ECO 2 updates: -------------- ECO A 6-SEP-1996 Alpha and VAX Image: UCX$FINGER.EXE UCX V4.1-12A Problem: Finger client passes an uppercase instead of a lowercase query and does not remove quotation marks surrounding the query. Solution: Unless quotation marks are used, DCL always converts values to uppercase. Now it checks for the presence of quotation marks and if they exist, they are removed. If the query does not contain quotation marks, it is converted to lowercase. Reference: Internal report. ECO B 18-SEP-1996 Alpha and VAX Image: UCX$FINGER.EXE UCX V4.1-12B UCX$FINGER_SERVER.EXE UCX V4.1-12B Problem: Finger stops looking at system processes once it sees a suspended process. Solution: Omit the lib$signal call via loop_error in the SYS$GETJPIW loop. ECO 5 updates: -------------- ECO C 20-FEB-1997 Alpha and VAX Images: UCX$FINGER.EXE UCX V4.1-12C UCX$FINGER_SERVER.EXE UCX V4.1-12C Problem: Finger is not handling set/restore privileges correctly. Solution: Save original privileges and then restore them. Reference: Internal report. ECO D 14-Apr-1997 Images: UCX$FINGER.EXE UCX V4.1-12D UCX$FINGER_SERVER.EXE UCX V4.1-12D Problem: Finger client was exiting with ACCVIO on the following syntax: "FINGER USERNAME /QUALIFIER". Solution: Improper check added non existent users to the tree. ECO 6 updates: -------------- ECO E 19-Jun-1997 Alpha and VAX Images: UCX$FINGER_SERVER.EXE Problem: Finger server wouldn't exit after handling request. Solution: After request handled, the socket is closed and the descriptor set to -1. But then the code checked for a -1 and fell into a loop waiting for requests (as though we were started without a socket). Changed check for socketdesc == -1. --------------------------------------------------------------------------- Corrections for Digital TCP/IP Services V4.1 RCP Images --------------------------------------------------------------------------- ECO 5 updates: -------------- ECO A 27-SEP-1996 Alpha and VAX Image: UCX$RCP.EXE UCX V4.1-12A Problem: RCP did not handle user names 12 bytes in length. Solution: Corrected. Reference: CFS.45129. ECO B 30-OCT-1996 Alpha and VAX Image: UCX$RCP.EXE UCX V4.1-12B Problem: Concurrent RCP commands return the wrong file content. With two get operations, the first copy gets the second file and the second copy gets the first file. Solution: To solve the problem, remove the stack local variable and allow the global one to be used. References: CFS.43410. ECO C 29-Apr-1997 Image: UCX$RCP.EXE UCX V4.1-12C Problem: COPY/RCP command didn't parse quoted filenames properly. Solution: If quoted filename is detected, save it in an appropriate place. References: CFS.48551. ECO 6 Updates: -------------- ECO D 05-Jun-1997 Alpha and VAX Images: UCX$RCP.EXE Problem: Explicit copies from addresses of the form xx.xx.xx.128 (and above) would always return RCP-CONHST. In routine rcp$get_rsocket, the address or hostname is passed to ucx$inet_addr which tries to make it in a network value or returns -1 on error. The code checked for <0 rather than -1 explicitly. Since the ipaddr variable was declared as an int, anything of the form xx.xx.xx.128 or above would be returned as a negative number. Solution: Declare ipaddr as unsigned long, and compare it to (unsigned long) -1 to see if ucx$inet_addr failed. Modules: [RCP]RCP$GET_RSOCKET.C References: CFS.51680 --------------------------------------------------------------------------- Corrections for Digital TCP/IP Services V4.1 RSH Images --------------------------------------------------------------------------- ECO 5 updates: -------------- ECO A 19-NOV-1996 Alpha and VAX Image: UCX$RSH.EXE UCX V4.1-12A Problem: Due to misordered images in the link option file, the UCX$RSH image was being linked in such a way as to include a large, version-specific object library. This caused access violations to occur when using the RSH command on an OpenVMS Alpha V7.1 system. Solution: Correct the link option file. This produces an image that is only about 130 blocks long, rather than over 1000, and is much more portable. Reference: Internal report. --------------------------------------------------------------------------- Corrections for Digital TCP/IP Services V4.1 INETDRIVER Images --------------------------------------------------------------------------- ECO 5 updates: -------------- ECO A 21-APR-1997 Alpha and VAX Image: UCX$INETDRIVER.EXE UCX V4.1-12A Problem: Multiprocessor performance problems. Solution: Implement a stack lookaside list to reduce variable pool allocations. References: CFS.50024 --------------------------------------------------------------------------- Corrections for Digital TCP/IP Services V4.1 Telnet Images --------------------------------------------------------------------------- ECO 2 updates: -------------- ECO A 16-AUG-1996 Alpha and VAX Image: UCX$TNDRIVER.EXE UCX V4.1-12A UCX$TELNET.EXE UCX V4.1-12A Problem: An outbound TELNET device stops working if unsolicited input is received from the network. Solution: Set UCB$M_TT_NOLOGINS in UCB$W_DEVSTS to dismiss unsolicited terminal input, leaving the device in a useful state. Sense UCB$V_TEL_OUTBOUND in TN$RLOGIN_TIMER and dismiss the disconnect. References: CFS.42083 Problem: Output escape sequences are incorrect when function keys are held down. Solution: Limit the number of outstanding characters in the local buffer to half the buffer's size. This prevents local overflow and limits the number of outstanding bytes against the remote host. References: CFS.3985 Problem: Applications performing I/O against an outbound TELNET UCB do not know that the connection is lost. Solution: After connection loss, outbound TELNET sessions are still capable of processing I/O operations even though nothing happens. When the connection is broken, the application is notified with SS$_HANGUP if there are IRPs pending against the UCB. If no IRPs are queued, the application is not notified. In addition, any applications that begin I/O after the connection is broken do not get any error even though their data is not processed. To solve this problem, the device is turned OFFLINE after the class driver is notified of a disconnection from the network. This action will reject any I/O operations that occur after the connection has been broken. References: CFS.42083 Problem: Line mode does not work properly; the sessions appear to hang. Solution: The previously applied optimization has been conditionalized so as to be used only when in character mode. References: CFS.43831, CFS.44575, CFS.45061, CFS.45329 ECO 3 updates: -------------- ECO B 07-NOV-1996 Alpha and VAX Images: UCX$TELNET.EXE UCX V4.1-12B Problem: In character mode, certain escape character sequences are not passed through the connection unless it is in PASTHRU (old style) mode. Solution: Clearing the terminal characteristic TT2$M_EDITING when in character input mode allows the various special escape sequences to be read instead of being translated into their character equivalent. References: CFS.45350 ECO C 04-DEC-1996 Alpha and VAX Images: UCX$TELNET.EXE UCX V4.1-12C UCX$TNDRIVER.EXE UCX V4.1-12C Problems: 1. TN devices remain because of ECO A. 2. F6 and F10 keys are not passed through the TELNET client. 3. Problems with the client's keystrokes and line mode. 4. Problem restoring appropriate settings after spawning. 5. Problem resuming *busy* sessions after escaping TELNET client. Solutions: 1. Clear ONLINE only for OUTBOUND connections. This is not a problem because the only option available at that time is to DELETE the session. 2. Turn off TT2$M_EDITING in the terminal settings. 3. Turn off ESCAPE mode and remove the multi-character optimization. 4. Limit the changes through SMG to only those settings that are changed by the client. 5. If the pending output buffer exceeds the saved prompt buffer size, do not save the output. References: 1. CFS.46472, CFS.46478, CFS.46574, CFS.46666, CFS.46930 2. CFS.45350, CFS.45574 3. CFS.45329, CFS.45662 4. CFS.45372 5. CFS.45372 ECO D 04-DEC-1996 Alpha and VAX Image: UCX$TNDRIVER.EXE UCX V4.1-12D Problem: A proxy login can be circumvented by sending unsolicited data through the socket before LOGINOUT has a chance to run. All logins are expected to be under the control of the TNDRIVER but do not appear to be. Solution: When creating the TN device, set UCB$M_JOB in UCB$x_DEVSTS. This action makes the terminal driver believe that a login is in progress, so it discards the data and echoes a BELL. When RLOGIN PROXY succeeds in the INETACP, the appropriate automatic login occurs as expected. Should the proxy check fail (i.e., there is no valid proxy for this connection), then the normal login mechanism clears UCB$M_JOB before instructing the terminal driver to start the login. References: CFS.46504 ECO 6 updates: -------------- ECO E 16-Apr-1997 Alpha and VAX Images: UCX$TNDRIVER.EXE UCX V4.1-12E Problem: VAX System crash in OpenVMS routine IOC_STD$SEVER_UCB called from IOC_STD$DELETE_UCB. At the time of crash the queue of TN UCB's, headed at UCX$TNDRIVER static queuehead, TN$L_FLNK_UCB is corrupt. Solution: The above problem arises due to the possibility of multiply INSQUEing the same element onto this queue, in UCX$TNDRIVER routine, DISCONNECT_COMMON. The solution is to introduce code priopr to the INSQUE, to verify that the given element is not already on the queue. If it is, the INSQUE becomes a NOP. Modules: UCX$TN_SERVER_MAIN.MAR UCX V4.2-45 References: CFS-50220 --------------------------------------------------------------------------- Corrections for Digital TCP/IP Services V4.1 PWIP Images --------------------------------------------------------------------------- ECO 5 updates: -------------- ECO A 16-JAN-1997 Alpha and VAX Image: UCX$PWIPACP.EXE UCX V4.1-12A UCX$PWIPDRIVER.EXE UCX V4.1-12A Problem: UDP is allowed only on ports 137 and 138. Solution: To allow UDP over all port numbers, several things were done including simplifying special case of port specific code that retrieves the peer IP address from either the global name_server_sockaddr_in or the global datagram_server_sockaddr_in, to instead obtain the information from the new passed parameter, and simplifying UDP special case port specific code that passed either name_server_sockaddr_in or name_server_sockaddr_in in IRP$L_ARG4 to now always pass server_sockaddr_in. Reference: Internal development request. Problem: Multiple chained UDP datagrams are passed back to the user collectively rather than one by one. Solution: To force individual UDP datagrams to be sent to the user level, one at a time, the interface to pwip_read was changed and it no longer passes back any value; instead, it calls msgToUser itself, each time it develops an mblk_t that describes a single UDP datagram. Reference: CFS.42878. ECO B 28-JAN-1997 Alpha and VAX Image: UCX$PWIPACP.EXE UCX V4.1-12B Problem: Unnecessary error messages in the PWIP log cause user concern. Solution: Remove generation of messages added in V4.0 that contain "IO$M_SHUTDOWN error" string. These messages were put in at the same time that corrective code was added to deal with synchronization problems. The appearance of the messages in the log only document when the corrective code was invoked redundantly and do not actually indicate an error. Therefore, they were removed. Reference: CFS.47933. ECO B- 30-May-1997 Alpha and VAX Image: UCX$PWIPACP.EXE UCX V4.1-12 UCX$PWIPDRIVER.EXE UCX V4.1-12 Problem: ECO B was discovered to have problems interacting with some releases of PathWorks. Symptoms include network freezes and system lockups. Solution: For this release, the PWIP component has been rolled back to base level for 4.1. A more complete solution incorporating the changes of the previous ECOs should be forthcoming. ECO 6 updates: ------------- ECO D 20-Jun-1997 Alpha and VAX Images: UCX$PWIPACP.EXE UCX V4.1-12D UCX$PWIPDRIVER.EXE UCX V4.1-12D UCX$PWIPSHUT.EXE UCX V4.1-12D Problem: A more complete solution for problems discovered in the ECO B release was needed, which also included the added features of ECOs A and B. Solution: Selected portions of previous changes were backed out. A hybrid approach has been used to maintain compatability with earlier implementations while adding newer desired functionality. Problem: Some memory leakage was detected under error conditions. Solution: Deallocate mblk as appropriate in error path. Modules: PWIPDRIVER_READ.C V4.1-7 PWIPDRIVER_WRITE.C V4.1-4 PWIPDRIVER_ACP.C V4.1-1 --------------------------------------------------------------------------- Corrections for Digital TCP/IP Services V4.1 NTP Image --------------------------------------------------------------------------- ECO 6 updates: ------------- ECO A 30-May-1997 Alpha and Vax Image: UCX$NTPD.EXE Problems: 1. Explanation mark (!) could not be used in the configuration file. 2. Problems with synchronization to master-clock and local-master. 3. Maximum timezone differential did not account for daylight savings time. 4. Problems selecting peer is based on distance. 5. Peer polling needs to comply with RFC 1305. 6. Problem with NTP when there are two master servers on the local network or when synchronization sources are close. Solutions: 1. "!" can be used as a comment character in the configuration file. 2. Synchronization to master-clock and local-master is improved. 3. A maximum timezone differential of 13 hours is allowed, instead of 12. 4. A bug in selecting peers based on distance is fixed. 5. The minimum and maximum peer polling intervals are changed to comply with RFC 1305. 6. NTP no longer flip-flops between two master servers when two of them exist on the local network with the same precision and stratum, or in certain cases where the synchronization sources are close. Reference Internal development request ECO B 30-MAY-1997 Alpha and VAX Image: UCX$NTPD.EXE Problem: NTP continually resets the clock by 7 minutes. Solution: Corrected Reference: CFS.50430 ECO C 2-JUN-1997 Alpha and VAX Image: UCX$NTPD.EXE Problem: NTP sometimes fails to find local timezone information. Solution: Corrected Reference: CFS.46468 ECO D 4-JUN-1997 Alpha and VAX Image: UCX$NTPD.EXE Problem: When stepping time, NTP may reset time to GMT, ignoring the local timezone. Solution: Corrected Reference: CFS.50272