root/source3/web/startstop.c

/* [<][>][^][v][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. start_smbd
  2. start_nmbd
  3. start_winbindd
  4. stop_smbd
  5. stop_nmbd
  6. stop_winbindd
  7. kill_pid

   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. */
  26 void start_smbd(void)
     /* [<][>][^][v][top][bottom][index][help] */
  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 */
  46 void start_nmbd(void)
     /* [<][>][^][v][top][bottom][index][help] */
  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. */
  66 void start_winbindd(void)
     /* [<][>][^][v][top][bottom][index][help] */
  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 */
  87 void stop_smbd(void)
     /* [<][>][^][v][top][bottom][index][help] */
  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 */
  99 void stop_nmbd(void)
     /* [<][>][^][v][top][bottom][index][help] */
 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 */
 111 void stop_winbindd(void)
     /* [<][>][^][v][top][bottom][index][help] */
 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 */
 123 void kill_pid(struct server_id pid)
     /* [<][>][^][v][top][bottom][index][help] */
 124 {
 125         if (geteuid() != 0) return;
 126 
 127         if (procid_to_pid(&pid) <= 0) return;
 128 
 129         kill(procid_to_pid(&pid), SIGTERM);
 130 }

/* [<][>][^][v][top][bottom][index][help] */