passwd: Also clone subuid/subgid files
These were added to shadow-utils in recent times (Fedora 25 e.g.) and like the other passwd files, shadow-utils opens them with `O_TRUNC`. (At some point we should patch it to do create-new-then-replace internally) Closes: https://github.com/projectatomic/rpm-ostree/issues/458 Closes: #459 Approved by: jlebon
This commit is contained in:
parent
037a310964
commit
0fd83d47b7
@ -1158,8 +1158,10 @@ rpmostree_generate_passwd_from_previous (OstreeRepo *repo,
|
|||||||
static const char *usrlib_pwgrp_files[] = { "passwd", "group" };
|
static const char *usrlib_pwgrp_files[] = { "passwd", "group" };
|
||||||
/* Lock/backup files that should not be in the base commit (TODO fix) */
|
/* Lock/backup files that should not be in the base commit (TODO fix) */
|
||||||
static const char *pwgrp_lock_and_backup_files[] = { ".pwd.lock", "passwd-", "group-",
|
static const char *pwgrp_lock_and_backup_files[] = { ".pwd.lock", "passwd-", "group-",
|
||||||
"shadow-", "gshadow-" };
|
"shadow-", "gshadow-",
|
||||||
static const char *pwgrp_shadow_files[] = { "shadow", "gshadow" };
|
"subuid-", "subgid-" };
|
||||||
|
static const char *pwgrp_shadow_files[] = { "shadow", "gshadow",
|
||||||
|
"subuid", "subgid"};
|
||||||
|
|
||||||
static gboolean
|
static gboolean
|
||||||
rootfs_has_usrlib_passwd (int rootfs_dfd,
|
rootfs_has_usrlib_passwd (int rootfs_dfd,
|
||||||
@ -1245,9 +1247,21 @@ rpmostree_passwd_prepare_rpm_layering (int rootfs_dfd,
|
|||||||
*/
|
*/
|
||||||
for (guint i = 0; i < G_N_ELEMENTS (pwgrp_shadow_files); i++)
|
for (guint i = 0; i < G_N_ELEMENTS (pwgrp_shadow_files); i++)
|
||||||
{
|
{
|
||||||
|
struct stat stbuf;
|
||||||
const char *file = pwgrp_shadow_files[i];
|
const char *file = pwgrp_shadow_files[i];
|
||||||
const char *src = glnx_strjoina ("usr/etc/", file);
|
const char *src = glnx_strjoina ("usr/etc/", file);
|
||||||
const char *tmp = glnx_strjoina ("usr/etc/", file, ".tmp");
|
const char *tmp = glnx_strjoina ("usr/etc/", file, ".tmp");
|
||||||
|
|
||||||
|
if (fstatat (rootfs_dfd, src, &stbuf, AT_SYMLINK_NOFOLLOW) < 0)
|
||||||
|
{
|
||||||
|
if (errno != ENOENT)
|
||||||
|
{
|
||||||
|
glnx_set_error_from_errno (error);
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
if (!glnx_file_copy_at (rootfs_dfd, src, NULL,
|
if (!glnx_file_copy_at (rootfs_dfd, src, NULL,
|
||||||
rootfs_dfd, tmp, GLNX_FILE_COPY_OVERWRITE,
|
rootfs_dfd, tmp, GLNX_FILE_COPY_OVERWRITE,
|
||||||
cancellable, error))
|
cancellable, error))
|
||||||
|
Loading…
Reference in New Issue
Block a user