/* add entry to group */
file = xfopen(bb_path_group_file, "a");
/* group:passwd:gid:userlist */
- fprintf(file, "%s:x:%d:\n", group, gr.gr_gid);
+ fprintf(file, "%s:x:%u:\n", group, (unsigned)gr.gr_gid);
if (ENABLE_FEATURE_CLEAN_UP)
fclose(file);
#if ENABLE_FEATURE_SHADOWPASSWDS
#if ENABLE_FEATURE_ADDUSER_TO_GROUP
static void add_user_to_group(char **args,
const char *path,
- FILE *(*fopen_func)(const char *fileName, const char *mode))
+ FILE* FAST_FUNC (*fopen_func)(const char *fileName, const char *mode))
{
char *line;
int len = strlen(args[1]);
if (!group_file) return;
- while ((line = xmalloc_getline(group_file))) {
+ while ((line = xmalloc_fgetline(group_file)) != NULL) {
/* Find the group */
if (!strncmp(line, args[1], len)
&& line[len] == ':'
* If called with two non-option arguments, addgroup
* will add an existing user to an existing group.
*/
-int addgroup_main(int argc, char **argv);
-int addgroup_main(int argc, char **argv)
+int addgroup_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
+int addgroup_main(int argc UNUSED_PARAM, char **argv)
{
char *group;
gid_t gid = 0;
}
/* move past the commandline options */
argv += optind;
- argc -= optind;
+ //argc -= optind;
#if ENABLE_FEATURE_ADDUSER_TO_GROUP
- if (argc == 2) {
+ if (argv[1]) {
struct group *gr;
if (option_mask32) {
add_user_to_group(argv, bb_path_group_file, xfopen);
#if ENABLE_FEATURE_SHADOWPASSWDS
add_user_to_group(argv, bb_path_gshadow_file, fopen_or_warn);
-#endif /* ENABLE_FEATURE_SHADOWPASSWDS */
+#endif
} else
#endif /* ENABLE_FEATURE_ADDUSER_TO_GROUP */
+ {
+ die_if_bad_username(argv[0]);
new_group(argv[0], gid);
+ }
/* Reached only on success */
return EXIT_SUCCESS;
}