Line data Source code
1 : /* 2 : * Unix SMB/CIFS implementation. 3 : * Service Control API Implementation 4 : * Copyright (C) Gerald Carter 2005. 5 : * 6 : * This program is free software; you can redistribute it and/or modify 7 : * it under the terms of the GNU General Public License as published by 8 : * the Free Software Foundation; either version 3 of the License, or 9 : * (at your option) any later version. 10 : * 11 : * This program is distributed in the hope that it will be useful, 12 : * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 : * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 : * GNU General Public License for more details. 15 : * 16 : * You should have received a copy of the GNU General Public License 17 : * along with this program; if not, see <http://www.gnu.org/licenses/>. 18 : */ 19 : 20 : #include "includes.h" 21 : #include "services/services.h" 22 : 23 : /* Implementation for internal spoolss service */ 24 : 25 : /********************************************************************* 26 : *********************************************************************/ 27 : 28 0 : static WERROR spoolss_stop( const char *service, struct SERVICE_STATUS *service_status ) 29 : { 30 0 : ZERO_STRUCTP( service_status ); 31 : 32 0 : lp_set_spoolss_state( SVCCTL_STOPPED ); 33 : 34 0 : service_status->type = SERVICE_TYPE_INTERACTIVE_PROCESS | 35 : SERVICE_TYPE_WIN32_OWN_PROCESS; 36 0 : service_status->state = SVCCTL_STOPPED; 37 0 : service_status->controls_accepted = SVCCTL_ACCEPT_STOP; 38 : 39 0 : DEBUG(6,("spoolss_stop: spooler stopped (not really)\n")); 40 : 41 0 : return WERR_OK; 42 : } 43 : 44 : /********************************************************************* 45 : *********************************************************************/ 46 : 47 4 : static WERROR spoolss_start( const char *service ) 48 : { 49 : /* see if the smb.conf will support this anyways */ 50 : 51 4 : if ( lp__disable_spoolss() ) 52 0 : return WERR_ACCESS_DENIED; 53 : 54 4 : if (lp_get_spoolss_state() == SVCCTL_RUNNING) { 55 4 : return WERR_SERVICE_ALREADY_RUNNING; 56 : } 57 : 58 0 : lp_set_spoolss_state( SVCCTL_RUNNING ); 59 : 60 0 : return WERR_OK; 61 : } 62 : 63 : /********************************************************************* 64 : *********************************************************************/ 65 : 66 20 : static WERROR spoolss_status( const char *service, struct SERVICE_STATUS *service_status ) 67 : { 68 20 : ZERO_STRUCTP( service_status ); 69 : 70 20 : service_status->type = SERVICE_TYPE_INTERACTIVE_PROCESS | 71 : SERVICE_TYPE_WIN32_OWN_PROCESS; 72 20 : service_status->state = lp_get_spoolss_state(); 73 20 : service_status->controls_accepted = SVCCTL_ACCEPT_STOP; 74 : 75 20 : return WERR_OK; 76 : } 77 : 78 : /********************************************************************* 79 : *********************************************************************/ 80 : 81 : /* struct for svcctl control to manipulate spoolss service */ 82 : 83 : SERVICE_CONTROL_OPS spoolss_svc_ops = { 84 : spoolss_stop, 85 : spoolss_start, 86 : spoolss_status 87 : };