summaryrefslogtreecommitdiff
path: root/core/shadow/userdel-avoid-bad-mem-access.patch
diff options
context:
space:
mode:
Diffstat (limited to 'core/shadow/userdel-avoid-bad-mem-access.patch')
-rw-r--r--core/shadow/userdel-avoid-bad-mem-access.patch57
1 files changed, 57 insertions, 0 deletions
diff --git a/core/shadow/userdel-avoid-bad-mem-access.patch b/core/shadow/userdel-avoid-bad-mem-access.patch
new file mode 100644
index 000000000..1d36562b2
--- /dev/null
+++ b/core/shadow/userdel-avoid-bad-mem-access.patch
@@ -0,0 +1,57 @@
+Index: src/userdel.c
+===================================================================
+--- src/userdel.c (revision 3713)
++++ src/userdel.c (working copy)
+@@ -329,26 +329,33 @@
+ }
+
+ if (NULL == pwd) {
++ char gr_name[GROUP_NAME_MAX_LENGTH + 1];
++
++ /* make a copy of the group name before we delete it.
++ * we can't use ->gr_name after the group is deleted
++ * for logging purposes */
++ snprintf(gr_name, GROUP_NAME_MAX_LENGTH, "%s", grp->gr_name);
++
+ /*
+ * We can remove this group, it is not the primary
+ * group of any remaining user.
+ */
+- if (gr_remove (grp->gr_name) == 0) {
++ if (gr_remove (gr_name) == 0) {
+ fprintf (stderr,
+ _("%s: cannot remove entry '%s' from %s\n"),
+- Prog, grp->gr_name, gr_dbname ());
++ Prog, gr_name, gr_dbname ());
+ fail_exit (E_GRP_UPDATE);
+ }
+
+ #ifdef WITH_AUDIT
+ audit_logger (AUDIT_DEL_GROUP, Prog,
+ "deleting group",
+- grp->gr_name, AUDIT_NO_ID,
++ gr_name, AUDIT_NO_ID,
+ SHADOW_AUDIT_SUCCESS);
+ #endif /* WITH_AUDIT */
+ SYSLOG ((LOG_INFO,
+ "removed group '%s' owned by '%s'\n",
+- grp->gr_name, user_name));
++ gr_name, user_name));
+
+ #ifdef SHADOWGRP
+ if (sgr_locate (user_name) != NULL) {
+@@ -361,12 +368,12 @@
+ #ifdef WITH_AUDIT
+ audit_logger (AUDIT_DEL_GROUP, Prog,
+ "deleting shadow group",
+- grp->gr_name, AUDIT_NO_ID,
++ gr_name, AUDIT_NO_ID,
+ SHADOW_AUDIT_SUCCESS);
+ #endif /* WITH_AUDIT */
+ SYSLOG ((LOG_INFO,
+ "removed shadow group '%s' owned by '%s'\n",
+- grp->gr_name, user_name));
++ gr_name, user_name));
+
+ }
+ #endif /* SHADOWGRP */