diff options
-rw-r--r-- | source3/include/proto.h | 17 | ||||
-rw-r--r-- | source3/lib/util.c | 2 | ||||
-rw-r--r-- | source3/nmbd/nmbd.c | 39 | ||||
-rw-r--r-- | source3/smbd/server.c | 36 | ||||
-rw-r--r-- | source3/web/swat.c | 49 |
5 files changed, 70 insertions, 73 deletions
diff --git a/source3/include/proto.h b/source3/include/proto.h index 9c7c37f1a6..88b340319e 100644 --- a/source3/include/proto.h +++ b/source3/include/proto.h @@ -1487,6 +1487,11 @@ BOOL server_validate(char *user, char *domain, BOOL pcap_printername_ok(char *pszPrintername, char *pszPrintcapname); void pcap_printer_fn(void (*fn)()); +/*The following definitions come from pidfile.c */ + +void pidfile_create(char *name); +int pidfile_pid(char *name); + /*The following definitions come from pipes.c */ int reply_open_pipe_and_X(char *inbuf,char *outbuf,int length,int bufsize); @@ -1913,6 +1918,18 @@ char *cgi_baseurl(void); char *cgi_rooturl(void); char *cgi_pathinfo(void); +/*The following definitions come from web/diagnose.c */ + +BOOL nmbd_running(void); +BOOL smbd_running(void); + +/*The following definitions come from web/startstop.c */ + +void start_smbd(void); +void start_nmbd(void); +void stop_smbd(void); +void stop_nmbd(void); + /*The following definitions come from web/swat.c */ int main(int argc, char *argv[]); diff --git a/source3/lib/util.c b/source3/lib/util.c index 19fa42592f..3bc96e1034 100644 --- a/source3/lib/util.c +++ b/source3/lib/util.c @@ -3106,7 +3106,7 @@ void become_daemon(void) { #ifndef NO_FORK_DEBUG if (fork()) - exit(0); + _exit(0); /* detach from the terminal */ #ifdef USE_SETSID diff --git a/source3/nmbd/nmbd.c b/source3/nmbd/nmbd.c index f199a21ea8..e757aa46c4 100644 --- a/source3/nmbd/nmbd.c +++ b/source3/nmbd/nmbd.c @@ -549,7 +549,6 @@ int main(int argc,char *argv[]) int opt; extern FILE *dbf; extern char *optarg; - char pidFile[100] = { 0 }; global_nmb_port = NMB_PORT; *host_file = 0; @@ -599,9 +598,6 @@ int main(int argc,char *argv[]) { switch (opt) { - case 'f': - strncpy(pidFile, optarg, sizeof(pidFile)); - break; case 's': pstrcpy(servicesf,optarg); break; @@ -695,40 +691,11 @@ int main(int argc,char *argv[]) become_daemon(); } - if (!directory_exist(lp_lockdir(), NULL)) - { - mkdir(lp_lockdir(), 0755); - } - - if (*pidFile) - { - int fd; - char buf[20]; - -#ifdef O_NONBLOCK - fd = open( pidFile, O_NONBLOCK | O_CREAT | O_WRONLY | O_TRUNC, 0644 ); -#else - fd = open( pidFile, O_CREAT | O_WRONLY | O_TRUNC, 0644 ); -#endif - if ( fd < 0 ) - { - DEBUG(0,("ERROR: can't open %s: %s\n", pidFile, strerror(errno))); - exit(1); - } - if (fcntl_lock(fd,F_SETLK,0,1,F_WRLCK)==False) - { - DEBUG(0,("ERROR: nmbd is already running\n")); - exit(1); - } - sprintf(buf, "%u\n", (unsigned int) getpid()); - if (write(fd, buf, strlen(buf)) < 0) - { - DEBUG(0,("ERROR: can't write to %s: %s\n", pidFile, strerror(errno))); - exit(1); - } - /* Leave pid file open & locked for the duration... */ + if (!directory_exist(lp_lockdir(), NULL)) { + mkdir(lp_lockdir(), 0755); } + pidfile_create("nmbd"); DEBUG( 3, ( "Opening sockets %d\n", global_nmb_port ) ); diff --git a/source3/smbd/server.c b/source3/smbd/server.c index b42ebd6c0f..ca4a95f59d 100644 --- a/source3/smbd/server.c +++ b/source3/smbd/server.c @@ -5144,9 +5144,6 @@ static void usage(char *pname) int port = SMB_PORT; int opt; extern char *optarg; - char pidFile[100]; - - *pidFile = '\0'; #ifdef NEED_AUTH_PARAMETERS set_auth_parameters(argc,argv); @@ -5200,9 +5197,6 @@ static void usage(char *pname) while ((opt = getopt(argc, argv, "O:i:l:s:d:Dp:hPaf:")) != EOF) switch (opt) { - case 'f': - strncpy(pidFile, optarg, sizeof(pidFile)); - break; case 'O': strcpy(user_socket_options,optarg); break; @@ -5328,33 +5322,9 @@ static void usage(char *pname) mkdir(lp_lockdir(), 0755); } - if (*pidFile) - { - int fd; - char buf[20]; - - if ((fd = open(pidFile, -#ifdef O_NONBLOCK - O_NONBLOCK | -#endif - O_CREAT | O_WRONLY | O_TRUNC, 0644)) < 0) - { - DEBUG(0,("ERROR: can't open %s: %s\n", pidFile, strerror(errno))); - exit(1); - } - if(fcntl_lock(fd,F_SETLK,0,1,F_WRLCK)==False) - { - DEBUG(0,("ERROR: smbd is already running\n")); - exit(1); - } - sprintf(buf, "%u\n", (unsigned int) getpid()); - if (write(fd, buf, strlen(buf)) < 0) - { - DEBUG(0,("ERROR: can't write to %s: %s\n", pidFile, strerror(errno))); - exit(1); - } - /* Leave pid file open & locked for the duration... */ - } + if (is_daemon) { + pidfile_create("smbd"); + } if (!open_sockets(is_daemon,port)) exit(1); diff --git a/source3/web/swat.c b/source3/web/swat.c index 650740428f..422259a05a 100644 --- a/source3/web/swat.c +++ b/source3/web/swat.c @@ -1,7 +1,7 @@ /* Unix SMB/Netbios implementation. Version 1.9. - html smb.conf editing - prototype only + Samba Web Administration Tool Copyright (C) Andrew Tridgell 1997-1998 This program is free software; you can redistribute it and/or modify @@ -537,8 +537,26 @@ static void status_page(void) pstring fname; FILE *f; + if (cgi_variable("smbd_start")) { + start_smbd(); + } + + if (cgi_variable("smbd_stop")) { + stop_smbd(); + } + + if (cgi_variable("nmbd_start")) { + start_nmbd(); + } + + if (cgi_variable("nmbd_stop")) { + stop_nmbd(); + } + printf("<H2>Server Status</H2>\n"); + printf("<FORM method=post>\n"); + pstrcpy(fname,lp_lockdir()); standard_sub_basic(fname); trim_string(fname,"","/"); @@ -553,9 +571,32 @@ static void status_page(void) } - printf("\nSamba version %s\n<p>",VERSION); + printf("<table>\n"); + + printf("<tr><td>version:</td><td>%s</td></tr>",VERSION); + + fflush(stdout); + if (smbd_running()) { + printf("<tr><td>smbd:</td><td>running</td><td><input type=submit name=\"smbd_stop\" value=\"Stop smbd\"></td></tr>\n"); + } else { + printf("<tr><td>smbd:</td><td>not running</td><td><input type=submit name=\"smbd_start\" value=\"Start smbd\"></td></tr>\n"); + } + + fflush(stdout); + if (nmbd_running()) { + printf("<tr><td>nmbd:</td><td>running</td><td><input type=submit name=\"nmbd_stop\" value=\"Stop nmbd\"></td></tr>\n"); + } else { + printf("<tr><td>nmbd:</td><td>not running</td><td><input type=submit name=\"nmbd_start\" value=\"Start nmbd\"></td></tr>\n"); + } + + printf("</table>\n"); + fflush(stdout); + - printf("<h3>Active Connections</h3>\n"); + if (geteuid() != 0) + printf("<b>NOTE: You are not logged in as root and won't be able to start/stop the server</b><p>\n"); + + printf("<p><h3>Active Connections</h3>\n"); printf("<table border=1>\n"); printf("<tr><th>Share</th><th>User</th><th>Group</th><th>PID</th><th>Client</th><th>Date</th></tr>\n\n"); @@ -583,6 +624,8 @@ static void status_page(void) printf("</table>\n"); fclose(f); + + printf("</FORM>\n"); } |