svn commit: samba r19539 - in branches/SAMBA_4_0/source: lib/util
smbd
jelmer at samba.org
jelmer at samba.org
Fri Nov 3 01:49:20 GMT 2006
Author: jelmer
Date: 2006-11-03 01:49:19 +0000 (Fri, 03 Nov 2006)
New Revision: 19539
WebSVN: http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=rev&root=samba&rev=19539
Log:
Move pidfile to smbd/
Added:
branches/SAMBA_4_0/source/smbd/pidfile.c
Removed:
branches/SAMBA_4_0/source/lib/util/pidfile.c
Modified:
branches/SAMBA_4_0/source/lib/util/config.mk
branches/SAMBA_4_0/source/smbd/config.mk
branches/SAMBA_4_0/source/smbd/server.c
Changeset:
Modified: branches/SAMBA_4_0/source/lib/util/config.mk
===================================================================
--- branches/SAMBA_4_0/source/lib/util/config.mk 2006-11-03 00:34:52 UTC (rev 19538)
+++ branches/SAMBA_4_0/source/lib/util/config.mk 2006-11-03 01:49:19 UTC (rev 19539)
@@ -28,13 +28,9 @@
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
Deleted: branches/SAMBA_4_0/source/lib/util/pidfile.c
===================================================================
--- branches/SAMBA_4_0/source/lib/util/pidfile.c 2006-11-03 00:34:52 UTC (rev 19538)
+++ branches/SAMBA_4_0/source/lib/util/pidfile.c 2006-11-03 01:49:19 UTC (rev 19539)
@@ -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);
-}
Modified: branches/SAMBA_4_0/source/smbd/config.mk
===================================================================
--- branches/SAMBA_4_0/source/smbd/config.mk 2006-11-03 00:34:52 UTC (rev 19538)
+++ branches/SAMBA_4_0/source/smbd/config.mk 2006-11-03 01:49:19 UTC (rev 19539)
@@ -23,6 +23,10 @@
# End SUBSYSTEM SERVER
#######################
+[SUBSYSTEM::PIDFILE]
+OBJ_FILES = pidfile.o
+PUBLIC_PROTO_HEADER = pidfile.h
+
#################################
# Start BINARY smbd
[BINARY::smbd]
@@ -35,8 +39,8 @@
service \
LIBSAMBA-CONFIG \
LIBSAMBA-UTIL \
+ POPT_SAMBA \
PIDFILE \
- POPT_SAMBA \
LIBPOPT \
gensec \
registry \
Copied: branches/SAMBA_4_0/source/smbd/pidfile.c (from rev 19519, branches/SAMBA_4_0/source/lib/util/pidfile.c)
===================================================================
--- branches/SAMBA_4_0/source/lib/util/pidfile.c 2006-10-31 19:06:46 UTC (rev 19519)
+++ branches/SAMBA_4_0/source/smbd/pidfile.c 2006-11-03 01:49:19 UTC (rev 19539)
@@ -0,0 +1,121 @@
+/* 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"
+
+/**
+ * @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 *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);
+}
Modified: branches/SAMBA_4_0/source/smbd/server.c
===================================================================
--- branches/SAMBA_4_0/source/smbd/server.c 2006-11-03 00:34:52 UTC (rev 19538)
+++ branches/SAMBA_4_0/source/smbd/server.c 2006-11-03 01:49:19 UTC (rev 19539)
@@ -38,7 +38,7 @@
#include "smbd/process_model.h"
#include "smbd/service.h"
#include "passdb/secrets.h"
-#include "lib/util/pidfile.h"
+#include "smbd/pidfile.h"
/*
recursively delete a directory tree
More information about the samba-cvs
mailing list