about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--daemon.c8
1 files changed, 5 insertions, 3 deletions
diff --git a/daemon.c b/daemon.c
index 1643200..a1be594 100644
--- a/daemon.c
+++ b/daemon.c
@@ -247,11 +247,13 @@ int main(int argc, char *argv[]) {
 
 	int pidFile = -1;
 	if (pidPath) {
-		pidFile = open(
-			pidPath, O_WRONLY | O_CREAT | O_EXLOCK | O_CLOEXEC, 0600
-		);
+		pidFile = open(pidPath, O_WRONLY | O_CREAT | O_CLOEXEC, 0600);
 		if (pidFile < 0) err(EX_CANTCREAT, "%s", pidPath);
 
+		error = flock(pidFile, LOCK_EX | LOCK_NB);
+		if (error && errno != EWOULDBLOCK) err(EX_IOERR, "%s", pidPath);
+		if (error) errx(EX_CANTCREAT, "%s: file is locked", pidPath);
+
 		error = ftruncate(pidFile, 0);
 		if (error) err(EX_IOERR, "%s", pidPath);
 	}
17:28:57 -0400'>2020-08-16Add privileged servicesJune McEnroe This allows running things like kfcgi which do their own privilege dropping and chrooting. Need to update the examples with something like that. 2020-08-16Clear groups list for servicesJune McEnroe 2020-08-16Use process groups for servicesJune McEnroe This lets us properly signal services with child processes of their own. 2020-08-16Set title after reloadJune McEnroe 2020-08-15Set title on control commandsJune McEnroe If a control command starts a service, the title should be updated. 2020-08-15Add 126 to hardcoded stop exitsJune McEnroe > If a command is not found, the exit status shall be 127. If the > command name is found, but it is not an executable utility, the exit > status shall be 126. Applications that invoke utilities without using > the shell should use these exit status values to report similar errors. [1]: https://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html#tag_18_08_02 2020-08-15Remove EX_CONFIG from default stopexitsJune McEnroe I've used it for "remote" configuration which could change. 2020-08-15Avoid "control named pipe" phraseJune McEnroe 2020-08-15Check if pipe is writable in wrapperJune McEnroe 2020-08-15Parse config laterJune McEnroe This is just to keep the list of open file descriptors tidier, since parsing the config creates many pipes. 2020-08-15Only log signals other than SIGTERMJune McEnroe 2020-08-15Clarify restart interval in catsitd manualJune McEnroe 2020-08-15Fix resetting restart interval with explicit restartJune McEnroe 2020-08-15Add reset interval after which restart interval is resetJune McEnroe 2020-08-15Log when service name pattern doesn't matchJune McEnroe 2020-08-15Add FreeBSD rc scriptJune McEnroe I'm expecting to also have an OpenBSD rc script. 2020-08-15Call setproctitle with number of servicesJune McEnroe 2020-08-15Rename project to catsitJune McEnroe 2020-08-15Use only LOG_NOTICE and LOG_WARNINGJune McEnroe These are the two priorities that go to a normal place (/var/log/messages) by default. 2020-08-15Make log messages consistentJune McEnroe 2020-08-15Remove closelog callJune McEnroe It's unclear whether closelog is really safe to call in pre-exec context, so just trust that the log is opened with CLOEXEC. 2020-08-15Implement service statusJune McEnroe 2020-08-15Parse control commandsJune McEnroe 2020-08-15Read service pipesJune McEnroe Changed line reading functions to return const char * because modifying the strings by adding '\0' into them screws up the following call. 2020-08-15Implement non-blocking line-buffered readingJune McEnroe 2020-08-15Generate tags fileJune McEnroe 2020-08-15Just use CLOCK_MONOTONIC and clean up includesJune McEnroe CLOCK_MONOTONIC exists everywhere. 2020-08-15Reap childrenJune McEnroe 2020-08-14Implement serviceSignal, serviceStop, serviceRestartJune McEnroe 2020-08-14Reset restartInterval and restartDeadline on startJune McEnroe 2020-08-14Switch to timespec for timeoutsJune McEnroe Can be passed to ppoll(2) directly. 2020-08-14Implement serviceStartJune McEnroe 2020-08-14Flesh out Service structJune McEnroe 2020-08-14Build environment for servicesJune McEnroe 2020-08-14Implement spawntab parsingJune McEnroe 2020-08-14Open syslog, daemonize, write PIDJune McEnroe 2020-08-14Implement user and group lookupJune McEnroe 2020-08-14Add install targetJune McEnroe 2020-08-14Add spawnd skeletonJune McEnroe