- etc_group = bb_xfopen(filename, "a");
-
- fprintf(etc_group, entryfmt, group, default_passwd, gr.gr_gid, user);
- fclose(etc_group);
-
-
-#ifdef CONFIG_FEATURE_SHADOWPASSWDS
- /* add entry to gshadow if necessary */
- if (access(bb_path_gshadow_file, F_OK|W_OK) == 0) {
- etc_gshadow = bb_xfopen(bb_path_gshadow_file, "a");
- fprintf(etc_gshadow, "%s:!::\n", group);
- fclose(etc_gshadow);
- }
+ p = xasprintf("x:%u:", (unsigned) gr.gr_gid);
+ if (update_passwd(bb_path_group_file, group, p, NULL) < 0)
+ exit(EXIT_FAILURE);
+ if (ENABLE_FEATURE_CLEAN_UP)
+ free(p);
+#if ENABLE_FEATURE_SHADOWPASSWDS
+ /* /etc/gshadow fields:
+ * 1. Group name.
+ * 2. Encrypted password.
+ * If set, non-members of the group can join the group
+ * by typing the password for that group using the newgrp command.
+ * If the value is of this field ! then no user is allowed
+ * to access the group using the newgrp command. A value of !!
+ * is treated the same as a value of ! only it indicates
+ * that a password has never been set before. If the value is null,
+ * only group members can log into the group.
+ * 3. Group administrators (comma delimited list).
+ * Group members listed here can add or remove group members
+ * using the gpasswd command.
+ * 4. Group members (comma delimited list).
+ */
+ /* Ignore errors: if file is missing we assume admin doesn't want it */
+ update_passwd(bb_path_gshadow_file, group, "!::", NULL);