groupdel(8) will complain (and delete) lines which do not have exactly three colon characters in them. This is annoying in yp environments where the last line of /etc/group is usually a single `+' character, which is equivalent to `+:*::'
Invoking groupdel when /etc/group contains a final `+' line yields: # groupdel foo userdel: Malformed entry `+'. Skipping and the `+' line disappears. The following diff attempts to recognize and preserve such a line. Index: user.c =================================================================== RCS file: /cvs/src/usr.sbin/user/user.c,v retrieving revision 1.100 diff -u -p -r1.100 user.c --- user.c 27 Aug 2014 06:51:35 -0000 1.100 +++ user.c 4 Oct 2014 12:01:57 -0000 @@ -1281,6 +1281,13 @@ rm_user_from_groups(char *login_name) } if (cc != 3) { buf[strcspn(buf, "\n")] = '\0'; + + /* Preserve a malformed but historical `+' line */ + if (strcmp(buf, "+") == 0) { + strlcat(buf, "\n", sizeof buf); + goto do_write; + } + warnx("Malformed entry `%s'. Skipping", buf); continue; } @@ -1299,6 +1306,7 @@ rm_user_from_groups(char *login_name) cp++; } } +do_write: if (fwrite(buf, strlen(buf), 1, to) != 1) { warn("can't remove gid for `%s': short write to `%s'", login_name, f);