Austin English
22c1843e08
secur32/tests: Make sure a return value is used (LLVM/Clang).
2011-02-09 09:29:13 -06:00
Ken Thomases
cf2de431ac
secur32/tests: Fix copy/paste error in test message ("first" -> "third").
2011-01-21 12:25:06 +01:00
Aric Stewart
fe05a73042
secur32/tests: Skip test on failure to acquire cred_handle.
2010-12-02 18:57:57 +01:00
Juan Lang
30435a5951
secur32: Trace flags as hex values.
2010-10-22 12:03:45 +02:00
Alexandre Julliard
81b8ee863e
makefiles: Add a standard header for all makefiles to replace the common variable initializations.
2010-09-19 12:36:48 +02:00
Piotr Caban
ab52186086
secur32: Prevent schannel tests from crashing on Windows NT.
2010-09-18 13:09:33 +02:00
Piotr Caban
cdf8d455c2
secur32: Handle extra data in schan_InitializeSecurityContextW.
2010-09-18 13:05:30 +02:00
Mikko Rasa
f2377e8981
secur32: Add some more schannel tests.
2010-09-15 16:36:45 -05:00
Mikko Rasa
506af9205d
secur32: Fill a SECBUFFER_MISSING buffer if the message is not complete.
2010-09-15 16:36:17 -05:00
Mikko Rasa
b335e94788
secur32: Only process full TLS frames in schan_DecryptMessage.
2010-09-15 16:36:11 -05:00
Mikko Rasa
149ffe130f
secur32: Fill header and trailer buffers in schan_DecryptMessage.
2010-09-15 16:36:01 -05:00
Mikko Rasa
b424b3431e
secur32: Validate buffers passed to schan_DecryptMessage.
2010-09-15 16:35:51 -05:00
Alexandre Julliard
b86d515ed6
dlls: Remove explicit imports of kernel32 and ntdll.
2010-07-21 17:38:36 +02:00
Michael Stefaniuc
24592a7a62
secur32: Avoid using long.
2010-05-12 13:44:40 +02:00
Kai Blin
9dd206d28e
secur32: Use NTLM2 instead of NTLMv2.
...
In the current code NTLMv2 is used when talking about second generation
NTLM crypto algorithms. Most other publiations call this NTLM2, and use
NTLMv2 to describe a different crypto handshake that can be used by
either NTLM1 or NTLM2 crypto.
2010-04-19 14:56:12 +02:00
Alexandre Julliard
43a98ecb21
secur32: Avoid using a pointer difference in a trace.
2010-04-09 16:14:07 +02:00
Alexandre Julliard
bef5645eb1
makefiles: Remove the no longer needed explicit separators for dependencies.
2010-03-16 13:28:19 +01:00
Alexandre Julliard
6164ce2d82
makefiles: Use the standard C_SRCS variable as the list of test files.
...
This enables it to be auto-updated by make_makefiles.
2010-02-22 10:47:11 +01:00
Juan Lang
7c3b9a1551
secur32: Report an error if libgnutls isn't found.
2010-01-11 12:54:23 -06:00
Rob Shearman
697955c922
secur32: Don't allocate context handle in wrapper InitializeSecurityContextA/W if it is the same as the handle passed into the function.
2009-12-30 13:40:35 +01:00
Rob Shearman
1346834605
secur32: Fix memory leaks in ntlm_InitializeSecurityContextW.
2009-12-30 13:40:31 +01:00
Rob Shearman
693433a3f2
secur32: Simplify memory management by not allocating memory for the CredHandle and CtxtHandle pointers.
...
Instead store the handles directly in the SspiData structure and pass
the addresses of these into SSPI functions.
2009-12-30 13:40:25 +01:00
Rob Shearman
5f01280edf
secur32: Fix memory leaks in tests.
2009-12-30 13:40:17 +01:00
Kai Blin
9a81b032c4
secur32: Pretend the NTLM provider also does Negotiate.
...
We had to enable the Negotiate provider a while back so programs that expected
that provider to be present would be happy. This broke programs that expect a
Negotiate provider to actually do something if it is present. This fix works
around that new issue by thunking all calls to Negotiate to NTLM.
2009-12-30 13:31:12 +01:00
Hans Leidekker
44f9595454
secur32/tests: Fix a couple of memory leaks.
...
Found by Valgrind.
2009-12-21 15:01:24 +01:00
Lei Zhang
c89211336b
secur32: Fix memory leak in SECUR32_addPackages.
2009-12-17 13:09:49 +01:00
Rob Shearman
3cd88cfab3
secur32: Fix memory leak in NTLM's FreeCredentialsHandle.
2009-12-14 12:04:05 +01:00
Hans Leidekker
aeb161f13f
secur32: Handle EOF from gnutls_record_recv.
2009-11-19 11:50:40 +01:00
Rob Shearman
f6c9c72e21
secur32: Output extra data in NTLM sign & seal test to diagnose failures seen on some Windows machines.
2009-11-09 19:38:58 +01:00
Kai Blin
e987ec4299
secur32: Use empty credentials when cached creds fail.
2009-11-09 19:38:00 +01:00
Henri Verbeet
3e96881e4c
secur32: Don't bother zeroing the handle table in SECUR32_initSchannelSP().
...
Handles are initialized when they're allocated.
2009-10-15 12:06:18 +02:00
Henri Verbeet
226519efbc
secur32: Don't try to cleanup uninitialized handles in SECUR32_deinitSchannelSP().
2009-10-15 12:06:18 +02:00
Henri Verbeet
5b47904231
secur32: Recognize the ARC4 cipher in schannel_get_cipher_algid().
2009-10-15 12:06:18 +02:00
Ge van Geldorp
43a28649c3
secur32/tests: Add acceptable error code for Win7 ntlm test.
2009-10-06 12:00:32 +02:00
Hans Leidekker
8bb68933ea
secur32: Test passing null authentication data to AcquireCredentialsHandle.
2009-10-06 11:58:19 +02:00
Paul Vriens
7b3213fd65
secur32/tests: Skip some tests on WinMe to avoid a crash.
2009-10-02 11:52:12 +02:00
Dylan Smith
fd3c8335fd
secur32: Free schannel handle table.
...
The table is initialized on process attach, and should be freed on process
detach (which is where SECUR32_deinitSchannelSP gets called).
2009-09-28 13:31:27 +02:00
Dylan Smith
fdcfbe21c3
secur32: Remove redendant call to gnutls_certificate_get_peers.
...
Two identical calls are made with the same parameters, and there are no
documented side effects of this function, so I removed one of them.
2009-09-28 13:31:18 +02:00
Kai Blin
e6ac20e814
secur32: Revert "secur32: Work around ntlm_auth in Samba 3.0.28a being broken for cached credentials".
...
This reverts commit 7788c8ed0d
, as well
as commit ec443be738
. Due to erroneous
user input, these commits actually broke more than they fixed.
2009-08-12 12:51:02 +02:00
Kai Blin
dfb2b429a0
secur32: Load Negotiate provider again.
2009-08-12 12:50:03 +02:00
Juan Lang
15512454fb
secur32: Implement QueryContextAttributes for SECPKG_ATTR_CONNECTION_INFO.
2009-08-10 13:08:54 +02:00
Juan Lang
570c57ac95
secur32: Trace values of SCHANNEL_CRED structure.
2009-08-07 15:27:24 +02:00
Juan Lang
5ee34ea870
secur32: Implement QueryContextAttributes for SECPKG_ATTR_REMOTE_CERT_CONTEXT.
2009-08-06 12:01:41 +02:00
Juan Lang
3a493d7782
secur32: Sanity check handle index before indexing table.
2009-08-06 12:01:30 +02:00
Alexandre Julliard
a6b05ea96c
secur32: Avoid the close-on-exec race with pipe() on kernels that support pipe2().
2009-07-01 12:14:08 +02:00
Kai Blin
66b6415193
secur32: Don't return STATUS_SUCCESS from LsaGetLogonSessionData stub.
2009-06-03 15:34:31 +02:00
Henri Verbeet
a1465ba45f
secur32: Initialize cbBuffer to 0 for NULL buffers.
...
This prevents schan_resize_current_buffer() from thinking there's a buffer.
2009-05-25 11:23:24 +02:00
Kai Blin
ec443be738
secur32: Don't try to use ntlm_auth --use-cred-cache.
...
If ntlm_auth actually uses the cred cache, it will not give a session key.
As the Wine NTLM code depends on the session key to do transport crypto, don't
attempt to use the winbind cred cache.
This completely reverts my attempted fix 7788c8ed
and also parts of Rob's
888a8e27
and 8a2125f9
. It does not affect the code using wine's own credential
cache.
2009-05-20 13:34:16 +02:00
Austin English
07c214170d
secur32/tests: Sign compare fixes.
2009-05-11 12:47:48 +02:00
Ge van Geldorp
74dba4e602
secur32/tests: Fix GetUserNameEx() tests.
2009-04-14 15:20:30 -05:00
Ge van Geldorp
d31bb3f08d
secur32: Implement more GetUserNameEx() formats.
2009-04-14 15:20:30 -05:00
Kai Blin
7788c8ed0d
secur32: Work around ntlm_auth in Samba 3.0.28a being broken for cached credentials.
...
Samba 3.0.28a (as shipped with Ubuntu 8.04) seems to break when using
cached credentials backed by winbindd, returning a BH error in our test
if we still need to provide a password. Handle this and report a more
correct error.
2009-04-14 11:28:34 -05:00
Paul Vriens
825354afe6
secur32/tests: Document some crashes on Windows.
2009-04-09 16:12:59 +02:00
Ge van Geldorp
c98513f9c8
secur32/tests: Add simple tests for GetUserNameExA/W().
2009-04-07 14:21:08 +02:00
Ge van Geldorp
dcb3e52e2d
secur32: Implement GetUserNameEx(NameSamCompatible).
2009-04-07 14:21:01 +02:00
Francois Gouget
c3aa03d244
secur32/tests: Use win_skip() to skip over unimplemented functionality.
2009-02-23 12:21:28 +01:00
Alexandre Julliard
21a7b21b65
secur32: Properly initialize the helper structure when fork support is missing.
2009-02-16 11:53:22 +01:00
Juan Lang
b9ae777d96
secur32: Fix a handful of test failures on Win9x.
2009-02-04 12:24:45 +01:00
Andrew Talbot
247b7c5a83
secur32: Declare a function static.
2009-01-26 15:48:48 +01:00
Michael Stefaniuc
e01ae46cac
secur32: Remove superfluous pointer casts.
2009-01-22 12:04:52 +01:00
Michael Stefaniuc
230fb06d2e
include: Change the rest of sspi.h to use LONG/ULONG for Win64 compatibility.
2009-01-06 12:44:04 +01:00
Michael Stefaniuc
57ab0cd9a6
include: sspi.h: Use the Win types as per MSDN.
...
This improves the Win64 compatibility.
2009-01-06 12:43:46 +01:00
Henri Verbeet
e4505389ad
secur32: Implement schannel DecryptMessage().
2008-12-29 11:48:42 +01:00
Henri Verbeet
3954c4ec65
secur32: Implement schannel EncryptMessage().
2008-12-29 11:48:35 +01:00
Henri Verbeet
95fd876266
secur32: Handle SECPKG_ATTR_STREAM_SIZES in schan_QueryContextAttributesW().
2008-12-29 11:48:27 +01:00
Henri Verbeet
3c114a88ca
secur32: Add stubs for schannel QueryContextAttributesA() and QueryContextAttributesW().
2008-12-29 11:48:18 +01:00
Henri Verbeet
24c5e6edbf
secur32: Dump the buffer descs in schan_InitializeSecurityContextW().
2008-12-29 11:48:12 +01:00
Henri Verbeet
7bf267624d
secur32: Try an EMPTY buffer if we can't find one of type TOKEN.
2008-12-29 11:48:06 +01:00
Alexandre Julliard
866240d4fd
secur32: Check for lack of fork() support.
2008-12-22 18:04:39 +01:00
Andrew Talbot
f397252071
secur32: Sign-compare warning fix.
2008-11-10 11:15:07 +01:00
Henri Verbeet
e00e5a37e2
secur32: Implement schannel InitializeSecurityContextW.
2008-10-20 12:23:08 +02:00
Henri Verbeet
e0e9195c81
secur32: Improve error handling for gnutls_global_init().
2008-10-20 12:22:51 +02:00
Henri Verbeet
60435135f9
secur32: Don't leak the credentials handle when pgnutls_certificate_allocate_credentials() fails.
2008-10-20 12:22:27 +02:00
Henri Verbeet
f6129d7d35
secur32: Don't make the pBuffer parameter to schan_QueryCredentialsAttributes() const.
2008-10-20 12:22:22 +02:00
Henri Verbeet
420cb678e1
secur32: Forward schannel InitializeSecurityContextA to InitializeSecurityContextW.
2008-10-07 12:10:23 +02:00
Henri Verbeet
937488c298
secur32: Improve error handling for gnutls_certificate_allocate_credentials().
2008-10-07 12:10:07 +02:00
Henri Verbeet
79d88ffe56
secur32: Use ~0UL instead of -1 for invalid schannel handles.
2008-10-07 12:09:50 +02:00
Kai Blin
ab05d35c6d
secur32: Make GetComputerObjectName(A|W) tests work on win2k3 domains.
2008-09-29 17:23:30 -05:00
Juan Lang
b95e146ccb
secur32: Fix test failure with neither gnutls nor ntlm_auth available.
2008-09-29 17:23:23 -05:00
Francois Gouget
975b582763
secur32: Fix compilation with GNU TLS 1.0.16.
2008-09-24 13:12:19 +02:00
James Hawkins
4a0b67d72a
secur32: Fix a failing test in win95.
2008-09-24 13:12:09 +02:00
Henri Verbeet
74539728b9
secur32: Allow gnutls debug output to be shown.
2008-09-23 14:03:18 +02:00
Henri Verbeet
fde1e003fa
secur32: Allocate schannel client credentials.
2008-09-23 14:03:18 +02:00
Henri Verbeet
7176dc261d
secur32: Basic implementation of schannel AcquireCredentialsHandle/FreeCredentialsHandle.
...
All this does so far is create a handle and store the credential type in there.
2008-09-23 14:03:18 +02:00
Henri Verbeet
874c9ef6c7
secur32: Require gnutls for schannel.
2008-09-23 14:03:11 +02:00
Henri Verbeet
4ac3fe7f89
secur32: Skip schannel tests if schannel is unavailable.
2008-09-23 13:47:32 +02:00
Marcus Meissner
73b16d47ad
secur32: Fixed size passed to GetComputerNameExW.
2008-09-15 11:43:37 +02:00
James Hawkins
852b367361
secur32: Fix two failing tests in win2k.
2008-09-11 11:49:45 +02:00
Reece Dunn
f14fe767b3
secur32: Fixed the logic on some of the schannel tests.
2008-09-08 14:08:35 +02:00
Reece Dunn
c718981a19
secur32: Fixed the schannel tests on Vista.
2008-09-08 14:08:30 +02:00
H. Verbeet
af96a43ce9
secur32: Reserved3 / Reserved4 are actually EncryptMessage / DecryptMessage.
2008-08-20 10:26:56 +02:00
Reece Dunn
922414b60a
secur32: Fix the schannel tests crashing on Vista.
2008-08-01 12:22:43 +02:00
Reece Dunn
e413bbeea2
secur32: Fix the ntlm tests crashing on Vista.
2008-08-01 12:22:36 +02:00
Kai Blin
84935f5ce0
secur32: Fix GetComputerObjectName tests for domain members.
...
At least for XP domain members, all EXTENDED_NAME_FORMATS apart from
NameSamCompatible return ERROR_ACCESS_DENIED. Given that the function
returns an error for all formats on non-members, just ignore
ERROR_ACCESS_DENIED as well.
2008-07-16 17:52:40 +02:00
Francois Gouget
dbaec0a101
Assorted spelling fixes.
2008-07-10 13:40:15 +02:00
Zhangrong Huang
d42a601b52
secur32: Allow loading external schannel.dll.
2008-07-03 13:08:18 +02:00
Alistair Leslie-Hughes
e53e82bf12
secur32: Fix crash under win98.
2008-06-23 19:58:10 +02:00
Dan Kegel
06abaaf218
secur32/tests: Don't free if not allocated.
2008-06-04 12:55:42 +02:00
James Hawkins
6848da72d9
secur32: Fix a few tests that fail in win2k3.
2008-05-22 11:31:06 +02:00
Andrew Talbot
140c0423f5
secur32: Memory allocation size fix.
2008-05-13 10:40:03 +02:00
Kai Blin
3da466a9f7
secur32: Fix ntlm tests on Vista.
2008-05-07 17:48:16 +02:00
Kai Blin
2e04c18cf4
secur32: Remove test for sft->Reserved8 field.
...
This seems to be set on Win98.
2008-05-05 21:02:08 +02:00
Kai Blin
bee29a6c2e
secur32: Don't call waitpid() in dispatcher.
...
As Wine ignores SIGCHLD, waitpid() works on Linux only by accident. On
FreeBSD it doesn't work.
2008-05-02 11:24:32 +02:00
Andrew Talbot
49939ed544
secur32: Remove unused variables.
2008-04-25 11:28:43 +02:00
Andrew Talbot
599f58cc7c
secur32: Assign to structs instead of using memcpy.
2008-03-17 11:41:23 +01:00
Jacek Caban
87368bb623
secur32: Improve SECPKG_ATTR_CIPHER_STRENGTHS stub.
2008-03-12 19:20:33 +01:00
Jacek Caban
d11e30e484
secur32: Fixed dynamic loading in schannel test.
2008-03-12 19:20:27 +01:00
Rob Shearman
088ae3b81c
secur32: Fix ntlm_GetCachedCredential to not call strlenW on a NULL pointer.
...
pszHost should just be set to pszTargetName if pszTargetName doesn't
contain any other information.
2008-03-10 19:12:54 +01:00
Rob Shearman
48000893f9
makefiles: Simplify the use of the IMPORTLIB variable in the DLL makefiles.
...
Only specify the root to keep platform-specifics out of the individual
DLL makefiles.
2008-03-04 20:55:01 +01:00
Rob Shearman
0d2a623150
secur32: Initialise more pointers in helper to NULL.
...
This is to avoid calling HeapFree on random pointers when
DeleteSecurityContext is called on a context that hasn't had a second
InitializeSecurityContext called on it, which would otherwise intialise
those pointers.
2008-02-04 11:10:54 +01:00
Rob Shearman
8a2125f932
secur32: Try to retrive credentials by using the credential manager to retrieve credentials saved for the target server in InitializeContextHandleW, if possible.
2008-02-04 11:10:50 +01:00
Rob Shearman
506ba701bb
secur32: If using cached credentials failed in InitializeSecurityContext then fail with SEC_E_NO_CREDENTIALS instead of carrying on with a blank password.
2008-02-04 11:10:05 +01:00
Rob Shearman
72ffc3fad9
secur32: Move the detection of NULL credentials from AcquireCredentialsHandle to InitializeSecurityContext.
...
Only use cached credentials if the credentials were NULL. Don't pass a
domain into ntlm_auth when using cached credentials as
ntlm_auth/winbindd should be able to figure that out.
2008-02-04 11:10:01 +01:00
Andrew Talbot
e4ca5c5647
secur32: Remove unneeded casts.
2008-01-21 11:38:45 +01:00
Zhangrong Huang
26bc15a811
secur32: Fix possible crash while loading SSP providers from registry.
2007-12-21 13:46:15 +01:00
Michael Stefaniuc
8537c46c93
secur32/tests: InitFunctionPtrs() needs to use the global crypt32dll variable.
2007-12-19 12:19:00 +01:00
Francois Gouget
31bcb3f6f4
secur32/tests: Dynamically load various APIs and don't link with crypt32.dll to make the test run on Windows 95.
2007-12-18 12:32:55 +01:00
Alexandre Julliard
ad9396302d
Removed some unneeded imports.
2007-12-06 21:24:24 +01:00
Michael Stefaniuc
d117938f7a
secur32: Remove the SECUR32_ALLOC() macro around HeapAlloc().
2007-12-06 12:07:12 +01:00
Kai Blin
fdfa760c85
secur32: ntlm_auth returns BH if the connection to winbindd fails.
2007-10-09 12:34:35 +02:00
Andrew Talbot
9b1082ef3b
secur32: Fix some memory leaks.
2007-10-05 10:26:20 +02:00
Kai Blin
5afd341aec
secur32: Remove hardcoded assumption that the SECBUFFER_DATA is always at index 1 for en/decrypting.
2007-10-02 11:42:10 +02:00
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