forked from pool/shadow
bba5d5413c
* build: include lib/shadowlog_internal.h in dist tarballs - Update to 4.11: * Handle possible TOCTTOU issues in usermod/userdel - (CVE-2013-4235) - Use O_NOFOLLOW when copying file - Kill all user tasks in userdel * Fix useradd -D segfault * Clean up obsolete libc feature-check ifdefs * Fix -fno-common build breaks due to duplicate Prog declarations * Have single date_to_str definition * Fix libsubid SONAME version * Clarify licensing info, use SPDX. - Update to 4.10: * From this release forward, su from this package should be considered deprecated. Please replace any users of it with su from util-linux * libsubid fixes * Rename the test program list_subid_ranges to getsubids, write a manpage, so distros can ship it. * Add libeconf dep for new*idmap * Allow all group types with usermod -G * Avoid useradd generating empty subid range * Handle NULL pw_passwd * Fix default value SHA_get_salt_rounds * Use https where possible in README * Update content and format of README * Translation updates OBS-URL: https://build.opensuse.org/package/show/Base:System/shadow?expand=0&rev=118
95 lines
2.5 KiB
Diff
95 lines
2.5 KiB
Diff
---
|
|
etc/login.defs | 7 +++++++
|
|
lib/getdef.c | 1 +
|
|
src/useradd.c | 41 ++++++++++++++++++++++++++++++++++++++++-
|
|
3 files changed, 48 insertions(+), 1 deletion(-)
|
|
|
|
Index: etc/login.defs
|
|
===================================================================
|
|
--- etc/login.defs.orig
|
|
+++ etc/login.defs
|
|
@@ -238,6 +238,13 @@ DEFAULT_HOME yes
|
|
NONEXISTENT /nonexistent
|
|
|
|
#
|
|
+# If defined, this command is run when adding a user.
|
|
+# It should rebuild any NIS database etc. to add the
|
|
+# new created account.
|
|
+#
|
|
+USERADD_CMD /usr/sbin/useradd.local
|
|
+
|
|
+#
|
|
# If defined, this command is run when removing a user.
|
|
# It should remove any at/cron/print jobs etc. owned by
|
|
# the user to be removed (passed as the first argument).
|
|
Index: lib/getdef.c
|
|
===================================================================
|
|
--- lib/getdef.c.orig
|
|
+++ lib/getdef.c
|
|
@@ -127,6 +127,7 @@ static struct itemdef def_table[] = {
|
|
{"UID_MAX", NULL},
|
|
{"UID_MIN", NULL},
|
|
{"UMASK", NULL},
|
|
+ {"USERADD_CMD", NULL},
|
|
{"USERDEL_CMD", NULL},
|
|
{"USERDEL_PRECMD", NULL},
|
|
{"USERDEL_POSTCMD", NULL},
|
|
Index: src/useradd.c
|
|
===================================================================
|
|
--- src/useradd.c.orig
|
|
+++ src/useradd.c
|
|
@@ -2426,6 +2426,44 @@ static void check_uid_range(int rflg, ui
|
|
|
|
}
|
|
/*
|
|
+ * call_script - call a script to do some work
|
|
+ *
|
|
+ * call_script calls a script for additional changes to the
|
|
+ * account.
|
|
+ */
|
|
+
|
|
+static void call_script (const char *user, const uid_t uid, const gid_t gid, const char *home)
|
|
+{
|
|
+ const char *cmd;
|
|
+ const char *argv[6];
|
|
+ char *strgid, *struid;
|
|
+ int status;
|
|
+
|
|
+ cmd = getdef_str ("USERADD_CMD");
|
|
+ if (NULL == cmd) {
|
|
+ return;
|
|
+ }
|
|
+ if (asprintf(&struid, "%lu", (long unsigned)uid) < 0) {
|
|
+ (void) fprintf (stderr, _("%s: out of memory\n"), Prog);
|
|
+ exit(1);
|
|
+ }
|
|
+ if (asprintf(&strgid, "%lu", (long unsigned)gid) < 0) {
|
|
+ (void) fprintf (stderr, _("%s: out of memory\n"), Prog);
|
|
+ exit(1);
|
|
+ }
|
|
+ argv[0] = cmd;
|
|
+ argv[1] = user;
|
|
+ argv[2] = struid;
|
|
+ argv[3] = strgid;
|
|
+ argv[4] = home;
|
|
+ argv[5] = (char *)0;
|
|
+ (void) run_command (cmd, argv, NULL, &status);
|
|
+ free(strgid);
|
|
+ free(struid);
|
|
+}
|
|
+
|
|
+
|
|
+/*
|
|
* main - useradd command
|
|
*/
|
|
int main (int argc, char **argv)
|
|
@@ -2720,6 +2758,7 @@ int main (int argc, char **argv)
|
|
exit(1);
|
|
}
|
|
|
|
+ call_script (user_name, user_id, user_gid, user_home);
|
|
+
|
|
return E_SUCCESS;
|
|
}
|
|
-
|