summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthieu Patou <mat@matws.net>2012-01-24 21:29:11 -0800
committerMatthieu Patou <mat@matws.net>2012-02-03 00:33:00 -0800
commit9b43ad4fcac1eb6796973336c5614b18a054080d (patch)
treecdfeb552e529c936656cfbd3c2e7c8123934b97d
parentdb869c5812053f7b71ab92e88e52bed148cad01b (diff)
downloadsamba-9b43ad4fcac1eb6796973336c5614b18a054080d.tar.gz
samba-9b43ad4fcac1eb6796973336c5614b18a054080d.tar.bz2
samba-9b43ad4fcac1eb6796973336c5614b18a054080d.zip
s3-pid: Catch with pid filename's change when config file is not smb.conf
This is what is done in pidfile_create
-rw-r--r--source3/lib/pidfile.c26
1 files changed, 25 insertions, 1 deletions
diff --git a/source3/lib/pidfile.c b/source3/lib/pidfile.c
index 88d0fb07ea..06fca91165 100644
--- a/source3/lib/pidfile.c
+++ b/source3/lib/pidfile.c
@@ -30,18 +30,42 @@ static char *pidFile_name = NULL;
/* return the pid in a pidfile. return 0 if the process (or pidfile)
does not exist */
-pid_t pidfile_pid(const char *name)
+pid_t pidfile_pid(const char *program_name)
{
int fd;
char pidstr[20];
pid_t pid;
unsigned int ret;
+ char *name;
+ const char *short_configfile;
char * pidFile;
+ /* Add a suffix to the program name if this is a process with a
+ * none default configuration file name. */
+ if (strcmp( CONFIGFILE, get_dyn_CONFIGFILE()) == 0) {
+ name = SMB_STRDUP(program_name);
+ } else {
+ short_configfile = strrchr( get_dyn_CONFIGFILE(), '/');
+ if (short_configfile == NULL) {
+ /* conf file in current directory */
+ short_configfile = get_dyn_CONFIGFILE();
+ } else {
+ /* full/relative path provided */
+ short_configfile++;
+ }
+ if (asprintf(&name, "%s-%s", program_name,
+ short_configfile) == -1) {
+ smb_panic("asprintf failed");
+ }
+ }
+
if (asprintf(&pidFile, "%s/%s.pid", lp_piddir(), name) == -1) {
+ SAFE_FREE(name);
return 0;
}
+ SAFE_FREE(name);
+
fd = sys_open(pidFile, O_NONBLOCK | O_RDONLY, 0644);
if (fd == -1) {
SAFE_FREE(pidFile);