summaryrefslogtreecommitdiff
path: root/source4/smbd
diff options
context:
space:
mode:
authorJeremy Allison <jra@samba.org>2012-07-19 15:41:52 -0700
committerJeremy Allison <jra@samba.org>2012-07-19 15:41:52 -0700
commit2922fdaaf0ab2178a1701141cc2435af33c10dc8 (patch)
tree1b1a3c9dd8eb6151f4c9c640543ca5e4dbebdfdc /source4/smbd
parent03a6137001c418c254505ddab694e1aefc73985d (diff)
downloadsamba-2922fdaaf0ab2178a1701141cc2435af33c10dc8.tar.gz
samba-2922fdaaf0ab2178a1701141cc2435af33c10dc8.tar.bz2
samba-2922fdaaf0ab2178a1701141cc2435af33c10dc8.zip
Move source4/smbd/pidfile into lib/util in preparation for making it in common.
Diffstat (limited to 'source4/smbd')
-rw-r--r--source4/smbd/pidfile.c131
-rw-r--r--source4/smbd/server.c2
-rw-r--r--source4/smbd/wscript_build8
3 files changed, 2 insertions, 139 deletions
diff --git a/source4/smbd/pidfile.c b/source4/smbd/pidfile.c
deleted file mode 100644
index 32d3964302..0000000000
--- a/source4/smbd/pidfile.c
+++ /dev/null
@@ -1,131 +0,0 @@
-/* this code is broken - there is a race condition with the unlink (tridge) */
-
-/*
- Unix SMB/CIFS implementation.
- pidfile handling
- Copyright (C) Andrew Tridgell 1998
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program. If not, see <http://www.gnu.org/licenses/>.
-*/
-
-#include "includes.h"
-#include "system/filesys.h"
-#include "smbd/pidfile.h"
-
-/**
- * @file
- * @brief Pid file handling
- */
-
-/**
- * return the pid in a pidfile. return 0 if the process (or pidfile)
- * does not exist
- */
-pid_t pidfile_pid(const char *piddir, const char *name)
-{
- int fd;
- char pidstr[20];
- pid_t ret;
- char *pidFile;
-
- if (asprintf(&pidFile, "%s/%s.pid", piddir, name) < 0) {
- return 0;
- }
-
- fd = open(pidFile, O_NONBLOCK | O_RDONLY, 0644);
-
- if (fd == -1) {
- SAFE_FREE(pidFile);
- return 0;
- }
-
- ZERO_STRUCT(pidstr);
-
- if (read(fd, pidstr, sizeof(pidstr)-1) <= 0) {
- goto noproc;
- }
-
- ret = (pid_t)atoi(pidstr);
- if (ret <= 0) {
- goto noproc;
- }
-
- if (!process_exists_by_pid(ret)) {
- goto noproc;
- }
-
- if (fcntl_lock(fd,F_SETLK,0,1,F_RDLCK)) {
- /* we could get the lock - it can't be a Samba process */
- goto noproc;
- }
-
- close(fd);
- SAFE_FREE(pidFile);
- return ret;
-
- noproc:
- close(fd);
- unlink(pidFile);
- SAFE_FREE(pidFile);
- return 0;
-}
-
-/**
- * create a pid file in the pid directory. open it and leave it locked
- */
-void pidfile_create(const char *piddir, const char *name)
-{
- int fd;
- char buf[20];
- char *pidFile;
- pid_t pid;
-
- if (asprintf(&pidFile, "%s/%s.pid", piddir, name) < 0) {
- DEBUG(0,("ERROR: Out of memory\n"));
- exit(1);
- }
-
- pid = pidfile_pid(piddir, name);
- if (pid != 0) {
- DEBUG(0,("ERROR: %s is already running. File %s exists and process id %d is running.\n",
- name, pidFile, (int)pid));
- exit(1);
- }
-
- fd = open(pidFile, O_NONBLOCK | O_CREAT | O_WRONLY | O_EXCL, 0644);
- if (fd == -1) {
- DEBUG(0,("ERROR: can't open %s: Error was %s\n", pidFile,
- strerror(errno)));
- exit(1);
- }
-
- smb_set_close_on_exec(fd);
-
- if (fcntl_lock(fd,F_SETLK,0,1,F_WRLCK)==false) {
- DEBUG(0,("ERROR: %s : fcntl lock of file %s failed. Error was %s\n",
- name, pidFile, strerror(errno)));
- exit(1);
- }
-
- memset(buf, 0, sizeof(buf));
- slprintf(buf, sizeof(buf) - 1, "%u\n", (unsigned int) getpid());
- if (write(fd, buf, strlen(buf)) != (ssize_t)strlen(buf)) {
- DEBUG(0,("ERROR: can't write to file %s: %s\n",
- pidFile, strerror(errno)));
- exit(1);
- }
-
- /* Leave pid file open & locked for the duration... */
- SAFE_FREE(pidFile);
-}
diff --git a/source4/smbd/server.c b/source4/smbd/server.c
index 21560f981f..a6ebcd65d8 100644
--- a/source4/smbd/server.c
+++ b/source4/smbd/server.c
@@ -34,7 +34,7 @@
#include "libcli/auth/schannel.h"
#include "smbd/process_model.h"
#include "param/secrets.h"
-#include "smbd/pidfile.h"
+#include "lib/util/pidfile.h"
#include "param/param.h"
#include "dsdb/samdb/samdb.h"
#include "auth/session.h"
diff --git a/source4/smbd/wscript_build b/source4/smbd/wscript_build
index 97877fc54b..bfa13121f2 100644
--- a/source4/smbd/wscript_build
+++ b/source4/smbd/wscript_build
@@ -9,12 +9,6 @@ bld.SAMBA_LIBRARY('service',
)
-bld.SAMBA_SUBSYSTEM('PIDFILE',
- source='pidfile.c',
- deps='talloc',
- autoproto='pidfile.h'
- )
-
bld.SAMBA_LIBRARY('process_model',
source='process_model.c',
autoproto='process_model_proto.h',
@@ -27,7 +21,7 @@ bld.SAMBA_BINARY('samba',
source='server.c',
manpages='samba.8',
subsystem_name='service',
- deps='''events process_model service samba-hostconfig samba-util POPT_SAMBA PIDFILE
+ deps='''events process_model service samba-hostconfig samba-util POPT_SAMBA
popt gensec registry ntptr ntvfs share cluster COMMON_SCHANNEL SECRETS''',
pyembed=True,
install_path='${SBINDIR}',