Commit Graph

316 Commits

Author SHA1 Message Date
Kai Blin b53e1ffa47 secur32: Implement LsaRegisterLogonProcess stub. 2007-08-30 20:06:56 +02:00
Kai Blin 6efe40b3a6 secur32: Implement LsaLogonUser stub. 2007-08-30 11:57:18 +02:00
Kai Blin 0c6e2c20bd secur32: Implement LsaGetLogonSessionData stub. 2007-08-30 11:57:18 +02:00
Kai Blin 8942443a42 secur32: Implement LsaFreeReturnBuffer stub. 2007-08-30 11:57:18 +02:00
Kai Blin d1339bc0fa secur32: Implement LsaEnumerateLogonSessions stub. 2007-08-30 11:57:18 +02:00
Kai Blin ae06588d9b secur32: Implement LsaLookupAuthenticationPackage stub. 2007-08-30 11:57:18 +02:00
Kai Blin 78b047e4e4 secur32: Give a hint where to find ntlm_auth. 2007-08-30 11:57:18 +02:00
Alexandre Julliard 4cda5ca96c secur32: Set the close on exec flag on the ntlm_auth pipes. 2007-08-27 18:27:59 +02:00
Andrew Talbot d01c8407a9 secur32: Constify some variables. 2007-08-27 12:01:47 +02:00
Paul Vriens 22e48388d5 secur32/tests: Run tests on win95 again. 2007-08-16 11:08:09 +02:00
Rob Shearman 610a3b1ad2 secur32: Remove valid_session_key from NegoHelper since it is only ever set and not read. 2007-08-08 15:32:00 +02:00
Rob Shearman 888a8e27b8 secur32: Split the NTLM credential and context handles into separate objects.
This prevents races with two threads using the helper object at the same
time on two different context handles, eliminates the need to free the
credential handle after freeing the context handles and also prevents a
crash caused by not clearing session_key in DeleteSecurityContext.
2007-08-08 15:32:00 +02:00
Paul Vriens fe7e83fd0c secur32/tests: Use skip when functions are not available. 2007-07-05 19:54:38 +02:00
Rob Shearman 98820d4ef4 secur32: Add tests for multiple use of a credential handle. 2007-07-04 13:42:44 +02:00
Rob Shearman 2ede1370d3 secur32: Don't free the password in InitializeSecurityContextW to enable the credentials handle to be re-used in further InitializeSecurityContextW calls. 2007-07-03 12:29:19 +02:00
Kai Blin c1e724bc88 secur32: Downgrade WARN to TRACE, fix another TRACE. 2007-05-29 11:54:22 +02:00
Rob Shearman aa1be492cd secur32: Fix NTLM's InitializeSecurityContextA/W to be flexible with the index of the token buffer in both the input and output buffer descriptions. 2007-05-25 20:17:11 +02:00
Rob Shearman 4d275bcf10 secur32: Don't set the output buffer type in NTLM's IntializeSecurityContextA/W. 2007-05-25 20:16:58 +02:00
Rob Shearman 661b49785e secur32: Make the NTLM SSP cope with a NULL phCredential parameter when InitializeSecurityContext is called more than once. 2007-05-25 20:16:42 +02:00
Rob Shearman ee47c5a23a secur32: Fix the wrapper InitializeSecurityContextA/W functions to handle phContext and phNewContext parameters being optional for some SSPs. 2007-05-25 20:16:38 +02:00
Rob Shearman 087eedc3f5 secur32: Fix the dwVersion field in the security function tables returned by InitSecurityInterfaceA/W. 2007-05-25 19:30:04 +02:00
Andrew Talbot d64165fcd7 secur32: Exclude unused headers. 2007-05-21 12:31:04 +02:00
Kai Blin 7e6c5aad3c secur32: Move NTLM debug output to a seperate "ntlm" channel. 2007-04-16 12:08:44 +02:00
Andrew Talbot e7730a1668 secur32: Replace const pointer parameters with correct pointers to const. 2007-03-27 12:38:26 +02:00
Jan Zerebecki e293d630ff secur32: Add DebugInfo to critical sections. 2007-03-12 13:39:54 +01:00
Stefan Huehner 51a7ca3440 Change some functions arguments from () -> (void). 2007-03-12 12:25:31 +01:00
Kai Blin df3a7a7b43 secur32: Check for actual return value on invalid QuerySecurityPackageInfo call. 2007-03-08 13:54:06 +01:00
Rob Shearman b814c45f00 secur32: NTLM's AcquireCredentialHandleA/W should accept domains and usernames with lengths of 0.
Add tests for these cases.
2007-03-06 21:59:39 +01:00
Rob Shearman d9229bd1c5 secur32: NTLM - don't bother nul terminating the password string as nothing relies on it being nul terminated. 2007-03-06 21:59:34 +01:00
Rob Shearman 3012038e73 secur32: NTLM - don't copy more data from User, Domain and Password
pointers in the SEC_WINNT_AUTH_IDENTITY structure than the
corresponding Length fields say the pointers hold.
2007-03-06 21:59:28 +01:00
Kai Blin 0210f5eb1d secur32: Use skip for skipped tests, reduce indentation. 2007-03-05 12:08:13 +01:00
Rob Shearman 12f2f09a6c secur32: SealMessage and UnsealMessage are aliases of EncryptMessage and DecryptMessage respectively. 2007-03-01 20:42:49 +01:00
Kai Blin 7325bbd127 secur32: Fix ntlm_auth version number check when registering the NTLM SSP. 2007-02-06 12:30:21 +01:00
Kai Blin 809e4124d7 secur32: Bump minimal required samba version to 3.0.25, 3.0.24 is a bugfix release. 2007-02-06 12:30:16 +01:00
Andrew Talbot da90b4a8dd secur32: Declare a function static. 2007-02-05 12:25:36 +01:00
Kai Blin 747ab4bf74 secur32: Fix off-by-one error in converting the password to unicode. 2007-01-24 12:56:33 +01:00
Kai Blin dc98ac1adb secur32: Fix off-by-one error when copying the password to the helper.
This fixes NTLM authentication with Outlook2003.
2007-01-24 12:07:41 +01:00
Francois Gouget aab5e5856e Don't put single quotes around '%s' when using the debugstr_*() functions. 2007-01-18 12:55:50 +01:00
Francois Gouget 933bf76b5d secur32: Use '%u' to print GetLastError(). 2007-01-18 12:55:10 +01:00
Paul Vriens 7ba9ee9e76 secur32/tests: Fix compilation for older gcc versions (and MinGW). 2007-01-15 14:39:10 +01:00
Paul Vriens 6c3efd1c32 secur32/tests: Cast-qual warning fixes. 2007-01-12 20:41:17 +01:00
Patrik Stridvall f46da1f985 secur32: Use constants instead of hardcoded values. 2006-12-24 15:12:34 +01:00
Andrew Talbot 2ec6c1bf96 secur32/tests: Cast-qual warnings fix. 2006-12-15 12:19:00 +01:00
Dmitry Timoshkov 098e82d81e secur32: Make some data const. 2006-12-14 20:11:44 +01:00
Marcus Meissner f0280cbd1e made functions and variables static in some testcases. 2006-12-11 12:18:29 +01:00
Kai Blin 3dc6390e72 secur32: Improve version detection, move all the version detection to ntlm.c.
Also, as starting with Samba 3.0.24, ntlm_auth will have all the features
we need, require that as minimal version and remove odd old-version
compatibility hacks.
2006-11-29 12:37:20 +01:00
Andrew Talbot fde63f9742 secur32: Cast-qual warning fix. 2006-11-14 11:34:42 +01:00
Kai Blin 1037e20bc7 secur32: Fix handling of ISC_REQ* flags in InitializeSecurityContext. 2006-11-14 11:34:19 +01:00
Francois Gouget b2656633a6 Add some documentation headers to make winapi_check happy. 2006-11-13 13:01:15 +01:00
Kai Blin 48f934ee96 secur32: work around a bug in ntlm_auth that breaks RPC. 2006-11-10 11:34:41 +01:00
Kai Blin d5c0acd057 secur32: Implement NTLM2 encryption. 2006-11-09 14:33:31 +01:00
Kai Blin 1360339422 secur32: Implement ntlmv2 signing. 2006-11-09 10:39:20 +01:00
Kai Blin 78bcfdfce6 secur32: MD5 functions are WINAPI. 2006-11-09 10:39:09 +01:00
Kai Blin a51e02c5d6 secur32: Use a helper function for creating the signature as this simplifies implementing NTLM2 signing a lot. 2006-11-08 20:12:34 +01:00
Kai Blin 6720a129f3 secur32: Delete session key and arc4 context when the session based security context is deleted. 2006-11-08 20:08:09 +01:00
Francois Gouget ea483682c5 secur32: sspi.h must not include wtypes.h. 2006-11-08 12:11:00 +01:00
Kai Blin 3af72bec1e secur32: Test and fix DecryptMessage for multiple data buffers. 2006-11-06 13:47:29 +01:00
Kai Blin cd8332ae1c secur32: Fix handling of buffers that don't have the SECBUFFER_TOKEN as the first buffer.
Thanks to Robert Shearman for catching this one and providing some of the test code.
2006-11-04 12:07:05 +01:00
Kai Blin e1bfe4c18a secur32: Get rid of some HeapAlloc() calls to make code more readable. 2006-11-04 12:02:06 +01:00
Kai Blin 0c3f45eda0 secur32: Avoid double HeapFree() of password and session key. 2006-11-04 12:02:01 +01:00
Rob Shearman 7be4853911 secur32: Make the path to ntlm_auth easier to change by moving the executable name to the top of ntlm.c. 2006-11-02 21:57:20 +01:00
Paul Vriens dd6c4c6800 secur32: Make sure crashing tests are not run. 2006-10-31 12:05:27 +01:00
Kai Blin 344ce9e69b secur32: Add include guard to hmac_md5.h. 2006-10-20 11:41:18 +02:00
Kai Blin 306048bdeb secur32: Stop leaking the session key memory. 2006-10-16 17:05:23 +02:00
Kai Blin e338a30e59 secur32: Get rid of NEGO_* helper modes, they will never be used. Negotiate should not be done via ntlm_auth. 2006-10-16 11:27:25 +02:00
Kai Blin b629b6defd secur32: Implement RFC2104 (HMAC) with MD5 for NTLMv2. 2006-10-16 11:27:15 +02:00
Hans Leidekker 2638e9d467 secur32: Win64 printf format warning fixes. 2006-10-16 10:54:33 +02:00
Francois Gouget 8e38ac5911 secur32: Add missing '\n' in a Wine trace. 2006-10-13 11:20:53 +02:00
Michael Ploujnikov 4b7877d79d secur32/tests: Win64 printf format warning fixes. 2006-10-11 12:09:09 +02:00
Kai Blin 640d87dfc6 secur32: Add support for cached client credentials. 2006-10-06 17:45:52 +02:00
Francois Gouget 82babbee0b Add missing '\n's to Wine traces. 2006-10-05 17:46:48 +02:00
Michael Stefaniuc 85ce5117c5 Add a WINE_NO_LONG_INT define to many makefiles to ease the transition of DWORD/LONG/ULONG from long to int. 2006-09-29 16:08:30 +02:00
Andrew Talbot 9c78a93e96 secur32: Cast-qual warnings fix. 2006-09-28 11:56:15 +02:00
Kai Blin 35bf41bc16 secur32: Stop loading Negotiate until it is actually working. 2006-09-25 17:55:22 +02:00
Kai Blin 6ae83720dd secur32: Tell the user if ntlm_auth is not found or outdated. 2006-09-21 19:57:07 +02:00
Alexandre Julliard 32ab895e46 makefiles: Generate the dependencies line to avoid some code duplication. 2006-09-14 09:38:16 +02:00
Alexandre Julliard 15ccaf545a secur32: Use _exit instead of exit in child process to avoid flushing things twice. 2006-09-12 14:50:33 +02:00
Kai Blin 98aeac78fc secur32: Fix DecryptMessage for the dummy case. 2006-09-08 11:02:25 +02:00
Kai Blin 85655db106 secur32: Fix generation of the session key. 2006-09-08 11:02:17 +02:00
Alexandre Julliard 5cf75e615a makefiles: Only run test and documentation targets in directories that need them. 2006-08-28 13:37:44 +02:00
Robert Reif de0619e3a7 secur32: Fix secur32 test to pass on windows. 2006-08-26 18:55:35 +02:00
Kai Blin bfa5967366 secur32: Initial working implementation of EncryptMessage and DecryptMessage. 2006-08-21 12:08:30 +02:00
Kai Blin 2164502322 secur32: Gracefully handle ntlm_auth versions that don't support the new commands. 2006-08-18 11:45:52 +02:00
Paul Vriens e1b1fa757c secur32: Make tests loadable on NT4. 2006-08-18 11:33:51 +02:00
Kai Blin c4d5becd6f secur32: Add real signing / verifying to NTLM provider. 2006-08-17 11:38:05 +02:00
Kai Blin 92a86a03e2 secur32: Mask away NTLMv2 and key exchange flags so we never negotiate it for now. 2006-08-17 11:29:22 +02:00
Robert Reif 51c7c030ee secur32: Fix GetComputerObjectName tests based on feedback from Paul Vriens. 2006-08-16 16:43:27 +02:00
Robert Reif e86828a072 secur32: Add GetComputerObjectName tests. 2006-08-16 12:48:08 +02:00
Robert Reif 1771a550b8 secur32: Partial GetComputerObjectName implementation. 2006-08-16 12:42:50 +02:00
Kai Blin cc17d97d23 secur32: Add handling of feature flags and session key to AcceptSecurityContext. 2006-08-15 11:54:39 +02:00
Kai Blin fe43d5d484 secur32: Copy helper buffer to output buffer before reusing helper buffer. 2006-08-15 11:42:55 +02:00
Kai Blin 13050ac11f secur32: Clean up AcceptSecurityContext (reduce indent and duplication). 2006-08-14 20:17:10 +02:00
Kai Blin c22e98fad0 secur32: Fix heap error. 2006-08-14 12:15:03 +02:00
Kai Blin 3cf9c85f83 secur32: Add handling for SECPKG_CONTEXT_FLAGS to QueryContextAttributes, unify indentation. 2006-08-14 11:58:57 +02:00
Kai Blin 9cd2f28603 secur32: Cast helper to ULONG_PTR instead of DWORD. 2006-08-14 11:58:39 +02:00
Kai Blin 8289ddb0d1 secur32: Implement simple VerifySignature. 2006-08-14 11:58:25 +02:00
Kai Blin 9b480ef06e secur32: Implement simple MakeSignature. 2006-08-14 11:58:17 +02:00
Kai Blin c8c7bf61ad secur32: Make AcceptSecurityContext behaviour consistent with Windows. 2006-08-14 11:55:46 +02:00
Kai Blin 4ff2d893c3 secur32: Implement CompleteAuthToken for NTLM. 2006-08-11 11:55:17 +02:00
Kai Blin d2989cc32d secur32: Make ntlm tests run on both WinXP and Win2k. 2006-08-09 17:12:14 +02:00
Kai Blin a71cf8446f secur32: Add tests for MakeSignature, VerifySignature, EncryptMessage and DecryptMessage. 2006-08-09 17:10:37 +02:00
Kai Blin c62193266d secur32: Move NTLM tests to ntlm.c to avoid cluttering main.c with NTLM-specific tests. 2006-08-09 11:20:03 +02:00
Andrew Talbot 8e2d28dd25 secur32/tests: Write-strings warnings fix. 2006-08-07 13:10:25 +02:00
Juan Lang 866969ed2b secur32: Improve schannel's AcquireCredentialsHandle, with tests. 2006-07-28 12:36:39 +02:00
Andrew Talbot b62bbe5568 secur32: Write-strings warnings fix. 2006-07-19 09:39:54 +02:00
Alexandre Julliard 0fa8baafcb make_dlls: Recursively ignore .ok files in all tests directories. 2006-07-10 21:26:50 +02:00
Alexandre Julliard edd100b899 make_dlls: Recursively ignore testlist.c in all tests directories. 2006-07-10 21:19:42 +02:00
Alexandre Julliard 5258e061dc make_dlls: Ignore generated import libraries from the top-level .gitignore. 2006-07-10 20:55:58 +02:00
Alexandre Julliard cc2b3b48e6 Take advantage of the recursive nature of .gitignore for Makefile entries.
Prefix other entries with '/' to make them non-recursive.
2006-07-10 20:47:54 +02:00
Andrew Talbot e239953e51 secur32: Write-strings warnings fix. 2006-06-23 10:46:10 +02:00
Thomas Weidenmueller 5fb24924fb include: Fix definition of SECURITY_INTEGER. 2006-06-19 21:22:40 +02:00
Uwe Bonnes a8a7976bc0 secur32: Fix another GetProcessHeap vs GetProcessHeap(). 2006-06-19 20:54:19 +02:00
Kai Blin b432e11927 secur32: Remove unneeded function from the Negotiate provider. 2006-06-19 20:53:53 +02:00
Kai Blin 9d5e09d748 secur32: Implement QueryContextAttributes. Add tests. 2006-06-16 11:31:23 +02:00
Kai Blin be4d1fea4d secur32: Don't fail on SECURITY_NETWORK_DREP, ntlm_auth handles this just fine. 2006-06-03 11:45:41 +02:00
Kai Blin f21983cf11 secur32: Add EncryptMessage and DecryptMessage stubs. 2006-06-02 11:22:12 +02:00
Kai Blin b1049be48f secur32: Cleaning up the authentication tests.
This should make it easier to add encryption tests later.
2006-05-28 18:14:05 +02:00
Kai Blin f543aea5e3 secur32: Fix wrong bit shift in the base64 encoder.
Thanks to Juan Lang for catching this one.
2006-05-27 10:55:05 +02:00
Mike McCormack f8dea2d803 secur32: Avoid some code duplication. 2006-05-26 20:21:05 +02:00
Jonathan Ernst 360a3f9142 Update the address of the Free Software Foundation. 2006-05-23 14:11:13 +02:00
Mike McCormack 4cd377d49c secur32: Cleanup InitializeSecurityContext (reduce indent and duplication). 2006-05-20 13:59:56 +02:00
Mike McCormack d243b39c94 secur32: Tidy up the initialization code a little. 2006-05-20 13:59:09 +02:00
Michael Stefaniuc a87520036f janitorial: Remove redundant NULL pointer checks before HeapFree'ing them.
Some HeapFree's are hidden behind macros. Found by smatch.
2006-05-10 11:31:41 +02:00
Michael Stefaniuc 968ad51d2a secur32: Missing LeaveCriticalSection on error paths. 2006-05-05 20:59:31 +02:00
Dmitry Timoshkov 8414777cba secur32: Add partial support for ISC_REQ_ALLOCATE_MEMORY in the NTLM security provider. 2006-05-05 20:23:30 +02:00
Dmitry Timoshkov d89a038287 secur32: Fix some wrong assumptions in the NTLM test case, make it pass in XP SP2 and Wine. 2006-05-05 20:23:17 +02:00
Kai Blin e6351700bc secur32: Update ntlm_auth version detection to detect new samba4 version numbers.
Samba4 changed the versioning from 3.9.X to 4.0.0tpX-preY.
2006-03-16 16:22:11 +01:00
Vijay Kiran Kamuju 517e310282 secur32: Add InitializeSecurityContext stub for schannel. 2006-02-14 17:37:36 +01:00
Robert Shearman 81d9e10533 secur32: Improve tracing.
Improve the tracing for functions that can be called by the app, but
bypass the relay code.
2006-02-10 14:51:59 +01:00
Francois Gouget d0c5f1498c Add trailing '\n's to ok() and trace() calls. 2006-02-06 20:58:14 +01:00
Dmitry Timoshkov 57a579ffcd Make more arrays const. 2006-01-24 14:00:32 +01:00
Kai Blin 0605cf0113 secur32: Added DeleteSecurityContext. 2006-01-23 11:23:21 +01:00
Kai Blin 49943c9cf4 secur32: Rewrote NTLM tests in a more flexible way. 2006-01-03 12:06:21 +01:00
Kai Blin 43b21b6e86 secur32: Adding AcceptSecurityContext to the NTLM security provider. 2005-12-19 21:20:03 +01:00
Kai Blin 3ba73f0ff6 secur32: Fix conversion of password in NTLM AcquireCredentialsHandleA. 2005-12-09 14:52:20 +01:00
Kai Blin d1a2dd79cc secur32: Implement InitializeSecurityContext(A|W) for the NTLM
security provider.
2005-12-07 12:51:05 +01:00
Kai Blin 79aff338a3 secur32: Implementing AcquireCredentialsHandle(A|W) for the NTLM
security provider.
2005-12-06 21:22:57 +01:00
Alexandre Julliard 0ec7e1a591 Renamed all .cvsignore files to .gitignore. 2005-11-26 13:10:33 +01:00
Francois Gouget f4c0524ec6 Assorted spelling and case fixes. 2005-11-10 11:39:07 +00:00
Stefan Huehner e1364b02a3 Fix segfault when querying non-existent SecurityProvider. 2005-11-07 16:39:00 +00:00
Kai Blin 2b5ade97ce A dispatcher for running ntlm_auth. 2005-10-30 19:06:24 +00:00
Ivan Leo Puoti 372a281c24 Make secur32.dll tests load on nt 4.0. 2005-10-26 10:09:53 +00:00
Alexandre Julliard 7e22be4d84 We are no longer generating .dbg.c files. 2005-09-29 10:35:58 +00:00
Francois Gouget 10f72c719b Add trailing '\n's to ok() calls. 2005-09-26 09:52:25 +00:00
Kai Blin c532c866c6 Added base64 codec for communication with ntlm_auth. 2005-09-21 11:43:52 +00:00
Marcus Meissner bd7ec9aca5 The last argument to MultiByteToWideChar is wide character count and
not the buffer size in bytes. Fixed all places where it was wrong.
2005-09-12 22:07:53 +00:00
Alexandre Julliard 63a643e50f Authors: James Hawkins <truiken@gmail.com>, Juan Lang <juan_lang@yahoo.com>
Use a standard wine list for packages and providers.
2005-08-30 08:55:20 +00:00
Alexandre Julliard cc4da88563 Explicitly import kernel32 in tests that use it. 2005-08-27 09:27:09 +00:00
Kai Blin 2cc40bac7d Fixed a couple of bugs in InitializeSecurityContext(A/W) and
AcceptSecurityContext.
2005-08-22 10:05:45 +00:00
Francois Gouget fae73a1090 Assorted spelling fixes. 2005-08-17 09:56:24 +00:00
Kai Blin 4fd3f40952 Add NTLM security provider dummy. 2005-08-17 09:52:30 +00:00
Francois Gouget 6fb12fc291 Declare PNTSTATUS in lmaccess.h and ntsecapi.h to match the PSDK.
Protect against multiple definitions.
Use PNTSTATUS where appropriate.
2005-08-16 16:01:49 +00:00
Juan Lang 2fa840b043 Fix uninitialized pointer in builtin providers. Reported by Kai
Blin.
2005-08-16 11:13:30 +00:00
Kai Blin ece9de5aaa Added Negotiate security provider dummy. Removed todos from the test. 2005-08-15 20:52:18 +00:00
Kai Blin 6970dbc7cf Added more secur32.dll tests and fixed missing constants in
winerror.h.
2005-08-11 17:08:06 +00:00
Kai Blin 84fb7913f9 Set up tests for secur32. 2005-08-03 13:08:49 +00:00
Hans Leidekker 524251db40 Stub implementations for GetUserNameEx{A,W}, TranslateName{A,W},
LsaCallAuthenticationPackage, LsaConnectUntrusted and
LsaDeregisterLogonProcess.
2005-07-18 09:11:14 +00:00
Juan Lang bc0f448774 Begin stubs of built-in schannel provider. 2005-05-13 17:44:47 +00:00
Alexandre Julliard 34fa35dc99 Added rules for building import libraries in the individual dll
makefiles, and added support for building a .def.a static import
library too.
2005-05-09 14:42:30 +00:00
Alexandre Julliard d62356aa1e Added rules to build import libraries in the individual dll makefiles.
Generate import libraries with the right name right away instead of
using an intermediate .spec.def file.
2005-05-07 12:39:52 +00:00
Jakob Eriksson 9ed61de9a2 Get rid of HeapAlloc casts. 2005-03-24 21:01:35 +00:00
Mike McCormack e18965dfc8 Add stub implementation for GetComputerObjectName. 2004-07-12 19:52:47 +00:00
Patrik Stridvall 070db4e5de Fixed some issues found by winapi_check. 2004-05-17 21:08:31 +00:00
Francois Gouget ebf0eb3138 Make static Unicode strings const. 2004-04-20 00:34:52 +00:00
Alexandre Julliard 9e4ed6460c .spec.c files are no longer used for 32-bit dlls. 2004-03-24 03:36:44 +00:00
Juan Lang 3ed89c33b0 Added a secur32.dll that loads other SSP DLLs and forwards calls to
them.
2004-03-02 04:57:35 +00:00