summaryrefslogtreecommitdiff
path: root/source3/rpc_server/srv_svcctl_nt.c
diff options
context:
space:
mode:
authorJeremy Allison <jra@samba.org>2007-11-27 11:22:58 -0800
committerJeremy Allison <jra@samba.org>2007-11-27 11:22:58 -0800
commit3a452a15b7185dd4023c7dc8d44004c962f39d98 (patch)
tree3820baa751dde1dfa571a81753cf6ff0bd6951fb /source3/rpc_server/srv_svcctl_nt.c
parent9d42af0d2447f8b344d79a67bf7181336c077ad0 (diff)
downloadsamba-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.c25
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 );
}