#include "serialize.h"
#include "siphash24.h"
#include "socket-util.h"
+#include "stat-util.h"
#include "stdio-util.h"
#include "string-util.h"
#include "uid-classification.h"
xsprintf(lock_path, "/run/systemd/dynamic-uid/" UID_FMT, candidate);
for (;;) {
- struct stat st;
-
lock_fd = open(lock_path, O_CREAT|O_RDWR|O_NOFOLLOW|O_CLOEXEC|O_NOCTTY, 0600);
if (lock_fd < 0)
return -errno;
return -errno;
}
- if (fstat(lock_fd, &st) < 0)
- return -errno;
- if (st.st_nlink > 0)
+ r = fd_verify_linked(lock_fd);
+ if (r >= 0)
break;
+ if (r != -EIDRM)
+ return r;
/* Oh, bummer, we got the lock, but the file was unlinked between the time we opened it and
* got the lock. Close it, and try again. */