1. 3.12 CLIB ---------------------------------------------------------------------- 3.12d 10/22/93 ---------------------------------------------------------------------- 304. Added GetServerUtilization and GetServerMemorySize functions. 305. Added Setable Parameter debugging interface. 306. Fixed a bug in the cleanup of threads blocked on synchronization waits where the connection was not being reenabled. 307. Added a ScheduleWorkToDo interface to BeginThread so that developers could use worker threads on 4.x and have the same binary work on 3.x 308. Changed memory checking so it can be used in all versions of the 3.x clib. 310. Added code to dynamically import TotalKnownMemorysize because it is not available in the MSEngine. 311. Made the renegotiating of the packet size within NCPReadFile and NCPWriteFile only happen once. This is because the second time Netware on VMS failed. 312. Ever since 3.1 we have been returning the ser. # and app # swapped. Made it return correct values. 313. Increased struct RequestPacketStructure.RData size to 539 bytes. Also fixed the initialization of that field. 314. Made changes mostly bracketed with __cplusplus to these headers to clear up compilation errors or warnings under C++. 315. OpenEA(), swapped MapPathToDirectoryNumber() for GetEntryFromPathStringBAse() so EAs will really work with non DOS name space paths. 316. Added #pragma pack(); to the end of each header to return to default packing. 317. Fixed Daylight Savings Time check in time() to give October 31 days instead of 30. In 1993, it calculated that DST ended on the 24th instead of the 31st. 318. Added a fix to SemTimerHandler to make sure that the process wouldn't be freed up from a semaphor if it had been signaled right before the timer interrupt fired. 319. Added InvertWord to GetPathFromDirectoryEntry directoryEntry parameter. 320. When on an IO engine after logging in as supervisor for connection 0, we were leaving the current directory handle in the login directory. This didn't work very well. 321. added DOES_NOT_RUN_ON_IOENGINE. 322. added prototype and definition of FEMapConnsHandleToVolAndDir() needed for 3x FSHooks. 323. added a File System Monitor Hook Signature. 324. added an FSHook msg. and a INIT msg. 325. added support for FS Hooks initialization and tear down. 326. Put SuspendOrStop in NCPRequest because a thread could be blocked on the semaphore when it is unloaded. This will cause an abend. 327. Added code to ExitCritSec to redistribute the link list of TCS's so that the first thread on the link list doesn't get favored if the NLM encounters a bunch of critical sections. 328. Added ThreadSwitchLowPriority for backwards compatibility. 329. made DOS, OS/2, NT, & FTAM be the default case for the switch statements found in _NWStoreAsComponentPath() and _NWGetDirBaseFrom Path(). 330. Added support for spaces when parsing OS2 names. 331. A connection at unload time was being destroyed while another thread was waiting on a semaphore. This causes an abend. 332. added version checking for remote servers as 4.0 & 4.01 sent back serial nums. swapped. See change 323 also. ---------------------------------------------------------------------- 3.12f 12/16/93 ---------------------------------------------------------------------- 333. Changed ClearConnectionNumber to not return an error when you clear you own connection number. 334. Changed ClearRLocks to pass FALSE as the last parameter. 335. There was a bug found using Install where packet burst would retry when not needed. There was also a random bug of data corruption of 1, 2, or 3 bytes on these retries. 336. added version checks to be able to run on 3.11 as well as 3.12. 337. Added a check to _HandleCtrlChars to see if the OS to clib struct ptr is null before we dereference it. 338. Added an error code and added dynamic import of GenNS calls so we could load in I/O engine of SFT III. ---------------------------------------------------------------------- 3.12f 2/03/94 ---------------------------------------------------------------------- 2. 4.01 CLIB --------------------------------------------------------------------- 47. In _DefaultParsePath() removed the assigning of 0 to *direct- oryNumberp if ':' is found in tempPath. this was making us blow up later if many chdir()s were called iteratively because an NCPFreeDirHandle was tried with dir handle of 0. 48. In GetDataStreamName() enlarged buffer from 45 to 255 in case OS or translations change the length of the buffer we get back. 49. Added code to LoadLanguageMessageTable to check the message table ptr and return an error if it is null. 50. Changed ClearConnectionNumber to not return an error when you clear you own connection number. 51. Changed ClearRLocks to pass FALSE as the last parameter. 52. On 2.X servers the DSOffset of 8000 was not working because they would return the high byte set. Changed it to 10000. 53. Made sure all structures and unions had tags. Note that we DIDN'T apply tags to structures and unions whose definition was within another structure or union. 54. GetLANAddress was not working remotely because it would check for CURRENT_CONNECTIONID. This now works. 55. There was a bug found using Install where packet burst would retry when not needed. There was also a random bug of data corruption of 1, 2, or 3 bytes on these retries. 56. removed NWLstrchr() from NCPOpenDirectory() and NCPDirect- orySearch() because the '.' we were looking form is never there since any wild cards have already been augmented (2E -> AE, 2A -> AA, etc) by the default path parser in opendir(). 57. Added a check to _HandleCtrlChars to see if the OS to clib struct ptr is null before we dereference it. 3. 4.01 DSAPI ----------------------------------------------------------------------------- 80. Fixed NWDSGetContext(), switch case DCK_NAME_CONTEXT, to write 0x0000 to the pointer passed when Unicode-to-character translation is not set in the 'DCKFlags' instead of only '\0.' 81. Fixed yet another logic error causing execution erroneously to call NWDSDuplicateContext() instead of NWDSCreateContext(). 82. Fixed memory leak in NWDSDuplicateContext(). Left debugging statements in--accessed by defining 'DEBUG' during compilation. 83. Adjusted _NDSCreateRDNList() to return with nil by-product when a null or zero-length object name is passed. 84. Fixed a "Read from a nonpresent page" error in NWDSDuplicateContext(). 85. Checked 'userID' before calling NWDSDeleteUser(). 86. Added new function, NWDSListByClassAndName() and made changes necessary to the parameter list for BuildAndSendListMessage() and to ListAndRead() where it is called. 87. Checked for nil- or zero-length input string to be abbreviated and return a zero-length abbreviation. This was done in functions AbbreviateUnicodeName() and RemoveTypesWithoutAbbrev(). 88. Modified _NDSFreeRDNList() to validate the list-field pointer before attempting to free it. 89. Made changes incidental to porting these to Platform-Independent NetWare. 90. Added validate-null mention to third argument to NWDSAuthenticate() to enable calls to pass the RPC cross-domain validation of pointers. 91. Revamped for PIN port, removing Macintosh and other hardware support to avoid confusing the issue. 93. Added definitions for Buf_T and validated all pointers of that type being passed in the entire library. 94. Initialized field 'lastCount' of the newly allocated Buf_T structure to ensure good handling through validation. 95. Modified VCS rules paths to point to new version directory location. Important fix to NWDSDeleteUser() in CLib:USER.C which traverses the connection table releasing every connection owned by the logging-out user. 96. Changed all the macro names from mixed case to upper case. 98. Fixed error sending NWDSDeleteUser() a null (this had been fixed in DSLOGIN.C months ago. Modified code to skip DSFreeTDSData() in the case where GetTDS() returns an error. 104. Made changes to reintroduce the necessary pointer coercion to pass HP's compiler. Removed occurrences of '//.' 105. Initialized 'tempName' in the case where an error had occurred possibly filling the string with garbage in function GetAbbreviatedAndTypelessName. 106. Checked second pointer to unicpy() in NWDSDuplicateContext() to ensure nonnil. Assigned 0x0000 to 0th subscript of first argument in failing case. 107. Added FTOK_RDN, FTOK_BASECLS FBIT_RDN, and FBIT_BASECLS per client. Added the latter two to FBIT_OPERAND and changed type of field 'expect' from 'uint16' to 'uint32' in filter cursor structure. 109. Added prototype for _SameCIString(). 110. Added a new function NWDSResolveName() and a prototype for it. Added import and RPC descriptions for this function and NWDSAuditGetObjectID(). 112. Added new function NWDSReadSyntaxDef() and a prototype for it. Added import and RPC descriptions for it. 113. Removed blocks of code calling uniicmp() and _NDSApplyDefault- NameContextRule() which were fixes the client once inserted in NWDSCreateContext() and NWDSSetContext() but which it now no longer desires. 114. Fixed a few pointer-incompatibility warnings. 115. Added change as implemented by client to BuildAndSendListMessage which affected reading object information (I believe). 116. Made change to parameter list of NWLocalToUnicode() and NWUnicodeToLocal() because Jim Nicolet added an argument in Unicode.NLM 117. Integrated changes to fix search problem for base classes. Made one coercion myself to his fixes to pass HP's compiler. 118. Incorporated changes in response to the typeless/typeful naming standardization championed by ECO recently. This holds that, by default, names passed back from DSAPI (and DS) will be typeful since originally they were that way. The names can be typeless if desired by calling NWDSSetContext() and setting DCV_TYPELESS_NAMES in the context flags (thus, NWDSCreateContext() was modified to reflect this default). Be it noted, however, that typeless names may be passed freely to DSAPI (and DS) whatever the state of the flag is since DS understands them (since v4.01). passing a typeless name in a typeful (default) context will not sollicit a typeless return however. Important fix to NWDSDeleteUser() in CLib:USER.C which traverses the connection table releasing every connection owned by the logging-out user. 119. Implemented a fix in CanonicalizeUnicodeName() where an empty string is allowable (but still not a null pointer). 120. Fix for trailing dots in the name. 121. Do the internal authentication following the global resolution of the name. 122. Moved DCK_LAST_SERVER_ADDRESS, DCK_LAST_ADDRESS_USED and DCK_LAST_CONNECTION from second into first. Also, provided new type to be used in conjunction with DCK_LAST_SERVER_ADDRESS to NWDSGetContext(). 123. Fix added to InternalAuthenticate() so that it passed context as the first argument (unlike the client version). In DSAPIRPC.DEF, in the definition for Buf_T, the pointer validation attributes were changed to DONT_VALIDATE. This is because this strucuture may be handed to a function uninitialized (where it is output data from NDS) or initialized (where it is input to NDS and would therefore have valid pointers). Since it would mean a great deal of investigation to identify reliably the cases where it was one or the other, splitting out a different Buf_T type to solve the ambiguity was declined and no Buf_T fields will be validated, only the Buf_T parameter itself. 124. References to the define DSI_DEREFERENCE_BASE_CLASS should not be made in 4.01. 125. Updated dsapi.imp to export both NWDSPartitionReceiveAllUpdates and NWDSPartitionSendAllUpdates Updated dsapirpc.def to define NWDSPartitionReceiveAllUpdates (it had already defined NWDSPartitionSendAllUpdates). 126. Added NWLocalToUnicode and NWUnicodeToLocal to import and RPC files.