Hello community, here is the log from the commit of package shadow for openSUSE:Factory checked in at 2014-04-06 09:54:11 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/shadow (Old) and /work/SRC/openSUSE:Factory/.shadow.new (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "shadow" Changes: -------- --- /work/SRC/openSUSE:Factory/shadow/shadow.changes 2013-12-13 12:01:08.000000000 +0100 +++ /work/SRC/openSUSE:Factory/.shadow.new/shadow.changes 2014-04-06 09:54:15.000000000 +0200 @@ -1,0 +2,6 @@ +Mon Mar 31 22:00:00 UTC 2014 - tbehr...@suse.com + +- Add patch useradd-mkdirs.diff: fix for bnc#865563, create all parts + of the path + +------------------------------------------------------------------- New: ---- useradd-mkdirs.diff ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ shadow.spec ++++++ --- /var/tmp/diff_new_pack.LWzg03/_old 2014-04-06 09:54:16.000000000 +0200 +++ /var/tmp/diff_new_pack.LWzg03/_new 2014-04-06 09:54:16.000000000 +0200 @@ -1,7 +1,7 @@ # # spec file for package shadow # -# Copyright (c) 2013 SUSE LINUX Products GmbH, Nuernberg, Germany. +# Copyright (c) 2014 SUSE LINUX Products GmbH, Nuernberg, Germany. # # All modifications and additions to the file contributed by third parties # remain the property of their copyright owners, unless otherwise agreed @@ -40,6 +40,7 @@ Patch8: shadow-4.1.5.1-errmsg.patch Patch9: shadow-4.1.5.1-backup-mode.patch Patch10: encryption_method_nis.diff +Patch11: useradd-mkdirs.diff BuildRequires: audit-devel BuildRequires: libacl-devel BuildRequires: libattr-devel @@ -69,6 +70,7 @@ %patch8 -p0 %patch9 -p1 %patch10 -p0 +%patch11 -p1 iconv -f ISO88591 -t utf-8 doc/HOWTO > doc/HOWTO.utf8 mv -v doc/HOWTO.utf8 doc/HOWTO ++++++ useradd-mkdirs.diff ++++++ diff --git a/src/useradd.c b/src/useradd.c index fa93853..a9f8caa 100644 --- a/src/useradd.c +++ b/src/useradd.c @@ -1757,6 +1757,13 @@ static void usr_update (void) static void create_home (void) { if (access (user_home, F_OK) != 0) { + char path[strlen (user_home) + 2]; + char *bhome, *cp; + + path[0] = '\0'; + bhome = strdup (user_home); + ++bhome; + #ifdef WITH_SELINUX if (set_selinux_file_context (user_home) != 0) { fprintf (stderr, @@ -1765,19 +1772,42 @@ static void create_home (void) fail_exit (E_HOMEDIR); } #endif - /* XXX - create missing parent directories. --marekm */ - if (mkdir (user_home, 0) != 0) { - fprintf (stderr, - _("%s: cannot create directory %s\n"), - Prog, user_home); + + /* Check for every part of the path, if the directory + exists. If not, create it with permissions 755 and + owner root:root. + */ + cp = strtok (bhome, "/"); + while (cp) { + strcat (path, "/"); + strcat (path, cp); + if (access (path, F_OK) != 0) { + if (mkdir (path, 0) != 0) { + fprintf (stderr, + _("%s: cannot create directory %s\n"), + Prog, path); #ifdef WITH_AUDIT - audit_logger (AUDIT_ADD_USER, Prog, - "adding home directory", - user_name, (unsigned int) user_id, - SHADOW_AUDIT_FAILURE); + audit_logger (AUDIT_ADD_USER, Prog, + "adding home directory", + user_name, (unsigned int) user_id, + SHADOW_AUDIT_FAILURE); #endif - fail_exit (E_HOMEDIR); + fail_exit (E_HOMEDIR); + } + if (chown (path, 0, 0) < 0) { + fprintf (stderr, + _("%s: warning: chown on `%s' failed: %m\n"), + Prog, path); + } + if (chmod (path, 0777) < 0) { + fprintf (stderr, + _("%s: warning: chmod on `%s' failed: %m\n"), + Prog, path); + } + } + cp = strtok (NULL, "/"); } + chown (user_home, user_id, user_gid); chmod (user_home, 0777 & ~getdef_num ("UMASK", GETDEF_DEFAULT_UMASK)); -- To unsubscribe, e-mail: opensuse-commit+unsubscr...@opensuse.org For additional commands, e-mail: opensuse-commit+h...@opensuse.org