mirror of
https://github.com/sheumann/hush.git
synced 2024-12-21 08:29:45 +00:00
adduser: copy /etc/skel to mew homes. +100 bytes
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
This commit is contained in:
parent
0cd445f4d1
commit
cb7edc2661
@ -17,6 +17,7 @@ lib-$(CONFIG_CATV) += catv.o
|
||||
lib-$(CONFIG_CHGRP) += chgrp.o chown.o
|
||||
lib-$(CONFIG_CHMOD) += chmod.o
|
||||
lib-$(CONFIG_CHOWN) += chown.o
|
||||
lib-$(CONFIG_ADDGROUP) += chown.o # used by adduser
|
||||
lib-$(CONFIG_CHROOT) += chroot.o
|
||||
lib-$(CONFIG_CKSUM) += cksum.o
|
||||
lib-$(CONFIG_COMM) += comm.o
|
||||
|
@ -18,16 +18,20 @@
|
||||
|
||||
void FAST_FUNC die_if_bad_username(const char *name)
|
||||
{
|
||||
goto skip; /* 1st char being dash isn't valid */
|
||||
/* 1st char being dash or dot isn't valid: */
|
||||
goto skip;
|
||||
/* For example, name like ".." can make adduser
|
||||
* chown "/home/.." recursively - NOT GOOD
|
||||
*/
|
||||
|
||||
do {
|
||||
if (*name == '-')
|
||||
if (*name == '-' || *name == '.')
|
||||
continue;
|
||||
skip:
|
||||
if (isalnum(*name)
|
||||
|| *name == '_'
|
||||
|| *name == '.'
|
||||
|| *name == '@'
|
||||
|| (*name == '$' && !*(name + 1))
|
||||
|| (*name == '$' && !name[1])
|
||||
) {
|
||||
continue;
|
||||
}
|
||||
|
@ -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;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user