summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGerald Carter <jerry@samba.org>2005-06-15 03:10:36 +0000
committerGerald (Jerry) Carter <jerry@samba.org>2007-10-10 10:57:15 -0500
commit899bc3a07df4ce1f77efc1abce7c3a2e855069e5 (patch)
tree10137c0407ec23950eba1005ea609801e6870503
parent2851e43e4881485b0af418975eca8f01ab27ca3b (diff)
downloadsamba-899bc3a07df4ce1f77efc1abce7c3a2e855069e5.tar.gz
samba-899bc3a07df4ce1f77efc1abce7c3a2e855069e5.tar.bz2
samba-899bc3a07df4ce1f77efc1abce7c3a2e855069e5.zip
r7603: * fix a bug in the SERVICE_ALL_ACCESS security mask
* add calls to start and stop a service (to be filled in by the backend routines in services/svc_*.c (This used to be commit 793d28a946d83beb2576c5c8ce808d32c71c880a)
-rw-r--r--source3/include/rpc_secdes.h3
-rw-r--r--source3/include/rpc_svcctl.h2
-rw-r--r--source3/rpc_server/srv_svcctl_nt.c6
-rw-r--r--source3/services/svc_rcinit.c2
-rw-r--r--source3/services/svc_spoolss.c2
5 files changed, 9 insertions, 6 deletions
diff --git a/source3/include/rpc_secdes.h b/source3/include/rpc_secdes.h
index fe95706d03..a14caf36c1 100644
--- a/source3/include/rpc_secdes.h
+++ b/source3/include/rpc_secdes.h
@@ -518,7 +518,8 @@ typedef struct standard_mapping {
#define SERVICE_ALL_ACCESS \
( STANDARD_RIGHTS_REQUIRED_ACCESS | \
SERVICE_READ_ACCESS | \
- SERVICE_EXECUTE_ACCESS )
+ SERVICE_EXECUTE_ACCESS | \
+ SC_RIGHT_SVC_CHANGE_CONFIG )
diff --git a/source3/include/rpc_svcctl.h b/source3/include/rpc_svcctl.h
index ede5d65565..8ce2cbe404 100644
--- a/source3/include/rpc_svcctl.h
+++ b/source3/include/rpc_svcctl.h
@@ -204,7 +204,7 @@ typedef struct Service_info_struct {
typedef struct {
/* functions for enumerating subkeys and values */
- WERROR (*stop_service)( void );
+ WERROR (*stop_service)( SERVICE_STATUS *status );
WERROR (*start_service) ( void );
WERROR (*service_status)( SERVICE_STATUS *status );
} SERVICE_CONTROL_OPS;
diff --git a/source3/rpc_server/srv_svcctl_nt.c b/source3/rpc_server/srv_svcctl_nt.c
index e9f60e887c..c557036800 100644
--- a/source3/rpc_server/srv_svcctl_nt.c
+++ b/source3/rpc_server/srv_svcctl_nt.c
@@ -496,6 +496,8 @@ WERROR _svcctl_start_service(pipes_struct *p, SVCCTL_Q_START_SERVICE *q_u, SVCCT
if ( !(info->access_granted & SC_RIGHT_SVC_START) )
return WERR_ACCESS_DENIED;
+ return info->ops->start_service();
+
return WERR_OK;
}
@@ -518,6 +520,8 @@ WERROR _svcctl_control_service(pipes_struct *p, SVCCTL_Q_CONTROL_SERVICE *q_u, S
if ( !(info->access_granted & SC_RIGHT_SVC_STOP) )
return WERR_ACCESS_DENIED;
+ return info->ops->stop_service( &r_u->svc_status );
+
#if 0
SERVICE_INFO *service_info;
POLICY_HND *handle;
@@ -582,8 +586,6 @@ WERROR _svcctl_control_service(pipes_struct *p, SVCCTL_Q_CONTROL_SERVICE *q_u, S
DEBUG(10, ("_svcctl_query_service_config: Should call the commFound service [%s], [%s]\n",service_info->servicename,service_info->filename));
#endif
-
- return WERR_OK;
}
/********************************************************************
diff --git a/source3/services/svc_rcinit.c b/source3/services/svc_rcinit.c
index a4046b3511..c856ae2a99 100644
--- a/source3/services/svc_rcinit.c
+++ b/source3/services/svc_rcinit.c
@@ -171,7 +171,7 @@ BOOL get_LSB_data(char *fname,Service_info *si )
/*********************************************************************
*********************************************************************/
-static WERROR rcinit_stop( void )
+static WERROR rcinit_stop( SERVICE_STATUS *service_status )
{
return WERR_OK;
}
diff --git a/source3/services/svc_spoolss.c b/source3/services/svc_spoolss.c
index 991bc0fbfd..bd2f7173f1 100644
--- a/source3/services/svc_spoolss.c
+++ b/source3/services/svc_spoolss.c
@@ -25,7 +25,7 @@
/*********************************************************************
*********************************************************************/
-static WERROR spoolss_stop( void )
+static WERROR spoolss_stop( SERVICE_STATUS *service_status )
{
return WERR_OK;
}