From: Owen Rudge orudge@codeweavers.com
--- dlls/secur32/lsa.c | 28 +++++++++++++++++++++++++--- dlls/secur32/tests/main.c | 2 +- 2 files changed, 26 insertions(+), 4 deletions(-)
diff --git a/dlls/secur32/lsa.c b/dlls/secur32/lsa.c index 9368d3728e4..12ddb1b4d03 100644 --- a/dlls/secur32/lsa.c +++ b/dlls/secur32/lsa.c @@ -43,6 +43,8 @@ WINE_DEFAULT_DEBUG_CHANNEL(secur32); #define LSA_MAGIC_CREDENTIALS ('L' << 24 | 'S' << 16 | 'A' << 8 | '1') #define LSA_MAGIC_CONTEXT ('L' << 24 | 'S' << 16 | 'A' << 8 | '2')
+static const WCHAR *default_authentication_package = L"Negotiate"; + struct lsa_package { ULONG package_id; @@ -157,9 +159,29 @@ NTSTATUS WINAPI LsaFreeReturnBuffer(PVOID buffer) NTSTATUS WINAPI LsaGetLogonSessionData(PLUID LogonId, PSECURITY_LOGON_SESSION_DATA* ppLogonSessionData) { - FIXME("%p %p stub\n", LogonId, ppLogonSessionData); - *ppLogonSessionData = NULL; - return STATUS_NOT_IMPLEMENTED; + SECURITY_LOGON_SESSION_DATA *data; + int authpkg_len; + WCHAR *end; + + FIXME("%p %p semi-stub\n", LogonId, ppLogonSessionData); + + authpkg_len = wcslen(default_authentication_package) * sizeof(WCHAR); + + data = calloc(1, sizeof(SECURITY_LOGON_SESSION_DATA) + authpkg_len + sizeof(WCHAR)); + + data->Size = sizeof(SECURITY_LOGON_SESSION_DATA); + data->LogonId = *LogonId; + + end = (WCHAR *)(data + 1); + wcscpy(end, default_authentication_package); + + data->AuthenticationPackage.Length = authpkg_len; + data->AuthenticationPackage.MaximumLength = authpkg_len + sizeof(WCHAR); + data->AuthenticationPackage.Buffer = end; + + *ppLogonSessionData = data; + + return STATUS_SUCCESS; }
NTSTATUS WINAPI LsaLogonUser(HANDLE LsaHandle, PLSA_STRING OriginName, diff --git a/dlls/secur32/tests/main.c b/dlls/secur32/tests/main.c index 9b148a5368f..46a62c8ea02 100644 --- a/dlls/secur32/tests/main.c +++ b/dlls/secur32/tests/main.c @@ -266,7 +266,7 @@ static void test_get_logon_session_data(void) if (!ret) goto cleanup;
status = LsaGetLogonSessionData(&ts.AuthenticationId, &data); - todo_wine ok(!status, "got %08lx\n", status); + ok(!status, "got %08lx\n", status);
if (status) goto cleanup;