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 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 "web/swat_proto.h" 22#include "dynconfig.h" 23 24 25/** Startup smbd from web interface. */ 26void start_smbd(void) 27{ 28 char *binfile = NULL; 29 30 if (geteuid() != 0) { 31 return; 32 } 33 34 if (fork()) { 35 return; 36 } 37 38 if (asprintf(&binfile, "%s/smbd", get_dyn_SBINDIR()) > 0) { 39 become_daemon(true, false); 40 execl(binfile, binfile, "-D", NULL); 41 } 42 exit(0); 43} 44 45/* startup nmbd */ 46void start_nmbd(void) 47{ 48 char *binfile = NULL; 49 50 if (geteuid() != 0) { 51 return; 52 } 53 54 if (fork()) { 55 return; 56 } 57 58 if (asprintf(&binfile, "%s/nmbd", get_dyn_SBINDIR()) > 0) { 59 become_daemon(true, false); 60 execl(binfile, binfile, "-D", NULL); 61 } 62 exit(0); 63} 64 65/** Startup winbindd from web interface. */ 66void start_winbindd(void) 67{ 68 char *binfile = NULL; 69 70 if (geteuid() != 0) { 71 return; 72 } 73 74 if (fork()) { 75 return; 76 } 77 78 if (asprintf(&binfile, "%s/winbindd", get_dyn_SBINDIR()) > 0) { 79 become_daemon(true, false); 80 execl(binfile, binfile, NULL); 81 } 82 exit(0); 83} 84 85 86/* stop smbd */ 87void stop_smbd(void) 88{ 89 pid_t pid = pidfile_pid("smbd"); 90 91 if (geteuid() != 0) return; 92 93 if (pid <= 0) return; 94 95 kill(pid, SIGTERM); 96} 97 98/* stop nmbd */ 99void stop_nmbd(void) 100{ 101 pid_t pid = pidfile_pid("nmbd"); 102 103 if (geteuid() != 0) return; 104 105 if (pid <= 0) return; 106 107 kill(pid, SIGTERM); 108} 109#ifdef WITH_WINBIND 110/* stop winbindd */ 111void stop_winbindd(void) 112{ 113 pid_t pid = pidfile_pid("winbindd"); 114 115 if (geteuid() != 0) return; 116 117 if (pid <= 0) return; 118 119 kill(pid, SIGTERM); 120} 121#endif 122/* kill a specified process */ 123void kill_pid(struct server_id pid) 124{ 125 if (geteuid() != 0) return; 126 127 if (procid_to_pid(&pid) <= 0) return; 128 129 kill(procid_to_pid(&pid), SIGTERM); 130} 131