Initial import
[samba] / source / web / startstop.c
1 /* 
2    Unix SMB/CIFS implementation.
3    start/stop nmbd and smbd
4    Copyright (C) Andrew Tridgell 1998
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 2 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, write to the Free Software
18    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
19 */
20
21 #include "includes.h"
22 #include "web/swat_proto.h"
23 #include "dynconfig.h"
24
25
26 /** Startup smbd from web interface. */
27 void start_smbd(void)
28 {
29         pstring binfile;
30
31         if (geteuid() != 0) return;
32
33         if (fork()) {
34                 return;
35         }
36
37         slprintf(binfile, sizeof(pstring) - 1, "%s/smbd", dyn_SBINDIR);
38
39         become_daemon(True);
40
41         execl(binfile, binfile, "-D", NULL);
42
43         exit(0);
44 }
45
46 /* startup nmbd */
47 void start_nmbd(void)
48 {
49         pstring binfile;
50
51         if (geteuid() != 0) return;
52
53         if (fork()) {
54                 return;
55         }
56
57         slprintf(binfile, sizeof(pstring) - 1, "%s/nmbd", dyn_SBINDIR);
58         
59         become_daemon(True);
60
61         execl(binfile, binfile, "-D", NULL);
62
63         exit(0);
64 }
65
66 /** Startup winbindd from web interface. */
67 void start_winbindd(void)
68 {
69         pstring binfile;
70
71         if (geteuid() != 0) return;
72
73         if (fork()) {
74                 return;
75         }
76
77         slprintf(binfile, sizeof(pstring) - 1, "%s/winbindd", dyn_SBINDIR);
78
79         become_daemon(True);
80
81         execl(binfile, binfile, NULL);
82
83         exit(0);
84 }
85
86
87 /* stop smbd */
88 void stop_smbd(void)
89 {
90         pid_t pid = pidfile_pid("smbd");
91
92         if (geteuid() != 0) return;
93
94         if (pid <= 0) return;
95
96         kill(pid, SIGTERM);
97 }
98
99 /* stop nmbd */
100 void stop_nmbd(void)
101 {
102         pid_t pid = pidfile_pid("nmbd");
103
104         if (geteuid() != 0) return;
105
106         if (pid <= 0) return;
107
108         kill(pid, SIGTERM);
109 }
110 #ifdef WITH_WINBIND
111 /* stop winbindd */
112 void stop_winbindd(void)
113 {
114         pid_t pid = pidfile_pid("winbindd");
115
116         if (geteuid() != 0) return;
117
118         if (pid <= 0) return;
119
120         kill(pid, SIGTERM);
121 }
122 #endif
123 /* kill a specified process */
124 void kill_pid(struct process_id pid)
125 {
126         if (geteuid() != 0) return;
127
128         if (procid_to_pid(&pid) <= 0) return;
129
130         kill(procid_to_pid(&pid), SIGTERM);
131 }