/* Editor Settings: expandtabs and use 4 spaces for indentation
* ex: set softtabstop=4 tabstop=8 expandtab shiftwidth=4: *
* -*- mode: c, c-basic-offset: 4 -*- */
/*
* Copyright Likewise Software 2004-2008
* All rights reserved.
*
* This library is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation; either version 2.1 of the license, or (at
* your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser
* General Public License for more details. You should have received a copy
* of the GNU Lesser General Public License along with this program. If
* not, see .
*
* LIKEWISE SOFTWARE MAKES THIS SOFTWARE AVAILABLE UNDER OTHER LICENSING
* TERMS AS WELL. IF YOU HAVE ENTERED INTO A SEPARATE LICENSE AGREEMENT
* WITH LIKEWISE SOFTWARE, THEN YOU MAY ELECT TO USE THE SOFTWARE UNDER THE
* TERMS OF THAT SOFTWARE LICENSE AGREEMENT INSTEAD OF THE TERMS OF THE GNU
* LESSER GENERAL PUBLIC LICENSE, NOTWITHSTANDING THE ABOVE NOTICE. IF YOU
* HAVE QUESTIONS, OR WISH TO REQUEST A COPY OF THE ALTERNATE LICENSING
* TERMS OFFERED BY LIKEWISE SOFTWARE, PLEASE CONTACT LIKEWISE SOFTWARE AT
* license@likewisesoftware.com
*/
#ifndef __LSANSS_H__
#define __LSANSS_H__
#include "config.h"
#ifdef HAVE_NSS_COMMON_H
#include
#include
typedef nss_status_t NSS_STATUS;
#define NSS_STATUS_SUCCESS NSS_SUCCESS
#define NSS_STATUS_NOTFOUND NSS_NOTFOUND
#define NSS_STATUS_UNAVAIL NSS_UNAVAIL
#define NSS_STATUS_TRYAGAIN NSS_TRYAGAIN
#define NSS_STATUS_RETURN NSS_RETURN
#elif HAVE_NSS_H
#include
typedef enum nss_status NSS_STATUS;
#elif defined(__LWI_HP_UX__)
#include
#include
typedef nss_status_t NSS_STATUS;
#define NSS_STATUS_SUCCESS NSS_SUCCESS
#define NSS_STATUS_NOTFOUND NSS_NOTFOUND
#define NSS_STATUS_UNAVAIL NSS_UNAVAIL
#define NSS_STATUS_TRYAGAIN NSS_TRYAGAIN
#define NSS_STATUS_RETURN NSS_RETURN
#else
enum nss_status
{
NSS_STATUS_TRYAGAIN = -2,
NSS_STATUS_UNAVAIL,
NSS_STATUS_NOTFOUND,
NSS_STATUS_SUCCESS,
NSS_STATUS_RETURN
};
typedef enum nss_status NSS_STATUS;
#endif
#define BAIL_ON_NSS_ERROR(errCode) \
do { \
if (NSS_STATUS_SUCCESS != (errCode)) \
goto error; \
} while(0);
typedef enum
{
LSA_NSS_NETGROUP_ENTRY_TRIPLE,
LSA_NSS_NETGROUP_ENTRY_GROUP,
LSA_NSS_NETGROUP_ENTRY_END
} LSA_NSS_NETGROUP_ENTRY_TYPE;
#include
#include
#include "lsasystem.h"
#include "lsa/lsa.h"
#include "lsadef.h"
#include "lsaclient.h"
#include "nss-error.h"
typedef struct __LSA_ENUMGROUPS_STATE
{
HANDLE hResume;
PVOID* ppGroupInfoList;
DWORD dwNumGroups;
DWORD dwGroupInfoLevel;
DWORD idxGroup;
BOOLEAN bTryAgain;
} LSA_ENUMGROUPS_STATE, *PLSA_ENUMGROUPS_STATE;
typedef struct __LSA_ENUMUSERS_STATE
{
HANDLE hResume;
PVOID* ppUserInfoList;
DWORD dwNumUsers;
DWORD dwUserInfoLevel;
DWORD idxUser;
BOOLEAN bTryAgain;
} LSA_ENUMUSERS_STATE, *PLSA_ENUMUSERS_STATE;
typedef struct __LSA_ENUMARTEFACTS_STATE
{
HANDLE hResume;
PVOID* ppArtefactInfoList;
DWORD dwNumArtefacts;
DWORD dwArtefactInfoLevel;
DWORD idxArtefact;
BOOLEAN bTryAgain;
} LSA_ENUMARTEFACTS_STATE, *PLSA_ENUMARTEFACTS_STATE;
VOID
LsaNssClearEnumUsersState(
HANDLE hLsaConnection,
PLSA_ENUMUSERS_STATE pState
);
DWORD
LsaNssComputeUserStringLength(
PLSA_USER_INFO_0 pUserInfo
);
DWORD
LsaNssWriteUserInfo(
DWORD dwUserInfoLevel,
PVOID pUserInfo,
passwd_ptr_t pResultUser,
char** ppszBuf,
int bufLen
);
VOID
LsaNssClearEnumGroupsState(
HANDLE hLsaConnection,
PLSA_ENUMGROUPS_STATE pState
);
DWORD
LsaNssGetNumberGroupMembers(
PSTR* ppszMembers
);
DWORD
LsaNssComputeGroupStringLength(
DWORD dwAlignBytes,
PLSA_GROUP_INFO_1 pGroupInfo
);
DWORD
LsaNssWriteGroupInfo(
DWORD dwGroupInfoLevel,
PVOID pGroupInfo,
group_ptr_t pResultGroup,
char** ppszBuf,
int bufLen
);
VOID
LsaNssClearEnumArtefactsState(
HANDLE hLsaConnection,
PLSA_ENUMARTEFACTS_STATE pState
);
NSS_STATUS
LsaNssCommonPasswdSetpwent(
PHANDLE phLsaConnection,
PLSA_ENUMUSERS_STATE pEnumUsersState
);
NSS_STATUS
LsaNssCommonPasswdGetpwent(
PHANDLE phLsaConnection,
PLSA_ENUMUSERS_STATE pEnumUsersState,
struct passwd * pResultUser,
char* pszBuf,
size_t bufLen,
int* pErrorNumber
);
NSS_STATUS
LsaNssCommonPasswdEndpwent(
PHANDLE phLsaConnection,
PLSA_ENUMUSERS_STATE pEnumUsersState
);
NSS_STATUS
LsaNssCommonPasswdGetpwnam(
PHANDLE phLsaConnection,
const char * pszLoginId,
struct passwd * pResultUser,
char * pszBuf,
size_t bufLen,
int * pErrorNumber
);
NSS_STATUS
LsaNssCommonPasswdGetpwuid(
PHANDLE phLsaConnection,
uid_t uid,
struct passwd * pResultUser,
char * pszBuf,
size_t bufLen,
int * pErrorNumber
);
NSS_STATUS
LsaNssCommonGroupSetgrent(
PHANDLE phLsaConnection,
PLSA_ENUMGROUPS_STATE pEnumGroupsState
);
NSS_STATUS
LsaNssCommonGroupGetgrent(
PHANDLE phLsaConnection,
PLSA_ENUMGROUPS_STATE pEnumGroupsState,
struct group* pResultGroup,
char * pszBuf,
size_t bufLen,
int* pErrorNumber
);
NSS_STATUS
LsaNssCommonGroupEndgrent(
PHANDLE phLsaConnection,
PLSA_ENUMGROUPS_STATE pEnumGroupsState
);
NSS_STATUS
LsaNssCommonGroupGetgrgid(
PHANDLE phLsaConnection,
gid_t gid,
struct group* pResultGroup,
char* pszBuf,
size_t bufLen,
int* pErrorNumber
);
NSS_STATUS
LsaNssCommonGroupGetgrnam(
PHANDLE phLsaConnection,
const char * pszGroupName,
struct group * pResultGroup,
char * pszBuf,
size_t bufLen,
int* pErrorNumber
);
NSS_STATUS
LsaNssCommonGroupGetGroupsByUserName(
PHANDLE phLsaConnection,
PCSTR pszUserName,
size_t resultsExistingSize,
size_t resultsCapacity,
size_t* pResultSize,
gid_t* pGidResults,
int* pErrorNumber
);
NSS_STATUS
LsaNssCommonNetgroupFindByName(
PHANDLE phLsaConnection,
PCSTR pszName,
PSTR* ppszValue
);
NSS_STATUS
LsaNssCommonNetgroupParse(
PSTR* ppszCursor,
LSA_NSS_NETGROUP_ENTRY_TYPE* pType,
PSTR* ppszHost,
PSTR* ppszUser,
PSTR* ppszDomain,
PSTR* ppszGroup
);
#endif