util-lib: move take_password_lock() to user-util.[ch]
Also, rename it take_etc_passwd_lock(), in order to make it more expressive.
This commit is contained in:
@@ -2096,46 +2096,6 @@ int update_reboot_param_file(const char *param) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
int take_password_lock(const char *root) {
|
||||
|
||||
struct flock flock = {
|
||||
.l_type = F_WRLCK,
|
||||
.l_whence = SEEK_SET,
|
||||
.l_start = 0,
|
||||
.l_len = 0,
|
||||
};
|
||||
|
||||
const char *path;
|
||||
int fd, r;
|
||||
|
||||
/* This is roughly the same as lckpwdf(), but not as awful. We
|
||||
* don't want to use alarm() and signals, hence we implement
|
||||
* our own trivial version of this.
|
||||
*
|
||||
* Note that shadow-utils also takes per-database locks in
|
||||
* addition to lckpwdf(). However, we don't given that they
|
||||
* are redundant as they they invoke lckpwdf() first and keep
|
||||
* it during everything they do. The per-database locks are
|
||||
* awfully racy, and thus we just won't do them. */
|
||||
|
||||
if (root)
|
||||
path = strjoina(root, "/etc/.pwd.lock");
|
||||
else
|
||||
path = "/etc/.pwd.lock";
|
||||
|
||||
fd = open(path, O_WRONLY|O_CREAT|O_CLOEXEC|O_NOCTTY|O_NOFOLLOW, 0600);
|
||||
if (fd < 0)
|
||||
return -errno;
|
||||
|
||||
r = fcntl(fd, F_SETLKW, &flock);
|
||||
if (r < 0) {
|
||||
safe_close(fd);
|
||||
return -errno;
|
||||
}
|
||||
|
||||
return fd;
|
||||
}
|
||||
|
||||
int is_symlink(const char *path) {
|
||||
struct stat info;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user