2005-09-03 16:55:45 +00:00
/*
* Unix SMB / CIFS implementation .
* MS - RPC client library API definitions / prototypes
*
* Copyright ( C ) Chris Nicholls 2005.
*
* 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 , write to the Free Software
* Foundation , Inc . , 675 Mass Ave , Cambridge , MA 0213 9 , USA .
*/
# ifndef LIBMSRPC_H
# define LIBMSRPC_H
# include "includes.h"
# include "libsmbclient.h"
# include "libsmb_internal.h"
/*server capability levels*/
# define SRV_WIN_NT4 1
# define SRV_WIN_2K 2
# define SRV_WIN_2K_SP3 3
# define SRV_WIN_2K3 4
/**@defgroup handle Server Handle*/
/**@defgroup Library_Functions Library/Utility Functions*/
/**@defgroup lsa_defs LSA Definitions*/
/**@defgroup LSA_Functions LSA Functions*/
/**@defgroup reg_defs Registry Definitions*/
/**@defgroup Reg_Functions Registry Functions*/
/**@defgroup sam_defs SAM Definitions*/
/**@defgroup SAM_Functions SAM Functions*/
/**@defgroup svc_defs Service Control Definitions*/
/**@defgroup SCM_Functions Service Control Functions*/
/**Operation was unsuccessful*/
# define CAC_FAILURE 0
/**Operation was successful*/
# define CAC_SUCCESS 1
/**Operation was only partially successful
* an example of this is if you try to lookup a list of accounts to SIDs and not all accounts can be resolved */
# define CAC_PARTIAL_SUCCESS 2
/**@ingroup CAC_errors Use this to see if the last operation failed - useful for enumeration functions that use multiple calls*/
# define CAC_OP_FAILED(status) !NT_STATUS_IS_OK(status) && \
NT_STATUS_V ( status ) ! = NT_STATUS_V ( STATUS_SOME_UNMAPPED ) & & \
NT_STATUS_V ( status ) ! = NT_STATUS_V ( STATUS_NO_MORE_FILES ) & & \
NT_STATUS_V ( status ) ! = NT_STATUS_V ( NT_STATUS_NO_MORE_ENTRIES ) & & \
NT_STATUS_V ( status ) ! = NT_STATUS_V ( NT_STATUS_NONE_MAPPED ) & & \
NT_STATUS_V ( status ) ! = NT_STATUS_V ( NT_STATUS_GUIDS_EXHAUSTED )
/**Privilege string constants*/
# define CAC_SE_CREATE_TOKEN "SeCreateTokenPrivilege"
# define CAC_SE_ASSIGN_PRIMARY_TOKEN "SeAssignPrimaryTokenPrivilege"
# define CAC_SE_LOCK_MEMORY "SeLockMemoryPrivilege"
# define CAC_SE_INCREASE_QUOTA "SeIncreaseQuotaPrivilege"
# define CAC_SE_MACHINE_ACCOUNT "SeMachineAccountPrivilege"
# define CAC_SE_TCB "SeTcbPrivilege"
# define CAC_SE_SECURITY "SeSecurityPrivilege"
# define CAC_SE_TAKE_OWNERSHIP "SeTakeOwnershipPrivilege"
# define CAC_SE_LOAD_DRIVER "SeLoadDriverPrivilege"
# define CAC_SE_SYSTEM_PROFILE "SeSystemProfilePrivilege"
# define CAC_SE_SYSTEM_TIME "SeSystemtimePrivilege"
# define CAC_SE_PROFILE_SINGLE_PROC "SeProfileSingleProcessPrivilege"
# define CAC_SE_INCREASE_BASE_PRIORITY "SeIncreaseBasePriorityPrivilege"
# define CAC_SE_CREATE_PAGEFILE "SeCreatePagefilePrivilege"
# define CAC_SE_CREATE_PERMANENT "SeCreatePermanentPrivilege"
# define CAC_SE_BACKUP "SeBackupPrivilege"
# define CAC_SE_RESTORE "SeRestorePrivilege"
# define CAC_SE_SHUTDOWN "SeShutdownPrivilege"
# define CAC_SE_DEBUG "SeDebugPrivilege"
# define CAC_SE_AUDIT "SeAuditPrivilege"
# define CAC_SE_SYSTEM_ENV "SeSystemEnvironmentPrivilege"
# define CAC_SE_CHANGE_NOTIFY "SeChangeNotifyPrivilege"
# define CAC_SE_REMOTE_SHUTDOWN "SeRemoteShutdownPrivilege"
# define CAC_SE_UNDOCK "SeUndockPrivilege"
# define CAC_SE_SYNC_AGENT "SeSyncAgentPrivilege"
# define CAC_SE_ENABLE_DELEGATION "SeEnableDelegationPrivilege"
# define CAC_SE_MANAGE_VOLUME "SeManageVolumePrivilege"
# define CAC_SE_IMPERSONATE "SeImpersonatePrivilege"
# define CAC_SE_CREATE_GLOBAL "SeCreateGlobalPrivilege"
# define CAC_SE_PRINT_OPERATOR "SePrintOperatorPrivilege"
# define CAC_SE_NETWORK_LOGON "SeNetworkLogonRight"
# define CAC_SE_INTERACTIVE_LOGON "SeInteractiveLogonRight"
# define CAC_SE_BATCH_LOGON "SeBatchLogonRight"
# define CAC_SE_SERVICE_LOGON "SeServiceLogonRight"
# define CAC_SE_ADD_USERS "SeAddUsersPrivilege"
# define CAC_SE_DISK_OPERATOR "SeDiskOperatorPrivilege"
/**
* @ addtogroup lsa_defs
* @ {
*/
/**used to specify what data to retrieve using cac_LsaQueryTrustedDomainInformation*/
# define CAC_INFO_TRUSTED_DOMAIN_NAME 0x1
# define CAC_INFO_TRUSTED_DOMAIN_POSIX_OFFSET 0x3
# define CAC_INFO_TRUSTED_DOMAIN_PASSWORD 0x4
/**Used when requesting machine domain information*/
# define CAC_DOMAIN_INFO 0x0003
/**Used when requesting machine local information*/
# define CAC_LOCAL_INFO 0x0005
/**Stores information about a SID*/
typedef struct _CACSIDINFO {
/**The actual SID*/
DOM_SID sid ;
/**The name of the object which maps to this SID*/
char * name ;
/**The domain the SID belongs to*/
char * domain ;
} CacSidInfo ;
/* @} */
/**
* @ addtogroup reg_defs
* @ {
*/
/**Null terminated string*/
typedef char * REG_SZ_DATA ;
/**Null terminated string with windows environment variables that should be expanded*/
typedef char * REG_EXPAND_SZ_DATA ;
/**Binary data of some kind*/
typedef struct _REGBINARYDATA {
uint32 data_length ;
uint8 * data ;
} REG_BINARY_DATA ;
/**32-bit (little endian) number*/
typedef uint32 REG_DWORD_DATA ;
/**32-bit big endian number*/
typedef uint32 REG_DWORD_BE_DATA ;
/**array of strings*/
typedef struct _REGMULTISZDATA {
uint32 num_strings ;
char * * strings ;
} REG_MULTI_SZ_DATA ;
typedef union _REGVALUEDATA {
REG_SZ_DATA reg_sz ;
REG_EXPAND_SZ_DATA reg_expand_sz ;
REG_BINARY_DATA reg_binary ;
REG_DWORD_DATA reg_dword ;
REG_DWORD_BE_DATA reg_dword_be ;
REG_MULTI_SZ_DATA reg_multi_sz ;
} REG_VALUE_DATA ;
/**@}*/
/**
* @ addtogroup sam_defs
* @ {
*/
# define CAC_USER_RID 0x1
# define CAC_GROUP_RID 0x2
typedef struct _CACLOOKUPRIDSRECORD {
char * name ;
uint32 rid ;
/**If found, this will be one of:
* - CAC_USER_RID
* - CAC_GROUP_RID
*/
uint32 type ;
/*if the name or RID was looked up, then found = True*/
BOOL found ;
} CacLookupRidsRecord ;
typedef struct _CACUSERINFO {
/**Last logon time*/
time_t logon_time ;
/**Last logoff time*/
time_t logoff_time ;
/**Last kickoff time*/
time_t kickoff_time ;
/**Last password set time*/
time_t pass_last_set_time ;
/**Time password can change*/
time_t pass_can_change_time ;
/**Time password must change*/
time_t pass_must_change_time ;
/**LM user password*/
uint8 lm_password [ 8 ] ;
/**NT user password*/
uint8 nt_password [ 8 ] ;
/**User's RID*/
uint32 rid ;
/**RID of primary group*/
uint32 group_rid ;
/**User's ACB mask*/
uint32 acb_mask ;
/**Bad password count*/
uint16 bad_passwd_count ;
/**Number of logons*/
uint16 logon_count ;
/**Change password at next logon?*/
BOOL pass_must_change ;
/**Username*/
char * username ;
/**User's full name*/
char * full_name ;
/**User's home directory*/
char * home_dir ;
/**Home directory drive*/
char * home_drive ;
/**Logon script*/
char * logon_script ;
/**Path to profile*/
char * profile_path ;
/**Account description*/
char * description ;
/**Login from workstations*/
char * workstations ;
char * dial ;
/**Possible logon hours*/
LOGON_HRS * logon_hours ;
} CacUserInfo ;
typedef struct _CACGROUPINFO {
/**Group name*/
char * name ;
/**Description*/
char * description ;
/**Number of members*/
uint32 num_members ;
} CacGroupInfo , CacAliasInfo ;
/**Represents a period (duration) of time*/
typedef struct _CACTIME {
/**Number of days*/
uint32 days ;
/**Number of hours*/
uint32 hours ;
/**Number of minutes*/
uint32 minutes ;
/**number of seconds*/
uint32 seconds ;
} CacTime ;
typedef struct _CACDOMINFO {
/**The server role. Should be one of:
* ROLE_STANDALONE
* ROLE_DOMAIN_MEMBER
* ROLE_DOMAIN_BDC
* ROLE_DOMAIN_PDC
* see include / smb . h
*/
uint32 server_role ;
/**Number of domain users*/
uint32 num_users ;
/**Number of domain groups*/
uint32 num_domain_groups ;
/**Number of local groups*/
uint32 num_local_groups ;
/**Comment*/
char * comment ;
/**Domain name*/
char * domain_name ;
/**Server name*/
char * server_name ;
/**Minimum password length*/
uint16 min_pass_length ;
/**How many previous passwords to remember - ie, password cannot be the same as N previous passwords*/
uint16 pass_history ;
/**How long (from now) before passwords expire*/
CacTime expire ;
/**How long (from now) before passwords can be changed*/
CacTime min_pass_age ;
/**How long users are locked out for too many bad password attempts*/
CacTime lockout_duration ;
/**How long before lockouts are reset*/
CacTime lockout_reset ;
/**How many bad password attempts before lockout occurs*/
uint16 num_bad_attempts ;
} CacDomainInfo ;
/**@}*/ /*sam_defs*/
/**@addtogroup svc_defs
* @ {
*/
typedef struct _CACSERVICE {
/**The service name*/
char * service_name ;
/**The display name of the service*/
char * display_name ;
/**Current status of the service - see include/rpc_svcctl.h for SERVICE_STATUS definition*/
SERVICE_STATUS status ;
} CacService ;
typedef struct __CACSERVICECONFIG {
/**The service type*/
uint32 type ;
/**The start type. Should be one of:
* - SVCCTL_BOOT_START
* - SVCCTL_SYSTEM_START
* - SVCCTL_AUTO_START
* - SVCCTL_DEMAND_START
*/
uint32 start_type ;
uint32 error_control ;
/**Path to executable*/
char * exe_path ;
/***/
char * load_order_group ;
uint32 tag_id ;
/**Any dependencies for the service*/
char * dependencies ;
/**Run as...*/
char * start_name ;
/**Service display name*/
char * display_name ;
} CacServiceConfig ;
/**@}*/ /*svc_defs*/
# include "libmsrpc_internal.h"
/**
* @ addtogroup handle
* @ {
*/
/**
* Server handle used to keep track of client / server / pipe information . Use cac_NewServerHandle ( ) to allocate .
* Initiliaze as many values as possible before calling cac_Connect ( ) .
*
* @ note When allocating memory for the fields , use SMB_MALLOC ( ) ( or equivalent ) instead of talloc ( ) ( or equivalent ) -
* If memory is not allocated for a field , cac_Connect will allocate sizeof ( fstring ) bytes for it .
*
* @ note It may be wise to allocate large buffers for these fields and strcpy data into them .
*
* @ see cac_NewServerHandle ( )
* @ see cac_FreeHandle ( )
*/
typedef struct _CACSERVERHANDLE {
/** debug level
*/
int debug ;
/** netbios name used to make connections
*/
char * netbios_name ;
/** domain name used to make connections
*/
char * domain ;
/** username used to make connections
*/
char * username ;
/** user's password plain text string
*/
char * password ;
/** name or IP address of server we are currently working with
*/
char * server ;
/**stores the latest NTSTATUS code
*/
NTSTATUS status ;
/** internal. do not modify!
*/
struct CacServerHandleInternal _internal ;
} CacServerHandle ;
/*@}*/
/**internal function. do not call this function*/
SMBCSRV * cac_GetServer ( CacServerHandle * hnd ) ;
/** @addtogroup Library_Functions
* @ {
*/
/**
* Initializes the library - do not need to call this function . Open ' s smb . conf as well as initializes logging .
* @ param debug Debug level for library to use
*/
void cac_Init ( int debug ) ;
/**
* Creates an un - initialized CacServerHandle
* @ param allocate_fields If True , the function will allocate sizeof ( fstring ) bytes for all char * fields in the handle
* @ return - un - initialized server handle
* - NULL if no memory could be allocated
*/
CacServerHandle * cac_NewServerHandle ( BOOL allocate_fields ) ;
/**
* Specifies the smbc_get_auth_data_fn to use if you do not want to use the default .
* @ param hnd non - NULL server handle
* @ param auth_fn auth_data_fn to set in server handle
*/
void cac_SetAuthDataFn ( CacServerHandle * hnd , smbc_get_auth_data_fn auth_fn ) ;
/** Use your own libsmbclient context - not necessary.
* @ note You must still call cac_Connect ( ) after specifying your own libsmbclient context
* @ param hnd Initialized , but not connected CacServerHandle
* @ param ctx The libsmbclient context you would like to use .
*/
void cac_SetSmbcContext ( CacServerHandle * hnd , SMBCCTX * ctx ) ;
/** Connects to a specified server. If there is already a connection to a different server,
* it will be cleaned up before connecting to the new server .
* @ param hnd Pre - initialized CacServerHandle
* @ param srv ( Optional ) Name or IP of the server to connect to . If NULL , server from the CacServerHandle will be used .
*
* @ return CAC_FAILURE if the operation could not be completed successfully ( hnd - > status will also be set with a NTSTATUS code )
* @ return CAC_SUCCESS if the operation succeeded
*/
int cac_Connect ( CacServerHandle * hnd , const char * srv ) ;
/**
* Cleans up any data used by the CacServerHandle . If the libsmbclient context was set using cac_SetSmbcContext ( ) , it will not be free ' d .
* @ param hnd the CacServerHandle to destroy
*/
void cac_FreeHandle ( CacServerHandle * hnd ) ;
/**
* Initializes a CacTime structure based on an NTTIME structure
* If the function fails , then the CacTime structure will be zero ' d out
*/
void cac_InitCacTime ( CacTime * cactime , NTTIME nttime ) ;
/**
* Called by cac_NewServerHandle ( ) if allocate_fields = True . You can call this if you want to , allocates sizeof ( fstring ) char ' s for every char * field
* @ param hnd Uninitialized server handle
* @ return CAC_FAILURE Memory could not be allocated
* @ return CAC_SUCCESS Memory was allocated
*/
int cac_InitHandleMem ( CacServerHandle * hnd ) ;
/**
* Default smbc_get_auth_data_fn for libmsrpc . This function is called when libmsrpc needs to get more information about the
* client ( username / password , workgroup ) .
* This function provides simple prompts to the user to enter the information . This description his here so you know how to re - define this function .
* @ see cac_SetAuthDataFn ( )
* @ param pServer Name / IP of the server to connect to .
* @ param pShare Share name to connect to
* @ param pWorkgroup libmsrpc passes in the workgroup / domain name from hnd - > domain . It can be modified in the function .
* @ param maxLenWorkgroup The maximum length of a string pWogroup can hold .
* @ param pUsername libmsrpc passes in the username from hnd - > username . It can be modified in the function .
* @ param maxLenUsername The maximum length of a string pUsername can hold .
* @ param pPassword libmsrpc pass in the password from hnd - > password . It can be modified in the function .
* @ param maxLenPassword The maximum length of a string pPassword can hold .
*/
void cac_GetAuthDataFn ( const char * pServer ,
const char * pShare ,
char * pWorkgroup ,
int maxLenWorkgroup ,
char * pUsername ,
int maxLenUsername ,
char * pPassword ,
int maxLenPassword ) ;
/**@}*/
/*****************
* LSA Functions *
* * * * * * * * * * * * * * * * */
/** @addtogroup LSA_Functions
* @ {
*/
struct LsaOpenPolicy {
/**Inputs*/
struct {
/**Access Mask. Refer to Security Access Masks in include/rpc_secdes.h*/
uint32 access ;
/**Use security quality of service? (True/False)*/
BOOL security_qos ;
} in ;
/**Outputs*/
struct {
/**Handle to the open policy (needed for all other operations)*/
POLICY_HND * pol ;
} out ;
} ;
/**
* Opens a policy handle on a remote machine .
* @ param hnd fully initialized CacServerHandle for remote machine
* @ param mem_ctx Talloc context for memory allocation
* @ param op Initialized parameters
* @ return CAC_FAILURE if the policy could not be opened . hnd - > status set with appropriate NTSTATUS
* @ return CAC_SUCCESS if the policy could be opened , the policy handle can be found
*/
int cac_LsaOpenPolicy ( CacServerHandle * hnd , TALLOC_CTX * mem_ctx , struct LsaOpenPolicy * op ) ;
/**
* Closes an LSA policy handle ( Retrieved using cac_LsaOpenPolicy ) .
* If successful , the handle will be closed on the server , and memory for pol will be freed
* @ param hnd - An initialized and connected server handle
* @ param mem_ctx Talloc context for memory allocation
* @ param pol - the policy handle to close
* @ return CAC_FAILURE could not close the policy handle , hnd - > status is set to the appropriate NTSTATUS error code
* @ return CAC_SUCCESS the policy handle was closed
*/
int cac_LsaClosePolicy ( CacServerHandle * hnd , TALLOC_CTX * mem_ctx , POLICY_HND * pol ) ;
struct LsaGetNamesFromSids {
struct {
/**handle to and open LSA policy*/
POLICY_HND * pol ;
/**the number of SIDs to lookup*/
uint32 num_sids ;
/**array of SIDs to lookup*/
DOM_SID * sids ;
} in ;
struct {
/**The number of names returned (in case of CAC_PARTIAL_SUCCESS)*/
uint32 num_found ;
/**array of SID info each index is one sid */
CacSidInfo * sids ;
/**in case of partial success, an array of SIDs that could not be looked up (NULL if all sids were looked up)*/
DOM_SID * unknown ;
} out ;
} ;
/**
* Looks up the names for a list of SIDS
* @ param hnd initialized and connected server handle
* @ param mem_ctx Talloc context for memory allocation
* @ param op input and output parameters
* @ return CAC_FAILURE none of the SIDs could be looked up hnd - > status is set with appropriate NTSTATUS error code
* @ return CAC_SUCCESS all of the SIDs were translated and a list of names has been output
* @ return CAC_PARTIAL_SUCCESS not all of the SIDs were translated , as a result the number of returned names is less than the original list of SIDs
*/
int cac_LsaGetNamesFromSids ( CacServerHandle * hnd , TALLOC_CTX * mem_ctx , struct LsaGetNamesFromSids * op ) ;
struct LsaGetSidsFromNames {
struct {
/**handle to an open LSA policy*/
POLICY_HND * pol ;
/**number of SIDs to lookup*/
uint32 num_names ;
/**array of strings listing the names*/
char * * names ;
} in ;
struct {
/**The number of SIDs returned (in case of partial success*/
uint32 num_found ;
/**array of SID info for the looked up names*/
CacSidInfo * sids ;
/**in case of partial success, the names that were not looked up*/
char * * unknown ;
} out ;
} ;
/**
* Looks up the SIDs for a list of names
* @ param hnd initialized and connected server handle
* @ param mem_ctx Talloc context for memory allocation
* @ param op input and output parameters
* @ return CAC_FAILURE none of the SIDs could be looked up hnd - > status is set with appropriate NTSTATUS error code
* @ return CAC_SUCCESS all of the SIDs were translated and a list of names has been output
* @ return CAC_PARTIAL_SUCCESS not all of the SIDs were translated , as a result the number of returned names is less than the original list of SIDs
*/
int cac_LsaGetSidsFromNames ( CacServerHandle * hnd , TALLOC_CTX * mem_ctx , struct LsaGetSidsFromNames * op ) ;
struct LsaFetchSid {
struct {
/**handle to an open LSA policy*/
POLICY_HND * pol ;
/**can be CAC_LOCAL_INFO, CAC_DOMAIN_INFO, or (CAC_LOCAL_INFO | CAC_DOMAIN_INFO)*/
uint16 info_class ;
} in ;
struct {
/**the machine's local SID and domain name (NULL if not asked for)*/
CacSidInfo * local_sid ;
/**the machine's domain SID and name (NULL if not asked for)*/
CacSidInfo * domain_sid ;
} out ;
} ;
/**
* Looks up the domain or local sid of a machine with an open LSA policy handle
* @ param hnd initialized and connected server handle
* @ param mem_ctx Talloc context for memory allocation
* @ param op input and output parameters
* @ return CAC_FAILURE if the SID could not be fetched
* @ return CAC_SUCCESS if the SID was fetched
* @ return CAC_PARTIAL_SUCCESS if you asked for both local and domain sids but only one was returned
*/
int cac_LsaFetchSid ( CacServerHandle * hnd , TALLOC_CTX * mem_ctx , struct LsaFetchSid * op ) ;
struct LsaQueryInfoPolicy {
struct {
/**Open LSA policy handle on remote server*/
POLICY_HND * pol ;
} in ;
struct {
/**remote server's domain name*/
char * domain_name ;
/**remote server's dns name*/
char * dns_name ;
/**remote server's forest name*/
char * forest_name ;
/**remote server's domain guid*/
2006-09-19 17:27:17 +00:00
struct GUID * domain_guid ;
2005-09-03 16:55:45 +00:00
/**remote server's domain SID*/
DOM_SID * domain_sid ;
} out ;
} ;
/**
* Retrieves information about the LSA machine / domain
* @ param hnd initialized and connected server handle
* @ param mem_ctx Talloc context for memory allocation
* @ param op input and output parameters
* Note : for pre - Windows 2000 machines , only op - > out . SID and op - > out . domain will be set . @ see cac_LsaFetchSid
* @ return - CAC_FAILURE if the operation was not successful . hnd - > status will be set with an accurate NT_STATUS code
* @ return CAC_SUCCESS the operation was successful .
*/
int cac_LsaQueryInfoPolicy ( CacServerHandle * hnd , TALLOC_CTX * mem_ctx , struct LsaQueryInfoPolicy * op ) ;
struct LsaEnumSids {
struct {
/**Open LSA Policy handle*/
POLICY_HND * pol ;
/**The prefered maximum number of SIDs returned per call*/
uint32 pref_max_sids ;
} in ;
struct {
/**used to keep track of how many sids have been retrieved over multiple calls
* should be set to zero via ZERO_STRUCT ( ) befrore the first call . Use the same struct LsaEnumSids for multiple calls */
uint32 resume_idx ;
/**The number of sids returned this call*/
uint32 num_sids ;
/**Array of sids returned*/
DOM_SID * sids ;
} out ;
} ;
/**
* Enumerates the SIDs in the LSA . Can be enumerated in blocks by calling the function multiple times .
* Example : while ( cac_LsaEnumSids ( hnd , mem_ctx , op ) { . . . }
* @ param hnd - An initialized and connected server handle
* @ param mem_ctx Talloc context for memory allocation
* @ param op Initialized parameters
* @ return CAC_FAILURE there was an error during operations OR there are no more results
* @ return CAC_SUCCESS the operation completed and results were returned
*/
int cac_LsaEnumSids ( CacServerHandle * hnd , TALLOC_CTX * mem_ctx , struct LsaEnumSids * op ) ;
struct LsaEnumAccountRights {
struct {
/**Open LSA Policy handle*/
POLICY_HND * pol ;
/**(Optional) SID of the account - must supply either sid or name*/
DOM_SID * sid ;
/**(Optional) name of the account - must supply either sid or name*/
char * name ;
} in ;
struct {
/**Count of rights for this account*/
uint32 num_privs ;
/**array of privilege names*/
char * * priv_names ;
} out ;
} ;
/**
* Enumerates rights assigned to a given account . Takes a SID instead of account handle as input
* @ param hnd Initialized and connected server handle
* @ param mem_ctx Context for memory allocation
* @ param op Initialized Parameters
* @ return CAC_FAILURE the rights could not be retrieved . hnd - > status is set with NT_STATUS code
* @ return CAC_SUCCESS the operation was successful .
*/
int cac_LsaEnumAccountRights ( CacServerHandle * hnd , TALLOC_CTX * mem_ctx , struct LsaEnumAccountRights * op ) ;
struct LsaEnumTrustedDomains {
struct {
/**Open LSA policy handle*/
POLICY_HND * pol ;
} in ;
struct {
/**used to keep track of how many domains have been retrieved over multiple calls
* should be set to zero via ZERO_STRUCT ( ) before the first call . Use the same struct LsaEnumSids for multiple calls */
uint32 resume_idx ;
/**The number of domains returned by the remote server this call*/
uint32 num_domains ;
/**array of trusted domain names returned by the remote server*/
char * * domain_names ;
/**array of trusted domain sids returned by the remote server*/
DOM_SID * domain_sids ;
} out ;
} ;
/**
* Enumerates the trusted domains in the LSA .
* @ param hnd - An initialized and connected server handle
* @ param mem_ctx Talloc context for memory allocation
* @ param op - initialized parameters
* @ return CAC_FAILURE there was an error during operations OR there are no more results
* @ return CAC_SUCCESS the operation completed and results were returned
*/
int cac_LsaEnumTrustedDomains ( CacServerHandle * hnd , TALLOC_CTX * mem_ctx , struct LsaEnumTrustedDomains * op ) ;
struct LsaOpenTrustedDomain {
struct {
/**an open LSA policy handle*/
POLICY_HND * pol ;
/**SID of the trusted domain to open*/
DOM_SID * domain_sid ;
/**Desired access on the open domain*/
uint32 access ;
} in ;
struct {
/**A handle to the policy that is opened*/
POLICY_HND * domain_pol ;
} out ;
} ;
/**
* Opens a trusted domain by SID .
* @ param hnd An initialized and connected server handle
* @ param mem_ctx Talloc context for memory allocation
* @ param op initialized I / O parameters
* @ return CAC_FAILURE a handle to the domain could not be opened . hnd - > status is set with approriate NT_STATUS code
* @ return CAC_SUCCESS the domain was opened successfully
*/
int cac_LsaOpenTrustedDomain ( CacServerHandle * hnd , TALLOC_CTX * mem_ctx , struct LsaOpenTrustedDomain * op ) ;
struct LsaQueryTrustedDomainInfo {
struct {
/**Open LSA policy handle*/
POLICY_HND * pol ;
/**Info class of returned data*/
uint16 info_class ;
/**(Optional)SID of trusted domain to query (must specify either SID or name of trusted domain)*/
DOM_SID * domain_sid ;
/**(Optional)Name of trusted domain to query (must specify either SID or name of trusted domain)*/
char * domain_name ;
} in ;
struct {
/**information about the trusted domain*/
LSA_TRUSTED_DOMAIN_INFO * info ;
} out ;
} ;
/**
* Retrieves information a trusted domain .
* @ param hnd An initialized and connected server handle
* @ param mem_ctx Talloc context for memory allocation
* @ param op initialized I / O parameters
* @ return CAC_FAILURE a handle to the domain could not be opened . hnd - > status is set with approriate NT_STATUS code
* @ return CAC_SUCCESS the domain was opened successfully
*/
int cac_LsaQueryTrustedDomainInfo ( CacServerHandle * hnd , TALLOC_CTX * mem_ctx , struct LsaQueryTrustedDomainInfo * op ) ;
struct LsaEnumPrivileges {
struct {
/**An open LSA policy handle*/
POLICY_HND * pol ;
/**The _preferred_ maxinum number of privileges returned per call*/
uint32 pref_max_privs ;
} in ;
struct {
/**Used to keep track of how many privileges have been retrieved over multiple calls. Do not modify this value between calls*/
uint32 resume_idx ;
/**The number of privileges returned this call*/
uint32 num_privs ;
/**Array of privilege names*/
char * * priv_names ;
/**Array of high bits for privilege LUID*/
uint32 * high_bits ;
/**Array of low bits for privilege LUID*/
uint32 * low_bits ;
} out ;
} ;
/**
* Enumerates the Privileges supported by the LSA . Can be enumerated in blocks by calling the function multiple times .
* Example : while ( cac_LsaEnumPrivileges ( hnd , mem_ctx , op ) { . . . }
* @ param hnd An initialized and connected server handle
* @ param mem_ctx Talloc context for memory allocation
* @ param op Initialized parameters
* @ return CAC_FAILURE there was an error during operations OR there are no more results
* @ return CAC_SUCCESS the operation completed and results were returned
* @ see CAC_OP_FAILED ( )
*/
int cac_LsaEnumPrivileges ( CacServerHandle * hnd , TALLOC_CTX * mem_ctx , struct LsaEnumPrivileges * op ) ;
struct LsaOpenAccount {
struct {
/**An open LSA policy handle*/
POLICY_HND * pol ;
/**(Optional) account SID - must supply either sid or name*/
DOM_SID * sid ;
/**(Optional) account name - must supply either sid or name*/
char * name ;
/**desired access for the handle*/
uint32 access ;
} in ;
struct {
/**A handle to the opened user*/
POLICY_HND * user ;
} out ;
} ;
/**
* Opens a handle to an account in the LSA
* @ param hnd Initialized and connected server handle
* @ param mem_ctx Context for memory allocation
* @ param op Initialized Parameters
* @ return CAC_FAILURE the account could not be opened . hnd - > status has appropriate NT_STATUS code
* @ return CAC_SUCCESS the account was opened
*/
int cac_LsaOpenAccount ( CacServerHandle * hnd , TALLOC_CTX * mem_ctx , struct LsaOpenAccount * op ) ;
struct LsaAddPrivileges {
struct {
/**An open LSA policy handle*/
POLICY_HND * pol ;
/**(Optional) The user's SID (must specify at least sid or name)*/
DOM_SID * sid ;
/**(Optional) The user's name (must specify at least sid or name)*/
char * name ;
/**The privilege names of the privileges to add for the account*/
char * * priv_names ;
/**The number of privileges in the priv_names array*/
uint32 num_privs ;
} in ;
} ;
/**
* Adds Privileges an account .
* @ param hnd Initialized and connected server handle
* @ param mem_ctx Context for memory allocation
* @ param op Initialized Parameters
* @ return CAC_FAILURE the privileges could not be set . hnd - > status has appropriate NT_STATUS code
* @ return CAC_SUCCESS the privileges were set .
*/
int cac_LsaAddPrivileges ( CacServerHandle * hnd , TALLOC_CTX * mem_ctx , struct LsaAddPrivileges * op ) ;
struct LsaRemovePrivileges {
struct {
/**An open handle to the LSA*/
POLICY_HND * pol ;
/**(Optional) The account SID (must specify at least sid or name)*/
DOM_SID * sid ;
/**(Optional) The account name (must specify at least sid or name)*/
char * name ;
/**The privilege names of the privileges to remove from the account*/
char * * priv_names ;
/**The number of privileges in the priv_names array*/
uint32 num_privs ;
} in ;
} ;
/**
* Removes a _specific_ set of privileges from an account
* @ param hnd Initialized and connected server handle
* @ param mem_ctx Context for memory allocation
* @ param op Initialized Parameters
* @ return CAC_FAILURE the privileges could not be removed . hnd - > status is set with NT_STATUS code
* @ return CAC_SUCCESS the privileges were removed
*/
int cac_LsaRemovePrivileges ( CacServerHandle * hnd , TALLOC_CTX * mem_ctx , struct LsaRemovePrivileges * op ) ;
struct LsaClearPrivileges {
struct {
/**An open handle to the LSA*/
POLICY_HND * pol ;
/**(Optional) The user's SID (must specify at least sid or name)*/
DOM_SID * sid ;
/**(Optional) The user's name (must specify at least sid or name)*/
char * name ;
} in ;
} ;
/**
* Removes ALL privileges from an account
* @ param hnd Initialized and connected server handle
* @ param mem_ctx Context for memory allocation
* @ param op Initialized Parameters
* @ return CAC_FAILURE the operation was not successful , hnd - > status set with NT_STATUS code
* @ return CAC_SUCCESS the opeartion was successful .
*/
int cac_LsaClearPrivileges ( CacServerHandle * hnd , TALLOC_CTX * mem_ctx , struct LsaClearPrivileges * op ) ;
/**
* Sets an accounts priviliges . Removes all privileges and then adds specified privileges .
* @ param hnd Initialized and connected server handle
* @ param mem_ctx Context for memory allocation
* @ param op Initialized Parameters
* @ return CAC_FAILURE The operation could not complete successfully
* @ return CAC_SUCCESS The operation completed successfully
*/
int cac_LsaSetPrivileges ( CacServerHandle * hnd , TALLOC_CTX * mem_ctx , struct LsaAddPrivileges * op ) ;
struct LsaGetSecurityObject {
struct {
/**Open LSA policy handle*/
POLICY_HND * pol ;
} in ;
struct {
/**Returned security descriptor information*/
SEC_DESC_BUF * sec ;
} out ;
} ;
/**
* Retrieves Security Descriptor information about the LSA
* @ param hnd Initialized and connected server handle
* @ param mem_ctx Context for memory allocation
* @ param op Initialized Parameters
* @ return CAC_FAILURE The operation could not complete successfully
* @ return CAC_SUCCESS The operation completed successfully
*/
int cac_LsaGetSecurityObject ( CacServerHandle * hnd , TALLOC_CTX * mem_ctx , struct LsaGetSecurityObject * op ) ;
/**@}*/ /*LSA_Functions*/
/**********************
* Registry Functions *
* * * * * * * * * * * * * * * * * * * * */
/**@addtogroup Reg_Functions
* @ {
*/
struct RegConnect {
struct {
/** must be one of :
* HKEY_CLASSES_ROOT ,
* HKEY_LOCAL_MACHINE ,
* HKEY_USERS ,
* HKEY_PERFORMANCE_DATA ,
*/
int root ;
/**desired access on the root key
* combination of :
* REG_KEY_READ ,
* REG_KEY_WRITE ,
* REG_KEY_EXECUTE ,
* REG_KEY_ALL ,
* found in include / rpc_secdes . h */
uint32 access ;
} in ;
struct {
POLICY_HND * key ;
} out ;
} ;
/**
* Opens a handle to the registry on the server
* @ param hnd Initialized and connected server handle
* @ param mem_ctx Context for memory allocation
* @ param op Initialized Parameters
* @ return CAC_FAILURE The operation could not complete successfully . hnd - > status is set with appropriate NTSTATUS code
* @ return CAC_SUCCESS The operation completed successfully
*/
int cac_RegConnect ( CacServerHandle * hnd , TALLOC_CTX * mem_ctx , struct RegConnect * op ) ;
/**
* Closes an open registry handle
* @ param hnd Initialized and connected server handle
* @ param mem_ctx Context for memory allocation
* @ param key The Key / Handle to close
* @ return CAC_FAILURE The operation could not complete successfully . hnd - > status is set with appropriate NTSTATUS code
* @ return CAC_SUCCESS The operation completed successfully
*/
int cac_RegClose ( CacServerHandle * hnd , TALLOC_CTX * mem_ctx , POLICY_HND * key ) ;
struct RegOpenKey {
struct {
/**(Optional)parent key.
* If this is NULL , then cac_RegOpenKey ( ) will attempt to connect to the registry , name MUST start with something like : < br >
* HKEY_LOCAL_MACHINE \ or an abbreviation like HKCR \
*
* supported root names :
* - HKEY_LOCAL_MACHINE \ or HKLM \
* - HKEY_CLASSES_ROOT \ or HKCR \
* - HKEY_USERS \ or HKU \
* - HKEY_PERFORMANCE_DATA or HKPD \
*/
POLICY_HND * parent_key ;
/**name/path of key*/
char * name ;
/**desired access on this key*/
uint32 access ;
} in ;
struct {
POLICY_HND * key ;
} out ;
} ;
/**
* Opens a registry key
* @ param hnd Initialized and connected server handle
* @ param mem_ctx Context for memory allocation
* @ param op Initialized parameters
* @ return CAC_FAILURE The operation could not complete successfully . hnd - > status is set with appropriate NTSTATUS code
* @ return CAC_SUCCESS The operation completed successfully
*/
int cac_RegOpenKey ( CacServerHandle * hnd , TALLOC_CTX * mem_ctx , struct RegOpenKey * op ) ;
struct RegEnumKeys {
struct {
/**enumerate subkeys of this key*/
POLICY_HND * key ;
/**maximum number of keys to enumerate each call*/
uint32 max_keys ;
} in ;
struct {
/**keeps track of the index to resume enumerating*/
uint32 resume_idx ;
/**the number of keys returned this call*/
uint32 num_keys ;
/**array of key names*/
char * * key_names ;
/**class names of the keys*/
char * * class_names ;
/**last modification time of the key*/
time_t * mod_times ;
} out ;
} ;
/**
* Enumerates Subkeys of a given key . Can be run in a loop . Example : while ( cac_RegEnumKeys ( hnd , mem_ctx , op ) ) { . . . }
* @ param hnd Initialized and connected server handle
* @ param mem_ctx Context for memory allocation
* @ param op Initialized Parameters
* @ see CAC_OP_FAILED ( )
* @ return CAC_FAILURE The operation could not complete successfully . hnd - > status is set with appropriate NTSTATUS code
* @ return CAC_SUCCESS The operation completed successfully
*/
int cac_RegEnumKeys ( CacServerHandle * hnd , TALLOC_CTX * mem_ctx , struct RegEnumKeys * op ) ;
struct RegCreateKey {
struct {
/**create a subkey of parent_key*/
POLICY_HND * parent_key ;
/**name of the key to create*/
char * key_name ;
/**class of the key*/
char * class_name ;
/**Access mask to open the key with. See REG_KEY_* in include/rpc_secdes.h*/
uint32 access ;
} in ;
struct {
/**Open handle to the key*/
POLICY_HND * key ;
} out ;
} ;
/**
* Creates a registry key , if the key already exists , it will be opened __Creating keys is not currently working__ .
* @ param hnd Initialized and connected server handle
* @ param mem_ctx Context for memory allocation
* @ param op Initialized Parmeters
* @ return CAC_FAILURE The operation could not complete successfully . hnd - > status is set with appropriate NTSTATUS code
* @ return CAC_SUCCESS The operation completed successfully
*/
int cac_RegCreateKey ( CacServerHandle * hnd , TALLOC_CTX * mem_ctx , struct RegCreateKey * op ) ;
struct RegDeleteKey {
struct {
/**handle to open registry key*/
POLICY_HND * parent_key ;
/**name of the key to delete*/
char * name ;
/**delete recursively. WARNING: this might not always work as planned*/
BOOL recursive ;
} in ;
} ;
/**
* Deletes a subkey of an open key . Note : if you run this with op - > in . recursive = = True , and the operation fails , it may leave the key in an inconsistent state .
* @ param hnd Initialized and connected server handle
* @ param mem_ctx Context for memory allocation
* @ param op Initialized parameters
* @ return CAC_FAILURE The operation could not complete successfully . hnd - > status is set with appropriate NTSTATUS code
* @ return CAC_SUCCESS The operation completed successfully
*/
int cac_RegDeleteKey ( CacServerHandle * hnd , TALLOC_CTX * mem_ctx , struct RegDeleteKey * op ) ;
struct RegDeleteValue {
struct {
/**handle to open registry key*/
POLICY_HND * parent_key ;
/**name of the value to delete*/
char * name ;
} in ;
} ;
/**
* Deletes a registry value .
* @ param hnd Initialized and connected server handle
* @ param mem_ctx Context for memory allocation
* @ param op Initialized Parameters
* @ return CAC_FAILURE The operation could not complete successfully . hnd - > status is set with appropriate NTSTATUS code
* @ return CAC_SUCCESS The operation completed successfully
*/
int cac_RegDeleteValue ( CacServerHandle * hnd , TALLOC_CTX * mem_ctx , struct RegDeleteValue * op ) ;
struct RegQueryKeyInfo {
struct {
/**Open handle to the key to query*/
POLICY_HND * key ;
} in ;
struct {
/**name of the key class*/
char * class_name ;
/**number of subkeys of the key*/
uint32 num_subkeys ;
/**length (in characters) of the longest subkey name*/
uint32 longest_subkey ;
/**length (in characters) of the longest class name*/
uint32 longest_class ;
/**number of values in this key*/
uint32 num_values ;
/**length (in characters) of the longest value name*/
uint32 longest_value_name ;
/**length (in bytes) of the biggest value data*/
uint32 longest_value_data ;
/**size (in bytes) of the security descriptor*/
uint32 security_desc_size ;
/**time of the last write*/
time_t last_write_time ;
} out ;
} ;
/**
* Retrieves information about an open key
* @ param hnd Initialized and connected server handle
* @ param mem_ctx Context for memory allocation
* @ param op Initialized parameters
* @ return CAC_FAILURE The operation could not complete successfully . hnd - > status is set with appropriate NTSTATUS code
* @ return CAC_SUCCESS The operation completed successfully
*/
int cac_RegQueryKeyInfo ( CacServerHandle * hnd , TALLOC_CTX * mem_ctx , struct RegQueryKeyInfo * op ) ;
struct RegSaveKey {
struct {
/**Open key to be saved*/
POLICY_HND * key ;
/**The path (on the remote computer) to save the file to*/
char * filename ;
} in ;
} ;
/**
* Saves a key to a file on the remote machine __Not currently working__ .
* @ param hnd Initialized and connected server handle
* @ param mem_ctx Context for memory allocation
* @ param op Initialized parameters
* @ return CAC_FAILURE The operation could not complete successfully . hnd - > status is set with appropriate NTSTATUS code
* @ return CAC_SUCCESS The operation completed successfully
*/
int cac_RegSaveKey ( CacServerHandle * hnd , TALLOC_CTX * mem_ctx , struct RegSaveKey * op ) ;
struct RegQueryValue {
struct {
/**handle to open registry key*/
POLICY_HND * key ;
/**name of the value to query*/
char * val_name ;
} in ;
struct {
/**Value type.
* One of :
* - REG_DWORD ( equivalent to REG_DWORD_LE )
* - REG_DWORD_BE
* - REG_SZ
* - REG_EXPAND_SZ
* - REG_MULTI_SZ
* - REG_BINARY
*/
uint32 type ;
/**The value*/
REG_VALUE_DATA * data ;
} out ;
} ;
/**
* Retrieves a value ( type and data ) _not currently working_ .
* @ param hnd Initialized and connected server handle
* @ param mem_ctx Context for memory allocation
* @ param op Initialized parameters
* @ return CAC_FAILURE The operation could not complete successfully . hnd - > status is set with appropriate NTSTATUS code
* @ return CAC_SUCCESS The operation completed successfully
*/
int cac_RegQueryValue ( CacServerHandle * hnd , TALLOC_CTX * mem_ctx , struct RegQueryValue * op ) ;
struct RegEnumValues {
struct {
/**handle to open key*/
POLICY_HND * key ;
/**max number of values returned per call*/
uint32 max_values ;
} in ;
struct {
/**keeps track of the index to resume from - used over multiple calls*/
uint32 resume_idx ;
/**the number of values that were returned this call*/
uint32 num_values ;
/**Array of value types. A type can be one of:
* - REG_DWORD ( equivalent to REG_DWORD_LE )
* - REG_DWORD_BE
* - REG_SZ
* - REG_EXPAND_SZ
* - REG_MULTI_SZ
* - REG_BINARY
*/
uint32 * types ;
/**array of strings storing the names of the values*/
char * * value_names ;
/**array of pointers to the value data returned*/
REG_VALUE_DATA * * values ;
} out ;
} ;
/**
* Enumerates a number of Registry values in an open registry key .
* Can be run in a loop . Example : while ( cac_RegEnumValues ( hnd , mem_ctx , op ) ) { . . . }
* @ param hnd Initialized and connected server handle
* @ param mem_ctx Context for memory allocation
* @ param op Initialized Parameters
* @ see CAC_OP_FAILED ( )
* @ return CAC_FAILURE The operation could not complete successfully . hnd - > status is set with appropriate NTSTATUS code
* @ return CAC_SUCCESS The operation completed successfully
*/
int cac_RegEnumValues ( CacServerHandle * hnd , TALLOC_CTX * mem_ctx , struct RegEnumValues * op ) ;
struct RegSetValue {
struct {
/**Handle to open registry key*/
POLICY_HND * key ;
/**Name of the value*/
char * val_name ;
/**Value type.
* One of :
* - REG_DWORD ( equivalent to REG_DWORD_LE )
* - REG_DWORD_BE
* - REG_SZ
* - REG_EXPAND_SZ
* - REG_MULTI_SZ
* - REG_BINARY
*/
uint32 type ;
/**the value*/
REG_VALUE_DATA value ;
} in ;
} ;
/**
* Sets or creates value ( type and data ) .
* @ param hnd Initialized and connected server handle
* @ param mem_ctx Context for memory allocation
* @ param op Initialized parameters
* @ return CAC_FAILURE The operation could not complete successfully . hnd - > status is set with appropriate NTSTATUS code
* @ return CAC_SUCCESS The operation completed successfully
*/
int cac_RegSetValue ( CacServerHandle * hnd , TALLOC_CTX * mem_ctx , struct RegSetValue * op ) ;
struct RegGetVersion {
struct {
/**open registry key*/
POLICY_HND * key ;
} in ;
struct {
/**version number*/
uint32 version ;
} out ;
} ;
/**
* Retrieves the registry version number
* @ param hnd Initialized and connected server handle
* @ param mem_ctx Context for memory allocation
* @ param op Initialized parameters
* @ return CAC_FAILURE The operation could not complete successfully . hnd - > status is set with appropriate NTSTATUS code
* @ return CAC_SUCCESS The operation completed successfully
*/
int cac_RegGetVersion ( CacServerHandle * hnd , TALLOC_CTX * mem_ctx , struct RegGetVersion * op ) ;
struct RegGetKeySecurity {
struct {
/**Handle to key to query*/
POLICY_HND * key ;
/**Info that you want. Should be a combination of (1 or more or'd):
* - OWNER_SECURITY_INFORMATION
* - GROUP_SECURITY_INFORMATION
* - DACL_SECURITY_INFORMATION
* - SACL_SECURITY_INFORMATION
* - UNPROTECTED_SACL_SECURITY_INFORMATION
* - UNPROTECTED_DACL_SECURITY_INFORMATION
* - PROTECTED_SACL_SECURITY_INFORMATION
* - PROTECTED_DACL_SECURITY_INFORMATION
*
* or use :
* - ALL_SECURITY_INFORMATION
*
* all definitions from include / rpc_secdes . h
*/
uint32 info_type ;
} in ;
struct {
/**size of the data returned*/
uint32 size ;
/**Security descriptor*/
SEC_DESC * descriptor ;
} out ;
} ;
/**
* Retrieves a key security descriptor .
* @ param hnd Initialized and connected server handle
* @ param mem_ctx Context for memory allocation
* @ param op Initialized parameters
* @ return CAC_FAILURE The operation could not complete successfully . hnd - > status is set with appropriate NTSTATUS code
* @ return CAC_SUCCESS The operation completed successfully
*/
int cac_RegGetKeySecurity ( CacServerHandle * hnd , TALLOC_CTX * mem_ctx , struct RegGetKeySecurity * op ) ;
struct RegSetKeySecurity {
struct {
/**Handle to key to query*/
POLICY_HND * key ;
/**Info that you want. Should be a combination of (1 or more or'd):
* - OWNER_SECURITY_INFORMATION
* - GROUP_SECURITY_INFORMATION
* - DACL_SECURITY_INFORMATION
* - SACL_SECURITY_INFORMATION
* - UNPROTECTED_SACL_SECURITY_INFORMATION
* - UNPROTECTED_DACL_SECURITY_INFORMATION
* - PROTECTED_SACL_SECURITY_INFORMATION
* - PROTECTED_DACL_SECURITY_INFORMATION
*
* or use :
* - ALL_SECURITY_INFORMATION
*
* all definitions from include / rpc_secdes . h
*/
uint32 info_type ;
/**size of the descriptor*/
size_t size ;
/**Security descriptor*/
SEC_DESC * descriptor ;
} in ;
} ;
/**
* Sets the key security descriptor .
* @ param hnd Initialized and connected server handle
* @ param mem_ctx Context for memory allocation
* @ param op Initialized parameters
* @ return CAC_FAILURE The operation could not complete successfully . hnd - > status is set with appropriate NTSTATUS code
* @ return CAC_SUCCESS The operation completed successfully
*/
int cac_RegSetKeySecurity ( CacServerHandle * hnd , TALLOC_CTX * mem_ctx , struct RegSetKeySecurity * op ) ;
/**@}*/ /*Reg_Functions*/
struct Shutdown {
struct {
/**the message to display (can be NULL)*/
char * message ;
/**timeout in seconds*/
uint32 timeout ;
/**False = shutdown, True = reboot*/
BOOL reboot ;
/**force the*/
BOOL force ;
/*FIXME: make this useful*/
uint32 reason ;
} in ;
} ;
/**
* Shutdown the server _not currently working_ .
* @ param hnd Initialized and connected server handle
* @ param mem_ctx Context for memory allocation
* @ param op Initialized parameters
* @ return CAC_FAILURE The operation could not complete successfully . hnd - > status is set with appropriate NTSTATUS code
* @ return CAC_SUCCESS The operation completed successfully
*/
int cac_Shutdown ( CacServerHandle * hnd , TALLOC_CTX * mem_ctx , struct Shutdown * op ) ;
/**
* Attempt to abort initiated shutdown on the server _not currently working_ .
* @ param hnd Initialized and connected server handle
* @ param mem_ctx Context for memory allocation
* @ return CAC_FAILURE The operation could not complete successfully . hnd - > status is set with appropriate NTSTATUS code
* @ return CAC_SUCCESS The operation completed successfully
*/
int cac_AbortShutdown ( CacServerHandle * hnd , TALLOC_CTX * mem_ctx ) ;
/*****************
* SAM Functions *
* * * * * * * * * * * * * * * * */
/**@addtogroup SAM_Functions
* @ {
*/
struct SamConnect {
struct {
/**Access mask to open with
* see generic access masks in include / smb . h */
uint32 access ;
} in ;
struct {
POLICY_HND * sam ;
} out ;
} ;
/**
* Connects to the SAM . This can be skipped by just calling cac_SamOpenDomain ( )
* @ param hnd Initialized and connected server handle
* @ param mem_ctx Context for memory allocation
* @ param op Initialized parameters
* @ return CAC_FAILURE The operation could not complete successfully . hnd - > status is set with appropriate NTSTATUS code
* @ return CAC_SUCCESS The operation completed successfully
*/
int cac_SamConnect ( CacServerHandle * hnd , TALLOC_CTX * mem_ctx , struct SamConnect * op ) ;
/**
* Closes any ( SAM , domain , user , group , etc . ) SAM handle .
* @ param hnd Initialized and connected server handle
* @ param mem_ctx Context for memory allocation
* @ param sam Handle to close
* @ return CAC_FAILURE The operation could not complete successfully . hnd - > status is set with appropriate NTSTATUS code
* @ return CAC_SUCCESS The operation completed successfully
*/
int cac_SamClose ( CacServerHandle * hnd , TALLOC_CTX * mem_ctx , POLICY_HND * sam ) ;
struct SamOpenDomain {
struct {
/**The desired access. See generic access masks - include/smb.h*/
uint32 access ;
/**(Optional) An open handle to the SAM. If it is NULL, the function will connect to the SAM with the access mask above*/
POLICY_HND * sam ;
/**(Optional) The SID of the domain to open.
* If this this is NULL , the function will attempt to open the domain specified in hnd - > domain */
DOM_SID * sid ;
} in ;
struct {
/**handle to the open domain*/
POLICY_HND * dom_hnd ;
/**Handle to the open SAM*/
POLICY_HND * sam ;
} out ;
} ;
/**
* Opens a handle to a domain . This must be called before any other SAM functions
* @ param hnd Initialized and connected server handle
* @ param mem_ctx Context for memory allocation
* @ param op Initialized parameters
* @ return CAC_FAILURE The operation could not complete successfully . hnd - > status is set with appropriate NTSTATUS code
* @ return CAC_SUCCESS The operation completed successfully
*/
int cac_SamOpenDomain ( CacServerHandle * hnd , TALLOC_CTX * mem_ctx , struct SamOpenDomain * op ) ;
struct SamCreateUser {
struct {
/**Open domain handle*/
POLICY_HND * dom_hnd ;
/**Username*/
char * name ;
/**See Allowable account control bits in include/smb.h*/
uint32 acb_mask ;
} in ;
struct {
/**handle to the user*/
POLICY_HND * user_hnd ;
/**rid of the user*/
uint32 rid ;
} out ;
} ;
/**
* Creates a new domain user , if the account already exists it will _not_ be opened and hnd - > status will be NT_STATUS_USER_EXISTS
* @ param hnd Initialized and connected server handle
* @ param mem_ctx Context for memory allocation
* @ param op Initialized parameters
* @ return CAC_FAILURE The operation could not complete successfully . hnd - > status is set with appropriate NTSTATUS code
* @ return CAC_SUCCESS The operation completed successfully
*/
int cac_SamCreateUser ( CacServerHandle * hnd , TALLOC_CTX * mem_ctx , struct SamCreateUser * op ) ;
struct SamOpenUser {
struct {
/**Handle to open SAM connection*/
POLICY_HND * dom_hnd ;
/**desired access - see generic access masks in include/smb.h*/
uint32 access ;
/**RID of the user*/
uint32 rid ;
/**(Optional) name of the user - must supply either RID or user name*/
char * name ;
} in ;
struct {
/**Handle to the user*/
POLICY_HND * user_hnd ;
} out ;
} ;
/**
* Opens a domain user .
* @ param hnd Initialized and connected server handle
* @ param mem_ctx Context for memory allocation
* @ param op Initialized parameters
* @ return CAC_FAILURE The operation could not complete successfully . hnd - > status is set with appropriate NTSTATUS code
* @ return CAC_SUCCESS The operation completed successfully
*/
int cac_SamOpenUser ( CacServerHandle * hnd , TALLOC_CTX * mem_ctx , struct SamOpenUser * op ) ;
/**
* Deletes a domain user .
* @ param hnd Initialized and connected server handle
* @ param mem_ctx Context for memory allocation
* @ param user_hnd Open handle to the user
* @ return CAC_FAILURE The operation could not complete successfully . hnd - > status is set with appropriate NTSTATUS code
* @ return CAC_SUCCESS The operation completed successfully
*/
int cac_SamDeleteUser ( CacServerHandle * hnd , TALLOC_CTX * mem_ctx , POLICY_HND * user_hnd ) ;
struct SamEnumUsers {
struct {
/**Open handle to a domain*/
POLICY_HND * dom_hnd ;
/**Enumerate users with specific ACB. If 0, all users will be enumerated*/
2006-02-27 10:32:45 +00:00
uint32 acb_mask ;
2005-09-03 16:55:45 +00:00
} in ;
struct {
/**where to resume from. Used over multiple calls*/
uint32 resume_idx ;
/**the number of users returned this call*/
uint32 num_users ;
/**Array storing the rids of the returned users*/
uint32 * rids ;
/**Array storing the names of all the users returned*/
char * * names ;
BOOL done ;
} out ;
} ;
/**
* Enumerates domain users . Can be used as a loop condition . Example : while ( cac_SamEnumUsers ( hnd , mem_ctx , op ) ) { . . . }
* @ param hnd Initialized and connected server handle
* @ param mem_ctx Context for memory allocation
* @ param op Initialized parameters
* @ return CAC_FAILURE The operation could not complete successfully . hnd - > status is set with appropriate NTSTATUS code
* @ return CAC_SUCCESS The operation completed successfully
*/
int cac_SamEnumUsers ( CacServerHandle * hnd , TALLOC_CTX * mem_ctx , struct SamEnumUsers * op ) ;
struct SamGetNamesFromRids {
struct {
/**An open handle to the domain SAM from cac_SamOpenDomain()*/
POLICY_HND * dom_hnd ;
/**Number of RIDs to resolve*/
uint32 num_rids ;
/**Array of RIDs to resolve*/
uint32 * rids ;
} in ;
struct {
/**the number of names returned - if this is 0, the map is NULL*/
uint32 num_names ;
/**array contiaing the Names and RIDs*/
CacLookupRidsRecord * map ;
} out ;
} ;
/**
* Returns a list of names which map to a list of RIDs .
* @ param hnd Initialized and connected server handle
* @ param mem_ctx Context for memory allocation
* @ param op Initialized parameters
* @ return CAC_FAILURE The operation could not complete successfully . hnd - > status is set with appropriate NTSTATUS code
* @ return CAC_SUCCESS The operation completed successfully
*/
int cac_SamGetNamesFromRids ( CacServerHandle * hnd , TALLOC_CTX * mem_ctx , struct SamGetNamesFromRids * op ) ;
struct SamGetRidsFromNames {
struct {
/**An open handle to the domain SAM from cac_SamOpenDomain()*/
POLICY_HND * dom_hnd ;
/**Number of names to resolve*/
uint32 num_names ;
/**Array of names to resolve*/
char * * names ;
} in ;
struct {
/**the number of names returned - if this is 0, then map is NULL*/
uint32 num_rids ;
/**array contiaing the Names and RIDs*/
CacLookupRidsRecord * map ;
} out ;
} ;
/**
* Returns a list of RIDs which map to a list of names .
* @ param hnd Initialized and connected server handle
* @ param mem_ctx Context for memory allocation
* @ param op Initialized parameters
* @ return CAC_FAILURE The operation could not complete successfully . hnd - > status is set with appropriate NTSTATUS code
* @ return CAC_SUCCESS The operation completed successfully
*/
int cac_SamGetRidsFromNames ( CacServerHandle * hnd , TALLOC_CTX * mem_ctx , struct SamGetRidsFromNames * op ) ;
struct SamGetGroupsForUser {
struct {
/**An open handle to the user*/
POLICY_HND * user_hnd ;
} in ;
struct {
/**The number of groups the user is a member of*/
uint32 num_groups ;
/**The RIDs of the groups*/
uint32 * rids ;
/**The attributes of the groups*/
uint32 * attributes ;
} out ;
} ;
/**
* Retrieves a list of groups that a user is a member of .
* @ param hnd Initialized and connected server handle
* @ param mem_ctx Context for memory allocation
* @ param op Initialized parameters
* @ return CAC_FAILURE The operation could not complete successfully . hnd - > status is set with appropriate NTSTATUS code
* @ return CAC_SUCCESS The operation completed successfully
*/
int cac_SamGetGroupsForUser ( CacServerHandle * hnd , TALLOC_CTX * mem_ctx , struct SamGetGroupsForUser * op ) ;
struct SamOpenGroup {
struct {
/**Open handle to the domain SAM*/
POLICY_HND * dom_hnd ;
/**Desired access to open the group with. See Generic access masks in include/smb.h*/
uint32 access ;
/**rid of the group*/
uint32 rid ;
} in ;
struct {
/**Handle to the group*/
POLICY_HND * group_hnd ;
} out ;
} ;
/**
* Opens a domain group .
* @ param hnd Initialized and connected server handle
* @ param mem_ctx Context for memory allocation
* @ param op Initialized parameters
* @ return CAC_FAILURE The operation could not complete successfully . hnd - > status is set with appropriate NTSTATUS code
* @ return CAC_SUCCESS The operation completed successfully
*/
int cac_SamOpenGroup ( CacServerHandle * hnd , TALLOC_CTX * mem_ctx , struct SamOpenGroup * op ) ;
struct SamCreateGroup {
struct {
/**Open handle to the domain SAM*/
POLICY_HND * dom_hnd ;
/**Desired access to open the group with. See Generic access masks in include/smb.h*/
uint32 access ;
/**The name of the group*/
char * name ;
} in ;
struct {
/**Handle to the group*/
POLICY_HND * group_hnd ;
} out ;
} ;
/**
* Creates a group . If the group already exists it will not be opened .
* @ param hnd Initialized and connected server handle
* @ param mem_ctx Context for memory allocation
* @ param op Initialized parameters
* @ return CAC_FAILURE The operation could not complete successfully . hnd - > status is set with appropriate NTSTATUS code
* @ return CAC_SUCCESS The operation completed successfully
*/
int cac_SamCreateGroup ( CacServerHandle * hnd , TALLOC_CTX * mem_ctx , struct SamCreateGroup * op ) ;
/**
* Deletes a domain group .
* @ param hnd Initialized and connected server handle
* @ param mem_ctx Context for memory allocation
* @ param group_hnd Open handle to the group .
* @ return CAC_FAILURE The operation could not complete successfully . hnd - > status is set with appropriate NTSTATUS code
* @ return CAC_SUCCESS The operation completed successfully
*/
int cac_SamDeleteGroup ( CacServerHandle * hnd , TALLOC_CTX * mem_ctx , POLICY_HND * group_hnd ) ;
struct SamGetGroupMembers {
struct {
/**Open handle to a group*/
POLICY_HND * group_hnd ;
} in ;
struct {
/**The number of members in the group*/
uint32 num_members ;
/**An array storing the RIDs of the users*/
uint32 * rids ;
/**The attributes*/
uint32 * attributes ;
} out ;
} ;
/**
* Retrives a list of users in a group .
* @ param hnd Initialized and connected server handle
* @ param mem_ctx Context for memory allocation
* @ param op Initialized parameters
* @ return CAC_FAILURE The operation could not complete successfully . hnd - > status is set with appropriate NTSTATUS code
* @ return CAC_SUCCESS The operation completed successfully
*/
int cac_SamGetGroupMembers ( CacServerHandle * hnd , TALLOC_CTX * mem_ctx , struct SamGetGroupMembers * op ) ;
struct SamAddGroupMember {
struct {
/**Open handle to a group*/
POLICY_HND * group_hnd ;
/**RID of new member*/
uint32 rid ;
} in ;
} ;
/**
* Adds a user to a group .
* @ param hnd Initialized and connected server handle
* @ param mem_ctx Context for memory allocation
* @ param op Initialized parameters
* @ return CAC_FAILURE The operation could not complete successfully . hnd - > status is set with appropriate NTSTATUS code
* @ return CAC_SUCCESS The operation completed successfully
*/
int cac_SamAddGroupMember ( CacServerHandle * hnd , TALLOC_CTX * mem_ctx , struct SamAddGroupMember * op ) ;
struct SamRemoveGroupMember {
struct {
/**Open handle to a group*/
POLICY_HND * group_hnd ;
/**RID of member to remove*/
uint32 rid ;
} in ;
} ;
/**
* Removes a user from a group .
* @ param hnd Initialized and connected server handle
* @ param mem_ctx Context for memory allocation
* @ param op Initialized parameters
* @ return CAC_FAILURE The operation could not complete successfully . hnd - > status is set with appropriate NTSTATUS code
* @ return CAC_SUCCESS The operation completed successfully
*/
int cac_SamRemoveGroupMember ( CacServerHandle * hnd , TALLOC_CTX * mem_ctx , struct SamRemoveGroupMember * op ) ;
/**
* Removes all the members of a group - warning : if this function fails is is possible that some but not all members were removed
* @ param hnd Initialized and connected server handle
* @ param mem_ctx Context for memory allocation
* @ param group_hnd Open handle to the group to clear
* @ return CAC_FAILURE The operation could not complete successfully . hnd - > status is set with appropriate NTSTATUS code
* @ return CAC_SUCCESS The operation completed successfully
*/
int cac_SamClearGroupMembers ( CacServerHandle * hnd , TALLOC_CTX * mem_ctx , POLICY_HND * group_hnd ) ;
struct SamSetGroupMembers {
struct {
/**Open handle to the group*/
POLICY_HND * group_hnd ;
/**Number of members in the group - if this is 0, all members of the group will be removed*/
uint32 num_members ;
/**The RIDs of the users to add*/
uint32 * rids ;
} in ;
} ;
/**
* Clears the members of a group and adds a list of members to the group
* @ param hnd Initialized and connected server handle
* @ param mem_ctx Context for memory allocation
* @ param op Initialized parameters
* @ return CAC_FAILURE The operation could not complete successfully . hnd - > status is set with appropriate NTSTATUS code
* @ return CAC_SUCCESS The operation completed successfully
*/
int cac_SamSetGroupMembers ( CacServerHandle * hnd , TALLOC_CTX * mem_ctx , struct SamSetGroupMembers * op ) ;
struct SamEnumGroups {
struct {
/**Open handle to a domain*/
POLICY_HND * dom_hnd ;
} in ;
struct {
/**Where to resume from _do not_ modify this value. Used over multiple calls.*/
uint32 resume_idx ;
/**the number of users returned this call*/
uint32 num_groups ;
/**Array storing the rids of the returned groups*/
uint32 * rids ;
/**Array storing the names of all the groups returned*/
char * * names ;
/**Array storing the descriptions of all the groups returned*/
char * * descriptions ;
BOOL done ;
} out ;
} ;
/**
* Enumerates domain groups . Can be used as a loop condition . Example : while ( cac_SamEnumGroups ( hnd , mem_ctx , op ) ) { . . . }
* @ param hnd Initialized and connected server handle
* @ param mem_ctx Context for memory allocation
* @ param op Initialized parameters
* @ return CAC_FAILURE The operation could not complete successfully . hnd - > status is set with appropriate NTSTATUS code
* @ return CAC_SUCCESS The operation completed successfully
*/
int cac_SamEnumGroups ( CacServerHandle * hnd , TALLOC_CTX * mem_ctx , struct SamEnumGroups * op ) ;
struct SamEnumAliases {
struct {
/**Open handle to a domain*/
POLICY_HND * dom_hnd ;
} in ;
struct {
/**where to resume from. Used over multiple calls*/
uint32 resume_idx ;
/**the number of users returned this call*/
uint32 num_aliases ;
/**Array storing the rids of the returned groups*/
uint32 * rids ;
/**Array storing the names of all the groups returned*/
char * * names ;
/**Array storing the descriptions of all the groups returned*/
char * * descriptions ;
BOOL done ;
} out ;
} ;
/**
* Enumerates domain aliases . Can be used as a loop condition . Example : while ( cac_SamEnumAliases ( hnd , mem_ctx , op ) ) { . . . }
* @ param hnd Initialized and connected server handle
* @ param mem_ctx Context for memory allocation
* @ param op Initialized parameters
* @ return CAC_FAILURE The operation could not complete successfully . hnd - > status is set with appropriate NTSTATUS code
* @ return CAC_SUCCESS The operation completed successfully
*/
int cac_SamEnumAliases ( CacServerHandle * hnd , TALLOC_CTX * mem_ctx , struct SamEnumAliases * op ) ;
struct SamCreateAlias {
struct {
/**Open handle to the domain SAM*/
POLICY_HND * dom_hnd ;
/**The name of the alias*/
char * name ;
} in ;
struct {
/**Handle to the group*/
POLICY_HND * alias_hnd ;
} out ;
} ;
/**
* Creates an alias . If the alias already exists it will not be opened .
* @ param hnd Initialized and connected server handle
* @ param mem_ctx Context for memory allocation
* @ param op Initialized parameters
* @ return CAC_FAILURE The operation could not complete successfully . hnd - > status is set with appropriate NTSTATUS code
* @ return CAC_SUCCESS The operation completed successfully
*/
int cac_SamCreateAlias ( CacServerHandle * hnd , TALLOC_CTX * mem_ctx , struct SamCreateAlias * op ) ;
struct SamOpenAlias {
struct {
/**Open handle to the domain SAM*/
POLICY_HND * dom_hnd ;
/**Desired access to open the group with. See Generic access masks in include/smb.h*/
uint32 access ;
/**rid of the alias*/
uint32 rid ;
} in ;
struct {
/**Handle to the alias*/
POLICY_HND * alias_hnd ;
} out ;
} ;
/**
* Opens a handle to an alias .
* @ param hnd Initialized and connected server handle
* @ param mem_ctx Context for memory allocation
* @ param op Initialized parameters
* @ return CAC_FAILURE The operation could not complete successfully . hnd - > status is set with appropriate NTSTATUS code
* @ return CAC_SUCCESS The operation completed successfully
*/
int cac_SamOpenAlias ( CacServerHandle * hnd , TALLOC_CTX * mem_ctx , struct SamOpenAlias * op ) ;
/**
* Deletes an alias .
* @ param hnd Initialized and connected server handle
* @ param mem_ctx Context for memory allocation
* @ param alias_hnd Open handle to the alias
* @ return CAC_FAILURE The operation could not complete successfully . hnd - > status is set with appropriate NTSTATUS code
* @ return CAC_SUCCESS The operation completed successfully
*/
int cac_SamDeleteAlias ( CacServerHandle * hnd , TALLOC_CTX * mem_ctx , POLICY_HND * alias_hnd ) ;
struct SamAddAliasMember {
struct {
/**Open handle to a alias*/
POLICY_HND * alias_hnd ;
/**SID of new member*/
DOM_SID * sid ;
} in ;
} ;
/**
* Adds an account to an alias .
* @ param hnd Initialized and connected server handle
* @ param mem_ctx Context for memory allocation
* @ param op Initialized parameters
* @ return CAC_FAILURE The operation could not complete successfully . hnd - > status is set with appropriate NTSTATUS code
* @ return CAC_SUCCESS The operation completed successfully
*/
int cac_SamAddAliasMember ( CacServerHandle * hnd , TALLOC_CTX * mem_ctx , struct SamAddAliasMember * op ) ;
struct SamRemoveAliasMember {
struct {
/**Open handle to the alias*/
POLICY_HND * alias_hnd ;
/**The SID of the member*/
DOM_SID * sid ;
} in ;
} ;
/**
* Removes an account from an alias .
* @ param hnd Initialized and connected server handle
* @ param mem_ctx Context for memory allocation
* @ param op Initialized parameters
* @ return CAC_FAILURE The operation could not complete successfully . hnd - > status is set with appropriate NTSTATUS code
* @ return CAC_SUCCESS The operation completed successfully
*/
int cac_SamRemoveAliasMember ( CacServerHandle * hnd , TALLOC_CTX * mem_ctx , struct SamRemoveAliasMember * op ) ;
struct SamGetAliasMembers {
struct {
/**Open handle to the alias*/
POLICY_HND * alias_hnd ;
} in ;
struct {
/**The number of members*/
uint32 num_members ;
/**An array storing the SIDs of the accounts*/
DOM_SID * sids ;
} out ;
} ;
/**
* Retrieves a list of all accounts in an alias .
* @ param hnd Initialized and connected server handle
* @ param mem_ctx Context for memory allocation
* @ param op Initialized parameters
* @ return CAC_FAILURE The operation could not complete successfully . hnd - > status is set with appropriate NTSTATUS code
* @ return CAC_SUCCESS The operation completed successfully
*/
int cac_SamGetAliasMembers ( CacServerHandle * hnd , TALLOC_CTX * mem_ctx , struct SamGetAliasMembers * op ) ;
/**
* Removes all the members of an alias - warning : if this function fails is is possible that some but not all members were removed
* @ param hnd Initialized and connected server handle
* @ param mem_ctx Context for memory allocation
* @ param alias_hnd Handle to the alias to clear
* @ return CAC_FAILURE The operation could not complete successfully . hnd - > status is set with appropriate NTSTATUS code
* @ return CAC_SUCCESS The operation completed successfully
*/
int cac_SamClearAliasMembers ( CacServerHandle * hnd , TALLOC_CTX * mem_ctx , POLICY_HND * alias_hnd ) ;
struct SamSetAliasMembers {
struct {
/**Open handle to the group*/
POLICY_HND * alias_hnd ;
/**Number of members in the group - if this is 0, all members of the group will be removed*/
uint32 num_members ;
/**The SIDs of the accounts to add*/
DOM_SID * sids ;
} in ;
} ;
/**
* Clears the members of an alias and adds a list of members to the alias
* @ param hnd Initialized and connected server handle
* @ param mem_ctx Context for memory allocation
* @ param op Initialized parameters
* @ return CAC_FAILURE The operation could not complete successfully . hnd - > status is set with appropriate NTSTATUS code
* @ return CAC_SUCCESS The operation completed successfully
*/
int cac_SamSetAliasMembers ( CacServerHandle * hnd , TALLOC_CTX * mem_ctx , struct SamSetAliasMembers * op ) ;
struct SamUserChangePasswd {
struct {
/**The username*/
char * username ;
/**The current password*/
char * password ;
/**The new password*/
char * new_password ;
} in ;
} ;
/**Used by a user to change their password*/
int cac_SamUserChangePasswd ( CacServerHandle * hnd , TALLOC_CTX * mem_ctx , struct SamUserChangePasswd * op ) ;
/**
* Enables a user
* @ param hnd Initialized and connected server handle
* @ param mem_ctx Context for memory allocation
* @ param user_hnd Open handle to the user to enable
* @ return CAC_FAILURE The operation could not complete successfully . hnd - > status is set with appropriate NTSTATUS code
* @ return CAC_SUCCESS The operation completed successfully
*/
int cac_SamEnableUser ( CacServerHandle * hnd , TALLOC_CTX * mem_ctx , POLICY_HND * user_hnd ) ;
/**
* Disables a user
* @ param hnd Initialized and connected server handle
* @ param mem_ctx Context for memory allocation
* @ param user_hnd Open handle to the user to disables
* @ return CAC_FAILURE The operation could not complete successfully . hnd - > status is set with appropriate NTSTATUS code
* @ return CAC_SUCCESS The operation completed successfully
*/
int cac_SamDisableUser ( CacServerHandle * hnd , TALLOC_CTX * mem_ctx , POLICY_HND * user_hnd ) ;
struct SamSetPassword {
struct {
/**Open handle to a user*/
POLICY_HND * user_hnd ;
/**The new password*/
char * password ;
} in ;
} ;
/**
* Sets a user ' s password
* @ param hnd Initialized and connected server handle
* @ param mem_ctx Context for memory allocation
* @ param op Initialized parameters
* @ return CAC_FAILURE The operation could not complete successfully . hnd - > status is set with appropriate NTSTATUS code
* @ return CAC_SUCCESS The operation completed successfully
*/
int cac_SamSetPassword ( CacServerHandle * hnd , TALLOC_CTX * mem_ctx , struct SamSetPassword * op ) ;
struct SamGetUserInfo {
struct {
/**Open Handle to a user*/
POLICY_HND * user_hnd ;
} in ;
struct {
CacUserInfo * info ;
} out ;
} ;
/**
* Retrieves user information using a CacUserInfo structure . If you would like to use a SAM_USERINFO_CTR directly , use cac_SamGetUserInfoCtr ( )
* @ param hnd Initialized and connected server handle
* @ param mem_ctx Context for memory allocation
* @ param op Initialized parameters
* @ see cac_SamGetUserInfoCtr ( )
* @ return CAC_FAILURE The operation could not complete successfully . hnd - > status is set with appropriate NTSTATUS code
* @ return CAC_SUCCESS The operation completed successfully
*/
int cac_SamGetUserInfo ( CacServerHandle * hnd , TALLOC_CTX * mem_ctx , struct SamGetUserInfo * op ) ;
struct SamSetUserInfo {
struct {
/**Open handle to a user*/
POLICY_HND * user_hnd ;
/**Structure containing the data you would like to set*/
CacUserInfo * info ;
} in ;
} ;
/**
* Sets the user info using a CacUserInfo structure . If you would like to use a SAM_USERINFO_CTR directly use cac_SamSetUserInfoCtr ( ) .
* @ note All fields in the CacUserInfo structure will be set . Best to call cac_GetUserInfo ( ) modify fields that you want , and then call cac_SetUserInfo ( ) .
* @ note When calling this , you _must_ set the user ' s password .
* @ param hnd Initialized and connected server handle
* @ param mem_ctx Context for memory allocation
* @ param op Initialized parameters
* @ see cac_SamSetUserInfoCtr ( )
* @ return CAC_FAILURE The operation could not complete successfully . hnd - > status is set with appropriate NTSTATUS code
* @ return CAC_SUCCESS The operation completed successfully
*/
int cac_SamSetUserInfo ( CacServerHandle * hnd , TALLOC_CTX * mem_ctx , struct SamSetUserInfo * op ) ;
struct SamGetUserInfoCtr {
struct {
/**Open handle to a user*/
POLICY_HND * user_hnd ;
/**What USER_INFO structure you want. See include/rpc_samr.h*/
uint16 info_class ;
} in ;
struct {
/**returned user info*/
SAM_USERINFO_CTR * ctr ;
} out ;
} ;
/**
* Retrieves user information using a SAM_USERINFO_CTR structure . If you don ' t want to use this structure , user SamGetUserInfo ( )
* @ param hnd Initialized and connected server handle
* @ param mem_ctx Context for memory allocation
* @ param op Initialized parameters
* @ see cac_SamGetUserInfo ( )
* @ return CAC_FAILURE The operation could not complete successfully . hnd - > status is set with appropriate NTSTATUS code
* @ return CAC_SUCCESS The operation completed successfully
*/
int cac_SamGetUserInfoCtr ( CacServerHandle * hnd , TALLOC_CTX * mem_ctx , struct SamGetUserInfoCtr * op ) ;
struct SamSetUserInfoCtr {
struct {
/**Open handle to a user*/
POLICY_HND * user_hnd ;
/**user info - make sure ctr->switch_value is set properly*/
SAM_USERINFO_CTR * ctr ;
} in ;
} ;
/**
* Sets the user info using a SAM_USERINFO_CTR structure . If you don ' t want to use this structure , use cac_SamSetUserInfo ( )
* @ param hnd Initialized and connected server handle
* @ param mem_ctx Context for memory allocation
* @ param op Initialized parameters
* @ see cac_SamSetUserInfo ( )
* @ return CAC_FAILURE The operation could not complete successfully . hnd - > status is set with appropriate NTSTATUS code
* @ return CAC_SUCCESS The operation completed successfully
*/
int cac_SamSetUserInfoCtr ( CacServerHandle * hnd , TALLOC_CTX * mem_ctx , struct SamSetUserInfoCtr * op ) ;
struct SamRenameUser {
struct {
/**Open handle to user*/
POLICY_HND * user_hnd ;
/**New user name*/
char * new_name ;
} in ;
} ;
/**
* Changes the name of a user .
* @ param hnd Initialized and connected server handle
* @ param mem_ctx Context for memory allocation
* @ param op Initialized parameters
* @ return CAC_FAILURE The operation could not complete successfully . hnd - > status is set with appropriate NTSTATUS code
* @ return CAC_SUCCESS The operation completed successfully
*/
int cac_SamRenameUser ( CacServerHandle * hnd , TALLOC_CTX * mem_ctx , struct SamRenameUser * op ) ;
struct SamGetGroupInfo {
struct {
/**Open handle to a group*/
POLICY_HND * group_hnd ;
} in ;
struct {
/**Returned info about the group*/
CacGroupInfo * info ;
} out ;
} ;
/**
* Retrieves information about a group .
* @ param hnd Initialized and connected server handle
* @ param mem_ctx Context for memory allocation
* @ param op Initialized parameters
* @ return CAC_FAILURE The operation could not complete successfully . hnd - > status is set with appropriate NTSTATUS code
* @ return CAC_SUCCESS The operation completed successfully
*/
int cac_SamGetGroupInfo ( CacServerHandle * hnd , TALLOC_CTX * mem_ctx , struct SamGetGroupInfo * op ) ;
struct SamSetGroupInfo {
struct {
/**Open handle to a group*/
POLICY_HND * group_hnd ;
/**group info*/
CacGroupInfo * info ;
} in ;
} ;
/**
* Sets information about a group .
* @ param hnd Initialized and connected server handle
* @ param mem_ctx Context for memory allocation
* @ param op Initialized parameters
* @ return CAC_FAILURE The operation could not complete successfully . hnd - > status is set with appropriate NTSTATUS code
* @ return CAC_SUCCESS The operation completed successfully
*/
int cac_SamSetGroupInfo ( CacServerHandle * hnd , TALLOC_CTX * mem_ctx , struct SamSetGroupInfo * op ) ;
struct SamRenameGroup {
struct {
/**Open handle to a group*/
POLICY_HND * group_hnd ;
/**New name*/
char * new_name ;
} in ;
} ;
/**
* Changes the name of a group
* @ param hnd Initialized and connected server handle
* @ param mem_ctx Context for memory allocation
* @ param op Initialized parameters
* @ return CAC_FAILURE The operation could not complete successfully . hnd - > status is set with appropriate NTSTATUS code
* @ return CAC_SUCCESS The operation completed successfully
*/
int cac_SamRenameGroup ( CacServerHandle * hnd , TALLOC_CTX * mem_ctx , struct SamRenameGroup * op ) ;
struct SamGetAliasInfo {
struct {
/**Open handle to an alias*/
POLICY_HND * alias_hnd ;
} in ;
struct {
/**Returned alias info*/
CacAliasInfo * info ;
} out ;
} ;
/**
* Retrieves information about an alias .
* @ param hnd Initialized and connected server handle
* @ param mem_ctx Context for memory allocation
* @ param op Initialized parameters
* @ return CAC_FAILURE The operation could not complete successfully . hnd - > status is set with appropriate NTSTATUS code
* @ return CAC_SUCCESS The operation completed successfully
*/
int cac_SamGetAliasInfo ( CacServerHandle * hnd , TALLOC_CTX * mem_ctx , struct SamGetAliasInfo * op ) ;
struct SamSetAliasInfo {
struct {
/**Open handle to an alias*/
POLICY_HND * alias_hnd ;
/**Returned alias info*/
CacAliasInfo * info ;
} in ;
} ;
/**
* Sets information about an alias .
* @ param hnd Initialized and connected server handle
* @ param mem_ctx Context for memory allocation
* @ param op Initialized parameters
* @ return CAC_FAILURE The operation could not complete successfully . hnd - > status is set with appropriate NTSTATUS code
* @ return CAC_SUCCESS The operation completed successfully
*/
int cac_SamSetAliasInfo ( CacServerHandle * hnd , TALLOC_CTX * mem_ctx , struct SamSetAliasInfo * op ) ;
struct SamGetDomainInfo {
struct {
/**Open handle to the domain SAM*/
POLICY_HND * dom_hnd ;
} in ;
struct {
/**Returned domain info*/
CacDomainInfo * info ;
} out ;
} ;
/**
* Gets domain information in the form of a CacDomainInfo structure .
* @ param hnd Initialized and connected server handle
* @ param mem_ctx Context for memory allocation
* @ param op Initialized parameters
* @ see SamGetDomainInfoCtr ( )
* @ return CAC_FAILURE - the operation was not successful hnd - > status is set appropriately
* @ return CAC_SUCCESS - the operation was successful
* @ return CAC_PARTIAL_SUCCESS - This function makes 3 rpc calls , if one or two fail and the rest succeed ,
* not all fields in the CacDomainInfo structure will be filled
*/
int cac_SamGetDomainInfo ( CacServerHandle * hnd , TALLOC_CTX * mem_ctx , struct SamGetDomainInfo * op ) ;
struct SamGetDomainInfoCtr {
struct {
/**Open handle to domain*/
POLICY_HND * dom_hnd ;
/**What info level you want*/
uint16 info_class ;
} in ;
struct {
SAM_UNK_CTR * info ;
} out ;
} ;
/**
* Gets domain information in the form of a SAM_UNK_CTR structure .
* @ param hnd Initialized and connected server handle
* @ param mem_ctx Context for memory allocation
* @ param op Initialized parameters
* @ see SamGetDomainInfo ( )
* @ return CAC_FAILURE - the operation was not successful hnd - > status is set appropriately
* @ return CAC_SUCCESS - the operation was successful
*/
int cac_SamGetDomainInfoCtr ( CacServerHandle * hnd , TALLOC_CTX * mem_ctx , struct SamGetDomainInfoCtr * op ) ;
struct SamGetDisplayInfo {
struct {
/**Open handle to domain*/
POLICY_HND * dom_hnd ;
/**What type of data*/
uint16 info_class ;
/**(Optional)If 0, max_entries and max_size will be filled in by the function*/
uint32 max_entries ;
/**(Optional)If 0, max_entries and max_size will be filled in by the function*/
uint32 max_size ;
} in ;
struct {
/**Do not modify this value, use the same value between multiple calls (ie in while loop)*/
uint32 resume_idx ;
/**Number of entries returned*/
uint32 num_entries ;
/**Returned display info*/
SAM_DISPINFO_CTR ctr ;
/**Internal value. Do not modify.*/
uint32 loop_count ;
BOOL done ;
} out ;
} ;
/**
* Gets dislpay information using a SAM_DISPINFO_CTR .
* @ param hnd Initialized and connected server handle
* @ param mem_ctx Context for memory allocation
* @ param op Initialized parameters
* @ return CAC_FAILURE - the operation was not successful hnd - > status is set appropriately
* @ return CAC_SUCCESS - the operation was successful
*/
int cac_SamGetDisplayInfo ( CacServerHandle * hnd , TALLOC_CTX * mem_ctx , struct SamGetDisplayInfo * op ) ;
struct SamLookupDomain {
struct {
/**Open handle to the sam (opened with cac_SamConnect() or cac_SamOpenDomain()*/
POLICY_HND * sam ;
/**Name of the domain to lookup*/
char * name ;
} in ;
struct {
/**SID of the domain*/
DOM_SID * sid ;
} out ;
} ;
/**
* Looks up a Domain SID given it ' s name .
* @ param hnd Initialized and connected server handle
* @ param mem_ctx Context for memory allocation
* @ param op Initialized parameters
* @ return CAC_FAILURE - the operation was not successful hnd - > status is set appropriately
* @ return CAC_SUCCESS - the operation was successful
*/
int cac_SamLookupDomain ( CacServerHandle * hnd , TALLOC_CTX * mem_ctx , struct SamLookupDomain * op ) ;
struct SamGetSecurityObject {
struct {
/**An open handle (SAM, domain or user)*/
POLICY_HND * pol ;
} in ;
struct {
SEC_DESC_BUF * sec ;
} out ;
} ;
/**
* Retrievies Security descriptor information for a SAM / Domain / user
* @ param hnd Initialized and connected server handle
* @ param mem_ctx Context for memory allocation
* @ param op Initialized parameters
* @ return CAC_FAILURE - the operation was not successful hnd - > status is set appropriately
* @ return CAC_SUCCESS - the operation was successful
*/
int cac_SamGetSecurityObject ( CacServerHandle * hnd , TALLOC_CTX * mem_ctx , struct SamGetSecurityObject * op ) ;
struct SamFlush {
struct {
/**Open handle to the domain SAM*/
POLICY_HND * dom_hnd ;
/**(Optional)Domain SID. If NULL, the domain in hnd->domain will be opened*/
DOM_SID * sid ;
/**(Optional)Desired access to re-open the domain with. If 0, MAXIMUM_ALLOWED_ACCESS is used.*/
uint32 access ;
} in ;
} ;
/**
* Closes the domain handle , then re - opens it - effectively flushing any changes made .
* WARNING : if this fails you will no longer have an open handle to the domain SAM .
* @ param hnd Initialized and connected server handle
* @ param mem_ctx Context for memory allocation
* @ param op Initialized Parameters
* @ return CAC_FAILURE - the operation was not successful hnd - > status is set appropriately
* @ return CAC_SUCCESS - the operation was successful
*/
int cac_SamFlush ( CacServerHandle * hnd , TALLOC_CTX * mem_ctx , struct SamFlush * op ) ;
/**@}*/ /*SAM_Functions*/
/**@addtogroup SCM_Functions
* @ {
*/
struct SvcOpenScm {
struct {
/**Desired access to open the Handle with. See SC_RIGHT_MGR_* or SC_MANAGER_* in include/rpc_secdes.h*/
uint32 access ;
} in ;
struct {
/**Handle to the SCM*/
POLICY_HND * scm_hnd ;
} out ;
} ;
/**
* Opens a handle to the SCM on the remote machine .
* @ param hnd Initialized and connected server handle
* @ param mem_ctx Context for memory allocation
* @ param op Initialized parameters
* @ return CAC_FAILURE - the operation was not successful hnd - > status is set appropriately
* @ return CAC_SUCCESS - the operation was successful
*/
int cac_SvcOpenScm ( CacServerHandle * hnd , TALLOC_CTX * mem_ctx , struct SvcOpenScm * op ) ;
/**
* Closes an Svc handle ( SCM or Service )
* @ param hnd Initialized and connected server handle
* @ param mem_ctx Context for memory allocation
* @ param scm_hnd The handle to close
* @ return CAC_FAILURE - the operation was not successful hnd - > status is set appropriately
* @ return CAC_SUCCESS - the operation was successful
*/
int cac_SvcClose ( CacServerHandle * hnd , TALLOC_CTX * mem_ctx , POLICY_HND * scm_hnd ) ;
struct SvcEnumServices {
struct {
/**Open handle to the SCM*/
POLICY_HND * scm_hnd ;
/**(Optional)Type of service to enumerate. Possible values:
* - SVCCTL_TYPE_WIN32
* - SVCCTL_TYPE_DRIVER
* If this is 0 , ( SVCCTL_TYPE_DRIVER | SVCCTL_TYPE_WIN32 ) is assumed .
*/
uint32 type ;
/**(Optional)State of service to enumerate. Possible values:
* - SVCCTL_STATE_ACTIVE
* - SVCCTL_STATE_INACTIVE
* - SVCCTL_STATE_ALL
* If this is 0 , SVCCTL_STATE_ALL is assumed .
*/
uint32 state ;
} in ;
struct {
/**Number of services returned*/
uint32 num_services ;
/**Array of service structures*/
CacService * services ;
} out ;
} ;
/**
* Enumerates services on the remote machine .
* @ param hnd Initialized and connected server handle
* @ param mem_ctx Context for memory allocation
* @ param op Initialized parameters
* @ return CAC_FAILURE - the operation was not successful hnd - > status is set appropriately
* @ return CAC_SUCCESS - the operation was successful
*/
int cac_SvcEnumServices ( CacServerHandle * hnd , TALLOC_CTX * mem_ctx , struct SvcEnumServices * op ) ;
struct SvcOpenService {
struct {
/**Handle to the Service Control Manager*/
POLICY_HND * scm_hnd ;
/**Access mask to open service with see SERVICE_* or SC_RIGHT_SVC_* in include/rpc_secdes.h*/
uint32 access ;
/**The name of the service. _not_ the display name*/
char * name ;
} in ;
struct {
/**Handle to the open service*/
POLICY_HND * svc_hnd ;
} out ;
} ;
/**
* Opens a handle to a service .
* @ param hnd Initialized and connected server handle
* @ param mem_ctx Context for memory allocation
* @ param op Initialized Parameters
* @ return CAC_FAILURE - the operation was not successful hnd - > status is set appropriately
* @ return CAC_SUCCESS - the operation was successful
*/
int cac_SvcOpenService ( CacServerHandle * hnd , TALLOC_CTX * mem_ctx , struct SvcOpenService * op ) ;
struct SvcGetStatus {
struct {
/**Open handle to the service to query*/
POLICY_HND * svc_hnd ;
} in ;
struct {
/**The status of the service. See include/rpc_svcctl.h for SERVICE_STATUS definition.*/
SERVICE_STATUS status ;
} out ;
} ;
/**
* Retrieves the status of a service .
* @ param hnd Initialized and connected server handle
* @ param mem_ctx Context for memory allocation
* @ param op Initialized Parameters
* @ return CAC_FAILURE - the operation was not successful hnd - > status is set appropriately
* @ return CAC_SUCCESS - the operation was successful
*/
int cac_SvcGetStatus ( CacServerHandle * hnd , TALLOC_CTX * mem_ctx , struct SvcGetStatus * op ) ;
struct SvcStartService {
struct {
/**open handle to the service*/
POLICY_HND * svc_hnd ;
/**Array of parameters to start the service with. Can be NULL if num_parms is 0*/
char * * parms ;
/**Number of parameters in the parms array*/
uint32 num_parms ;
/**Number of seconds to wait for the service to actually start. If this is 0, then the status will not be checked after the initial call*/
uint32 timeout ;
} in ;
} ;
/**
* Attempts to start a service .
* @ param hnd Initialized and connected server handle
* @ param mem_ctx Context for memory allocation
* @ param op Initialized Parameters
* @ return CAC_FAILURE - the operation was not successful hnd - > status is set appropriately
* @ return CAC_SUCCESS - the operation was successful
*/
int cac_SvcStartService ( CacServerHandle * hnd , TALLOC_CTX * mem_ctx , struct SvcStartService * op ) ;
struct SvcControlService {
struct {
/**Open handle to the service to control*/
POLICY_HND * svc_hnd ;
/**The control operation to perform. Possible values (from include/rpc_svcctl.h):
* - SVCCTL_CONTROL_STOP
* - SVCCTL_CONTROL_PAUSE
* - SVCCTL_CONTROL_CONTINUE
* - SVCCTL_CONTROL_SHUTDOWN
*/
uint32 control ;
} in ;
struct {
/**The returned status of the service, _immediately_ after the call*/
SERVICE_STATUS * status ;
} out ;
} ;
/**
* Performs a control operation on a service and _immediately_ returns .
* @ see cac_SvcStopService ( )
* @ see cac_SvcPauseService ( )
* @ see cac_SvcContinueService ( )
* @ see cac_SvcShutdownService ( )
* @ param hnd Initialized and connected server handle
* @ param mem_ctx Context for memory allocation
* @ param op Initialized Parameters
* @ return CAC_FAILURE - the operation was not successful hnd - > status is set appropriately
* @ return CAC_SUCCESS - the operation was successful
*/
int cac_SvcControlService ( CacServerHandle * hnd , TALLOC_CTX * mem_ctx , struct SvcControlService * op ) ;
struct SvcStopService {
struct {
/**Open handle to the service*/
POLICY_HND * svc_hnd ;
/**Number of seconds to wait for the service to actually start.
* If this is 0 , then the status will not be checked after the initial call and CAC_SUCCESS might be returned if the status isn ' t actually started
*/
uint32 timeout ;
} in ;
struct {
/**Status of the service after the operation*/
SERVICE_STATUS status ;
} out ;
} ;
/**
* Attempts to stop a service .
* @ see cacSvcControlService ( )
* @ param hnd Initialized and connected server handle
* @ param mem_ctx Context for memory allocation
* @ param op Initialized Parameters
* @ return CAC_FAILURE - the operation was not successful . If hnd - > status is NT_STATUS_OK , then a timeout occured .
* @ return CAC_SUCCESS - the operation was successful
*/
int cac_SvcStopService ( CacServerHandle * hnd , TALLOC_CTX * mem_ctx , struct SvcStopService * op ) ;
struct SvcPauseService {
struct {
/**Open handle to the service*/
POLICY_HND * svc_hnd ;
/**Number of seconds to wait for the service to actually start.
* If this is 0 , then the status will not be checked after the initial call and CAC_SUCCESS might be returned if the status isn ' t actually started
*/
uint32 timeout ;
} in ;
struct {
/**Status of the service after the operation*/
SERVICE_STATUS status ;
} out ;
} ;
/**
* Attempts to pause a service .
* @ see cacSvcControlService ( )
* @ param hnd Initialized and connected server handle
* @ param mem_ctx Context for memory allocation
* @ param op Initialized Parameters
* @ return CAC_FAILURE - the operation was not successful . If hnd - > status is NT_STATUS_OK , then a timeout occured .
* @ return CAC_SUCCESS - the operation was successful
*/
int cac_SvcPauseService ( CacServerHandle * hnd , TALLOC_CTX * mem_ctx , struct SvcPauseService * op ) ;
struct SvcContinueService {
struct {
/**Open handle to the service*/
POLICY_HND * svc_hnd ;
/**Number of seconds to wait for the service to actually start.
* If this is 0 , then the status will not be checked after the initial call and CAC_SUCCESS might be returned if the status isn ' t actually started
*/
uint32 timeout ;
} in ;
struct {
/**Status of the service after the operation*/
SERVICE_STATUS status ;
} out ;
} ;
/**
* Attempts to continue a paused service .
* @ see cacSvcControlService ( )
* @ param hnd Initialized and connected server handle
* @ param mem_ctx Context for memory allocation
* @ param op Initialized Parameters
* @ return CAC_FAILURE - the operation was not successful . If hnd - > status is NT_STATUS_OK , then a timeout occured .
* @ return CAC_SUCCESS - the operation was successful
*/
int cac_SvcContinueService ( CacServerHandle * hnd , TALLOC_CTX * mem_ctx , struct SvcContinueService * op ) ;
struct SvcGetDisplayName {
struct {
/**Open handle to the service*/
POLICY_HND * svc_hnd ;
} in ;
struct {
/**The returned display name of the service*/
char * display_name ;
} out ;
} ;
/**
* Retrieves the display name of a service _not currently working_
* @ param hnd Initialized and connected server handle
* @ param mem_ctx Context for memory allocation
* @ param op Initialized Parameters
* @ return CAC_FAILURE - the operation was not successful hnd - > status is set appropriately
* @ return CAC_SUCCESS - the operation was successful
*/
int cac_SvcGetDisplayName ( CacServerHandle * hnd , TALLOC_CTX * mem_ctx , struct SvcGetDisplayName * op ) ;
struct SvcGetServiceConfig {
struct {
/**Open handle to the service*/
POLICY_HND * svc_hnd ;
} in ;
struct {
/**Returned Configuration information*/
CacServiceConfig config ;
} out ;
} ;
/**
* Retrieves configuration information about a service .
* @ param hnd Initialized and connected server handle
* @ param mem_ctx Context for memory allocation
* @ param op Initialized Parameters
* @ return CAC_FAILURE - the operation was not successful hnd - > status is set appropriately
* @ return CAC_SUCCESS - the operation was successful
*/
int cac_SvcGetServiceConfig ( CacServerHandle * hnd , TALLOC_CTX * mem_ctx , struct SvcGetServiceConfig * op ) ;
/**@}*/ /*SCM_Functions*/
2005-10-17 16:44:26 +00:00
struct rpc_pipe_client * cac_GetPipe ( CacServerHandle * hnd , int pi_idx ) ;
2005-09-03 16:55:45 +00:00
# endif /* LIBMSRPC_H */