/*
* Copyright Likewise Software
* All rights reserved.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or (at
* your option) any later version.
*
* This program 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 General Public License
* for more details. You should have received a copy of the GNU 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
* 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
*/
/*
* Module Name:
*
* query_member_of.c
*
* Abstract:
*
* Likewise Security and Authentication Subsystem (LSASS)
*
* Tool to query group membership of object
*
* Authors: Brian Koropoff(bkoropoff@likewise.com)
*/
#include "config.h"
#include "lsasystem.h"
#include "lsadef.h"
#include "lsaclient.h"
#include "common.h"
#include
#include
#include
#include
static struct
{
PCSTR pszTargetProvider;
LSA_FIND_FLAGS FindFlags;
LSA_OBJECT_TYPE ObjectType;
LSA_QUERY_TYPE QueryType;
DWORD dwCount;
LSA_QUERY_LIST QueryList;
BOOLEAN bShowUsage;
} gState =
{
.pszTargetProvider = NULL,
.FindFlags = 0,
.ObjectType = LSA_OBJECT_TYPE_UNDEFINED,
.QueryType = LSA_QUERY_TYPE_UNDEFINED,
.dwCount = 0,
.bShowUsage = FALSE
};
static
DWORD
ParseQueryItem(
PCSTR pszArg
)
{
DWORD dwError = 0;
unsigned long id = 0;
LSA_QUERY_LIST NewList;
switch (gState.QueryType)
{
case LSA_QUERY_TYPE_BY_UNIX_ID:
id = strtoul(pszArg, NULL, 10);
dwError = LwReallocMemory(
gState.QueryList.pdwIds,
OUT_PPVOID(&NewList.pdwIds),
sizeof(NewList.pdwIds) * (gState.dwCount + 1));
BAIL_ON_LSA_ERROR(dwError);
NewList.pdwIds[gState.dwCount] = (DWORD) id;
gState.QueryList.pdwIds = NewList.pdwIds;
gState.dwCount++;
break;
default:
dwError = LwReallocMemory(
gState.QueryList.ppszStrings,
OUT_PPVOID(&NewList.ppszStrings),
sizeof(NewList.ppszStrings) * (gState.dwCount + 1));
BAIL_ON_LSA_ERROR(dwError);
NewList.ppszStrings[gState.dwCount] = pszArg;
gState.QueryList.ppszStrings = NewList.ppszStrings;
gState.dwCount++;
break;
}
error:
return dwError;
}
static
DWORD
SetQueryType(
LSA_QUERY_TYPE type
)
{
DWORD dwError = 0;
if (gState.QueryType != LSA_QUERY_TYPE_UNDEFINED)
{
dwError = LW_ERROR_INVALID_PARAMETER;
BAIL_ON_LSA_ERROR(dwError);
}
else
{
gState.QueryType = type;
}
error:
return dwError;
}
static
VOID
ShowUsage(
PCSTR pszProgramName,
BOOLEAN bFull
)
{
printf(
"Usage: %s [ --