From 1c0cb70272810e48ba7913cd0edee58b5f0963c0 Mon Sep 17 00:00:00 2001 From: kn Date: Sun, 27 Nov 2022 15:19:38 +0000 Subject: [PATCH] Provide more accurate lock error message When started manuall from single-user mode (/ still read-only), the current error is misleading: # slaacd -dv slaacd: already running The lock was specifically added to prevent multiple instances in the installer, which discards the error message entirely anyway. Retain the useful EAGAIN/"already running" message, but otherwise print the real error reason: # slaacd -dv slaacd: /dev/slaacd.lock: Read-only file system Feedback OK deraadt millert --- sbin/dhcpleased/dhcpleased.c | 9 ++++++--- sbin/resolvd/resolvd.c | 9 ++++++--- sbin/slaacd/slaacd.c | 9 ++++++--- 3 files changed, 18 insertions(+), 9 deletions(-) diff --git a/sbin/dhcpleased/dhcpleased.c b/sbin/dhcpleased/dhcpleased.c index ef6200d6bc0..cc9d98995d2 100644 --- a/sbin/dhcpleased/dhcpleased.c +++ b/sbin/dhcpleased/dhcpleased.c @@ -1,4 +1,4 @@ -/* $OpenBSD: dhcpleased.c,v 1.26 2022/07/23 09:33:18 florian Exp $ */ +/* $OpenBSD: dhcpleased.c,v 1.27 2022/11/27 15:19:38 kn Exp $ */ /* * Copyright (c) 2017, 2021 Florian Obser @@ -221,8 +221,11 @@ main(int argc, char *argv[]) errx(1, "need root privileges"); lockfd = open(_PATH_LOCKFILE, O_CREAT|O_RDWR|O_EXLOCK|O_NONBLOCK, 0600); - if (lockfd == -1) - errx(1, "already running"); + if (lockfd == -1) { + if (errno == EAGAIN) + errx(1, "already running"); + err(1, "%s", _PATH_LOCKFILE); + } /* Check for assigned daemon user */ if (getpwnam(DHCPLEASED_USER) == NULL) diff --git a/sbin/resolvd/resolvd.c b/sbin/resolvd/resolvd.c index 5fb9b39a1e3..9260a6254ab 100644 --- a/sbin/resolvd/resolvd.c +++ b/sbin/resolvd/resolvd.c @@ -1,4 +1,4 @@ -/* $OpenBSD: resolvd.c,v 1.29 2022/11/14 13:57:46 kn Exp $ */ +/* $OpenBSD: resolvd.c,v 1.30 2022/11/27 15:19:38 kn Exp $ */ /* * Copyright (c) 2021 Florian Obser * Copyright (c) 2021 Theo de Raadt @@ -193,8 +193,11 @@ main(int argc, char *argv[]) errx(1, "need root privileges"); lockfd = open(_PATH_LOCKFILE, O_CREAT|O_RDWR|O_EXLOCK|O_NONBLOCK, 0600); - if (lockfd == -1) - errx(1, "already running"); + if (lockfd == -1) { + if (errno == EAGAIN) + errx(1, "already running"); + err(1, "%s", _PATH_LOCKFILE); + } if (!debug) daemon(0, 0); diff --git a/sbin/slaacd/slaacd.c b/sbin/slaacd/slaacd.c index 4326492c545..816afff65e9 100644 --- a/sbin/slaacd/slaacd.c +++ b/sbin/slaacd/slaacd.c @@ -1,4 +1,4 @@ -/* $OpenBSD: slaacd.c,v 1.66 2022/09/15 07:59:59 florian Exp $ */ +/* $OpenBSD: slaacd.c,v 1.67 2022/11/27 15:19:38 kn Exp $ */ /* * Copyright (c) 2017 Florian Obser @@ -179,8 +179,11 @@ main(int argc, char *argv[]) errx(1, "need root privileges"); lockfd = open(_PATH_LOCKFILE, O_CREAT|O_RDWR|O_EXLOCK|O_NONBLOCK, 0600); - if (lockfd == -1) - errx(1, "already running"); + if (lockfd == -1) { + if (errno == EAGAIN) + errx(1, "already running"); + err(1, "%s", _PATH_LOCKFILE); + } /* Check for assigned daemon user */ if (getpwnam(SLAACD_USER) == NULL) -- 2.20.1