blob: ccc175bb804762f465e52b1148a23324f470a758 [file] [log] [blame]
From f42d5e38859c65a186acd0da94bbeeca12faf7a2 Mon Sep 17 00:00:00 2001
From: David Rheinsberg <david.rheinsberg@gmail.com>
Date: Thu, 2 May 2019 17:33:34 +0200
Subject: [PATCH] launch: improve error handling for opendir()
This improves the error-handling of opendir() by always printing
diagnostics. Furthermore, it aligns the behavior with dbus-deamon and
ignores EACCES.
Signed-off-by: David Rheinsberg <david.rheinsberg@gmail.com>
Upstream-Status: dbus-broker@f42d5e38859c65a186acd0da94bbeeca12faf7a2
---
src/launch/launcher.c | 17 +++++++++++++++--
1 file changed, 15 insertions(+), 2 deletions(-)
diff --git a/src/launch/launcher.c b/src/launch/launcher.c
index 31a5364..2ec4bda 100644
--- a/src/launch/launcher.c
+++ b/src/launch/launcher.c
@@ -749,10 +749,23 @@ static int launcher_load_service_dir(Launcher *launcher, const char *dirpath, NS
dir = opendir(dirpath);
if (!dir) {
- if (errno == ENOENT || errno == ENOTDIR)
+ if (errno == ENOENT || errno == ENOTDIR) {
return 0;
- else
+ } else if (errno == EACCES) {
+ log_append_here(&launcher->log, LOG_ERR, 0, NULL);
+ r = log_commitf(&launcher->log, "Access denied to service directory '%s'\n", dirpath);
+ if (r)
+ return error_fold(r);
+
+ return 0;
+ } else {
+ log_append_here(&launcher->log, LOG_ERR, errno, NULL);
+ r = log_commitf(&launcher->log, "Unable to open service directory '%s': %m\n", dirpath);
+ if (r)
+ return error_fold(r);
+
return error_origin(-errno);
+ }
}
r = dirwatch_add(launcher->dirwatch, dirpath);
--
2.20.1