diff options
author | Denys Vlasenko | 2010-02-06 21:50:59 +0100 |
---|---|---|
committer | Denys Vlasenko | 2010-02-06 21:50:59 +0100 |
commit | cb7edc26611f8df6b81ef4337206d5833ea98771 (patch) | |
tree | ce211298be0d9f7d59d31139b47a5f915966e193 /loginutils | |
parent | 0cd445f4d1ff322051ca2ad869e8757bb5ac2227 (diff) | |
download | busybox-cb7edc26611f8df6b81ef4337206d5833ea98771.zip busybox-cb7edc26611f8df6b81ef4337206d5833ea98771.tar.gz |
adduser: copy /etc/skel to mew homes. +100 bytes
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
Diffstat (limited to 'loginutils')
-rw-r--r-- | loginutils/adduser.c | 18 |
1 files changed, 16 insertions, 2 deletions
diff --git a/loginutils/adduser.c b/loginutils/adduser.c index da41fd7..f5dca92 100644 --- a/loginutils/adduser.c +++ b/loginutils/adduser.c @@ -199,7 +199,21 @@ int adduser_main(int argc UNUSED_PARAM, char **argv) /* set the owner and group so it is owned by the new user, * then fix up the permissions to 2755. Can't do it before * since chown will clear the setgid bit */ - if ((mkdir(pw.pw_dir, 0755) != 0 && errno != EEXIST) + int mkdir_err = mkdir(pw.pw_dir, 0755); + if (mkdir_err == 0) { + /* New home. Copy /etc/skel to it */ + const char *args[] = { + "chown", "-R", + xasprintf("%u:%u", (int)pw.pw_uid, (int)pw.pw_gid), + pw.pw_dir, NULL + }; + /* Be silent on any errors (like: no /etc/skel) */ + logmode = LOGMODE_NONE; + copy_file("/etc/skel", pw.pw_dir, FILEUTILS_RECUR); + logmode = LOGMODE_STDIO; + chown_main(4, (char**)args); + } + if ((mkdir_err != 0 && errno != EEXIST) || chown(pw.pw_dir, pw.pw_uid, pw.pw_gid) != 0 || chmod(pw.pw_dir, 02755) != 0 /* set setgid bit on homedir */ ) { @@ -212,5 +226,5 @@ int adduser_main(int argc UNUSED_PARAM, char **argv) passwd_wrapper(pw.pw_name); } - return 0; + return EXIT_SUCCESS; } |