From: Dmitry Timoshkov dmitry@baikal.ru
Signed-off-by: Dmitry Timoshkov dmitry@baikal.ru --- dlls/msv1_0/main.c | 16 +++++++--------- dlls/msv1_0/unixlib.h | 7 ++++--- 2 files changed, 11 insertions(+), 12 deletions(-)
diff --git a/dlls/msv1_0/main.c b/dlls/msv1_0/main.c index 53d8f1b6415..efa87d8d70f 100644 --- a/dlls/msv1_0/main.c +++ b/dlls/msv1_0/main.c @@ -194,7 +194,8 @@ static NTSTATUS NTAPI ntlm_SpAcquireCredentialsHandle( UNICODE_STRING *principal TRACE( "%s, %#lx, %p, %p, %p, %p, %p, %p\n", debugstr_us(principal), cred_use, logon_id, auth_data, get_key_fn, get_key_arg, cred, expiry );
- switch (cred_use & ~SECPKG_CRED_RESERVED) + cred_use &= ~SECPKG_CRED_RESERVED; + switch (cred_use) { case SECPKG_CRED_INBOUND: if (!(cred = malloc( sizeof(*cred) ))) return SEC_E_INSUFFICIENT_MEMORY; @@ -209,10 +210,12 @@ static NTSTATUS NTAPI ntlm_SpAcquireCredentialsHandle( UNICODE_STRING *principal status = SEC_E_OK; break;
+ case SECPKG_CRED_BOTH: + /* fall through */ case SECPKG_CRED_OUTBOUND: if (!(cred = malloc( sizeof(*cred) ))) return SEC_E_INSUFFICIENT_MEMORY;
- cred->mode = MODE_CLIENT; + cred->mode = cred_use == SECPKG_CRED_OUTBOUND ? MODE_CLIENT : MODE_BOTH; cred->username_arg = NULL; cred->domain_arg = NULL; cred->password = NULL; @@ -272,11 +275,6 @@ static NTSTATUS NTAPI ntlm_SpAcquireCredentialsHandle( UNICODE_STRING *principal status = SEC_E_OK; break;
- case SECPKG_CRED_BOTH: - FIXME( "SECPKG_CRED_BOTH not supported\n" ); - status = SEC_E_UNSUPPORTED_FUNCTION; - break; - default: status = SEC_E_UNKNOWN_CREDENTIALS; break; @@ -610,7 +608,7 @@ static NTSTATUS NTAPI ntlm_SpInitLsaModeContext( LSA_SEC_HANDLE cred_handle, LSA int password_len = 0; struct ntlm_cred *cred = (struct ntlm_cred *)cred_handle;
- if (!cred || cred->mode != MODE_CLIENT) + if (!cred || !(cred->mode & MODE_CLIENT)) { status = SEC_E_INVALID_HANDLE; goto done; @@ -901,7 +899,7 @@ static NTSTATUS NTAPI ntlm_SpAcceptLsaModeContext( LSA_SEC_HANDLE cred_handle, L struct ntlm_cred *cred = (struct ntlm_cred *)cred_handle; char *argv[3];
- if (!cred || cred->mode != MODE_SERVER) + if (!cred || !(cred->mode & MODE_SERVER)) { status = SEC_E_INVALID_HANDLE; goto done; diff --git a/dlls/msv1_0/unixlib.h b/dlls/msv1_0/unixlib.h index 92edb8e18dc..d71b86770fb 100644 --- a/dlls/msv1_0/unixlib.h +++ b/dlls/msv1_0/unixlib.h @@ -29,9 +29,10 @@ enum sign_direction
enum mode { - MODE_INVALID = -1, - MODE_CLIENT, - MODE_SERVER, + MODE_INVALID = 0, + MODE_CLIENT = 0x0001, + MODE_SERVER = 0x0002, + MODE_BOTH = 0x0003 };
struct ntlm_cred