From 6edcf6801dc2d5ffd10d077c8750910c0831c6bb Mon Sep 17 00:00:00 2001 From: Samuel Cabrero Date: Mon, 18 May 2020 12:04:33 +0200 Subject: [PATCH] s3: rpc_server: Avoid casts calling to find_policy_by_hnd() Signed-off-by: Samuel Cabrero Reviewed-by: Andrew Bartlett --- source3/rpc_server/epmapper/srv_epmapper.c | 46 +-- source3/rpc_server/eventlog/srv_eventlog_nt.c | 13 +- source3/rpc_server/lsa/srv_lsa_nt.c | 454 +++++++++++++------------- source3/rpc_server/mdssvc/srv_mdssvc_nt.c | 38 ++- source3/rpc_server/rpc_handles.c | 18 +- source3/rpc_server/rpc_pipes.h | 12 +- source3/rpc_server/samr/srv_samr_nt.c | 12 +- source3/rpc_server/spoolss/srv_spoolss_nt.c | 13 +- source3/rpc_server/svcctl/srv_svcctl_nt.c | 13 +- source3/rpc_server/winreg/srv_winreg_nt.c | 12 +- 10 files changed, 329 insertions(+), 302 deletions(-) diff --git a/source3/rpc_server/epmapper/srv_epmapper.c b/source3/rpc_server/epmapper/srv_epmapper.c index 6b99ed64c9c..973014d6827 100644 --- a/source3/rpc_server/epmapper/srv_epmapper.c +++ b/source3/rpc_server/epmapper/srv_epmapper.c @@ -619,6 +619,7 @@ error_status_t _epm_Lookup(struct pipes_struct *p, uint32_t i; bool match = false; bool ok; + NTSTATUS status; *r->out.num_ents = 0; r->out.entries = NULL; @@ -713,11 +714,12 @@ error_status_t _epm_Lookup(struct pipes_struct *p, goto done; } - ok = find_policy_by_hnd(p, - r->out.entry_handle, - HTYPE_LOOKUP, - (void **)(void*) &eps); - if (!ok) { + eps = find_policy_by_hnd(p, + r->out.entry_handle, + HTYPE_LOOKUP, + struct rpc_eps, + &status); + if (!NT_STATUS_IS_OK(status)) { rc = EPMAPPER_STATUS_NO_MEMORY; goto done; } @@ -725,11 +727,12 @@ error_status_t _epm_Lookup(struct pipes_struct *p, } else { DEBUG(7, ("_epm_Lookup: Trying to find entry_handle.\n")); - ok = find_policy_by_hnd(p, - r->in.entry_handle, - HTYPE_LOOKUP, - (void **)(void*) &eps); - if (!ok) { + eps = find_policy_by_hnd(p, + r->in.entry_handle, + HTYPE_LOOKUP, + struct rpc_eps, + &status); + if (!NT_STATUS_IS_OK(status)) { rc = EPMAPPER_STATUS_NO_MEMORY; goto done; } @@ -955,6 +958,7 @@ error_status_t _epm_Map(struct pipes_struct *p, uint32_t num_towers = 0; uint32_t i; bool ok; + NTSTATUS status; *r->out.num_towers = 0; r->out.towers = NULL; @@ -1111,11 +1115,12 @@ error_status_t _epm_Map(struct pipes_struct *p, goto done; } - ok = find_policy_by_hnd(p, - r->out.entry_handle, - HTYPE_LOOKUP, - (void **)(void*) &eps); - if (!ok) { + eps = find_policy_by_hnd(p, + r->out.entry_handle, + HTYPE_LOOKUP, + struct rpc_eps, + &status); + if (!NT_STATUS_IS_OK(status)) { rc = EPMAPPER_STATUS_NO_MEMORY; goto done; } @@ -1123,11 +1128,12 @@ error_status_t _epm_Map(struct pipes_struct *p, } else { DEBUG(7, ("_epm_Map: Trying to find entry_handle.\n")); - ok = find_policy_by_hnd(p, - r->in.entry_handle, - HTYPE_LOOKUP, - (void **)(void*) &eps); - if (!ok) { + eps = find_policy_by_hnd(p, + r->in.entry_handle, + HTYPE_LOOKUP, + struct rpc_eps, + &status); + if (!NT_STATUS_IS_OK(status)) { rc = EPMAPPER_STATUS_NO_MEMORY; goto done; } diff --git a/source3/rpc_server/eventlog/srv_eventlog_nt.c b/source3/rpc_server/eventlog/srv_eventlog_nt.c index 3e3075c3fea..7739d1953ef 100644 --- a/source3/rpc_server/eventlog/srv_eventlog_nt.c +++ b/source3/rpc_server/eventlog/srv_eventlog_nt.c @@ -70,13 +70,14 @@ static EVENTLOG_INFO *find_eventlog_info_by_hnd( struct pipes_struct * p, struct policy_handle * handle ) { EVENTLOG_INFO *info; - bool ok; + NTSTATUS status; - ok = find_policy_by_hnd(p, - handle, - DCESRV_HANDLE_ANY, - (void **)(void *)&info); - if (!ok) { + info = find_policy_by_hnd(p, + handle, + DCESRV_HANDLE_ANY, + EVENTLOG_INFO, + &status); + if (!NT_STATUS_IS_OK(status)) { DEBUG( 2, ( "find_eventlog_info_by_hnd: eventlog not found.\n" ) ); return NULL; diff --git a/source3/rpc_server/lsa/srv_lsa_nt.c b/source3/rpc_server/lsa/srv_lsa_nt.c index 013442ec23b..198387424e6 100644 --- a/source3/rpc_server/lsa/srv_lsa_nt.c +++ b/source3/rpc_server/lsa/srv_lsa_nt.c @@ -470,13 +470,13 @@ NTSTATUS _lsa_EnumTrustDom(struct pipes_struct *p, struct lsa_DomainInfo *entries; int i; NTSTATUS nt_status; - bool ok; - ok = find_policy_by_hnd(p, - r->in.handle, - LSA_HANDLE_POLICY_TYPE, - (void **)(void *)&info); - if (!ok) { + info = find_policy_by_hnd(p, + r->in.handle, + LSA_HANDLE_POLICY_TYPE, + struct lsa_info, + &nt_status); + if (!NT_STATUS_IS_OK(nt_status)) { return NT_STATUS_INVALID_HANDLE; } @@ -551,13 +551,13 @@ NTSTATUS _lsa_QueryInfoPolicy(struct pipes_struct *p, struct dom_sid *sid = NULL; union lsa_PolicyInformation *info = NULL; uint32_t acc_required = 0; - bool ok; - ok = find_policy_by_hnd(p, - r->in.handle, - LSA_HANDLE_POLICY_TYPE, - (void **)(void *)&handle); - if (!ok) { + handle = find_policy_by_hnd(p, + r->in.handle, + LSA_HANDLE_POLICY_TYPE, + struct lsa_info, + &status); + if (!NT_STATUS_IS_OK(status)) { return NT_STATUS_INVALID_HANDLE; } @@ -926,7 +926,6 @@ NTSTATUS _lsa_LookupSids(struct pipes_struct *p, struct lsa_TranslatedName *names_out = NULL; struct lsa_TranslatedName2 *names = NULL; int i; - bool ok; if (p->transport != NCACN_NP && p->transport != NCALRPC) { p->fault_state = DCERPC_FAULT_ACCESS_DENIED; @@ -937,11 +936,12 @@ NTSTATUS _lsa_LookupSids(struct pipes_struct *p, return NT_STATUS_INVALID_PARAMETER; } - ok = find_policy_by_hnd(p, - r->in.handle, - LSA_HANDLE_POLICY_TYPE, - (void **)(void *)&handle); - if (!ok) { + handle = find_policy_by_hnd(p, + r->in.handle, + LSA_HANDLE_POLICY_TYPE, + struct lsa_info, + &status); + if (!NT_STATUS_IS_OK(status)) { return NT_STATUS_INVALID_HANDLE; } @@ -1008,7 +1008,6 @@ static NTSTATUS _lsa_LookupSids_common(struct pipes_struct *p, struct lsa_RefDomainList *domains = NULL; struct lsa_TranslatedName2 *names = NULL; bool check_policy = true; - bool ok; switch (p->opnum) { case NDR_LSA_LOOKUPSIDS3: @@ -1024,11 +1023,12 @@ static NTSTATUS _lsa_LookupSids_common(struct pipes_struct *p, } if (check_policy) { - ok = find_policy_by_hnd(p, - r->in.handle, - LSA_HANDLE_POLICY_TYPE, - (void **)(void *)&handle); - if (!ok) { + handle = find_policy_by_hnd(p, + r->in.handle, + LSA_HANDLE_POLICY_TYPE, + struct lsa_info, + &status); + if (!NT_STATUS_IS_OK(status)) { return NT_STATUS_INVALID_HANDLE; } @@ -1159,7 +1159,6 @@ NTSTATUS _lsa_LookupNames(struct pipes_struct *p, struct lsa_TranslatedSid *rids = NULL; uint32_t mapped_count = 0; int flags = 0; - bool ok; if (p->transport != NCACN_NP && p->transport != NCALRPC) { p->fault_state = DCERPC_FAULT_ACCESS_DENIED; @@ -1189,11 +1188,12 @@ NTSTATUS _lsa_LookupNames(struct pipes_struct *p, rids = NULL; } - ok = find_policy_by_hnd(p, - r->in.handle, - LSA_HANDLE_POLICY_TYPE, - (void **)(void *)&handle); - if (!ok) { + handle = find_policy_by_hnd(p, + r->in.handle, + LSA_HANDLE_POLICY_TYPE, + struct lsa_info, + &status); + if (!NT_STATUS_IS_OK(status)) { status = NT_STATUS_INVALID_HANDLE; goto done; } @@ -1297,7 +1297,6 @@ static NTSTATUS _lsa_LookupNames_common(struct pipes_struct *p, uint32_t mapped_count = 0; int flags = 0; bool check_policy = true; - bool ok; switch (p->opnum) { case NDR_LSA_LOOKUPNAMES4: @@ -1332,11 +1331,12 @@ static NTSTATUS _lsa_LookupNames_common(struct pipes_struct *p, if (check_policy) { - ok = find_policy_by_hnd(p, - r->in.handle, - LSA_HANDLE_POLICY_TYPE, - (void **)(void *)&handle); - if (!ok) { + handle = find_policy_by_hnd(p, + r->in.handle, + LSA_HANDLE_POLICY_TYPE, + struct lsa_info, + &status); + if (!NT_STATUS_IS_OK(status)) { status = NT_STATUS_INVALID_HANDLE; goto done; } @@ -1433,18 +1433,19 @@ NTSTATUS _lsa_LookupNames4(struct pipes_struct *p, NTSTATUS _lsa_Close(struct pipes_struct *p, struct lsa_Close *r) { - bool ok; + NTSTATUS status; if (p->transport != NCACN_NP && p->transport != NCALRPC) { p->fault_state = DCERPC_FAULT_ACCESS_DENIED; return NT_STATUS_ACCESS_DENIED; } - ok = find_policy_by_hnd(p, - r->in.handle, - DCESRV_HANDLE_ANY, - NULL); - if (!ok) { + (void)find_policy_by_hnd(p, + r->in.handle, + DCESRV_HANDLE_ANY, + struct lsa_info, + &status); + if (!NT_STATUS_IS_OK(status)) { return NT_STATUS_INVALID_HANDLE; } @@ -1523,17 +1524,16 @@ static NTSTATUS lsa_lookup_trusted_domain_by_name(TALLOC_CTX *mem_ctx, NTSTATUS _lsa_OpenSecret(struct pipes_struct *p, struct lsa_OpenSecret *r) { - struct lsa_info *handle; struct security_descriptor *psd; NTSTATUS status; uint32_t acc_granted; - bool ok; - ok = find_policy_by_hnd(p, + (void)find_policy_by_hnd(p, r->in.handle, LSA_HANDLE_POLICY_TYPE, - (void **)(void *)&handle); - if (!ok) { + struct lsa_info, + &status); + if (!NT_STATUS_IS_OK(status)) { return NT_STATUS_INVALID_HANDLE; } @@ -1643,16 +1643,15 @@ static NTSTATUS _lsa_OpenTrustedDomain_base(struct pipes_struct *p, NTSTATUS _lsa_OpenTrustedDomain(struct pipes_struct *p, struct lsa_OpenTrustedDomain *r) { - struct lsa_info *handle = NULL; struct trustdom_info *info = NULL; NTSTATUS status; - bool ok; - ok = find_policy_by_hnd(p, - r->in.handle, - LSA_HANDLE_POLICY_TYPE, - (void **)(void *)&handle); - if (!ok) { + (void)find_policy_by_hnd(p, + r->in.handle, + LSA_HANDLE_POLICY_TYPE, + struct lsa_info, + &status); + if (!NT_STATUS_IS_OK(status)) { return NT_STATUS_INVALID_HANDLE; } @@ -1674,16 +1673,15 @@ NTSTATUS _lsa_OpenTrustedDomain(struct pipes_struct *p, NTSTATUS _lsa_OpenTrustedDomainByName(struct pipes_struct *p, struct lsa_OpenTrustedDomainByName *r) { - struct lsa_info *handle = NULL; struct trustdom_info *info = NULL; NTSTATUS status; - bool ok; - ok = find_policy_by_hnd(p, - r->in.handle, - LSA_HANDLE_POLICY_TYPE, - (void **)(void *)&handle); - if (!ok) { + (void)find_policy_by_hnd(p, + r->in.handle, + LSA_HANDLE_POLICY_TYPE, + struct lsa_info, + &status); + if (!NT_STATUS_IS_OK(status)) { return NT_STATUS_INVALID_HANDLE; } @@ -1826,17 +1824,17 @@ NTSTATUS _lsa_CreateTrustedDomainEx2(struct pipes_struct *p, struct pdb_trusted_domain td; struct trustDomainPasswords auth_struct; DATA_BLOB auth_blob; - bool ok; if (!IS_DC) { return NT_STATUS_NOT_SUPPORTED; } - ok = find_policy_by_hnd(p, - r->in.policy_handle, - LSA_HANDLE_POLICY_TYPE, - (void **)(void *)&policy); - if (!ok) { + policy = find_policy_by_hnd(p, + r->in.policy_handle, + LSA_HANDLE_POLICY_TYPE, + struct lsa_info, + &status); + if (!NT_STATUS_IS_OK(status)) { return NT_STATUS_INVALID_HANDLE; } @@ -1994,14 +1992,14 @@ NTSTATUS _lsa_DeleteTrustedDomain(struct pipes_struct *p, NTSTATUS status; struct lsa_info *handle; struct pdb_trusted_domain *td; - bool ok; /* find the connection policy handle. */ - ok = find_policy_by_hnd(p, - r->in.handle, - LSA_HANDLE_POLICY_TYPE, - (void **)(void *)&handle); - if (!ok) { + handle = find_policy_by_hnd(p, + r->in.handle, + LSA_HANDLE_POLICY_TYPE, + struct lsa_info, + &status); + if (!NT_STATUS_IS_OK(status)) { return NT_STATUS_INVALID_HANDLE; } @@ -2077,14 +2075,14 @@ NTSTATUS _lsa_QueryTrustedDomainInfo(struct pipes_struct *p, union lsa_TrustedDomainInfo *info; struct pdb_trusted_domain *td; uint32_t acc_required; - bool ok; /* find the connection policy handle. */ - ok = find_policy_by_hnd(p, - r->in.trustdom_handle, - LSA_HANDLE_TRUST_TYPE, - (void **)(void *)&handle); - if (!ok) { + handle = find_policy_by_hnd(p, + r->in.trustdom_handle, + LSA_HANDLE_TRUST_TYPE, + struct lsa_info, + &status); + if (!NT_STATUS_IS_OK(status)) { return NT_STATUS_INVALID_HANDLE; } @@ -2307,14 +2305,14 @@ NTSTATUS _lsa_CreateSecret(struct pipes_struct *p, uint32_t acc_granted; struct security_descriptor *psd; size_t sd_size; - bool ok; /* find the connection policy handle. */ - ok = find_policy_by_hnd(p, - r->in.handle, - LSA_HANDLE_POLICY_TYPE, - (void **)(void *)&handle); - if (!ok) { + handle = find_policy_by_hnd(p, + r->in.handle, + LSA_HANDLE_POLICY_TYPE, + struct lsa_info, + &status); + if (!NT_STATUS_IS_OK(status)) { return NT_STATUS_INVALID_HANDLE; } @@ -2395,13 +2393,13 @@ NTSTATUS _lsa_SetSecret(struct pipes_struct *p, DATA_BLOB *cleartext_blob_new_p = NULL; DATA_BLOB *cleartext_blob_old_p = NULL; DATA_BLOB session_key; - bool ok; - ok = find_policy_by_hnd(p, - r->in.sec_handle, - LSA_HANDLE_SECRET_TYPE, - (void **)(void *)&info); - if (!ok) { + info = find_policy_by_hnd(p, + r->in.sec_handle, + LSA_HANDLE_SECRET_TYPE, + struct lsa_info, + &status); + if (!NT_STATUS_IS_OK(status)) { return NT_STATUS_INVALID_HANDLE; } @@ -2470,13 +2468,13 @@ NTSTATUS _lsa_QuerySecret(struct pipes_struct *p, DATA_BLOB session_key; NTTIME nttime_new, nttime_old; NTSTATUS status; - bool ok; - ok = find_policy_by_hnd(p, - r->in.sec_handle, - LSA_HANDLE_SECRET_TYPE, - (void **)(void *)&info); - if (!ok) { + info = find_policy_by_hnd(p, + r->in.sec_handle, + LSA_HANDLE_SECRET_TYPE, + struct lsa_info, + &status); + if (!NT_STATUS_IS_OK(status)) { return NT_STATUS_INVALID_HANDLE; } @@ -2559,13 +2557,13 @@ NTSTATUS _lsa_DeleteObject(struct pipes_struct *p, { NTSTATUS status; struct lsa_info *info = NULL; - bool ok; - ok = find_policy_by_hnd(p, - r->in.handle, - DCESRV_HANDLE_ANY, - (void **)(void *)&info); - if (!ok) { + info = find_policy_by_hnd(p, + r->in.handle, + DCESRV_HANDLE_ANY, + struct lsa_info, + &status); + if (!NT_STATUS_IS_OK(status)) { return NT_STATUS_INVALID_HANDLE; } @@ -2616,7 +2614,7 @@ NTSTATUS _lsa_EnumPrivs(struct pipes_struct *p, uint32_t enum_context = *r->in.resume_handle; int num_privs = num_privileges_in_short_list(); struct lsa_PrivEntry *entries = NULL; - bool ok; + NTSTATUS status; /* remember that the enum_context starts at 0 and not 1 */ @@ -2626,11 +2624,12 @@ NTSTATUS _lsa_EnumPrivs(struct pipes_struct *p, DEBUG(10,("_lsa_EnumPrivs: enum_context:%d total entries:%d\n", enum_context, num_privs)); - ok = find_policy_by_hnd(p, - r->in.handle, - LSA_HANDLE_POLICY_TYPE, - (void **)(void *)&handle); - if (!ok) { + handle = find_policy_by_hnd(p, + r->in.handle, + LSA_HANDLE_POLICY_TYPE, + struct lsa_info, + &status); + if (!NT_STATUS_IS_OK(status)) { return NT_STATUS_INVALID_HANDLE; } @@ -2684,13 +2683,14 @@ NTSTATUS _lsa_LookupPrivDisplayName(struct pipes_struct *p, struct lsa_info *handle; const char *description; struct lsa_StringLarge *lsa_name; - bool ok; + NTSTATUS status; - ok = find_policy_by_hnd(p, - r->in.handle, - LSA_HANDLE_POLICY_TYPE, - (void **)(void *)&handle); - if (!ok) { + handle = find_policy_by_hnd(p, + r->in.handle, + LSA_HANDLE_POLICY_TYPE, + struct lsa_info, + &status); + if (!NT_STATUS_IS_OK(status)) { return NT_STATUS_INVALID_HANDLE; } @@ -2737,13 +2737,13 @@ NTSTATUS _lsa_EnumAccounts(struct pipes_struct *p, int i, j, num_entries; NTSTATUS status; struct lsa_SidPtr *sids = NULL; - bool ok; - ok = find_policy_by_hnd(p, - r->in.handle, - LSA_HANDLE_POLICY_TYPE, - (void **)(void *)&handle); - if (!ok) { + handle = find_policy_by_hnd(p, + r->in.handle, + LSA_HANDLE_POLICY_TYPE, + struct lsa_info, + &status); + if (!NT_STATUS_IS_OK(status)) { return NT_STATUS_INVALID_HANDLE; } @@ -2870,14 +2870,14 @@ NTSTATUS _lsa_CreateAccount(struct pipes_struct *p, ~(LSA_ACCOUNT_ADJUST_PRIVILEGES| LSA_ACCOUNT_ADJUST_SYSTEM_ACCESS| SEC_STD_DELETE)); - bool ok; /* find the connection policy handle. */ - ok = find_policy_by_hnd(p, - r->in.handle, - LSA_HANDLE_POLICY_TYPE, - (void **)(void *)&handle); - if (!ok) { + handle = find_policy_by_hnd(p, + r->in.handle, + LSA_HANDLE_POLICY_TYPE, + struct lsa_info, + &status); + if (!NT_STATUS_IS_OK(status)) { return NT_STATUS_INVALID_HANDLE; } @@ -2933,7 +2933,6 @@ NTSTATUS _lsa_CreateAccount(struct pipes_struct *p, NTSTATUS _lsa_OpenAccount(struct pipes_struct *p, struct lsa_OpenAccount *r) { - struct lsa_info *handle; struct security_descriptor *psd = NULL; size_t sd_size; uint32_t des_access = r->in.access_mask; @@ -2943,14 +2942,14 @@ NTSTATUS _lsa_OpenAccount(struct pipes_struct *p, LSA_ACCOUNT_ADJUST_SYSTEM_ACCESS| SEC_STD_DELETE)); NTSTATUS status; - bool ok; /* find the connection policy handle. */ - ok = find_policy_by_hnd(p, - r->in.handle, - LSA_HANDLE_POLICY_TYPE, - (void **)(void *)&handle); - if (!ok) { + (void)find_policy_by_hnd(p, + r->in.handle, + LSA_HANDLE_POLICY_TYPE, + struct lsa_info, + &status); + if (!NT_STATUS_IS_OK(status)) { return NT_STATUS_INVALID_HANDLE; } @@ -3013,14 +3012,14 @@ NTSTATUS _lsa_EnumPrivsAccount(struct pipes_struct *p, PRIVILEGE_SET *privileges; struct lsa_PrivilegeSet *priv_set = NULL; struct dom_sid_buf buf; - bool ok; /* find the connection policy handle. */ - ok = find_policy_by_hnd(p, - r->in.handle, - LSA_HANDLE_ACCOUNT_TYPE, - (void **)(void *)&info); - if (!ok) { + info = find_policy_by_hnd(p, + r->in.handle, + LSA_HANDLE_ACCOUNT_TYPE, + struct lsa_info, + &status); + if (!NT_STATUS_IS_OK(status)) { return NT_STATUS_INVALID_HANDLE; } @@ -3059,15 +3058,15 @@ NTSTATUS _lsa_GetSystemAccessAccount(struct pipes_struct *p, struct lsa_info *info = NULL; struct lsa_EnumPrivsAccount e; struct lsa_PrivilegeSet *privset; - bool ok; /* find the connection policy handle. */ - ok = find_policy_by_hnd(p, - r->in.handle, - LSA_HANDLE_ACCOUNT_TYPE, - (void **)(void *)&info); - if (!ok) { + info = find_policy_by_hnd(p, + r->in.handle, + LSA_HANDLE_ACCOUNT_TYPE, + struct lsa_info, + &status); + if (!NT_STATUS_IS_OK(status)) { return NT_STATUS_INVALID_HANDLE; } @@ -3119,14 +3118,14 @@ NTSTATUS _lsa_SetSystemAccessAccount(struct pipes_struct *p, struct lsa_info *info=NULL; NTSTATUS status; GROUP_MAP *map; - bool ok; /* find the connection policy handle. */ - ok = find_policy_by_hnd(p, - r->in.handle, - LSA_HANDLE_ACCOUNT_TYPE, - (void **)(void *)&info); - if (!ok) { + info = find_policy_by_hnd(p, + r->in.handle, + LSA_HANDLE_ACCOUNT_TYPE, + struct lsa_info, + &status); + if (!NT_STATUS_IS_OK(status)) { return NT_STATUS_INVALID_HANDLE; } @@ -3159,14 +3158,15 @@ NTSTATUS _lsa_AddPrivilegesToAccount(struct pipes_struct *p, { struct lsa_info *info = NULL; struct lsa_PrivilegeSet *set = NULL; - bool ok; + NTSTATUS status; /* find the connection policy handle. */ - ok = find_policy_by_hnd(p, - r->in.handle, - LSA_HANDLE_ACCOUNT_TYPE, - (void **)(void *)&info); - if (!ok) { + info = find_policy_by_hnd(p, + r->in.handle, + LSA_HANDLE_ACCOUNT_TYPE, + struct lsa_info, + &status); + if (!NT_STATUS_IS_OK(status)) { return NT_STATUS_INVALID_HANDLE; } @@ -3196,14 +3196,15 @@ NTSTATUS _lsa_RemovePrivilegesFromAccount(struct pipes_struct *p, { struct lsa_info *info = NULL; struct lsa_PrivilegeSet *set = NULL; - bool ok; + NTSTATUS status; /* find the connection policy handle. */ - ok = find_policy_by_hnd(p, - r->in.handle, - LSA_HANDLE_ACCOUNT_TYPE, - (void **)(void *)&info); - if (!ok) { + info = find_policy_by_hnd(p, + r->in.handle, + LSA_HANDLE_ACCOUNT_TYPE, + struct lsa_info, + &status); + if (!NT_STATUS_IS_OK(status)) { return NT_STATUS_INVALID_HANDLE; } @@ -3233,14 +3234,15 @@ NTSTATUS _lsa_LookupPrivName(struct pipes_struct *p, struct lsa_info *info = NULL; const char *name; struct lsa_StringLarge *lsa_name; - bool ok; + NTSTATUS status; /* find the connection policy handle. */ - ok = find_policy_by_hnd(p, - r->in.handle, - LSA_HANDLE_POLICY_TYPE, - (void **)(void *)&info); - if (!ok) { + info = find_policy_by_hnd(p, + r->in.handle, + LSA_HANDLE_POLICY_TYPE, + struct lsa_info, + &status); + if (!NT_STATUS_IS_OK(status)) { return NT_STATUS_INVALID_HANDLE; } @@ -3284,14 +3286,14 @@ NTSTATUS _lsa_QuerySecurity(struct pipes_struct *p, struct security_descriptor *psd = NULL; size_t sd_size = 0; NTSTATUS status; - bool ok; /* find the connection policy handle. */ - ok = find_policy_by_hnd(p, - r->in.handle, - DCESRV_HANDLE_ANY, - (void **)(void *)&handle); - if (!ok) { + handle = find_policy_by_hnd(p, + r->in.handle, + DCESRV_HANDLE_ANY, + struct lsa_info, + &status); + if (!NT_STATUS_IS_OK(status)) { return NT_STATUS_INVALID_HANDLE; } @@ -3328,21 +3330,20 @@ NTSTATUS _lsa_QuerySecurity(struct pipes_struct *p, NTSTATUS _lsa_AddAccountRights(struct pipes_struct *p, struct lsa_AddAccountRights *r) { - struct lsa_info *info = NULL; int i = 0; uint32_t acc_granted = 0; struct security_descriptor *psd = NULL; size_t sd_size; struct dom_sid sid; NTSTATUS status; - bool ok; /* find the connection policy handle. */ - ok = find_policy_by_hnd(p, - r->in.handle, - LSA_HANDLE_POLICY_TYPE, - (void **)(void *)&info); - if (!ok) { + (void)find_policy_by_hnd(p, + r->in.handle, + LSA_HANDLE_POLICY_TYPE, + struct lsa_info, + &status); + if (!NT_STATUS_IS_OK(status)) { return NT_STATUS_INVALID_HANDLE; } @@ -3400,7 +3401,6 @@ NTSTATUS _lsa_AddAccountRights(struct pipes_struct *p, NTSTATUS _lsa_RemoveAccountRights(struct pipes_struct *p, struct lsa_RemoveAccountRights *r) { - struct lsa_info *info = NULL; int i = 0; struct security_descriptor *psd = NULL; size_t sd_size; @@ -3408,14 +3408,14 @@ NTSTATUS _lsa_RemoveAccountRights(struct pipes_struct *p, const char *privname = NULL; uint32_t acc_granted = 0; NTSTATUS status; - bool ok; /* find the connection policy handle. */ - ok = find_policy_by_hnd(p, - r->in.handle, - LSA_HANDLE_POLICY_TYPE, - (void **)(void *)&info); - if (!ok) { + (void)find_policy_by_hnd(p, + r->in.handle, + LSA_HANDLE_POLICY_TYPE, + struct lsa_info, + &status); + if (!NT_STATUS_IS_OK(status)) { return NT_STATUS_INVALID_HANDLE; } @@ -3524,15 +3524,15 @@ NTSTATUS _lsa_EnumAccountRights(struct pipes_struct *p, struct lsa_info *info = NULL; PRIVILEGE_SET *privileges; struct dom_sid_buf buf; - bool ok; /* find the connection policy handle. */ - ok = find_policy_by_hnd(p, - r->in.handle, - LSA_HANDLE_POLICY_TYPE, - (void **)(void *)&info); - if (!ok) { + info = find_policy_by_hnd(p, + r->in.handle, + LSA_HANDLE_POLICY_TYPE, + struct lsa_info, + &status); + if (!NT_STATUS_IS_OK(status)) { return NT_STATUS_INVALID_HANDLE; } @@ -3570,15 +3570,16 @@ NTSTATUS _lsa_LookupPrivValue(struct pipes_struct *p, { struct lsa_info *info = NULL; const char *name = NULL; - bool ok; + NTSTATUS status; /* find the connection policy handle. */ - ok = find_policy_by_hnd(p, - r->in.handle, - LSA_HANDLE_POLICY_TYPE, - (void **)(void *)&info); - if (!ok) { + info = find_policy_by_hnd(p, + r->in.handle, + LSA_HANDLE_POLICY_TYPE, + struct lsa_info, + &status); + if (!NT_STATUS_IS_OK(status)) { return NT_STATUS_INVALID_HANDLE; } @@ -3610,13 +3611,13 @@ NTSTATUS _lsa_EnumAccountsWithUserRight(struct pipes_struct *p, int num_sids = 0; uint32_t i; enum sec_privilege privilege; - bool ok; - ok = find_policy_by_hnd(p, - r->in.handle, - LSA_HANDLE_POLICY_TYPE, - (void **)(void *)&info); - if (!ok) { + info = find_policy_by_hnd(p, + r->in.handle, + LSA_HANDLE_POLICY_TYPE, + struct lsa_info, + &status); + if (!NT_STATUS_IS_OK(status)) { return NT_STATUS_INVALID_HANDLE; } @@ -3921,13 +3922,14 @@ NTSTATUS _lsa_SetInformationTrustedDomain(struct pipes_struct *p, struct lsa_SetInformationTrustedDomain *r) { struct lsa_info *policy; - bool ok; + NTSTATUS status; - ok = find_policy_by_hnd(p, - r->in.trustdom_handle, - LSA_HANDLE_TRUST_TYPE, - (void **)(void *)&policy); - if (!ok) { + policy = find_policy_by_hnd(p, + r->in.trustdom_handle, + LSA_HANDLE_TRUST_TYPE, + struct lsa_info, + &status); + if (!NT_STATUS_IS_OK(status)) { return NT_STATUS_INVALID_HANDLE; } @@ -4011,7 +4013,6 @@ NTSTATUS _lsa_EnumTrustedDomainsEx(struct pipes_struct *p, struct lsa_TrustDomainInfoInfoEx *entries; int i; NTSTATUS nt_status; - bool ok; /* bail out early if pdb backend is not capable of ex trusted domains, * if we don't do that, the client might not call @@ -4022,11 +4023,12 @@ NTSTATUS _lsa_EnumTrustedDomainsEx(struct pipes_struct *p, return NT_STATUS_NOT_IMPLEMENTED; } - ok = find_policy_by_hnd(p, - r->in.handle, - LSA_HANDLE_POLICY_TYPE, - (void **)(void *)&info); - if (!ok) { + info = find_policy_by_hnd(p, + r->in.handle, + LSA_HANDLE_POLICY_TYPE, + struct lsa_info, + &nt_status); + if (!NT_STATUS_IS_OK(nt_status)) { return NT_STATUS_INVALID_HANDLE; } @@ -4570,17 +4572,17 @@ NTSTATUS _lsa_lsaRSetForestTrustInformation(struct pipes_struct *p, struct lsa_ForestTrustCollisionInfo *c_info; struct pdb_domain_info *dom_info; enum ndr_err_code ndr_err; - bool ok; if (!IS_DC) { return NT_STATUS_NOT_SUPPORTED; } - ok = find_policy_by_hnd(p, - r->in.handle, - LSA_HANDLE_TRUST_TYPE, - (void **)(void *)&handle); - if (!ok) { + handle = find_policy_by_hnd(p, + r->in.handle, + LSA_HANDLE_TRUST_TYPE, + struct lsa_info, + &status); + if (!NT_STATUS_IS_OK(status)) { return NT_STATUS_INVALID_HANDLE; } diff --git a/source3/rpc_server/mdssvc/srv_mdssvc_nt.c b/source3/rpc_server/mdssvc/srv_mdssvc_nt.c index e9ab68af0a8..b9607262216 100644 --- a/source3/rpc_server/mdssvc/srv_mdssvc_nt.c +++ b/source3/rpc_server/mdssvc/srv_mdssvc_nt.c @@ -176,13 +176,14 @@ static bool is_zero_policy_handle(const struct policy_handle *h) void _mdssvc_unknown1(struct pipes_struct *p, struct mdssvc_unknown1 *r) { struct mds_ctx *mds_ctx; - bool ok; + NTSTATUS status; - ok = find_policy_by_hnd(p, - r->in.handle, - DCESRV_HANDLE_ANY, - (void **)(void *)&mds_ctx); - if (!ok) { + mds_ctx = find_policy_by_hnd(p, + r->in.handle, + DCESRV_HANDLE_ANY, + struct mds_ctx, + &status); + if (!NT_STATUS_IS_OK(status)) { if (is_zero_policy_handle(r->in.handle)) { p->fault_state = 0; } else { @@ -208,12 +209,14 @@ void _mdssvc_cmd(struct pipes_struct *p, struct mdssvc_cmd *r) bool ok; char *rbuf; struct mds_ctx *mds_ctx; + NTSTATUS status; - ok = find_policy_by_hnd(p, - r->in.handle, - DCESRV_HANDLE_ANY, - (void **)(void *)&mds_ctx); - if (!ok) { + mds_ctx = find_policy_by_hnd(p, + r->in.handle, + DCESRV_HANDLE_ANY, + struct mds_ctx, + &status); + if (!NT_STATUS_IS_OK(status)) { if (is_zero_policy_handle(r->in.handle)) { p->fault_state = 0; } else { @@ -286,13 +289,14 @@ void _mdssvc_cmd(struct pipes_struct *p, struct mdssvc_cmd *r) void _mdssvc_close(struct pipes_struct *p, struct mdssvc_close *r) { struct mds_ctx *mds_ctx; - bool ok; + NTSTATUS status; - ok = find_policy_by_hnd(p, - r->in.in_handle, - DCESRV_HANDLE_ANY, - (void **)(void *)&mds_ctx); - if (!ok) { + mds_ctx = find_policy_by_hnd(p, + r->in.in_handle, + DCESRV_HANDLE_ANY, + struct mds_ctx, + &status); + if (!NT_STATUS_IS_OK(status)) { DBG_WARNING("invalid handle\n"); if (is_zero_policy_handle(r->in.in_handle)) { p->fault_state = 0; diff --git a/source3/rpc_server/rpc_handles.c b/source3/rpc_server/rpc_handles.c index 0134abc5c60..d897e0caabe 100644 --- a/source3/rpc_server/rpc_handles.c +++ b/source3/rpc_server/rpc_handles.c @@ -175,18 +175,22 @@ static struct dcesrv_handle *find_policy_by_hnd_internal( find policy by handle ****************************************************************************/ -bool find_policy_by_hnd(struct pipes_struct *p, - const struct policy_handle *hnd, - uint8_t handle_type, - void **data_p) +void *_find_policy_by_hnd(struct pipes_struct *p, + const struct policy_handle *hnd, + uint8_t handle_type, + NTSTATUS *pstatus) { struct dcesrv_handle *rpc_hnd = NULL; + void *data = NULL; - rpc_hnd = find_policy_by_hnd_internal(p, hnd, handle_type, data_p); + rpc_hnd = find_policy_by_hnd_internal(p, hnd, handle_type, &data); if (rpc_hnd == NULL) { - return false; + *pstatus = NT_STATUS_INVALID_HANDLE; + return NULL; } - return true; + + *pstatus = NT_STATUS_OK; + return data; } /**************************************************************************** diff --git a/source3/rpc_server/rpc_pipes.h b/source3/rpc_server/rpc_pipes.h index 902a996d018..1d59d2dd820 100644 --- a/source3/rpc_server/rpc_pipes.h +++ b/source3/rpc_server/rpc_pipes.h @@ -93,10 +93,14 @@ bool create_policy_hnd(struct pipes_struct *p, struct policy_handle *hnd, uint8_t handle_type, void *data_ptr); -bool find_policy_by_hnd(struct pipes_struct *p, - const struct policy_handle *hnd, - uint8_t handle_type, - void **data_p); + +void *_find_policy_by_hnd(struct pipes_struct *p, + const struct policy_handle *hnd, + uint8_t handle_type, + NTSTATUS *pstatus); +#define find_policy_by_hnd(_p, _hnd, _hnd_type, _type, _pstatus) \ + (_type *)_find_policy_by_hnd((_p), (_hnd), (_hnd_type), (_pstatus)); + bool close_policy_hnd(struct pipes_struct *p, struct policy_handle *hnd); void close_policy_by_pipe(struct pipes_struct *p); bool pipe_access_check(struct pipes_struct *p); diff --git a/source3/rpc_server/samr/srv_samr_nt.c b/source3/rpc_server/samr/srv_samr_nt.c index ed029b33dc1..5ffc3331185 100644 --- a/source3/rpc_server/samr/srv_samr_nt.c +++ b/source3/rpc_server/samr/srv_samr_nt.c @@ -198,13 +198,13 @@ static void *samr_policy_handle_find(struct pipes_struct *p, { struct samr_info *info = NULL; NTSTATUS status; - bool ok; - ok = find_policy_by_hnd(p, - handle, - handle_type, - (void **)(void *)&info); - if (!ok) { + info = find_policy_by_hnd(p, + handle, + handle_type, + struct samr_info, + &status); + if (!NT_STATUS_IS_OK(status)) { *pstatus = NT_STATUS_INVALID_HANDLE; return NULL; } diff --git a/source3/rpc_server/spoolss/srv_spoolss_nt.c b/source3/rpc_server/spoolss/srv_spoolss_nt.c index ccd1f8f38e7..c4583fb4c32 100644 --- a/source3/rpc_server/spoolss/srv_spoolss_nt.c +++ b/source3/rpc_server/spoolss/srv_spoolss_nt.c @@ -314,13 +314,14 @@ static struct printer_handle *find_printer_index_by_hnd(struct pipes_struct *p, struct policy_handle *hnd) { struct printer_handle *find_printer = NULL; - bool ok; + NTSTATUS status; - ok = find_policy_by_hnd(p, - hnd, - DCESRV_HANDLE_ANY, - (void **)(void *)&find_printer); - if (!ok) { + find_printer = find_policy_by_hnd(p, + hnd, + DCESRV_HANDLE_ANY, + struct printer_handle, + &status); + if (!NT_STATUS_IS_OK(status)) { DEBUG(2,("find_printer_index_by_hnd: Printer handle not found: ")); return NULL; } diff --git a/source3/rpc_server/svcctl/srv_svcctl_nt.c b/source3/rpc_server/svcctl/srv_svcctl_nt.c index 2e74dde904a..c67688346eb 100644 --- a/source3/rpc_server/svcctl/srv_svcctl_nt.c +++ b/source3/rpc_server/svcctl/srv_svcctl_nt.c @@ -197,13 +197,14 @@ static SERVICE_INFO *find_service_info_by_hnd(struct pipes_struct *p, struct policy_handle *hnd) { SERVICE_INFO *service_info = NULL; - bool ok; + NTSTATUS status; - ok = find_policy_by_hnd(p, - hnd, - DCESRV_HANDLE_ANY, - (void **)(void *)&service_info); - if (!ok) { + service_info = find_policy_by_hnd(p, + hnd, + DCESRV_HANDLE_ANY, + SERVICE_INFO, + &status); + if (!NT_STATUS_IS_OK(status)) { DEBUG(2,("find_service_info_by_hnd: handle not found\n")); return NULL; } diff --git a/source3/rpc_server/winreg/srv_winreg_nt.c b/source3/rpc_server/winreg/srv_winreg_nt.c index 1fb551f08f4..fff2a74c802 100644 --- a/source3/rpc_server/winreg/srv_winreg_nt.c +++ b/source3/rpc_server/winreg/srv_winreg_nt.c @@ -46,10 +46,14 @@ static struct registry_key *find_regkey_by_hnd(struct pipes_struct *p, enum handle_types type) { struct registry_key *regkey = NULL; - bool ok; - - ok = find_policy_by_hnd(p, hnd, type, (void **)(void *)®key); - if (!ok) { + NTSTATUS status; + + regkey = find_policy_by_hnd(p, + hnd, + type, + struct registry_key, + &status); + if (!NT_STATUS_IS_OK(status)) { DEBUG(2,("find_regkey_index_by_hnd: Registry Key not found: ")); return NULL; } -- 2.11.4.GIT