diff options
author | Matthieu Patou <mat@matws.net> | 2012-01-24 21:29:11 -0800 |
---|---|---|
committer | Matthieu Patou <mat@matws.net> | 2012-02-03 00:33:00 -0800 |
commit | 9b43ad4fcac1eb6796973336c5614b18a054080d (patch) | |
tree | cdfeb552e529c936656cfbd3c2e7c8123934b97d /source3 | |
parent | db869c5812053f7b71ab92e88e52bed148cad01b (diff) | |
download | samba-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
Diffstat (limited to 'source3')
-rw-r--r-- | source3/lib/pidfile.c | 26 |
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); |