* @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*/
uint32 acb_mask;
} 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*/
struct rpc_pipe_client *cac_GetPipe(CacServerHandle *hnd, int pi_idx);