File useradd-script.patch of Package shadow

---
 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;
 }
-
openSUSE Build Service is sponsored by