]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
sysusers: emit a bit more info at debug level when locking fails
authorZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Mon, 29 Jan 2018 13:23:31 +0000 (14:23 +0100)
committerZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Fri, 2 Feb 2018 08:09:24 +0000 (09:09 +0100)
This is the first error message when running unprivileged, and the message is
unspecific, so let's at least add some logging at debug level to make this less
confusing.

src/basic/user-util.c
src/basic/user-util.h
src/sysusers/sysusers.c

index 17a9b5a8f1309237649de1dbcee0fed9dcaddb1b..011b29ad023b24fa367a57633d89b46670a7f8ee 100644 (file)
@@ -553,18 +553,18 @@ int take_etc_passwd_lock(const char *root) {
          * awfully racy, and thus we just won't do them. */
 
         if (root)
-                path = prefix_roota(root, "/etc/.pwd.lock");
+                path = prefix_roota(root, ETC_PASSWD_LOCK_PATH);
         else
-                path = "/etc/.pwd.lock";
+                path = ETC_PASSWD_LOCK_PATH;
 
         fd = open(path, O_WRONLY|O_CREAT|O_CLOEXEC|O_NOCTTY|O_NOFOLLOW, 0600);
         if (fd < 0)
-                return -errno;
+                return log_debug_errno(errno, "Cannot open %s: %m", path);
 
         r = fcntl(fd, F_SETLKW, &flock);
         if (r < 0) {
                 safe_close(fd);
-                return -errno;
+                return log_debug_errno(errno, "Locking %s failed: %m", path);
         }
 
         return fd;
index 5f0391f2b85b14d4e3c4fc024418e40a0db4bb84..290d17a0c648419db7ae0111798017f79fdabcaa 100644 (file)
@@ -63,6 +63,8 @@ int take_etc_passwd_lock(const char *root);
 #define UID_NOBODY ((uid_t) 65534U)
 #define GID_NOBODY ((gid_t) 65534U)
 
+#define ETC_PASSWD_LOCK_PATH "/etc/.pwd.lock"
+
 static inline bool uid_is_dynamic(uid_t uid) {
         return DYNAMIC_UID_MIN <= uid && uid <= DYNAMIC_UID_MAX;
 }
index 510d5fa59eb4b5301d2b70c030a84b940af0aaa2..288f6a16658ed48c8d4e29319a0f2998868dade7 100644 (file)
@@ -1841,7 +1841,7 @@ int main(int argc, char *argv[]) {
 
         lock = take_etc_passwd_lock(arg_root);
         if (lock < 0) {
-                log_error_errno(lock, "Failed to take lock: %m");
+                log_error_errno(lock, "Failed to take /etc/passwd lock: %m");
                 goto finish;
         }