[Figure not available for ASCII.] AV-RFCAA-TE ULTRIX/VAX and ULTRIX Worksystem Software Year 2000 Readiness Kit March 1999 Dear Customer: The ULTRIX/VAX and ULTRIX Worksystem Software Year 2000 Readiness Kit provides upgrades to the following VAX systems to make them Year 2000 (Y2K) compliant: + ULTRIX and UWS Version 4.3 + ULTRIX and UWS Version 4.4 + ULTRIX and UWS Version 4.5 This kit also contains the complete set of patches to correct known problems with the operating system through March 1, 1999. _________________________ Copyright Compaq Computer Corporation 1999. All rights reserved. Restricted Rights: Use, duplication, or disclosure by the U.S. Government is subject to restrictions as set forth in subparagraph (c) (1) (ii) of the Rights in Technical Data and Computer Software clause of DFARS 252.227-7013. ULTRIX and ULTRIX Worksystem Software are trademarks of Digital Equipment Corporation. Motif is a trademark of the Open Software Foundation. UNIX is a registered trademark and The Open Group is a trademark of The Open Group in the US and other countries. X/Open is a trademark of X/Open Company Limited. All other trademarks and registered trademarks are the property of their respective holders. ULTRIX/VAX and ULTRIX Worksystem Software 1 Note This is a Year 2000 Readiness Disclosure of Compaq Computer Corporation. After you install this kit, your operating system, will correctly process, calculate, compare, and sequence date data from, into, and between the twentieth and the twenty-first centuries, including leap year calculations. Additionally, all operating system commands will function correctly after December 31, 1999 until the upper limit for dates, which is January 19, 2038. Note The 2038 time limit stems from the industry-wide use of a 32-bit signed data type (such as time_t ) to store the number of seconds since the standard UNIX Epoch. This data type has an upper limit corresponding to the time 03:14:07 January 19, 2038 UTC. The Year 2000 program for ULTRIX and UWS software does not address this standard UNIX time limitation. This is a general UNIX issue that is starting to be addressed by standards organizations and vendors. Compaq is actively involved with this effort and will provide a timely solution consistent with industry standards. Document Contents The rest of this document discusses the following topics: + An overview of the media kit + Installation instructions + An overview of the changes this kit makes to your system + Guidelines for testing your applications for Y2K compliancy + Common Y2K problems in applications + Compaq and the Year 2000 Information and Readiness Disclosure Act 2 ULTRIX/VAX and ULTRIX Worksystem Software 1.1 Kit Media and Labels The distribution medium is one of the following: + A CD-ROM labeled: ULTRIX/VAX and UWS Year 2000 Readiness Kit AG-RFC8A-BE 1 of 1 + A TK50 tape labeled: ULTRIX/VAX and UWS Year 2000 Readiness Kit AQ-RFC90-01.A01 1 of 1 The kit is a set of tar files in a UFS directory. The tar files are in subdirectories, which are structured by operating system version. The tar files in each of the operating system version subdirectories contain the patches for Year 2000 readiness and the complete set of patches supported for that operating system version. There are two file layouts for the kit: one for the CD-ROM kit and one for the TK50 kit. 1.1.1 CD-ROM File Layout The files on the CD-ROM kit are layed out as follows: /V4.3 ./VAX ./README.vax-v4.3-15mar99 ./README.uws.vax-v4.3-15mar99 ./patches.vax-v4.3-15mar99.tar.Z ./patches.uws.vax-v4.3-15mar99.tar.Z /V4.4 ./VAX ./README.vax-v4.4-15mar99 ./README.uws.vax-v4.4-15mar99 ./patches.vax-v4.4-15mar99.tar.Z ULTRIX/VAX and ULTRIX Worksystem Software 3 ./patches.uws.vax-v4.4-15mar99.tar.Z /V4.5 ./VAX ./README.vax-v4.5-15mar99 ./README.uws.vax-v4.5-15mar99 ./patches.vax-v4.5-15mar99.tar.Z ./patches.uws.vax-v4.5-15mar99.tar.Z /documentation ./txt/customer.letter.txt ./ps/customer.letter.ps ./ps/ultrix_migration.ps.Z 1.1.2 TK50 File Layout The files on the TK50 kit are layed out as follows: TAR Set 1 /documentation ./txt/customer.letter.txt ./ps/customer.letter.ps ./ps/ultrix_migration.ps.Z TAR Set 2 /V4.3 ./VAX ./README.vax-v4.3-15mar99 ./README.uws.vax-v4.3-15mar99 ./patches.vax-v4.3-15mar99.tar.Z ./patches.uws.vax-v4.3-15mar99.tar.Z TAR Set 3 /V4.4 ./VAX ./README.vax-v4.4-15mar99 ./README.uws.vax-v4.4-15mar99 ./patches.vax-v4.4-15mar99.tar.Z ./patches.uws.vax-v4.4-15mar99.tar.Z TAR Set 4 /V4.5 ./VAX ./README.vax-v4.5-15mar99 ./README.uws.vax-v4.5-15mar99 ./patches.vax-v4.5-15mar99.tar.Z ./patches.uws.vax-v4.5-15mar99.tar.Z 4 ULTRIX/VAX and ULTRIX Worksystem Software 1.1.3 Kit Sizes To patch your system to Year 2000 Readiness, you must extract the files from the tar file for your system version, storing the files on your system. Before you do so, you need to find a directory area on your system that is large enough to hold the files from the kit. Most of the files on the distribution media are compressed, so you should at least double the size of the receiving directory area in order to hold the expanded files. The following list shows the approximate sizes of the VAX kits: V4.3 - 30211 Kilobytes V4.4 - 29363 Kilobytes V4.5 - 18747 Kilobytes Doc - 2273 Kilobytes 1.2 Installation Instructions The following sections discuss how to install the kit: + Preparing to patch the system + Copying files from the distribution medium to the system + Selecting the patches to apply to the system + Patching the system + What to do after the patches have been installed + Installing the kit after December 31, 1999 1.2.1 Preparing to Patch the System Prepare to patch the system by taking the following steps: 1. Back up the system. 2. Bring the system to single-user mode and run the procedures as the root user. ULTRIX/VAX and ULTRIX Worksystem Software 5 3. Determine how much free space you will need in the directories into which you will copy the kit. The /tmp and /usr/tmp directories are used by the patch installation scripts and therefore also need enough room to allow the patches to be installed. Note If the /tmp and /usr/tmp directories do not exist, create them before applying any patches. 4. Take an inventory of the system and its files. Particularly, look for patch files that may have been already installed. You will need this inventory when selecting which patches to install. 1.2.2 Copying the Files to a System You need to copy the appropriate files from the distribution media to your system. The examples in the following sections show the procedure for copying ULTRIX and UWS Version 4.5 files from the distribution media (CD-ROM or TK50 tape). Copy the files for your version of ULTRIX and UWS. 1.2.2.1 Copying Files from a CD-ROM To copy the tar files you need from the kit to an ULTRIX and UWS system: 1. Physically mount the distribution CD-ROM in the CD-ROM drive on your system. Note When your CD-ROM drive is an RRD43 or RRD44, it must be configured as a DIGITAL device; otherwise, the error Invalid argument displays when you attempt to logically mount the CD-ROM on an ULTRIX system, and you cannot mount the device. For the drive to be configured correctly, it must have a jumper installed on the PARITY pins of the drive. 2. Make a directory for the distribution kit and associate that directory with a mount point on the 6 ULTRIX/VAX and ULTRIX Worksystem Software system. For example, to mount the CD-ROM that you inserted in device /dev/rz4c as a read-only device on a mount point named cdrom, enter the following commands: # mkdir /cdrom # mount -r /dev/rz4c /cdrom 3. Copy the README files you need from the CD-ROM so you can display and use them later. Then, copy the compressed tar files you need from the CD-ROM and uncompress them in the directory you make to hold the uncompressed files. For example, if you want the Version 4.5 files, enter the following commands: # cd /usr # mkdir ultrix_v45 # cd ultrix_v45 # cp /cdrom/V4.5/VAX/README.vax-v4.5-15mar99 . # cp /cdrom/V4.5/VAX/README.uws.vax-v4.5-15mar99 . # cp /cdrom/V4.5/VAX/patches.vax-v4.5-15mar99.tar.Z . # cp /cdrom/V4.5/VAX/patches.uws.vax-v4.5-15mar99.tar.Z . # uncompress patches.vax-v4.5-15mar99.tar.Z # uncompress patches.uws.vax-v4.5-15mar99.tar.Z 4. Use the tar command to extract the files you need. For example, if you want to extract the Version 4.5 base system patch directory into the /usr/ultrix_v45 directory on your system ensure there is enough room on the disk to hold the extracted files and enter the following commands: # cd /usr/ultrix_v45 # tar -xvf patches.vax-v4.5-15mar99.tar Extract the patches for the base system and for UWS into separate directories in order to prevent any file naming conflicts between patch files. ULTRIX/VAX and ULTRIX Worksystem Software 7 To obtain a copy of this letter from the kit, you can change the directory to the document's location and queue the file to a printer. For example, to print the ASCII version of this letter on a printer named laser1, enter the following commands: # cd /cdrom/documentation/txt # lpr -Plaser1 customer.letter.txt 1.2.2.2 Copying Files from a TK50 Kit To copy the tar files you need from the kit to an ULTRIX and UWS system: 1. Physically mount the TK50 tape on the TK50 tape drive. 2. Make a directory with enough space to hold the files and go to the directory by entering commands similar to the following: # mkdir /usr/ultrix_v45 # cd /usr/ultrix_v45 3. If your tape drive is a TZ30, perform the following step: Physically remove the TK50 tape and reinsert. Then, space the TK50 tape forward, if necessary, to position it at the beginning of the tar archive you want to copy. For example, to space forward to the tar file for the ULTRIX and UWS Version 4.5 kit, which is archive 4 on the TK50 tape, enter the following command: # mt -f /dev/nrmt0h fsf 3 4. If your tape drive is not a TZ30, perform the following step: 8 ULTRIX/VAX and ULTRIX Worksystem Software Space the TK50 tape forward, if necessary, to position it at the beginning of the tar archive you want to copy. For example, to space forward to the tar file for the ULTRIX and UWS Version 4.5 kit, which is archive 4 on the TK50 tape, enter the following commands: # mt -f /dev/nrmt0h norewind # mt -f /dev/nrmt0h fsf 3 5. Use the tar command to copy and extract the four files in the archive into the current directory. For example: # tar -xvf /dev/nrmt0h 6. Use the uncompress command to uncompress the compressed patch files. For example: # uncompress patches.vax-v4.5-15mar99.tar.Z # uncompress patches.uws.vax-v4.5-15mar99.tar.Z Extract the patches for the base system and for UWS into separate directories to prevent any file-naming conflicts between patch files. To obtain a copy of this letter from the TK50 kit, copy and extract the tar archive for the /documentation files as you have done for the README and patch file in the preceding instructions. Then, you can queue the file to a printer. For example, to print the ASCII version of this letter to a printer named laser1, enter the following command: # lpr -Plaser1 customer.letter.txt ULTRIX/VAX and ULTRIX Worksystem Software 9 1.2.3 Selecting Patches to Apply The following sections discuss using patch README files, the names and locations of the patch installation scripts, and defining a PATCHES symbol for running patch installation scripts. 1.2.3.1 Using README Files Read the README files for the patches you have copied to determine whether or not you need to apply them to your system. Compare the patches against your system inventory. You may have already applied some of the patches. Check all patches, including the Year 2000 Readiness patches. Note This kit contains patches other than the Year 2000 patches. If you encounter a problem after applying the Year 2000 patches, check the README file to determine if it is a known problem with a fix already provided on the kit. If it is a known problem with a fix, apply the associated patch. 1.2.3.2 Patch Install Scripts The kit contains patch installation scripts you use to apply the patches to your system. The following list shows the location of the patch installation scripts. The /usr/dir/{BASE|UWS} path represents the directory in which you expanded your kit files after copying them from the distribution medium. The /usr/dir/{BASE|UWS} directory is where the patches are located. + /usr/dir/{BASE|UWS}/SCRIPTS There is one patch installation script in this directory, YEAR_2000.install, which you can run once to apply all the ULTRIX Year 2000 patches for your base system (ULTRIX). Use this script if you do not plan to install the other base system patches. In this directory, the YEAR_2000.install script is a symbolic link to one of the base system installation scripts. If you plan to install any of the non-Year 2000 patches for the base system 10 ULTRIX/VAX and ULTRIX Worksystem Software as well as the Year 2000 patches, you must find the installation script to which the YEAR_2000.install file is linked and use that script to install the patches. Caution Do not execute the XUI patches if MOTIF is installed and do not execute the MOTIF patches if XUI is installed. If Motif is installed, execute only the Motif patches you want to install from the directory: - ../SCRIPTS/MOTIF If XUI is installed, execute only the XUI patches you want to install from the directory: - ../SCRIPTS/XUI + /usr/dir/UWS/SCRIPTS/MOTIF Each MOTIF patch in this directory has its own installation script. Run the installation script for each MOTIF patch you want to apply. + /usr/dir/UWS/SCRIPTS/XUI Each XUI patch in this directory has its own installation script. Run the installation script for each XUI patch you want to apply. 1.2.3.3 Defining the PATCHES Symbol The patch installation scripts contain a PATCHES symbol, which you must define to point each installation script to the directory that contains the patch it is to install. For csh: # setenv PATCHES /usr/users/dir1/dir2 ULTRIX/VAX and ULTRIX Worksystem Software 11 For sh or ksh: # PATCHES=/usr/users/dir1/dir2 # export PATCHES 1.2.4 Applying the Patches Run the patch scripts to apply the patches. The patches produce informational messages and, when completed, return the system to the command prompt. 1.2.5 After Applying the Patches After you apply the patches, you must redefine the file access mode for the /dev/null file to 666. Then, rebuild the kernel and reboot the system with the new kernel. 1.2.6 Installing the Kit After December 31, 1999 The kit cannot be installed on a system that is not Year 2000 ready after December 31, 1999, unless you enter a date earlier than January 1, 2000 during installation. After installation of the patches, change the system date to the date that you need. 1.2.7 Error Message Summary The following error messages might display during the installation. Error: You must be superuser to run this script. Self explanatory. Error: The PATCHES environment variable has not been defined. In order to apply the patches in this kit, you need to use the PATCHES variable to tell the installation script where the uncompressed, untarred patch kit is located. See Section 1.2.3.3 for instructions on setting this variable. Corrective Action: Define the PATCHES environment variable to point to the correct directory and rerun this installation script. Error: The required file THIS_IS_A_VAX_yyy_xxxx_PATCH_KIT_AREA is not a regular file. 12 ULTRIX/VAX and ULTRIX Worksystem Software To be sure that the PATCHES environment variable points to a directory containing a valid patch directory, the script checks for the presence of the THIS_IS_A_VAX_yyy_xxxx_PATCH_KIT_AREA file. If the file exists, it is checked to verify that it is a regular file (not a directory or link). Because the required file is not the correct type, the specified path does not point to a valid patch kit area. The _yyy_ portion of the file specification is either V4.3, V4.4, or V4.5. The _xxxx_ portion of the file specification is either _BASE_ or _UWS_ depending on whether the ULTRIX or UWS patches are being installed. Determine the correct path to the patch kit area and define the PATCHES environment variable to point to it as shown in Section 1.2.3.3. Corrective Action: Define the PATCHES environment variable to point to the correct directory and rerun this installation script. Error: The PATCHES environment variable points to the directory /usr/users/dir1/dir9/VAX_yyy_xxxx_WORK_DIR which does not contain a valid patch kit. A valid patch kit directory must contain the file THIS_IS_A_VAX_yyy_xxxx_PATCH_KIT_AREA. This regular file does not exist in the directory specified for the kit. The file is used to indicate that the PATCHES environment variable is pointing to a proper patch kit area. The _yyy_ portion of the file specification is either V4.3, V4.4, or V4.5. The _xxxx_ portion of the file specification is either _BASE_ or _UWS_ depending on whether the ULTRIX or UWS patches are being installed. Determine the correct path to the patch kit area and define the PATCHES environment variable to point to it as shown in Section 1.2.3.3. Corrective Action: Define the PATCHES environment variable to point to the correct directory and rerun this installation script. Warning: Patch ID ULTyyy-xxxx has already been applied. You are given a choice whether you want to reinstall the patch kit. Answer "no". ULTRIX/VAX and ULTRIX Worksystem Software 13 1.3 System Component Changes The ULTRIX and UWS operating system has a robust date/time environment, and only minor changes to system components were required for Year 2000 Readiness. The system stores and tracks the current system time as the number of elapsed seconds since the standard UNIX Epoch date of 00:00:00 January 1, 1970 UTC. Application programming interfaces (APIs), such as the timeval structure and the time_t data type, are used to retrieve system time into standard structures that are related to date and time values. Because the system stores time as an integral value, it is unaffected by a rollover of the century date. However, the following changes have been made to system components for Year 2000 Readiness: + /bin/date Enhanced the date command to allow setting the system date to the year 2000 and beyond. A four- digit input field for specifying the year was added. In addition, an algorithm for interpreting input from the existing two-digit year field was implemented (69-99 = 19yy, 00-68 = 20yy). These changes are consistent with the most recent changes and additions to the UNIX98 specification from The Open Group. In addition to these enhancements, the date command will also identify ambiguous date setting input (input that could match more than one date input format) and indicate the default format that will be used. + /usr/bin/sccs.d (various SCCS commands, such as admin, get, delta, and prs.) Updated the SCCS commands to employ the standard two-digit year-handling algorithm (previously described) for options that accept two-digit year input. + /usr/bin/touch Updated the touch command to employ the standard two-digit year-handling algorithm (previously described) for options that accept two-digit year input. + /usr/bin/at, /usr/lib/atrun.c The at command contained a check against a maximum tm_year value of 100, which rejected years 2000 and beyond. The code was adjusted to accept all 14 ULTRIX/VAX and ULTRIX Worksystem Software valid years since the standard UNIX Epoch. + /sys/dist/setld Removed hardwired century "19" from two format strings that were used to query the current date/time from the date command for logging purposes. The %Y format specifier is now used to retrieve the correct four-digit year. + /sys/dist/ (distribution scripts) Modified date input prompt to inform the user that a four-digit year is allowed. Updated syntax used to invoke the date command to allow both two-digit and four-digit input, because the date command can now accept either. + /usr/etc/sec.d/audit_tool Corrected the calculation of ASCII values based on the tm_year field. This allows audit_tool to correctly select audit events by date for events that occur after the year 2000. + /usr/bin/mh/_mips.d (various MH mail utilities) Corrected several hardwired century "19" assumptions in the MH mail package. The original code assumed the tm_year field to be a two-digit value. Also corrected two-digit year output to use full four-digit years instead. + /usr/bin/X11/dxcalendar Modified dxcalendar to expand the accepted date range when importing calendar data beyond the year 1999. Previously, dxcalendar imposed a limit of 100 on year tokens directly derived from the tm_year element (years since 1900) in the standard UNIX tm structure, which limited input to the year 2000. + cdfs_subr.c Modified cdfs header processing to ensure that fields in the range 00-69 are assumed to be in the twenty-first century. + /usr/etc/lmf.d Normalized the date values to four digits before math was performed on them. ULTRIX/VAX and ULTRIX Worksystem Software 15 + /usr/etc/rdt.d Formerly, the code was hardcoded as the value 19 for century references. The default null record remains the 366th day of 1999 (a nonexistent date). + /usr/lib/sendmail.d Changed years specified in sendmail to be modulo 100 in order to ensure that the handling of years after 2000 was correct. + /usr/lib/libkrb.d Modified various kerberos routines. + /lib/libc/gen/_asctime.c Changed the code to handle the _itoa conversions of dates. 1.4 Guidelines for Applications Testing Limited testing has been performed on the Year 2000 patches. However, Interoperability tests between ULTRIX and UWS components have not been performed, nor have layered products or applications been tested. Use the guidelines described in the following sections to help you test your applications. 1.4.1 Taking Inventory The first step in Y2K analysis is to do a complete and detailed inventory of all components that make up the product being tested. This might include high- level components such as applications and libraries. You can break down these components into categories such as source code, data files, and so forth. It is also important to keep track of any dependencies these components might have on other products or components, perhaps supplied by a third party. In particular, note any product or component that exchanges date or time information with the components being examined. An accurate inventory will provide scope for the investigation and can also serve as a checklist and 16 ULTRIX/VAX and ULTRIX Worksystem Software basis for documenting what areas have been examined for Y2K problems. 1.4.2 Code and Data Analysis The next step involves filtering this initial inventory to components containing or referencing any date and time-related code or information. This provides the necessary focus to perform more thorough analysis and testing. Performing this task requires knowing how the date and time are used in each component. A careful analysis of date and time usage will uncover all areas needing to be examined. For example, an application might use a custom data type named counter to keep track of time in some manner. This might not be immediately apparent without a thorough examination of the code. It is important to analyze how date and time are used in each component, particularly in the areas of arithmetic operations, comparisons, sorting, expiration or out-of-bounds values, and two-digit year handling. Only a thorough and direct investigation of each component will uncover all potential Y2K problems. After the code and data have been analyzed and all known Y2K bugs have been addressed, testing of the components can begin. 1.4.3 Testing Testing for Y2K problems involves first identifying specific components or areas to target for testing. Develop a test plan that includes each of these areas and describes what methods will be used to test them. Important questions to ask are: + What specific procedures must be followed to allow testing in a Y2K environment? + What scenarios are likely to uncover problematic areas? + Can the tests be automated? + Is the source code available for the components being tested? + What dates or date ranges should be tested ULTRIX/VAX and ULTRIX Worksystem Software 17 against? After a detailed test plan is established, testing can begin. 1.4.4 Implementing Fixes and Workarounds Addressing Y2K problems that have been identified might be as easy as changing a line of code and recompiling an application. However, it might also be very complex and involve rewriting entire modules or applications with new implementations. Fixes and workarounds are certainly much easier to implement if the source code is available. However, this is not always the case, and other alternatives might need to be considered. 1.4.5 Documenting Findings Keeping accurate records of components analyzed and tested for Y2K assures that all areas have been covered. Listing the specific bugs or issues found, along with their associated fixes or workarounds, can also provide the groundwork for other Y2K efforts. These will also likely be important issues to consider when developing or integrating new code. 1.5 Typical Application Problems The following sections discuss ways to deal with typical application problems. 1.5.1 Avoiding Application Problems Always use the full four digits to represent the year where possible. If it is necessary to use a two- digit year (such as for compatibility reasons), implement the appropriate algorithm to interpret the two digits in order to determine the intended century. The ULTRIX and UWS operating system software uses the following algorithm to handle two- digit years: + If the year is between 69 and 99, the twentieth century is assumed (19yy). + If the year is between 00 and 68, the twenty-first century is assumed (20yy). This algorithm is consistent with the current UNIX98 18 ULTRIX/VAX and ULTRIX Worksystem Software specification from The Open Group. It is based on the fact that time on UNIX systems is stored as a number of seconds since the standard UNIX Epoch (00:00:00 January 01, 1970 UTC) and provides a one-year variance to account for local times in different time zones. For example, at 00:00:00 January 01, 1970 UTC, the local time in Eastern Standard Time (EST) was 19:00:00 December 31, 1969 EST. Consistently use standard system APIs to handle date/time data calculations. You can use routines such as mktime(), localtime(), strftime(), strptime(), getdate(), ctime(), difftime(), time(), and others to perform most date/time manipulation and representation. Consistent use of these routines will help avoid problems that can arise with nonstandard interfaces. Use of standard routines such as these also creates leads to the development of more portable code. Customer applications that use the libc functions _asctime.o or i_asctime.o should be rebuilt because these functions were changed to support Year 2000 time values. 1.5.2 Common Causes of Application Problems The tm_year field of the tm structure is a common area for arithmetic omissions or mistakes. The tm_year field is defined as the number of years since 1900. For example, for the year 1999 tm_year is equal to 99. Since tm_year values in the twentieth century do not exceed two digits (0-99), many applications have assumed this is an appropriate means of representing years as a two-digit value and simply output or store this value for the year. This is a mistake. When the year 2000 arrives, tm_year values will exceed two digits. For example, for the year 2000, tm_year is equal to 100. Consistent use of four-digit years employing a simple calculation such as tm_year + 1900 will avoid this type of misinterpretation. If a two-digit year is required, appropriate arithmetic on the tm_year value must be used. For example, for years beyond 1900, the calculation tm_year % 100 will provide the correct two-digit year regardless of the century. ULTRIX/VAX and ULTRIX Worksystem Software 19 1.5.3 Examples of Year 2000 Problems and Solutions The following examples are by no means a complete list of Year 2000 related issues you might find in your code. However, they are frequently encountered issues. Applications can use an endless variety of ways to input, process, calculate, and output time and date information, resulting in many different kinds of Year 2000 problems. These examples provide an introduction to the kinds of problems developers should look for. tm_year field in tm structure (years since 1900) Application code might display two digits for year (bad) by simply displaying tm_year. This yields correct two-digit representations until the year 2000, at which point the number of years since 1900 becomes a three-digit number. Correct usage: Use full four-digit years instead of tm_year + 1900. If a two-digit year is absolutely required, use tm_year % 100, which will yield the correct two-digit year regardless of the century. Remember that century information is lost by using two-digit years and can result in additional problems or century ambiguity depending on how this data is used. Hardwiring of century (19) in application code Code might hard-wire the century as in: printf("year = 19%d0, tm_year); This can yield correct results for years in the twentieth century (1997, 1998, 1999). However, when the year 2000 arrives, this method will yield incorrect results (19100, 19101, 19102, ...). Correct usage: Use four-digit years instead, as follows: printf("year = %d0, tm_year + 1900); Ambiguous two-digit year input using API getdate() The getdate() routine is defined as follows: 20 ULTRIX/VAX and ULTRIX Worksystem Software struct tm *getdate(const char *string); Data input through string is parsed according to format specifiers stored in a text file referenced by the DATEMSK environment variable. See getdate(3) for more details. The %y format specifier is defined as "Year of century 00 through 99" and is a two-digit value. If this format specifier is used, as in %m/%d/%y (month/day/year), it can be unclear what century was intended by the input data. For example, the file referenced by DATEMSK contains the following format: %m/%d/%y Application code retrieves input (perhaps from a user interface) of the form, 11/22/02, and calls getdate() as follows: struct tm * p_tm; p_tm = getdate( "11/22/02" ); Because the century is not required or specified, it is unclear whether the input was intended to refer to 11/22/1902 or 11/22/2002. In ULTRIX and UWS systems that are Year 2000 ready, the getdate() routine interprets this two-digit year input according to the following standard algorithm: (69-99 = 19yy, 00-68 = 20yy) However, this might not be consistent with the intended meaning of "02" in the input. Correct usage: Use the %Y field specifier instead of %y to require and specify full four- digit year input. For example, modify the previous format as follows: ULTRIX/VAX and ULTRIX Worksystem Software 21 %m/%d/%Y Require four-digit year input and process as follows: struct tm * p_tm; p_tm = getdate( "11/22/2002" ); This leaves no ambiguity as to the intended century. 1.6 Year 2000 Information and Readiness Disclosure Act of 1998 The "Year 2000 Information and Readiness Disclosure Act of 1998" was enacted into law in the U.S. for the purpose of promoting the free exchange of information related to year 2000 readiness. Information provided by Compaq in its documentation and on its current and prior Year 2000 Web sites, including its Tandem and Digital focused Web sites, are Year 2000 Readiness Disclosures under the Act. Such information includes product readiness database reports, product position statements and white papers, Year 2000 services and tools information, and internal readiness statements. Information provided by Compaq about the Year 2000 readiness of third party products and services are "Republications" of information provided by the indicated third party. Compaq has not verified the content of such "Republications." The Compaq Year 2000 Web site is at http://www.unix.digital.com/unix/year2000/. 22 ULTRIX/VAX and ULTRIX Worksystem Software