diff options
author | Jeremy Allison <jra@samba.org> | 2007-11-27 11:22:58 -0800 |
---|---|---|
committer | Jeremy Allison <jra@samba.org> | 2007-11-27 11:22:58 -0800 |
commit | 3a452a15b7185dd4023c7dc8d44004c962f39d98 (patch) | |
tree | 3820baa751dde1dfa571a81753cf6ff0bd6951fb /source3/rpc_server/srv_svcctl_nt.c | |
parent | 9d42af0d2447f8b344d79a67bf7181336c077ad0 (diff) | |
download | samba-3a452a15b7185dd4023c7dc8d44004c962f39d98.tar.gz samba-3a452a15b7185dd4023c7dc8d44004c962f39d98.tar.bz2 samba-3a452a15b7185dd4023c7dc8d44004c962f39d98.zip |
Remove pstring from everything in rpc_server except
srv_spoolss_nt.c and srv_srvsvc_nt.c.
They're next :-).
Jeremy.
(This used to be commit 55b4f9d003b036af69085f7b64e0df08c5ba440d)
Diffstat (limited to 'source3/rpc_server/srv_svcctl_nt.c')
-rw-r--r-- | source3/rpc_server/srv_svcctl_nt.c | 25 |
1 files changed, 15 insertions, 10 deletions
diff --git a/source3/rpc_server/srv_svcctl_nt.c b/source3/rpc_server/srv_svcctl_nt.c index a6a9c855aa..7d81033264 100644 --- a/source3/rpc_server/srv_svcctl_nt.c +++ b/source3/rpc_server/srv_svcctl_nt.c @@ -288,29 +288,34 @@ WERROR _svcctl_open_service(pipes_struct *p, SVCCTL_Q_OPEN_SERVICE *q_u, SVCCTL_ SEC_DESC *sec_desc; uint32 access_granted = 0; NTSTATUS status; - pstring service; - - rpcstr_pull(service, q_u->servicename.buffer, sizeof(service), q_u->servicename.uni_str_len*2, 0); - + char *service = NULL; + size_t ret = rpcstr_pull_talloc(p->mem_ctx, + &service, + q_u->servicename.buffer, + q_u->servicename.uni_str_len*2, + 0); + + if (ret == (size_t)-1 || !service) { + return WERR_NOMEM; + } DEBUG(5, ("_svcctl_open_service: Attempting to open Service [%s], \n", service)); - /* based on my tests you can open a service if you have a valid scm handle */ - + if ( !find_service_info_by_hnd( p, &q_u->handle ) ) return WERR_BADFID; - + /* perform access checks. Use the root token in order to ensure that we retrieve the security descriptor */ - + if ( !(sec_desc = svcctl_get_secdesc( p->mem_ctx, service, get_root_nt_token() )) ) return WERR_NOMEM; - + se_map_generic( &q_u->access, &svc_generic_map ); status = svcctl_access_check( sec_desc, p->pipe_user.nt_user_token, q_u->access, &access_granted ); if ( !NT_STATUS_IS_OK(status) ) return ntstatus_to_werror( status ); - + return create_open_service_handle( p, &r_u->handle, SVC_HANDLE_IS_SERVICE, service, access_granted ); } |