summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSamba Release Account <samba-bugs@samba.org>1996-12-10 17:55:27 +0000
committerSamba Release Account <samba-bugs@samba.org>1996-12-10 17:55:27 +0000
commit0c8df4cef915ff1bead02e5dad8d761a614dfb62 (patch)
tree16ecb3c9806b173d36c710e2f80cecbdf3f72d05
parent61dc3087a0fbe92d703d46722338aa9e06b56ed0 (diff)
downloadsamba-0c8df4cef915ff1bead02e5dad8d761a614dfb62.tar.gz
samba-0c8df4cef915ff1bead02e5dad8d761a614dfb62.tar.xz
samba-0c8df4cef915ff1bead02e5dad8d761a614dfb62.zip
Added -f option for lock file.
jra@cygnus.com
-rw-r--r--source/nmbd/nmbd.c32
1 files changed, 31 insertions, 1 deletions
diff --git a/source/nmbd/nmbd.c b/source/nmbd/nmbd.c
index d8865662c72..58953bcd9da 100644
--- a/source/nmbd/nmbd.c
+++ b/source/nmbd/nmbd.c
@@ -403,6 +403,7 @@ static void usage(char *pname)
int opt;
extern FILE *dbf;
extern char *optarg;
+ char pidFile[100] = { 0 };
*host_file = 0;
@@ -431,10 +432,13 @@ static void usage(char *pname)
signal(SIGHUP ,SIGNAL_CAST sig_hup);
signal(SIGTERM,SIGNAL_CAST sig_term);
- while ((opt = getopt(argc, argv, "s:T:I:C:bAi:B:N:Rn:l:d:Dp:hSH:G:")) != EOF)
+ while ((opt = getopt(argc, argv, "s:T:I:C:bAi:B:N:Rn:l:d:Dp:hSH:G:f:")) != EOF)
{
switch (opt)
{
+ case 'f':
+ strncpy(pidFile, optarg, sizeof(pidFile));
+ break;
case 's':
strcpy(servicesf,optarg);
break;
@@ -504,6 +508,32 @@ static void usage(char *pname)
become_daemon();
}
+ if (*pidFile)
+ {
+ int fd;
+ char buf[20];
+
+ if ((fd = open(pidFile,
+ O_NONBLOCK | 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: 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... */
+ }
+
+
DEBUG(3,("Opening sockets %d\n", port));
if (!open_sockets(is_daemon,port)) return 1;