1
/* Editor Settings: expandtabs and use 4 spaces for indentation
2
* ex: set softtabstop=4 tabstop=8 expandtab shiftwidth=4: *
6
* Copyright Likewise Software 2004-2008
9
* This program is free software; you can redistribute it and/or modify
10
* it under the terms of the GNU General Public License as published by
11
* the Free Software Foundation; either version 2 of the License, or (at
12
* your option) any later version.
14
* This program is distributed in the hope that it will be useful, but
15
* WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
16
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
17
* for more details. You should have received a copy of the GNU General
18
* Public License along with this program. If not, see
19
* <http://www.gnu.org/licenses/>.
21
* LIKEWISE SOFTWARE MAKES THIS SOFTWARE AVAILABLE UNDER OTHER LICENSING
22
* TERMS AS WELL. IF YOU HAVE ENTERED INTO A SEPARATE LICENSE AGREEMENT
23
* WITH LIKEWISE SOFTWARE, THEN YOU MAY ELECT TO USE THE SOFTWARE UNDER THE
24
* TERMS OF THAT SOFTWARE LICENSE AGREEMENT INSTEAD OF THE TERMS OF THE GNU
25
* GENERAL PUBLIC LICENSE, NOTWITHSTANDING THE ABOVE NOTICE. IF YOU
26
* HAVE QUESTIONS, OR WISH TO REQUEST A COPY OF THE ALTERNATE LICENSING
27
* TERMS OFFERED BY LIKEWISE SOFTWARE, PLEASE CONTACT LIKEWISE SOFTWARE AT
28
* license@likewisesoftware.com
32
* Copyright (C) Likewise Software. All rights reserved.
40
* Likewise Security and Authentication Subsystem (LSASS)
42
* Active Directory Authentication Provider
44
* Authors: Krishna Ganugapati (krishnag@likewisesoftware.com)
45
* Sriram Nambakam (snambakam@likewisesoftware.com)
46
* Wei Fu (wfu@likewisesoftware.com)
47
* Brian Dunstan (bdunstan@likewisesoftware.com)
48
* Kyle Stemen (kstemen@likewisesoftware.com)
51
#include "adprovider.h"
56
LSA_INITIALIZE_PROVIDER(ad)(
57
PSTR* ppszProviderName,
58
PLSA_PROVIDER_FUNCTION_TABLE* ppFunctionTable
61
*ppFunctionTable = &gADProviderAPITable;
62
*ppszProviderName = gpszADProviderName;
71
*ppszProviderName = NULL;
72
*ppFunctionTable = NULL;
79
LSA_SHUTDOWN_PROVIDER(ad)(
81
PLSA_PROVIDER_FUNCTION_TABLE pFnTable
90
ActiveDirectoryOpenHandle(
98
PADPROVIDER_CONTEXT pContext = NULL;
100
dwError = LwAllocateMemory(
101
sizeof(ADPROVIDER_CONTEXT),
103
BAIL_ON_LSA_ERROR(dwError);
109
*phProvider = (HANDLE)pContext;
117
*phProvider = (HANDLE)NULL;
120
ADCloseHandle((HANDLE)pContext);
127
ActiveDirectoryCloseHandle(
131
PADPROVIDER_CONTEXT pContext = (PADPROVIDER_CONTEXT)hProvider;
134
LwFreeMemory(pContext);
139
ActiveDirectoryServicesDomain(
143
BOOLEAN bResult = FALSE;
149
ActiveDirectoryAuthenticateUser(
160
ActiveDirectoryAuthenticateUserEx(
162
PLSA_AUTH_USER_PARAMS pUserParams,
163
PLSA_AUTH_USER_INFO *ppUserInfo
169
ActiveDirectoryValidateUser(
181
ActiveDirectoryCheckUserInList(
194
ActiveDirectoryFindUserByName(
197
DWORD dwUserInfoLevel,
207
ActiveDirectoryFindUserById(
210
DWORD dwUserInfoLevel,
216
dwError = ADFindUserById(
221
BAIL_ON_ERROR(dwError);
223
dwError = ConvertLsaSecurityObjectToInfoLevel(
228
BAIL_ON_ERROR(dwError);
232
if (pLsaSecurityObject) {
234
LsaFreeSecurityObject(pLsaSecurityObject);
243
ActiveDirectoryBeginEnumUsers(
246
LSA_FIND_FLAGS FindFlags,
254
ActiveDirectoryEnumUsers(
258
PDWORD pdwUsersFound,
259
PVOID** pppUserInfoList
268
ActiveDirectoryEndEnumUsers(
278
ActiveDirectoryFindGroupByName(
280
IN PWSTR pszGroupName,
281
IN LSA_FIND_FLAGS FindFlags,
282
IN DWORD dwGroupInfoLevel,
283
OUT PVOID* ppGroupInfo
294
ActiveDirectoryGetExpandedGroupUsersEx(
296
IN PWSTR pszDomainName,
297
IN BOOLEAN bIsOffline,
298
IN PWSTR pszGroupSid,
299
IN BOOLEAN bIsCacheOnlyMode,
301
OUT PBOOLEAN pbIsFullyExpanded,
302
OUT size_t* psMemberUsersCount,
303
OUT PLSA_SECURITY_OBJECT** pppMemberUsers
306
DWORD dwError = LW_ERROR_SUCCESS;
311
ActiveDirectoryFindGroupById(
314
IN LSA_FIND_FLAGS FindFlags,
315
IN DWORD dwGroupInfoLevel,
316
OUT PVOID* ppGroupInfo
326
ActiveDirectoryGetUserGroupObjectMembership(
328
IN PLSA_SECURITY_OBJECT pUserInfo,
329
IN BOOLEAN bIsCacheOnlyMode,
330
OUT size_t* psNumGroupsFound,
331
OUT PLSA_SECURITY_OBJECT** pppResult
340
ActiveDirectoryGetGroupsForUser(
342
IN OPTIONAL PWSTR pszUserName,
343
IN OPTIONAL uid_t uid,
344
IN LSA_FIND_FLAGS FindFlags,
345
IN DWORD dwGroupInfoLevel,
346
IN PDWORD pdwNumGroupsFound,
347
IN PVOID** pppGroupInfoList
356
ActiveDirectoryBeginEnumGroups(
359
BOOLEAN bCheckGroupMembersOnline,
360
LSA_FIND_FLAGS FindFlags,
370
ActiveDirectoryEnumGroups(
374
PDWORD pdwGroupsFound,
375
PVOID** pppGroupInfoList
384
ActiveDirectoryEndEnumGroups(
393
ActiveDirectoryChangePassword(
406
ActiveDirectorySetPassword(
412
return LW_ERROR_NOT_HANDLED;
417
ActiveDirectoryAddUser(
419
DWORD dwUserInfoLevel,
423
return LW_ERROR_NOT_HANDLED;
427
ActiveDirectoryModifyUser(
429
PLSA_USER_MOD_INFO pUserModInfo
432
return LW_ERROR_NOT_HANDLED;
436
ActiveDirectoryDeleteUser(
441
return LW_ERROR_NOT_HANDLED;
445
ActiveDirectoryAddGroup(
447
DWORD dwGroupInfoLevel,
451
return LW_ERROR_NOT_HANDLED;
455
ActiveDirectoryModifyGroup(
457
PLSA_GROUP_MOD_INFO pGroupModInfo
460
return LW_ERROR_NOT_HANDLED;
464
ActiveDirectoryDeleteGroup(
469
return LW_ERROR_NOT_HANDLED;
473
ActiveDirectoryOpenSession(
482
ActiveDirectoryCloseSession(
493
ActiveDirectoryGetNamesBySidList(
497
PSTR** pppszDomainNames,
498
PSTR** pppszSamAccounts,
499
ADAccountType** ppTypes
509
ActiveDirectoryFindNSSArtefactByKey(
514
LSA_NIS_MAP_QUERY_FLAGS dwFlags,
515
PVOID* ppNSSArtefactInfo
524
ActiveDirectoryBeginEnumNSSArtefacts(
528
LSA_NIS_MAP_QUERY_FLAGS dwFlags,
538
ActiveDirectoryEnumNSSArtefacts(
541
DWORD dwMaxNSSArtefacts,
542
PDWORD pdwNSSArtefactsFound,
543
PVOID** pppNSSArtefactInfoList
552
ActiveDirectoryEndEnumNSSArtefacts(
564
ActiveDirectoryGetStatus(
566
PLSA_AUTH_PROVIDER_STATUS* ppProviderStatus
574
ActiveDirectoryRefreshConfiguration(
581
ActiveDirectoryProviderIoControl(
585
IN DWORD dwIoControlCode,
586
IN DWORD dwInputBufferSize,
587
IN PVOID pInputBuffer,
588
OUT DWORD* pdwOutputBufferSize,
589
OUT PVOID* ppOutputBuffer
595
ActiveDirectoryGetGroupMembershipByProvider(
598
IN DWORD dwGroupInfoLevel,
599
OUT PDWORD pdwGroupsCount,
600
OUT PVOID **pppMembershipInfo
607
dwError = ADGetGroupMembershipByProvider(
610
&ppLsaSecurityObjects,
613
BAIL_ON_ERROR(dwError);