From b18d46e68ddf06869bc042297814369e02564c9f Mon Sep 17 00:00:00 2001 From: nekral-guest Date: Sat, 13 Sep 2008 11:55:41 +0000 Subject: [PATCH] * NEWS, etc/login.defs: New CREATE_HOME variable to tell useradd to create a home directory for new users. * src/useradd.c, man/useradd.8.xml: New -M/--no-create-home option and CREATE_HOME usage. System accounts are not impacted by CREATE_HOME. * man/useradd.8.xml: Indicate that a new group is created by default. * src/useradd.c: Removed TODO item (moved to the TODO file). --- ChangeLog | 11 +++++++++++ NEWS | 5 +++++ etc/login.defs | 9 +++++++++ man/useradd.8.xml | 26 ++++++++++++++++++++++++ src/useradd.c | 50 +++++++++++++++++++++++++++-------------------- 5 files changed, 80 insertions(+), 21 deletions(-) diff --git a/ChangeLog b/ChangeLog index 9be429a0..4447851e 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,14 @@ +2008-09-11 Nicolas François + + * NEWS, etc/login.defs: New CREATE_HOME variable to tell useradd + to create a home directory for new users. + * src/useradd.c, man/useradd.8.xml: New -M/--no-create-home option + and CREATE_HOME usage. System accounts are not impacted by + CREATE_HOME. + * man/useradd.8.xml: Indicate that a new group is created by + default. + * src/useradd.c: Removed TODO item (moved to the TODO file). + 2008-09-11 Miroslav Kuře * po/cs.po: Updated Czech translation. diff --git a/NEWS b/NEWS index 31ef88c7..39ef4898 100644 --- a/NEWS +++ b/NEWS @@ -16,6 +16,9 @@ shadow-4.1.2.1 -> shadow-4.1.3 UNRELEASED * Speed improvement in case UID_MAX/SYS_UID_MAX/GID_MAX/SYS_GID_MAX is used for an user/group. This should be noticeable in case of LDAP configured systems. This should impact useradd, groupadd, and newusers +- /etc/login.defs + * New CREATE_HOME variable to tell useradd to create a home directory by + default. - gpasswd * Added support for long options --add (-a), --delete (-d), @@ -48,6 +51,8 @@ shadow-4.1.2.1 -> shadow-4.1.3 UNRELEASED - useradd * audit logging improvements. * Speedup (see "addition of users or groups" above). + * See CREATE_HOME above. + * New -M/--no-create-home option to disable CREATE_HOME. - userdel * audit logging improvements. - usermod diff --git a/etc/login.defs b/etc/login.defs index 12e09c0d..dbb96486 100644 --- a/etc/login.defs +++ b/etc/login.defs @@ -367,3 +367,12 @@ USERGROUPS_ENAB yes # 0 is the default value and disables this feature. # #MAX_MEMBERS_PER_GROUP 0 + +# +# If useradd should create home directories for users by default (non +# system users only) +# This option is overridden with the -M or -m flags on the useradd command +# line. +# +#CREATE_HOME yes + diff --git a/man/useradd.8.xml b/man/useradd.8.xml index 7d502efb..898e0340 100644 --- a/man/useradd.8.xml +++ b/man/useradd.8.xml @@ -56,6 +56,11 @@ will update system files and may also create the new user's home directory and copy initial files. + + By default, a group will also be created for the new user (see + , , , and + ). + @@ -293,6 +298,19 @@ + + + + + + + Do no create the user's home directory, even if the system + wide setting from /etc/login.defs + () is set to + yes. + + + , @@ -354,6 +372,14 @@ - (and their counterparts for the creation of groups). + + Note that useradd will not create a home + directory for such an user, regardless of the default setting + in /etc/login.defs + (). You have to specify the + options if you want a home directory for a + system account to be created. + diff --git a/src/useradd.c b/src/useradd.c index af234d87..5f9a01b7 100644 --- a/src/useradd.c +++ b/src/useradd.c @@ -724,6 +724,8 @@ static void usage (void) " faillog databases\n" " -m, --create-home create home directory for the new user\n" " account\n" + " -M, --no-create-home do not create user's home directory\n" + " (overrides /etc/login.defs)\n" " -N, --no-user-group do not create a group with the same name as\n" " the user\n" " -o, --non-unique allow create user with duplicate\n" @@ -983,6 +985,7 @@ static void process_flags (int argc, char **argv) {"skel", required_argument, NULL, 'k'}, {"key", required_argument, NULL, 'K'}, {"create-home", no_argument, NULL, 'm'}, + {"no-create-home", no_argument, NULL, 'M'}, {"no-user-group", no_argument, NULL, 'N'}, {"non-unique", no_argument, NULL, 'o'}, {"password", required_argument, NULL, 'p'}, @@ -1133,6 +1136,9 @@ static void process_flags (int argc, char **argv) case 'm': mflg = true; break; + case 'M': + Mflg = true; + break; case 'N': Nflg = true; break; @@ -1212,6 +1218,12 @@ static void process_flags (int argc, char **argv) Prog, "-U", "-N"); usage (); } + if (mflg && Mflg) { + fprintf (stderr, + _("%s: options %s and %s conflict\n"), + Prog, "-m", "-M"); + usage (); + } /* * Either -D or username is required. Defaults can be set with -D @@ -1265,10 +1277,20 @@ static void process_flags (int argc, char **argv) user_shell = def_shell; } - /* TODO: add handle change default spool mail creation by - -K CREATE_MAIL_SPOOL={yes,no}. It need rewrite internal API for handle - shadow tools configuration */ create_mail_spool = def_create_mail_spool; + + if (!rflg) { + /* for system accounts defaults are ignored and we + * do not create a home dir */ + if (getdef_bool("CREATE_HOME")) { + mflg = true; + } + } + + if (Mflg) { + /* absolutely sure that we do not create home dirs */ + mflg = false; + } } /* @@ -1932,26 +1954,12 @@ int main (int argc, char **argv) "Not copying any file from skel directory into it.\n"), Prog); - } else if (getdef_str ("CREATE_HOME") != NULL) { - /* - * RedHat added the CREATE_HOME option in login.defs in their - * version of shadow-utils (which makes -m the default, with - * new -M option to turn it off). Unfortunately, this - * changes the way useradd works (it can be run by scripts - * expecting some standard behaviour), compared to other - * Unices and other Linux distributions, and also adds a lot - * of confusion :-(. - * So we now recognize CREATE_HOME and give a warning here - * (better than "configuration error ... notify administrator" - * errors in every program that reads /etc/login.defs). -MM - */ - fprintf (stderr, - _ - ("%s: warning: CREATE_HOME not supported, please use -m instead.\n"), - Prog); } - create_mail (); + /* Do not create mail directory for system accounts */ + if( !rflg ) { + create_mail (); + } close_files ();