2009-01-09 16:32:39 +03:00
/*
2005-06-15 04:54:43 +04:00
* Unix SMB / CIFS implementation .
* Service Control API Implementation
* Copyright ( C ) Gerald Carter 2005.
2009-01-09 16:32:39 +03:00
*
2005-06-15 04:54:43 +04:00
* This program is free software ; you can redistribute it and / or modify
* it under the terms of the GNU General Public License as published by
2007-07-09 23:25:36 +04:00
* the Free Software Foundation ; either version 3 of the License , or
2005-06-15 04:54:43 +04:00
* ( at your option ) any later version .
2009-01-09 16:32:39 +03:00
*
2005-06-15 04:54:43 +04:00
* This program is distributed in the hope that it will be useful ,
* but WITHOUT ANY WARRANTY ; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See the
* GNU General Public License for more details .
2009-01-09 16:32:39 +03:00
*
2005-06-15 04:54:43 +04:00
* You should have received a copy of the GNU General Public License
2007-07-10 09:23:25 +04:00
* along with this program ; if not , see < http : //www.gnu.org/licenses/>.
2005-06-15 04:54:43 +04:00
*/
# include "includes.h"
2010-05-20 15:39:46 +04:00
# include "services/services.h"
2005-06-15 04:54:43 +04:00
/* Implementation for internal spoolss service */
/*********************************************************************
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2009-01-08 15:23:59 +03:00
static WERROR spoolss_stop ( const char * service , struct SERVICE_STATUS * service_status )
2005-06-15 04:54:43 +04:00
{
2005-06-15 19:18:18 +04:00
ZERO_STRUCTP ( service_status ) ;
2009-01-09 16:32:39 +03:00
2005-06-15 19:18:18 +04:00
lp_set_spoolss_state ( SVCCTL_STOPPED ) ;
2009-01-09 16:32:39 +03:00
service_status - > type = SERVICE_TYPE_INTERACTIVE_PROCESS |
SERVICE_TYPE_WIN32_OWN_PROCESS ;
service_status - > state = SVCCTL_STOPPED ;
service_status - > controls_accepted = SVCCTL_ACCEPT_STOP ;
2005-06-15 19:18:18 +04:00
DEBUG ( 6 , ( " spoolss_stop: spooler stopped (not really) \n " ) ) ;
2005-06-15 04:54:43 +04:00
return WERR_OK ;
}
/*********************************************************************
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2005-09-30 21:13:37 +04:00
static WERROR spoolss_start ( const char * service )
2005-06-15 04:54:43 +04:00
{
2005-06-15 19:18:18 +04:00
/* see if the smb.conf will support this anyways */
2009-01-09 16:32:39 +03:00
2012-04-12 11:03:38 +04:00
if ( lp__disable_spoolss ( ) )
2005-06-15 19:18:18 +04:00
return WERR_ACCESS_DENIED ;
2009-01-09 16:32:39 +03:00
2009-04-21 18:18:51 +04:00
if ( lp_get_spoolss_state ( ) = = SVCCTL_RUNNING ) {
return WERR_SERVICE_ALREADY_RUNNING ;
}
2009-01-09 16:32:39 +03:00
lp_set_spoolss_state ( SVCCTL_RUNNING ) ;
2005-06-15 04:54:43 +04:00
return WERR_OK ;
}
/*********************************************************************
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2009-01-08 15:23:59 +03:00
static WERROR spoolss_status ( const char * service , struct SERVICE_STATUS * service_status )
2005-06-15 04:54:43 +04:00
{
2005-09-30 21:13:37 +04:00
ZERO_STRUCTP ( service_status ) ;
2009-01-09 16:32:39 +03:00
service_status - > type = SERVICE_TYPE_INTERACTIVE_PROCESS |
SERVICE_TYPE_WIN32_OWN_PROCESS ;
service_status - > state = lp_get_spoolss_state ( ) ;
service_status - > controls_accepted = SVCCTL_ACCEPT_STOP ;
2005-06-15 04:54:43 +04:00
return WERR_OK ;
}
/*********************************************************************
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
/* struct for svcctl control to manipulate spoolss service */
SERVICE_CONTROL_OPS spoolss_svc_ops = {
spoolss_stop ,
spoolss_start ,
spoolss_status
} ;