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_CHGRP) += chgrp.o chown.o
|
||||||
lib-$(CONFIG_CHMOD) += chmod.o
|
lib-$(CONFIG_CHMOD) += chmod.o
|
||||||
lib-$(CONFIG_CHOWN) += chown.o
|
lib-$(CONFIG_CHOWN) += chown.o
|
||||||
|
lib-$(CONFIG_ADDGROUP) += chown.o # used by adduser
|
||||||
lib-$(CONFIG_CHROOT) += chroot.o
|
lib-$(CONFIG_CHROOT) += chroot.o
|
||||||
lib-$(CONFIG_CKSUM) += cksum.o
|
lib-$(CONFIG_CKSUM) += cksum.o
|
||||||
lib-$(CONFIG_COMM) += comm.o
|
lib-$(CONFIG_COMM) += comm.o
|
||||||
|
@ -18,16 +18,20 @@
|
|||||||
|
|
||||||
void FAST_FUNC die_if_bad_username(const char *name)
|
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 {
|
do {
|
||||||
if (*name == '-')
|
if (*name == '-' || *name == '.')
|
||||||
continue;
|
continue;
|
||||||
skip:
|
skip:
|
||||||
if (isalnum(*name)
|
if (isalnum(*name)
|
||||||
|| *name == '_'
|
|| *name == '_'
|
||||||
|| *name == '.'
|
|
||||||
|| *name == '@'
|
|| *name == '@'
|
||||||
|| (*name == '$' && !*(name + 1))
|
|| (*name == '$' && !name[1])
|
||||||
) {
|
) {
|
||||||
continue;
|
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,
|
/* 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
|
* then fix up the permissions to 2755. Can't do it before
|
||||||
* since chown will clear the setgid bit */
|
* 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
|
|| chown(pw.pw_dir, pw.pw_uid, pw.pw_gid) != 0
|
||||||
|| chmod(pw.pw_dir, 02755) != 0 /* set setgid bit on homedir */
|
|| 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);
|
passwd_wrapper(pw.pw_name);
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return EXIT_SUCCESS;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user