diff options
author | Gerald Carter <jerry@samba.org> | 2005-09-30 17:13:37 +0000 |
---|---|---|
committer | Gerald (Jerry) Carter <jerry@samba.org> | 2007-10-10 11:04:48 -0500 |
commit | 54abd2aa66069e6baf7769c496f46d9dba18db39 (patch) | |
tree | 9cf8e88168011797319ba9e9866749201b1eac1e /source3/services/svc_rcinit.c | |
parent | 4a2cc231d22a82ed21771a72508f15d21ed63227 (diff) | |
download | samba-54abd2aa66069e6baf7769c496f46d9dba18db39.tar.gz |
r10656: BIG merge from trunk. Features not copied over
* \PIPE\unixinfo
* winbindd's {group,alias}membership new functions
* winbindd's lookupsids() functionality
* swat (trunk changes to be reverted as per discussion with Deryck)
(This used to be commit 939c3cb5d78e3a2236209b296aa8aba8bdce32d3)
Diffstat (limited to 'source3/services/svc_rcinit.c')
-rw-r--r-- | source3/services/svc_rcinit.c | 64 |
1 files changed, 59 insertions, 5 deletions
diff --git a/source3/services/svc_rcinit.c b/source3/services/svc_rcinit.c index c856ae2a995..5801d076c49 100644 --- a/source3/services/svc_rcinit.c +++ b/source3/services/svc_rcinit.c @@ -171,24 +171,78 @@ BOOL get_LSB_data(char *fname,Service_info *si ) /********************************************************************* *********************************************************************/ -static WERROR rcinit_stop( SERVICE_STATUS *service_status ) +static WERROR rcinit_stop( const char *service, SERVICE_STATUS *status ) { - return WERR_OK; + pstring command; + int ret, fd; + + pstr_sprintf( command, "%s/%s/%s stop", dyn_LIBDIR, SVCCTL_SCRIPT_DIR, service ); + + /* we've already performed the access check when the service was opened */ + + become_root(); + ret = smbrun( command , &fd ); + unbecome_root(); + + DEBUGADD(5, ("rcinit_start: [%s] returned [%d]\n", command, ret)); + close(fd); + + ZERO_STRUCTP( status ); + status->type = 0x0020; + status->state = (ret == 0 ) ? 0x0001 : 0x0004; + status->controls_accepted = 0x0005; + + return ( ret == 0 ) ? WERR_OK : WERR_ACCESS_DENIED; } /********************************************************************* *********************************************************************/ -static WERROR rcinit_start( void ) +static WERROR rcinit_start( const char *service ) { - return WERR_OK; + pstring command; + int ret, fd; + + pstr_sprintf( command, "%s/%s/%s start", dyn_LIBDIR, SVCCTL_SCRIPT_DIR, service ); + + /* we've already performed the access check when the service was opened */ + + become_root(); + ret = smbrun( command , &fd ); + unbecome_root(); + + DEBUGADD(5, ("rcinit_start: [%s] returned [%d]\n", command, ret)); + close(fd); + + return ( ret == 0 ) ? WERR_OK : WERR_ACCESS_DENIED; } /********************************************************************* *********************************************************************/ -static WERROR rcinit_status( SERVICE_STATUS *service_status ) +static WERROR rcinit_status( const char *service, SERVICE_STATUS *status ) { + pstring command; + int ret, fd; + + pstr_sprintf( command, "%s/%s/%s status", dyn_LIBDIR, SVCCTL_SCRIPT_DIR, service ); + + /* we've already performed the access check when the service was opened */ + /* assume as return code of 0 means that the service is ok. Anything else + is STOPPED */ + + become_root(); + ret = smbrun( command , &fd ); + unbecome_root(); + + DEBUGADD(5, ("rcinit_start: [%s] returned [%d]\n", command, ret)); + close(fd); + + ZERO_STRUCTP( status ); + status->type = 0x0020; + status->state = (ret == 0 ) ? 0x0004 : 0x0001; + status->controls_accepted = 0x0005; + return WERR_OK; } |