summaryrefslogtreecommitdiff
path: root/source4/lib
diff options
context:
space:
mode:
authorJelmer Vernooij <jelmer@samba.org>2006-11-03 01:49:19 +0000
committerGerald (Jerry) Carter <jerry@samba.org>2007-10-10 14:24:46 -0500
commit1b4b2a291d9a8e2ad2fa0771e7386a3f6d89512d (patch)
tree84cf373ccfd388f1326761b4afc331befa72dfe6 /source4/lib
parent06d9c68658bc9bebb6d48663cc013fdf6ad472d8 (diff)
downloadsamba-1b4b2a291d9a8e2ad2fa0771e7386a3f6d89512d.tar.gz
samba-1b4b2a291d9a8e2ad2fa0771e7386a3f6d89512d.tar.bz2
samba-1b4b2a291d9a8e2ad2fa0771e7386a3f6d89512d.zip
r19539: Move pidfile to smbd/
(This used to be commit eefa64cbe392c4c4dcbf71b8bcf5128cce0339ba)
Diffstat (limited to 'source4/lib')
-rw-r--r--source4/lib/util/config.mk6
-rw-r--r--source4/lib/util/pidfile.c125
2 files changed, 1 insertions, 130 deletions
diff --git a/source4/lib/util/config.mk b/source4/lib/util/config.mk
index 5e49eb839a..5d3e2cc4ca 100644
--- a/source4/lib/util/config.mk
+++ b/source4/lib/util/config.mk
@@ -28,13 +28,9 @@ OBJ_FILES = xfile.o \
idtree.o \
module.o
PUBLIC_DEPENDENCIES = \
- LIBCRYPTO LIBTALLOC \
+ LIBTALLOC LIBCRYPTO \
SOCKET_WRAPPER EXT_NSL
-[SUBSYSTEM::PIDFILE]
-PRIVATE_PROTO_HEADER = pidfile.h
-OBJ_FILES = pidfile.o
-
[SUBSYSTEM::UNIX_PRIVS]
PRIVATE_PROTO_HEADER = unix_privs.h
OBJ_FILES = unix_privs.o
diff --git a/source4/lib/util/pidfile.c b/source4/lib/util/pidfile.c
deleted file mode 100644
index dc9ecafae9..0000000000
--- a/source4/lib/util/pidfile.c
+++ /dev/null
@@ -1,125 +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 2 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, write to the Free Software
- Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-*/
-
-#include "includes.h"
-#include "system/filesys.h"
-
-#ifndef O_NONBLOCK
-#define O_NONBLOCK
-#endif
-
-/**
- * @file
- * @brief Pid file handling
- */
-
-/**
- * return the pid in a pidfile. return 0 if the process (or pidfile)
- * does not exist
- */
-_PUBLIC_ pid_t pidfile_pid(const char *name)
-{
- int fd;
- char pidstr[20];
- pid_t ret;
- char *pidFile;
-
- asprintf(&pidFile, "%s/%s.pid", lp_piddir(), name);
-
- 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 (!process_exists(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 *name)
-{
- int fd;
- char buf[20];
- char *pidFile;
- pid_t pid;
-
- asprintf(&pidFile, "%s/%s.pid", lp_piddir(), name);
-
- pid = pidfile_pid(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);
- }
-
- 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);
-}