From ff3f23e66991b5f70e57027da439d86bb975b47f6fd5cd0bd42c6057f4af353b Mon Sep 17 00:00:00 2001 From: "Dr. Werner Fink" Date: Thu, 12 Nov 2020 10:32:46 +0000 Subject: [PATCH] Accepting request 848094 from home:favogt:boo1178296 - Amend patches/useradd-userkeleton.patch to also write into existing directories and prefer files from /etc OBS-URL: https://build.opensuse.org/request/show/848094 OBS-URL: https://build.opensuse.org/package/show/Base:System/shadow?expand=0&rev=98 --- shadow.changes | 6 ++++ useradd-userkeleton.patch | 66 +++++++++++++++++++++++++++++++++------ 2 files changed, 63 insertions(+), 9 deletions(-) diff --git a/shadow.changes b/shadow.changes index 73eaf25..8034ed6 100644 --- a/shadow.changes +++ b/shadow.changes @@ -1,3 +1,9 @@ +------------------------------------------------------------------- +Wed Nov 11 14:38:13 UTC 2020 - Fabian Vogt + +- Amend patches/useradd-userkeleton.patch to also write into + existing directories and prefer files from /etc + ------------------------------------------------------------------- Wed Nov 11 11:28:09 UTC 2020 - Dr. Werner Fink diff --git a/useradd-userkeleton.patch b/useradd-userkeleton.patch index d2b936b..64be475 100644 --- a/useradd-userkeleton.patch +++ b/useradd-userkeleton.patch @@ -5,16 +5,20 @@ Copy also skeleton files from /usr/etc/skel (boo#1173321) src/useradd.c | 37 +++++++++++++++++++++++++++++++++++++ 2 files changed, 38 insertions(+) ---- etc/useradd -+++ etc/useradd 2020-11-11 11:33:32.809513584 +0000 +Index: etc/useradd +=================================================================== +--- etc/useradd.orig ++++ etc/useradd @@ -5,4 +5,5 @@ INACTIVE=-1 EXPIRE= SHELL=/bin/bash SKEL=/etc/skel +USRSKEL=/usr/etc/skel CREATE_MAIL_SPOOL=yes ---- src/useradd.c -+++ src/useradd.c 2020-11-11 11:15:42.922067931 +0000 +Index: src/useradd.c +=================================================================== +--- src/useradd.c.orig ++++ src/useradd.c @@ -78,6 +78,9 @@ #ifndef SKEL_DIR #define SKEL_DIR "/etc/skel" @@ -106,12 +110,56 @@ Copy also skeleton files from /usr/etc/skel (boo#1173321) if (!out_create_mail_spool) fprintf (ofp, DCREATE_MAIL_SPOOL "%s\n", def_create_mail_spool); -@@ -2505,6 +2540,8 @@ int main (int argc, char **argv) - if (mflg) { - create_home (); +@@ -2507,6 +2542,8 @@ int main (int argc, char **argv) if (home_added) { -+ copy_tree (def_usrtemplate, prefix_user_home, false, false, -+ (uid_t)-1, user_id, (gid_t)-1, user_gid); copy_tree (def_template, prefix_user_home, false, false, (uid_t)-1, user_id, (gid_t)-1, user_gid); ++ copy_tree (def_usrtemplate, prefix_user_home, false, false, ++ (uid_t)-1, user_id, (gid_t)-1, user_gid); } else { + fprintf (stderr, + _("%s: warning: the home directory %s already exists.\n" +Index: libmisc/copydir.c +=================================================================== +--- libmisc/copydir.c.orig ++++ libmisc/copydir.c +@@ -416,6 +416,14 @@ static int copy_entry (const char *src, + old_uid, new_uid, old_gid, new_gid); + } + ++ /* ++ * If the destination already exists do nothing. ++ * This is after the copy_dir above to still iterate into subdirectories. ++ */ ++ if (LSTAT (dst, &sb) != -1) { ++ return 0; ++ } ++ + #ifdef S_IFLNK + /* + * Copy any symbolic links +@@ -477,6 +485,7 @@ static int copy_dir (const char *src, co + gid_t old_gid, gid_t new_gid) + { + int err = 0; ++ struct stat dst_sb; + + /* + * Create a new target directory, make it owned by +@@ -488,6 +497,16 @@ static int copy_dir (const char *src, co + return -1; + } + #endif /* WITH_SELINUX */ ++ ++ /* ++ * If the destination is already a directory, don't change it ++ * but copy into it (recursively). ++ */ ++ if (LSTAT (dst, &dst_sb) == 0 && S_ISDIR(dst_sb.st_mode)) { ++ return (copy_tree (src, dst, false, reset_selinux, ++ old_uid, new_uid, old_gid, new_gid) != 0); ++ } ++ + if ( (mkdir (dst, statp->st_mode) != 0) + || (chown_if_needed (dst, statp, + old_uid, new_uid, old_gid, new_gid) != 0)