227 lines
5.4 KiB
C
227 lines
5.4 KiB
C
/*++
|
|
|
|
Copyright (c) 1996 Microsoft Corporation
|
|
|
|
Module Name:
|
|
|
|
dsacls.h
|
|
|
|
Abstract:
|
|
|
|
The main header file for the dsacls tool
|
|
|
|
Author:
|
|
|
|
Mac McLain (MacM) 10-02-96
|
|
|
|
Environment:
|
|
|
|
User Mode
|
|
|
|
Revision History:
|
|
|
|
|
|
--*/
|
|
|
|
#ifndef _DSACLS_H
|
|
#define _DSACLS_H
|
|
|
|
#include <caclsmsg.h>
|
|
#include "accctrl.h"
|
|
|
|
#define FLAG_ON(flags,bit) ((flags) & (bit))
|
|
//Some Error Checking Macros
|
|
#define CHECK_NULL( ptr, jump_loc ) \
|
|
if( ptr == NULL ) \
|
|
{ \
|
|
dwErr = ERROR_NOT_ENOUGH_MEMORY; \
|
|
goto jump_loc; \
|
|
}
|
|
|
|
|
|
#define CHECK_HR( hr, jump_loc ) \
|
|
if( hr != S_OK ) \
|
|
{ \
|
|
dwErr = HRESULT_CODE( hr ); \
|
|
goto jump_loc; \
|
|
} \
|
|
|
|
//
|
|
// Local prototypes
|
|
//
|
|
#if DSACL_DBG
|
|
ULONG gfDebug;
|
|
#endif
|
|
|
|
//
|
|
// Type of operation to perform
|
|
//
|
|
typedef enum _DSACLS_OP
|
|
{
|
|
REVOKE = 0,
|
|
GRANT,
|
|
DENY
|
|
} DSACLS_OP;
|
|
|
|
#define DSACLS_EXTRA_INFO_NONE 0
|
|
#define DSACLS_EXTRA_INFO_REQUIRED 1
|
|
#define DSACLS_EXTRA_INFO_OPTIONAL 2
|
|
|
|
typedef struct _DSACLS_ARG {
|
|
ULONG ResourceId;
|
|
PWSTR String;
|
|
ULONG Length;
|
|
ULONG StartIndex;
|
|
ULONG Flag;
|
|
ULONG SkipCount;
|
|
BOOLEAN SkipNonFlag;
|
|
WORD ExtraInfo;
|
|
} DSACLS_ARG, *PDSACLS_ARG;
|
|
|
|
typedef struct _DSACLS_INHERIT {
|
|
ULONG ResourceId;
|
|
PWSTR String;
|
|
ULONG Length;
|
|
BOOLEAN ValidForInput;
|
|
ULONG InheritFlag;
|
|
|
|
} DSACLS_INHERIT, *PDSACLS_INHERIT;
|
|
|
|
typedef struct _DSACLS_RIGHTS {
|
|
ULONG ResourceId;
|
|
PWSTR String;
|
|
ULONG ResourceIdEx;
|
|
PWSTR StringEx;
|
|
ULONG Length;
|
|
ULONG Right;
|
|
|
|
} DSACLS_RIGHTS, *PDSACLS_RIGHTS;
|
|
|
|
typedef struct _DSACLS_PROTECT {
|
|
ULONG ResourceId;
|
|
PWSTR String;
|
|
ULONG Length;
|
|
ULONG Right;
|
|
} DSACLS_PROTECT, *PDSACLS_PROTECT;
|
|
|
|
extern LPWSTR g_szSchemaNamingContext;
|
|
extern LPWSTR g_szConfigurationNamingContext;
|
|
extern HMODULE g_hInstance;
|
|
extern LPWSTR g_szServerName;
|
|
extern CCache *g_Cache;
|
|
|
|
//
|
|
// Prototypes from dsacls.c
|
|
//
|
|
|
|
|
|
DWORD
|
|
InitializeGlobalArrays();
|
|
|
|
DWORD
|
|
ConvertArgvToUnicode( LPWSTR * wargv,
|
|
char ** argv,
|
|
int argc ) ;
|
|
|
|
DWORD
|
|
WriteObjectSecurity( IN LPWSTR pszObject,
|
|
IN SECURITY_INFORMATION si,
|
|
IN PSECURITY_DESCRIPTOR pSD );
|
|
|
|
|
|
|
|
|
|
|
|
//
|
|
// prototypes from refresh.c
|
|
//
|
|
DWORD
|
|
SetDefaultSecurityOnObjectTree(
|
|
IN PWSTR ObjectPath,
|
|
IN BOOLEAN Propagate,
|
|
IN SECURITY_INFORMATION Protection
|
|
);
|
|
|
|
|
|
void MapGeneric( ACCESS_MASK * pMask );
|
|
void DisplayAccessRights( UINT nSpace, ACCESS_MASK m_Mask );
|
|
|
|
void ConvertAccessMaskToGenericString( ACCESS_MASK m_Mask, LPWSTR szLoadBuffer, UINT nBuffer );
|
|
DWORD BuildExplicitAccess( IN PSID pSid,
|
|
IN GUID* pGuidObject,
|
|
IN GUID* pGuidInherit,
|
|
IN ACCESS_MODE AccessMode,
|
|
IN ULONG Access,
|
|
IN ULONG Inheritance,
|
|
OUT PEXPLICIT_ACCESS pExplicitAccess );
|
|
|
|
|
|
DWORD ParseUserAndPermissons( IN LPWSTR pszArgument,
|
|
IN DSACLS_OP Op,
|
|
IN ULONG RightsListCount,
|
|
IN PDSACLS_RIGHTS RightsList,
|
|
OUT LPWSTR * ppszTrusteeName,
|
|
OUT PULONG pAccess,
|
|
OUT LPWSTR * ppszObjectId,
|
|
OUT LPWSTR * ppszInheritId );
|
|
|
|
//
|
|
// Define the rights used in the DS
|
|
//
|
|
|
|
#define RIGHT_DS_CREATE_CHILD ACTRL_DS_CREATE_CHILD
|
|
#define RIGHT_DS_DELETE_CHILD ACTRL_DS_DELETE_CHILD
|
|
#define RIGHT_DS_DELETE_SELF DELETE
|
|
#define RIGHT_DS_LIST_CONTENTS ACTRL_DS_LIST
|
|
#define RIGHT_DS_WRITE_PROPERTY_EXTENDED ACTRL_DS_SELF
|
|
#define RIGHT_DS_READ_PROPERTY ACTRL_DS_READ_PROP
|
|
#define RIGHT_DS_WRITE_PROPERTY ACTRL_DS_WRITE_PROP
|
|
#define RIGHT_DS_DELETE_TREE ACTRL_DS_DELETE_TREE
|
|
#define RIGHT_DS_LIST_OBJECT ACTRL_DS_LIST_OBJECT
|
|
#ifndef ACTRL_DS_CONTROL_ACCESS
|
|
#define ACTRL_DS_CONTROL_ACCESS ACTRL_PERM_9
|
|
#endif
|
|
#define RIGHT_DS_CONTROL_ACCESS ACTRL_DS_CONTROL_ACCESS
|
|
//
|
|
// Define the generic rights
|
|
//
|
|
|
|
// generic read
|
|
#define GENERIC_READ_MAPPING ((STANDARD_RIGHTS_READ) | \
|
|
(RIGHT_DS_LIST_CONTENTS) | \
|
|
(RIGHT_DS_READ_PROPERTY) | \
|
|
(RIGHT_DS_LIST_OBJECT))
|
|
|
|
// generic execute
|
|
#define GENERIC_EXECUTE_MAPPING ((STANDARD_RIGHTS_EXECUTE) | \
|
|
(RIGHT_DS_LIST_CONTENTS))
|
|
// generic right
|
|
#define GENERIC_WRITE_MAPPING ((STANDARD_RIGHTS_WRITE) | \
|
|
(RIGHT_DS_WRITE_PROPERTY_EXTENDED) | \
|
|
(RIGHT_DS_WRITE_PROPERTY))
|
|
// generic all
|
|
|
|
#define GENERIC_ALL_MAPPING ((STANDARD_RIGHTS_REQUIRED) | \
|
|
(RIGHT_DS_CREATE_CHILD) | \
|
|
(RIGHT_DS_DELETE_CHILD) | \
|
|
(RIGHT_DS_DELETE_TREE) | \
|
|
(RIGHT_DS_READ_PROPERTY) | \
|
|
(RIGHT_DS_WRITE_PROPERTY) | \
|
|
(RIGHT_DS_LIST_CONTENTS) | \
|
|
(RIGHT_DS_LIST_OBJECT) | \
|
|
(RIGHT_DS_CONTROL_ACCESS) | \
|
|
(RIGHT_DS_WRITE_PROPERTY_EXTENDED))
|
|
|
|
//
|
|
// Standard DS generic access rights mapping
|
|
//
|
|
|
|
#define DS_GENERIC_MAPPING {GENERIC_READ_MAPPING, \
|
|
GENERIC_WRITE_MAPPING, \
|
|
GENERIC_EXECUTE_MAPPING, \
|
|
GENERIC_ALL_MAPPING}
|
|
|
|
|
|
|
|
#endif
|