adduser: more fixes to "add user to specified group"

function                                             old     new   delta
update_passwd                                       1246    1295     +49
adduser_main                                         727     725      -2

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
diff --git a/libbb/update_passwd.c b/libbb/update_passwd.c
index 301893b..f5ce1f9 100644
--- a/libbb/update_passwd.c
+++ b/libbb/update_passwd.c
@@ -81,6 +81,7 @@
 	FILE *new_fp;
 	char *fnamesfx;
 	char *sfx_char;
+	char *name_colon;
 	unsigned user_len;
 	int old_fd;
 	int new_fd;
@@ -103,8 +104,8 @@
 	/* New passwd file, "/etc/passwd+" for now */
 	fnamesfx = xasprintf("%s+", filename);
 	sfx_char = &fnamesfx[strlen(fnamesfx)-1];
-	name = xasprintf("%s:", name);
-	user_len = strlen(name);
+	name_colon = xasprintf("%s:", name);
+	user_len = strlen(name_colon);
 
 	if (shadow)
 		old_fp = fopen(filename, "r+");
@@ -166,7 +167,7 @@
 		line = xmalloc_fgetline(old_fp);
 		if (!line) /* EOF/error */
 			break;
-		if (strncmp(name, line, user_len) != 0) {
+		if (strncmp(name_colon, line, user_len) != 0) {
 			fprintf(new_fp, "%s\n", line);
 			goto next;
 		}
@@ -225,11 +226,11 @@
 				/* move past old change date */
 				cp = strchrnul(cp + 1, ':');
 				/* "name:" + "new_passwd" + ":" + "change date" + ":rest of line" */
-				fprintf(new_fp, "%s%s:%u%s\n", name, new_passwd,
+				fprintf(new_fp, "%s%s:%u%s\n", name_colon, new_passwd,
 					(unsigned)(time(NULL)) / (24*60*60), cp);
 			} else {
 				/* "name:" + "new_passwd" + ":rest of line" */
-				fprintf(new_fp, "%s%s%s\n", name, new_passwd, cp);
+				fprintf(new_fp, "%s%s%s\n", name_colon, new_passwd, cp);
 			}
 			changed_lines++;
 		} /* else delete user or group: skip the line */
@@ -238,15 +239,19 @@
 	}
 
 	if (changed_lines == 0) {
-#if ENABLE_FEATURE_DEL_USER_FROM_GROUP
-		if (member)
-			bb_error_msg("can't find %s in %s", member, filename);
+#if ENABLE_FEATURE_ADDUSER_TO_GROUP || ENABLE_FEATURE_DEL_USER_FROM_GROUP
+		if (member) {
+			if (ENABLE_ADDGROUP && applet_name[0] == 'a')
+				bb_error_msg("can't find %s in %s", name, filename);
+			if (ENABLE_DELGROUP && applet_name[0] == 'd')
+				bb_error_msg("can't find %s in %s", member, filename);
+		}
 #endif
 		if ((ENABLE_ADDUSER || ENABLE_ADDGROUP)
 		 && applet_name[0] == 'a' && !member
 		) {
 			/* add user or group */
-			fprintf(new_fp, "%s%s\n", name, new_passwd);
+			fprintf(new_fp, "%s%s\n", name_colon, new_passwd);
 			changed_lines++;
 		}
 	}
@@ -275,6 +280,6 @@
  free_mem:
 	free(fnamesfx);
 	free((char *)filename);
-	free((char *)name);
+	free(name_colon);
 	return ret;
 }